Javadocs
diff --git a/content/site/apidocs-9.0.0/allclasses-frame.html b/content/site/apidocs-9.0.0/allclasses-frame.html
index 5d6f831..a58667d 100644
--- a/content/site/apidocs-9.0.0/allclasses-frame.html
+++ b/content/site/apidocs-9.0.0/allclasses-frame.html
@@ -805,7 +805,13 @@
 <li><a href="org/apache/juneau/rest/vars/LocalizationVar.html" title="class in org.apache.juneau.rest.vars" target="classFrame">LocalizationVar</a></li>
 <li><a href="org/apache/juneau/http/header/Location.html" title="class in org.apache.juneau.http.header" target="classFrame">Location</a></li>
 <li><a href="org/apache/juneau/http/response/Locked.html" title="class in org.apache.juneau.http.response" target="classFrame">Locked</a></li>
+<li><a href="org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice" target="classFrame">LogConfig</a></li>
+<li><a href="org/apache/juneau/microservice/resources/LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources" target="classFrame">LogEntryFormatter</a></li>
 <li><a href="org/apache/juneau/dto/atom/Logo.html" title="class in org.apache.juneau.dto.atom" target="classFrame">Logo</a></li>
+<li><a href="org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources" target="classFrame">LogParser</a></li>
+<li><a href="org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources" target="classFrame">LogsResource</a></li>
+<li><a href="org/apache/juneau/microservice/resources/LogsResource.Action.html" title="class in org.apache.juneau.microservice.resources" target="classFrame">LogsResource.Action</a></li>
+<li><a href="org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources" target="classFrame">LogsResource.FileResource</a></li>
 <li><a href="org/apache/juneau/assertions/LongAssertion.html" title="class in org.apache.juneau.assertions" target="classFrame">LongAssertion</a></li>
 <li><a href="org/apache/juneau/http/response/LoopDetected.html" title="class in org.apache.juneau.http.response" target="classFrame">LoopDetected</a></li>
 <li><a href="org/apache/juneau/svl/vars/LowerCaseVar.html" title="class in org.apache.juneau.svl.vars" target="classFrame">LowerCaseVar</a></li>
diff --git a/content/site/apidocs-9.0.0/allclasses-noframe.html b/content/site/apidocs-9.0.0/allclasses-noframe.html
index 370704c..1d13051 100644
--- a/content/site/apidocs-9.0.0/allclasses-noframe.html
+++ b/content/site/apidocs-9.0.0/allclasses-noframe.html
@@ -805,7 +805,13 @@
 <li><a href="org/apache/juneau/rest/vars/LocalizationVar.html" title="class in org.apache.juneau.rest.vars">LocalizationVar</a></li>
 <li><a href="org/apache/juneau/http/header/Location.html" title="class in org.apache.juneau.http.header">Location</a></li>
 <li><a href="org/apache/juneau/http/response/Locked.html" title="class in org.apache.juneau.http.response">Locked</a></li>
+<li><a href="org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></li>
+<li><a href="org/apache/juneau/microservice/resources/LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources">LogEntryFormatter</a></li>
 <li><a href="org/apache/juneau/dto/atom/Logo.html" title="class in org.apache.juneau.dto.atom">Logo</a></li>
+<li><a href="org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources">LogParser</a></li>
+<li><a href="org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource</a></li>
+<li><a href="org/apache/juneau/microservice/resources/LogsResource.Action.html" title="class in org.apache.juneau.microservice.resources">LogsResource.Action</a></li>
+<li><a href="org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource.FileResource</a></li>
 <li><a href="org/apache/juneau/assertions/LongAssertion.html" title="class in org.apache.juneau.assertions">LongAssertion</a></li>
 <li><a href="org/apache/juneau/http/response/LoopDetected.html" title="class in org.apache.juneau.http.response">LoopDetected</a></li>
 <li><a href="org/apache/juneau/svl/vars/LowerCaseVar.html" title="class in org.apache.juneau.svl.vars">LowerCaseVar</a></li>
diff --git a/content/site/apidocs-9.0.0/index-all.html b/content/site/apidocs-9.0.0/index-all.html
index d4ab4e3..7943d0d 100644
--- a/content/site/apidocs-9.0.0/index-all.html
+++ b/content/site/apidocs-9.0.0/index-all.html
@@ -707,6 +707,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/DirectoryResource.Action.html#Action-java.lang.String-java.lang.String-java.lang.Object...-">Action(String, String, Object...)</a></span> - Constructor for class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/DirectoryResource.Action.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource.Action</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogsResource.Action.html#Action-java.lang.String-java.lang.String-java.lang.Object...-">Action(String, String, Object...)</a></span> - Constructor for class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogsResource.Action.html" title="class in org.apache.juneau.microservice.resources">LogsResource.Action</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/AnnotationWorkList.html#add-org.apache.juneau.reflect.AnnotationInfo-org.apache.juneau.AnnotationApplier-">add(AnnotationInfo&lt;?&gt;, AnnotationApplier&lt;Annotation, Object&gt;)</a></span> - Method in class org.apache.juneau.<a href="org/apache/juneau/AnnotationWorkList.html" title="class in org.apache.juneau">AnnotationWorkList</a></dt>
 <dd>
 <div class="block">Adds an entry to this list.</div>
@@ -1473,6 +1475,8 @@
 <dd>
 <div class="block"><mk>additionalProperties</mk> field.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogParser.Entry.html#additionalText">additionalText</a></span> - Variable in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/internal/ListBuilder.html#addJson-java.lang.String...-">addJson(String...)</a></span> - Method in class org.apache.juneau.internal.<a href="org/apache/juneau/internal/ListBuilder.html" title="class in org.apache.juneau.internal">ListBuilder</a></dt>
 <dd>
 <div class="block">Adds entries to this list via JSON array strings.</div>
@@ -2504,6 +2508,12 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/json/JsonWriter.html#append-char-">append(char)</a></span> - Method in class org.apache.juneau.json.<a href="org/apache/juneau/json/JsonWriter.html" title="class in org.apache.juneau.json">JsonWriter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/LogConfig.html#append--">append()</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></dt>
+<dd>
+<div class="block">Specified append mode for the log file.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogParser.Entry.html#append-java.io.Writer-">append(Writer)</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/objecttools/SearchArgs.html#append-java.lang.String-java.lang.String-">append(String, String)</a></span> - Method in class org.apache.juneau.objecttools.<a href="org/apache/juneau/objecttools/SearchArgs.html" title="class in org.apache.juneau.objecttools">SearchArgs</a></dt>
 <dd>
 <div class="block">Appends the specified search argument.</div>
@@ -2630,6 +2640,8 @@
 <dd>
 <div class="block">Same as <a href="org/apache/juneau/reflect/ClassInfo.html#getFullName--"><code>ClassInfo.getFullName()</code></a> but appends to an existing string builder.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogParser.Entry.html#appendHtml-java.io.Writer-">appendHtml(Writer)</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/collections/JsonList.html#appendIf-boolean-java.lang.Object-">appendIf(boolean, Object)</a></span> - Method in class org.apache.juneau.collections.<a href="org/apache/juneau/collections/JsonList.html" title="class in org.apache.juneau.collections">JsonList</a></dt>
 <dd>
 <div class="block">Adds an entry to this list if the boolean flag is <jk>true</jk>.</div>
@@ -12488,6 +12500,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/internal/StringBuilderWriter.html#close--">close()</a></span> - Method in class org.apache.juneau.internal.<a href="org/apache/juneau/internal/StringBuilderWriter.html" title="class in org.apache.juneau.internal">StringBuilderWriter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogParser.html#close--">close()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources">LogParser</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/parser/ParserPipe.html#close--">close()</a></span> - Method in class org.apache.juneau.parser.<a href="org/apache/juneau/parser/ParserPipe.html" title="class in org.apache.juneau.parser">ParserPipe</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/parser/ParserReader.html#close--">close()</a></span> - Method in class org.apache.juneau.parser.<a href="org/apache/juneau/parser/ParserReader.html" title="class in org.apache.juneau.parser">ParserReader</a></dt>
@@ -13055,6 +13069,10 @@
 <dd>
 <div class="block">Specifies that the Java console is enabled for this microservice.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/LogConfig.html#consoleLevel-java.util.logging.Level-">consoleLevel(Level)</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></dt>
+<dd>
+<div class="block">The default logging level for the console.</div>
+</dd>
 <dt><a href="org/apache/juneau/httppart/Constants.html" title="class in org.apache.juneau.httppart"><span class="typeNameLink">Constants</span></a> - Class in <a href="org/apache/juneau/httppart/package-summary.html">org.apache.juneau.httppart</a></dt>
 <dd>
 <div class="block">HTTP-Part constants.</div>
@@ -14946,6 +14964,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/jetty/JettyMicroservice.Builder.html#copy--">copy()</a></span> - Method in class org.apache.juneau.microservice.jetty.<a href="org/apache/juneau/microservice/jetty/JettyMicroservice.Builder.html" title="class in org.apache.juneau.microservice.jetty">JettyMicroservice.Builder</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/LogConfig.html#copy--">copy()</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></dt>
+<dd>
+<div class="block">Creates a copy of this log configuration.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/Microservice.Builder.html#copy--">copy()</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a></dt>
 <dd>
 <div class="block">Creates a copy of this builder.</div>
@@ -15178,6 +15200,10 @@
 <dd>
 <div class="block">Counts the number of characters in the reader and then closes the reader.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/LogConfig.html#count-int-">count(int)</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></dt>
+<dd>
+<div class="block">The number of log files to use.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/internal/StringUtils.html#countChars-java.lang.String-char-">countChars(String, char)</a></span> - Static method in class org.apache.juneau.internal.<a href="org/apache/juneau/internal/StringUtils.html" title="class in org.apache.juneau.internal">StringUtils</a></dt>
 <dd>
 <div class="block">Counts the number of the specified character in the specified string.</div>
@@ -16276,6 +16302,10 @@
 <dd>
 <div class="block">Create a new initialized Jetty server.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/LogConfig.html#create--">create()</a></span> - Static method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></dt>
+<dd>
+<div class="block">Creates a new instance of this config.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/Microservice.html#create--">create()</a></span> - Static method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a></dt>
 <dd>
 <div class="block">Creates a new builder for this object.</div>
@@ -17744,6 +17774,8 @@
 <dd>
 <div class="block">Creates a new <a href="org/apache/juneau/http/header/Date.html" title="class in org.apache.juneau.http.header"><code>Date</code></a> header with a delayed value.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogParser.Entry.html#date">date</a></span> - Variable in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/http/annotation/FormatType.html#DATE_TIME">DATE_TIME</a></span> - Static variable in class org.apache.juneau.http.annotation.<a href="org/apache/juneau/http/annotation/FormatType.html" title="class in org.apache.juneau.http.annotation">FormatType</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/juneau/assertions/DateAssertion.html" title="class in org.apache.juneau.assertions"><span class="typeNameLink">DateAssertion</span></a> - Class in <a href="org/apache/juneau/assertions/package-summary.html">org.apache.juneau.assertions</a></dt>
@@ -18294,6 +18326,38 @@
 <dd>
 <div class="block">Converts a GZipped input stream into a string.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#def-java.lang.String-">def(String)</a></span> - Method in class org.apache.juneau.http.annotation.<a href="org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a></dt>
+<dd>
+<div class="block">Sets the <a href="org/apache/juneau/http/annotation/FormData.html#def--"><code>FormData.def()</code></a> property on this annotation.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#def-java.lang.String-">def(String)</a></span> - Method in class org.apache.juneau.http.annotation.<a href="org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a></dt>
+<dd>
+<div class="block">Sets the <a href="org/apache/juneau/http/annotation/Header.html#def--"><code>Header.def()</code></a> property on this annotation.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/http/annotation/PathAnnotation.Builder.html#def-java.lang.String-">def(String)</a></span> - Method in class org.apache.juneau.http.annotation.<a href="org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a></dt>
+<dd>
+<div class="block">Sets the <a href="org/apache/juneau/http/annotation/Path.html#name--"><code>Path.name()</code></a> property on this annotation.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#def-java.lang.String-">def(String)</a></span> - Method in class org.apache.juneau.http.annotation.<a href="org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a></dt>
+<dd>
+<div class="block">Sets the <a href="org/apache/juneau/http/annotation/Query.html#def--"><code>Query.def()</code></a> property on this annotation.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/httppart/RequestFormParam.html#def-java.lang.String-">def(String)</a></span> - Method in class org.apache.juneau.rest.httppart.<a href="org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a></dt>
+<dd>
+<div class="block">Sets a default value for this part.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/httppart/RequestHeader.html#def-java.lang.String-">def(String)</a></span> - Method in class org.apache.juneau.rest.httppart.<a href="org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a></dt>
+<dd>
+<div class="block">Sets a default value for this part.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/httppart/RequestPathParam.html#def-java.lang.String-">def(String)</a></span> - Method in class org.apache.juneau.rest.httppart.<a href="org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a></dt>
+<dd>
+<div class="block">Sets a default value for this part.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/httppart/RequestQueryParam.html#def-java.lang.String-">def(String)</a></span> - Method in class org.apache.juneau.rest.httppart.<a href="org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a></dt>
+<dd>
+<div class="block">Sets a default value for this part.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/annotation/BeanAnnotation.html#DEFAULT">DEFAULT</a></span> - Static variable in class org.apache.juneau.annotation.<a href="org/apache/juneau/annotation/BeanAnnotation.html" title="class in org.apache.juneau.annotation">BeanAnnotation</a></dt>
 <dd>
 <div class="block">Default value</div>
@@ -19637,6 +19701,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/DirectoryResource.html#deleteFile-java.lang.String-">deleteFile(String)</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/DirectoryResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogsResource.html#deleteFile-java.lang.String-">deleteFile(String)</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/examples/rest/PhotosResource.html#deletePhoto-int-">deletePhoto(int)</a></span> - Method in class org.apache.juneau.examples.rest.<a href="org/apache/juneau/examples/rest/PhotosResource.html" title="class in org.apache.juneau.examples.rest">PhotosResource</a></dt>
 <dd>
 <div class="block">[HTTP DELETE /photos/{id}]
@@ -21072,6 +21138,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/DirectoryResource.html#downloadFile-org.apache.juneau.rest.RestResponse-java.lang.String-">downloadFile(RestResponse, String)</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/DirectoryResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogsResource.html#downloadFile-org.apache.juneau.rest.RestResponse-java.lang.String-">downloadFile(RestResponse, String)</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/juneau/dto/html5/Dt.html" title="class in org.apache.juneau.dto.html5"><span class="typeNameLink">Dt</span></a> - Class in <a href="org/apache/juneau/dto/html5/package-summary.html">org.apache.juneau.dto.html5</a></dt>
 <dd>
 <div class="block">DTO for an HTML <a class='doclink' href='https://www.w3.org/TR/html5/grouping-content.html#the-dt-element'>&lt;dt&gt;</a>
@@ -23010,6 +23078,10 @@
 <dd>
 <div class="block">Represents no file finder</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/LogConfig.html#fileLevel-java.util.logging.Level-">fileLevel(Level)</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></dt>
+<dd>
+<div class="block">The default logging level for the log file.</div>
+</dd>
 <dt><a href="org/apache/juneau/internal/FileReaderBuilder.html" title="class in org.apache.juneau.internal"><span class="typeNameLink">FileReaderBuilder</span></a> - Class in <a href="org/apache/juneau/internal/package-summary.html">org.apache.juneau.internal</a></dt>
 <dd>
 <div class="block">Utility class for creating <a href="https://docs.oracle.com/javase/8/docs/api/java/io/FileReader.html?is-external=true" title="class or interface in java.io"><code>FileReader</code></a> objects.</div>
@@ -23034,6 +23106,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html#FileResource-java.io.File-java.lang.String-boolean-">FileResource(File, String, boolean)</a></span> - Constructor for class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource.FileResource</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogsResource.FileResource.html#FileResource-java.io.File-java.lang.String-boolean-boolean-">FileResource(File, String, boolean, boolean)</a></span> - Constructor for class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource.FileResource</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/juneau/config/store/FileStore.html" title="class in org.apache.juneau.config.store"><span class="typeNameLink">FileStore</span></a> - Class in <a href="org/apache/juneau/config/store/package-summary.html">org.apache.juneau.config.store</a></dt>
 <dd>
 <div class="block">Filesystem-based storage location for configuration files.</div>
@@ -23216,6 +23290,22 @@
 <dd>
 <div class="block">Same as <a href="https://docs.oracle.com/javase/8/docs/api/java/util/ResourceBundle.html?is-external=true#getBundle-java.lang.String-java.util.Locale-java.lang.ClassLoader-" title="class or interface in java.util"><code>ResourceBundle.getBundle(String, Locale, ClassLoader)</code></a> but never throws a <a href="https://docs.oracle.com/javase/8/docs/api/java/util/MissingResourceException.html?is-external=true" title="class or interface in java.util"><code>MissingResourceException</code></a>.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/http/annotation/FormDataAnnotation.html#findDef-org.apache.juneau.reflect.ParamInfo-">findDef(ParamInfo)</a></span> - Static method in class org.apache.juneau.http.annotation.<a href="org/apache/juneau/http/annotation/FormDataAnnotation.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation</a></dt>
+<dd>
+<div class="block">Finds the default value from the specified list of annotations.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/http/annotation/HeaderAnnotation.html#findDef-org.apache.juneau.reflect.ParamInfo-">findDef(ParamInfo)</a></span> - Static method in class org.apache.juneau.http.annotation.<a href="org/apache/juneau/http/annotation/HeaderAnnotation.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation</a></dt>
+<dd>
+<div class="block">Finds the default value from the specified list of annotations.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/http/annotation/PathAnnotation.html#findDef-org.apache.juneau.reflect.ParamInfo-">findDef(ParamInfo)</a></span> - Static method in class org.apache.juneau.http.annotation.<a href="org/apache/juneau/http/annotation/PathAnnotation.html" title="class in org.apache.juneau.http.annotation">PathAnnotation</a></dt>
+<dd>
+<div class="block">Finds the default value from the specified list of annotations.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/http/annotation/QueryAnnotation.html#findDef-org.apache.juneau.reflect.ParamInfo-">findDef(ParamInfo)</a></span> - Static method in class org.apache.juneau.http.annotation.<a href="org/apache/juneau/http/annotation/QueryAnnotation.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation</a></dt>
+<dd>
+<div class="block">Finds the default value from the specified list of annotations.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/cp/Messages.html#findFirstString-java.lang.String...-">findFirstString(String...)</a></span> - Method in class org.apache.juneau.cp.<a href="org/apache/juneau/cp/Messages.html" title="class in org.apache.juneau.cp">Messages</a></dt>
 <dd>
 <div class="block">Looks for all the specified keys in the resource bundle and returns the first value that exists.</div>
@@ -23430,7 +23520,7 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/http/annotation/QueryAnnotation.html#findName-org.apache.juneau.reflect.ParamInfo-">findName(ParamInfo)</a></span> - Static method in class org.apache.juneau.http.annotation.<a href="org/apache/juneau/http/annotation/QueryAnnotation.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation</a></dt>
 <dd>
-<div class="block">Finds the name from the specified lists of annotations.</div>
+<div class="block">Finds the name from the specified list of annotations.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/jena/RdfUtils.html#findNamespace-java.util.List-java.util.List-">findNamespace(List&lt;Rdf&gt;, List&lt;RdfSchema&gt;)</a></span> - Static method in class org.apache.juneau.jena.<a href="org/apache/juneau/jena/RdfUtils.html" title="class in org.apache.juneau.jena">RdfUtils</a></dt>
 <dd>
@@ -24511,6 +24601,8 @@
 <dd>
 <div class="block">Similar to <a href="https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html?is-external=true#format-java.lang.String-java.lang.Object...-" title="class or interface in java.text"><code>MessageFormat.format(String, Object...)</code></a> except allows you to specify POJO arguments.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogEntryFormatter.html#format-java.util.logging.LogRecord-">format(LogRecord)</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources">LogEntryFormatter</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/oapi/OpenApiParser.Builder.html#format-org.apache.juneau.httppart.HttpPartFormat-">format(HttpPartFormat)</a></span> - Method in class org.apache.juneau.oapi.<a href="org/apache/juneau/oapi/OpenApiParser.Builder.html" title="class in org.apache.juneau.oapi">OpenApiParser.Builder</a></dt>
 <dd>
 <div class="block"><i><l>OpenApiCommon</l> configuration property:&emsp;</i>  Default format for HTTP parts.</div>
@@ -24579,6 +24671,10 @@
 <dd>
 <div class="block">Formats the given date according to the specified pattern.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/LogConfig.html#formatter-java.util.logging.Formatter-">formatter(Formatter)</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></dt>
+<dd>
+<div class="block">The log entry formatter.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/mock/MockLogger.html#formatter-java.util.logging.Formatter-">formatter(Formatter)</a></span> - Method in class org.apache.juneau.rest.mock.<a href="org/apache/juneau/rest/mock/MockLogger.html" title="class in org.apache.juneau.rest.mock">MockLogger</a></dt>
 <dd>
 <div class="block">Overrides the formatter to use for formatting messages.</div>
@@ -25257,6 +25353,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html#getActions--">getActions()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource.FileResource</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogsResource.FileResource.html#getActions--">getActions()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource.FileResource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/jsonschema/JsonSchemaGenerator.html#getAddDescriptionsTo--">getAddDescriptionsTo()</a></span> - Method in class org.apache.juneau.jsonschema.<a href="org/apache/juneau/jsonschema/JsonSchemaGenerator.html" title="class in org.apache.juneau.jsonschema">JsonSchemaGenerator</a></dt>
 <dd>
 <div class="block">Add descriptions to types.</div>
@@ -26784,6 +26882,10 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/examples/core/config/store/SqlStore.html#getDatabaseValue-java.lang.String-">getDatabaseValue(String)</a></span> - Method in class org.apache.juneau.examples.core.config.store.<a href="org/apache/juneau/examples/core/config/store/SqlStore.html" title="class in org.apache.juneau.examples.core.config.store">SqlStore</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogEntryFormatter.html#getDateFormat--">getDateFormat()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources">LogEntryFormatter</a></dt>
+<dd>
+<div class="block">Returns the <a href="https://docs.oracle.com/javase/8/docs/api/java/text/DateFormat.html?is-external=true" title="class or interface in java.text"><code>DateFormat</code></a> used for matching dates.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/mock/MockServletRequest.html#getDateHeader-java.lang.String-">getDateHeader(String)</a></span> - Method in class org.apache.juneau.rest.mock.<a href="org/apache/juneau/rest/mock/MockServletRequest.html" title="class in org.apache.juneau.rest.mock">MockServletRequest</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/RestContext.html#getDebugEnablement--">getDebugEnablement()</a></span> - Method in class org.apache.juneau.rest.<a href="org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest">RestContext</a></dt>
@@ -27460,8 +27562,15 @@
 <dd>
 <div class="block">Returns the field for this property.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogEntryFormatter.html#getField-java.lang.String-java.util.regex.Matcher-">getField(String, Matcher)</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources">LogEntryFormatter</a></dt>
+<dd>
+<div class="block">Given a matcher that has matched the pattern specified by <a href="org/apache/juneau/microservice/resources/LogEntryFormatter.html#getLogEntryPattern--"><code>LogEntryFormatter.getLogEntryPattern()</code></a>, returns the field value
+ from the match.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/DirectoryResource.html#getFile-org.apache.juneau.rest.RestRequest-java.lang.String-">getFile(RestRequest, String)</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/DirectoryResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogsResource.html#getFile-org.apache.juneau.rest.RestRequest-java.lang.String-">getFile(RestRequest, String)</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/parser/ReaderParser.html#getFileCharset--">getFileCharset()</a></span> - Method in class org.apache.juneau.parser.<a href="org/apache/juneau/parser/ReaderParser.html" title="class in org.apache.juneau.parser">ReaderParser</a></dt>
 <dd>
 <div class="block">File charset.</div>
@@ -27500,6 +27609,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html#getFiles--">getFiles()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource.FileResource</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogsResource.FileResource.html#getFiles--">getFiles()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource.FileResource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/http/header/HeaderList.Builder.html#getFirst-java.lang.String-">getFirst(String)</a></span> - Method in class org.apache.juneau.http.header.<a href="org/apache/juneau/http/header/HeaderList.Builder.html" title="class in org.apache.juneau.http.header">HeaderList.Builder</a></dt>
 <dd>
 <div class="block">Gets the first header with the given name.</div>
@@ -28511,6 +28622,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html#getLastModified--">getLastModified()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource.FileResource</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogsResource.FileResource.html#getLastModified--">getLastModified()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource.FileResource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/stats/ThrownStats.html#getLastOccurrence--">getLastOccurrence()</a></span> - Method in class org.apache.juneau.rest.stats.<a href="org/apache/juneau/rest/stats/ThrownStats.html" title="class in org.apache.juneau.rest.stats">ThrownStats</a></dt>
 <dd>
 <div class="block">Returns the UTC time of the last occurrence of this exception at a specific location in code.</div>
@@ -28675,6 +28788,10 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/xml/XmlReader.html#getLocation--">getLocation()</a></span> - Method in class org.apache.juneau.xml.<a href="org/apache/juneau/xml/XmlReader.html" title="class in org.apache.juneau.xml">XmlReader</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogEntryFormatter.html#getLogEntryPattern--">getLogEntryPattern()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources">LogEntryFormatter</a></dt>
+<dd>
+<div class="block">Returns the regular expression pattern used for matching log entries.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/Microservice.html#getLogger--">getLogger()</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a></dt>
 <dd>
 <div class="block">Returns the logger for this microservice.</div>
@@ -29381,6 +29498,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html#getName--">getName()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource.FileResource</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogsResource.FileResource.html#getName--">getName()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource.FileResource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/reflect/ClassInfo.html#getName--">getName()</a></span> - Method in class org.apache.juneau.reflect.<a href="org/apache/juneau/reflect/ClassInfo.html" title="class in org.apache.juneau.reflect">ClassInfo</a></dt>
 <dd>
 <div class="block">Returns the name of the underlying class.</div>
@@ -31574,6 +31693,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html#getSize--">getSize()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource.FileResource</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogsResource.FileResource.html#getSize--">getSize()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource.FileResource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/jaxrs/BaseProvider.html#getSize-java.lang.Object-java.lang.Class-java.lang.reflect.Type-java.lang.annotation.Annotation:A-javax.ws.rs.core.MediaType-">getSize(Object, Class&lt;?&gt;, Type, Annotation[], MediaType)</a></span> - Method in class org.apache.juneau.rest.jaxrs.<a href="org/apache/juneau/rest/jaxrs/BaseProvider.html" title="class in org.apache.juneau.rest.jaxrs">BaseProvider</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/soap/SoapXmlSerializer.html#getSoapAction--">getSoapAction()</a></span> - Method in class org.apache.juneau.soap.<a href="org/apache/juneau/soap/SoapXmlSerializer.html" title="class in org.apache.juneau.soap">SoapXmlSerializer</a></dt>
@@ -32076,6 +32197,8 @@
 <dd>
 <div class="block">Returns the inner text of this element.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogParser.Entry.html#getText--">getText()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/xml/XmlReader.html#getText--">getText()</a></span> - Method in class org.apache.juneau.xml.<a href="org/apache/juneau/xml/XmlReader.html" title="class in org.apache.juneau.xml">XmlReader</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/xml/XmlReader.html#getTextCharacters--">getTextCharacters()</a></span> - Method in class org.apache.juneau.xml.<a href="org/apache/juneau/xml/XmlReader.html" title="class in org.apache.juneau.xml">XmlReader</a></dt>
@@ -32086,6 +32209,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/xml/XmlReader.html#getTextStart--">getTextStart()</a></span> - Method in class org.apache.juneau.xml.<a href="org/apache/juneau/xml/XmlReader.html" title="class in org.apache.juneau.xml">XmlReader</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogParser.Entry.html#getThread--">getThread()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/BeanPropertyValue.html#getThrown--">getThrown()</a></span> - Method in class org.apache.juneau.<a href="org/apache/juneau/BeanPropertyValue.html" title="class in org.apache.juneau">BeanPropertyValue</a></dt>
 <dd>
 <div class="block">Returns the exception thrown by calling the property getter.</div>
@@ -32256,6 +32381,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html#getType--">getType()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource.FileResource</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogsResource.FileResource.html#getType--">getType()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource.FileResource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/reflect/FieldInfo.html#getType--">getType()</a></span> - Method in class org.apache.juneau.reflect.<a href="org/apache/juneau/reflect/FieldInfo.html" title="class in org.apache.juneau.reflect">FieldInfo</a></dt>
 <dd>
 <div class="block">Returns the type of this field.</div>
@@ -33519,6 +33646,8 @@
 <dd>
 <div class="block">Indicates whether there is another part in this iteration.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogParser.html#hasNext--">hasNext()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources">LogParser</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/xml/XmlReader.html#hasNext--">hasNext()</a></span> - Method in class org.apache.juneau.xml.<a href="org/apache/juneau/xml/XmlReader.html" title="class in org.apache.juneau.xml">XmlReader</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/reflect/ClassInfo.html#hasNoAnnotation-java.lang.Class-">hasNoAnnotation(Class&lt;A&gt;)</a></span> - Method in class org.apache.juneau.reflect.<a href="org/apache/juneau/reflect/ClassInfo.html" title="class in org.apache.juneau.reflect">ClassInfo</a></dt>
@@ -36715,6 +36844,8 @@
 <dd>
 <div class="block">Initializes this microservice.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogsResource.html#init-org.apache.juneau.config.Config-">init(Config)</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/logger/BasicCallLogger.html#init-org.apache.juneau.cp.BeanStore-">init(BeanStore)</a></span> - Method in class org.apache.juneau.rest.logger.<a href="org/apache/juneau/rest/logger/BasicCallLogger.html" title="class in org.apache.juneau.rest.logger">BasicCallLogger</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/logger/BasicDisabledCallLogger.html#init-org.apache.juneau.cp.BeanStore-">init(BeanStore)</a></span> - Method in class org.apache.juneau.rest.logger.<a href="org/apache/juneau/rest/logger/BasicDisabledCallLogger.html" title="class in org.apache.juneau.rest.logger">BasicDisabledCallLogger</a></dt>
@@ -39401,6 +39532,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/util/FinishableServletOutputStream.html#isReady--">isReady()</a></span> - Method in class org.apache.juneau.rest.util.<a href="org/apache/juneau/rest/util/FinishableServletOutputStream.html" title="class in org.apache.juneau.rest.util">FinishableServletOutputStream</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogParser.Entry.html#isRecord">isRecord</a></span> - Variable in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/RestContext.html#isRenderResponseStackTraces--">isRenderResponseStackTraces()</a></span> - Method in class org.apache.juneau.rest.<a href="org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest">RestContext</a></dt>
 <dd>
 <div class="block">Returns whether it's safe to render stack traces in HTTP responses.</div>
@@ -40049,6 +40182,8 @@
 <dd>
 <div class="block">Iterates over all entries in all collections.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogParser.html#iterator--">iterator()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources">LogParser</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/juneau/swaps/IteratorSwap.html" title="class in org.apache.juneau.swaps"><span class="typeNameLink">IteratorSwap</span></a> - Class in <a href="org/apache/juneau/swaps/package-summary.html">org.apache.juneau.swaps</a></dt>
 <dd>
 <div class="block">Transforms <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><code>Iterators</code></a> to <code>List&lt;Object&gt;</code> objects.</div>
@@ -41439,6 +41574,10 @@
 <dd>
 <div class="block">Constructor.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/LogConfig.html#level-java.lang.String-java.util.logging.Level-">level(String, Level)</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></dt>
+<dd>
+<div class="block">Default logging level for logger.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/logger/CallLogger.Builder.html#level-java.util.logging.Level-">level(Level)</a></span> - Method in class org.apache.juneau.rest.logger.<a href="org/apache/juneau/rest/logger/CallLogger.Builder.html" title="class in org.apache.juneau.rest.logger">CallLogger.Builder</a></dt>
 <dd>
 <div class="block">The default logging level to use for logging the request/response.</div>
@@ -41451,6 +41590,10 @@
 <dd>
 <div class="block">Sets the level for this logger.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/LogConfig.html#levels-java.util.Map-">levels(Map&lt;String, Level&gt;)</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></dt>
+<dd>
+<div class="block">Default logging levels for loggers.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/dto/html5/HtmlBuilder.html#li--">li()</a></span> - Static method in class org.apache.juneau.dto.html5.<a href="org/apache/juneau/dto/html5/HtmlBuilder.html" title="class in org.apache.juneau.dto.html5">HtmlBuilder</a></dt>
 <dd>
 <div class="block">Creates an empty <a href="org/apache/juneau/dto/html5/Li.html" title="class in org.apache.juneau.dto.html5"><code>Li</code></a> element.</div>
@@ -41526,6 +41669,12 @@
 <dd>
 <div class="block">Builder class.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/LogConfig.html#limit-int-">limit(int)</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></dt>
+<dd>
+<div class="block">The maximum number of bytes to write to any one log file.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogParser.Entry.html#line">line</a></span> - Variable in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/dto/atom/AtomBuilder.html#link-java.lang.String-java.lang.String-java.lang.String-">link(String, String, String)</a></span> - Static method in class org.apache.juneau.dto.atom.<a href="org/apache/juneau/dto/atom/AtomBuilder.html" title="class in org.apache.juneau.dto.atom">AtomBuilder</a></dt>
 <dd>
 <div class="block">Creates a <a href="org/apache/juneau/dto/atom/Link.html" title="class in org.apache.juneau.dto.atom"><code>Link</code></a> element with the specified <a href="org/apache/juneau/dto/atom/Link.html#setRel-java.lang.String-"><code>Link.setRel(String)</code></a>, <a href="org/apache/juneau/dto/atom/Link.html#setType-java.lang.String-"><code>Link.setType(String)</code></a>, and
@@ -42268,12 +42417,42 @@
 <dd>
 <div class="block">Log a message.</div>
 </dd>
+<dt><a href="org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">LogConfig</span></a> - Class in <a href="org/apache/juneau/microservice/package-summary.html">org.apache.juneau.microservice</a></dt>
+<dd>
+<div class="block">Can be used for configuration of simple logging in the microservice.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/LogConfig.html#LogConfig-org.apache.juneau.microservice.LogConfig-">LogConfig(LogConfig)</a></span> - Constructor for class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></dt>
+<dd>
+<div class="block">Copy constructor.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/Microservice.Builder.html#logConfig-org.apache.juneau.microservice.LogConfig-">logConfig(LogConfig)</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a></dt>
+<dd>
+<div class="block">Specifies logging instructions for the microservice.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/LogConfig.html#logDir-java.lang.String-">logDir(String)</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></dt>
+<dd>
+<div class="block">The location of the log directory to create the log file.</div>
+</dd>
+<dt><a href="org/apache/juneau/microservice/resources/LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">LogEntryFormatter</span></a> - Class in <a href="org/apache/juneau/microservice/resources/package-summary.html">org.apache.juneau.microservice.resources</a></dt>
+<dd>
+<div class="block">Log entry formatter.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogEntryFormatter.html#LogEntryFormatter-java.lang.String-java.lang.String-boolean-">LogEntryFormatter(String, String, boolean)</a></span> - Constructor for class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources">LogEntryFormatter</a></dt>
+<dd>
+<div class="block">Create a new formatter.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/LogConfig.html#logFile-java.lang.String-">logFile(String)</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></dt>
+<dd>
+<div class="block">Returns the name of the log file on the file system to store the log file for this microservice.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/jetty/JettyMicroservice.Builder.html#logger-java.util.logging.Logger-">logger(Logger)</a></span> - Method in class org.apache.juneau.microservice.jetty.<a href="org/apache/juneau/microservice/jetty/JettyMicroservice.Builder.html" title="class in org.apache.juneau.microservice.jetty">JettyMicroservice.Builder</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/Microservice.Builder.html#logger-java.util.logging.Logger-">logger(Logger)</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a></dt>
 <dd>
 <div class="block">Specifies the logger used by the microservice and returned by the <a href="org/apache/juneau/microservice/Microservice.html#getLogger--"><code>Microservice.getLogger()</code></a> method.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogParser.Entry.html#logger">logger</a></span> - Variable in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/client/RestClient.Builder.html#logger-java.util.logging.Logger-">logger(Logger)</a></span> - Method in class org.apache.juneau.rest.client.<a href="org/apache/juneau/rest/client/RestClient.Builder.html" title="class in org.apache.juneau.rest.client">RestClient.Builder</a></dt>
 <dd>
 <div class="block">Logger.</div>
@@ -42340,12 +42519,34 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/mock/MockServletRequest.html#logout--">logout()</a></span> - Method in class org.apache.juneau.rest.mock.<a href="org/apache/juneau/rest/mock/MockServletRequest.html" title="class in org.apache.juneau.rest.mock">MockServletRequest</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">LogParser</span></a> - Class in <a href="org/apache/juneau/microservice/resources/package-summary.html">org.apache.juneau.microservice.resources</a></dt>
+<dd>
+<div class="block">Utility class for reading log files.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogParser.html#LogParser-org.apache.juneau.microservice.resources.LogEntryFormatter-java.io.File-java.util.Date-java.util.Date-java.lang.String-java.lang.String:A-java.lang.String:A-">LogParser(LogEntryFormatter, File, Date, Date, String, String[], String[])</a></span> - Constructor for class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources">LogParser</a></dt>
+<dd>
+<div class="block">Constructor.</div>
+</dd>
+<dt><a href="org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">LogParser.Entry</span></a> - Class in <a href="org/apache/juneau/microservice/resources/package-summary.html">org.apache.juneau.microservice.resources</a></dt>
+<dd>
+<div class="block">Represents a single line from the log file.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/client/RestClient.Builder.html#logRequests-org.apache.juneau.DetailLevel-java.util.logging.Level-java.util.function.BiPredicate-">logRequests(DetailLevel, Level, BiPredicate&lt;RestRequest, RestResponse&gt;)</a></span> - Method in class org.apache.juneau.rest.client.<a href="org/apache/juneau/rest/client/RestClient.Builder.html" title="class in org.apache.juneau.rest.client">RestClient.Builder</a></dt>
 <dd>
 <div class="block">Log requests.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/mock/MockRestClient.Builder.html#logRequests-org.apache.juneau.DetailLevel-java.util.logging.Level-java.util.function.BiPredicate-">logRequests(DetailLevel, Level, BiPredicate&lt;RestRequest, RestResponse&gt;)</a></span> - Method in class org.apache.juneau.rest.mock.<a href="org/apache/juneau/rest/mock/MockRestClient.Builder.html" title="class in org.apache.juneau.rest.mock">MockRestClient.Builder</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">LogsResource</span></a> - Class in <a href="org/apache/juneau/microservice/resources/package-summary.html">org.apache.juneau.microservice.resources</a></dt>
+<dd>
+<div class="block">REST resource for viewing and accessing log files.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogsResource.html#LogsResource--">LogsResource()</a></span> - Constructor for class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/juneau/microservice/resources/LogsResource.Action.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">LogsResource.Action</span></a> - Class in <a href="org/apache/juneau/microservice/resources/package-summary.html">org.apache.juneau.microservice.resources</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">LogsResource.FileResource</span></a> - Class in <a href="org/apache/juneau/microservice/resources/package-summary.html">org.apache.juneau.microservice.resources</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/logger/CallLoggerRule.Builder.html#logStackTrace--">logStackTrace()</a></span> - Method in class org.apache.juneau.rest.logger.<a href="org/apache/juneau/rest/logger/CallLoggerRule.Builder.html" title="class in org.apache.juneau.rest.logger">CallLoggerRule.Builder</a></dt>
 <dd>
 <div class="block">Log a stack trace as part of the log entry.</div>
@@ -45192,6 +45393,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/http/part/BasicPartIterator.html#next--">next()</a></span> - Method in class org.apache.juneau.http.part.<a href="org/apache/juneau/http/part/BasicPartIterator.html" title="class in org.apache.juneau.http.part">BasicPartIterator</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogParser.html#next--">next()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources">LogParser</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/processor/ResponseProcessor.html#NEXT">NEXT</a></span> - Static variable in interface org.apache.juneau.rest.processor.<a href="org/apache/juneau/rest/processor/ResponseProcessor.html" title="interface in org.apache.juneau.rest.processor">ResponseProcessor</a></dt>
 <dd>
 <div class="block">Return code indicating to proceed to the next response processor in the chain.</div>
@@ -64857,6 +65060,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/internal/DelegateBeanMap.html#remove-java.lang.Object-">remove(Object)</a></span> - Method in class org.apache.juneau.internal.<a href="org/apache/juneau/internal/DelegateBeanMap.html" title="class in org.apache.juneau.internal">DelegateBeanMap</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogParser.html#remove--">remove()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources">LogParser</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/httppart/RequestAttributes.html#remove-java.lang.String...-">remove(String...)</a></span> - Method in class org.apache.juneau.rest.httppart.<a href="org/apache/juneau/rest/httppart/RequestAttributes.html" title="class in org.apache.juneau.rest.httppart">RequestAttributes</a></dt>
 <dd>
 <div class="block">Remove request attributes.</div>
@@ -71202,6 +71407,8 @@
 <dd>
 <div class="block">Bean property setter:  <property>xml</property>.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogParser.Entry.html#severity">severity</a></span> - Variable in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/dto/html5/Area.html#shape-java.lang.String-">shape(String)</a></span> - Method in class org.apache.juneau.dto.html5.<a href="org/apache/juneau/dto/html5/Area.html" title="class in org.apache.juneau.dto.html5">Area</a></dt>
 <dd>
 <div class="block"><a class='doclink' href='https://www.w3.org/TR/html5/embedded-content-0.html#attr-area-shape'>shape</a> attribute.</div>
@@ -75725,6 +75932,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/html/HtmlWriter.html#text-java.lang.Object-boolean-">text(Object, boolean)</a></span> - Method in class org.apache.juneau.html.<a href="org/apache/juneau/html/HtmlWriter.html" title="class in org.apache.juneau.html">HtmlWriter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogParser.Entry.html#text">text</a></span> - Variable in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/xml/XmlWriter.html#text-java.lang.Object-">text(Object)</a></span> - Method in class org.apache.juneau.xml.<a href="org/apache/juneau/xml/XmlWriter.html" title="class in org.apache.juneau.xml">XmlWriter</a></dt>
 <dd>
 <div class="block">Shortcut for calling <code>text(o, <jk>false</jk>);</code></div>
@@ -75859,6 +76068,8 @@
 <dd>
 <div class="block">Identical to <a href="org/apache/juneau/cp/BeanCreateMethodFinder.html#find-java.lang.String-java.lang.Class...-"><code>BeanCreateMethodFinder.find(String, Class...)</code></a> but named for fluent-style calls.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogParser.Entry.html#thread">thread</a></span> - Variable in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/cp/BeanStore.Builder.html#threadSafe--">threadSafe()</a></span> - Method in class org.apache.juneau.cp.<a href="org/apache/juneau/cp/BeanStore.Builder.html" title="class in org.apache.juneau.cp">BeanStore.Builder</a></dt>
 <dd>
 <div class="block">Specifies that the bean store being created should be thread-safe.</div>
@@ -81363,6 +81574,10 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/DirectoryResource.html#viewFile-org.apache.juneau.rest.RestResponse-java.lang.String-">viewFile(RestResponse, String)</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/DirectoryResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogsResource.html#viewFile-org.apache.juneau.rest.RestResponse-java.lang.String-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-java.lang.String:A-">viewFile(RestResponse, String, boolean, String, String, String, String[], String[])</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogsResource.html#viewParsedEntries-org.apache.juneau.rest.RestRequest-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-java.lang.String:A-">viewParsedEntries(RestRequest, String, String, String, String, String[], String[])</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/juneau/Visibility.html" title="enum in org.apache.juneau"><span class="typeNameLink">Visibility</span></a> - Enum in <a href="org/apache/juneau/package-summary.html">org.apache.juneau</a></dt>
 <dd>
 <div class="block">Defines class/field/method visibilities.</div>
@@ -81741,6 +81956,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/http/resource/BasicResource.html#writeTo-java.io.OutputStream-">writeTo(OutputStream)</a></span> - Method in class org.apache.juneau.http.resource.<a href="org/apache/juneau/http/resource/BasicResource.html" title="class in org.apache.juneau.http.resource">BasicResource</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogParser.html#writeTo-java.io.Writer-">writeTo(Writer)</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources">LogParser</a></dt>
+<dd>
+<div class="block">Serializes the contents of the parsed log file to the specified writer and then closes the underlying reader.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/client/ResponseContent.html#writeTo-java.io.OutputStream-">writeTo(OutputStream)</a></span> - Method in class org.apache.juneau.rest.client.<a href="org/apache/juneau/rest/client/ResponseContent.html" title="class in org.apache.juneau.rest.client">ResponseContent</a></dt>
 <dd>
 <div class="block">Writes the entity content out to the output stream.</div>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/dto/LinkString.html b/content/site/apidocs-9.0.0/org/apache/juneau/dto/LinkString.html
index c870a35..f84af56 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/dto/LinkString.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/dto/LinkString.html
@@ -112,7 +112,7 @@
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
-<dd><a href="../../../../org/apache/juneau/microservice/resources/DirectoryResource.Action.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource.Action</a></dd>
+<dd><a href="../../../../org/apache/juneau/microservice/resources/DirectoryResource.Action.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource.Action</a>, <a href="../../../../org/apache/juneau/microservice/resources/LogsResource.Action.html" title="class in org.apache.juneau.microservice.resources">LogsResource.Action</a></dd>
 </dl>
 <hr>
 <br>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/examples/rest/HtmlBeansResource.html b/content/site/apidocs-9.0.0/org/apache/juneau/examples/rest/HtmlBeansResource.html
index 94e6dd3..544b47f 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/examples/rest/HtmlBeansResource.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/examples/rest/HtmlBeansResource.html
@@ -122,7 +122,7 @@
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html#line.58">HtmlBeansResource</a>
+<pre>public class <a href="../../../../../src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html#line.57">HtmlBeansResource</a>
 extends <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestObject.html" title="class in org.apache.juneau.rest.servlet">BasicRestObject</a>
 implements <a href="../../../../../org/apache/juneau/rest/config/BasicUniversalConfig.html" title="interface in org.apache.juneau.rest.config">BasicUniversalConfig</a></pre>
 <div class="block">Sample resource that allows images to be uploaded and retrieved.
@@ -233,7 +233,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HtmlBeansResource</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html#line.58">HtmlBeansResource</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html#line.57">HtmlBeansResource</a>()</pre>
 </li>
 </ul>
 </li>
@@ -250,7 +250,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getChildDescriptions</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/beans/ResourceDescriptions.html" title="class in org.apache.juneau.rest.beans">ResourceDescriptions</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html#line.68">getChildDescriptions</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/beans/ResourceDescriptions.html" title="class in org.apache.juneau.rest.beans">ResourceDescriptions</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html#line.67">getChildDescriptions</a>()</pre>
 <div class="block">[HTTP GET /htmlbeans]</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -264,7 +264,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>aTable</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/dto/html5/Table.html" title="class in org.apache.juneau.dto.html5">Table</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html#line.88">aTable</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/dto/html5/Table.html" title="class in org.apache.juneau.dto.html5">Table</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html#line.87">aTable</a>()</pre>
 <div class="block">[HTTP GET /htmlbeans/table]</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -278,7 +278,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>aDiv</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/dto/html5/HtmlElement.html" title="class in org.apache.juneau.dto.html5">HtmlElement</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html#line.113">aDiv</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/dto/html5/HtmlElement.html" title="class in org.apache.juneau.dto.html5">HtmlElement</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html#line.112">aDiv</a>()</pre>
 <div class="block">[HTTP GET /htmlbeans/div]</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -292,7 +292,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>aForm</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/dto/html5/Form.html" title="class in org.apache.juneau.dto.html5">Form</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html#line.133">aForm</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/dto/html5/Form.html" title="class in org.apache.juneau.dto.html5">Form</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html#line.132">aForm</a>()</pre>
 <div class="block">[HTTP GET /htmlbeans/form]</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/examples/rest/RootResources.html b/content/site/apidocs-9.0.0/org/apache/juneau/examples/rest/RootResources.html
index 9201f8c..7b9cc4d 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/examples/rest/RootResources.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/examples/rest/RootResources.html
@@ -131,7 +131,7 @@
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/juneau/examples/rest/RootResources.html#line.74">RootResources</a>
+<pre>public class <a href="../../../../../src-html/org/apache/juneau/examples/rest/RootResources.html#line.75">RootResources</a>
 extends <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServletGroup.html" title="class in org.apache.juneau.rest.servlet">BasicRestServletGroup</a>
 implements <a href="../../../../../org/apache/juneau/rest/config/BasicUniversalJenaConfig.html" title="interface in org.apache.juneau.rest.config">BasicUniversalJenaConfig</a></pre>
 <div class="block">Sample REST resource showing how to implement a "router" resource page.
@@ -230,7 +230,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RootResources</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/examples/rest/RootResources.html#line.74">RootResources</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/examples/rest/RootResources.html#line.75">RootResources</a>()</pre>
 </li>
 </ul>
 </li>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/FormData.html b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/FormData.html
index d41b3ab..3e9be7c 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/FormData.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/FormData.html
@@ -210,41 +210,47 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormData.html#def--">def</a></span></code>
+<div class="block">Default value for this parameter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormData.html#name--">name</a></span></code>
 <div class="block">FORM parameter name.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormData.html#on--">on</a></span></code>
 <div class="block">Dynamically apply this annotation to the specified classes.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormData.html#onClass--">onClass</a></span></code>
 <div class="block">Dynamically apply this annotation to the specified classes.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormData.html#parser--">parser</a></span></code>
 <div class="block">Specifies the <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart"><code>HttpPartParser</code></a> class used for parsing strings to values.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormData.html#schema--">schema</a></span></code>
 <div class="block"><mk>schema</mk> field of the <a class='doclink' href='https://swagger.io/specification/v2#parameterObject'>Swagger Parameter Object</a>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormData.html#serializer--">serializer</a></span></code>
 <div class="block">Specifies the <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart"><code>HttpPartSerializer</code></a> class used for serializing values to strings.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormData.html#value--">value</a></span></code>
 <div class="block">A synonym for <a href="../../../../../org/apache/juneau/http/annotation/FormData.html#name--"><code>name()</code></a>.</div>
@@ -265,13 +271,34 @@
 <!--   -->
 </a>
 <h3>Element Detail</h3>
-<a name="name--">
+<a name="def--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>def</h4>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormData.html#line.130">def</a></pre>
+<div class="block">Default value for this parameter.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The annotation value.</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>""</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="name--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>name</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormData.html#line.189">name</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormData.html#line.196">name</a></pre>
 <div class="block">FORM parameter name.
 
  <p>
@@ -351,7 +378,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>on</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormData.html#line.200">on</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormData.html#line.207">on</a></pre>
 <div class="block">Dynamically apply this annotation to the specified classes.
 
  <ul class='seealso'>
@@ -376,7 +403,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>onClass</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormData.html#line.214">onClass</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormData.html#line.221">onClass</a></pre>
 <div class="block">Dynamically apply this annotation to the specified classes.
 
  <p>
@@ -404,7 +431,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>parser</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormData.html#line.224">parser</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormData.html#line.231">parser</a></pre>
 <div class="block">Specifies the <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart"><code>HttpPartParser</code></a> class used for parsing strings to values.
 
  <p>
@@ -428,7 +455,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>schema</h4>
-<pre>public abstract&nbsp;<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormData.html#line.249">schema</a></pre>
+<pre>public abstract&nbsp;<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormData.html#line.256">schema</a></pre>
 <div class="block"><mk>schema</mk> field of the <a class='doclink' href='https://swagger.io/specification/v2#parameterObject'>Swagger Parameter Object</a>.
 
  <p>
@@ -467,7 +494,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>serializer</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormData.html#line.259">serializer</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormData.html#line.266">serializer</a></pre>
 <div class="block">Specifies the <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart"><code>HttpPartSerializer</code></a> class used for serializing values to strings.
 
  <p>
@@ -491,7 +518,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>value</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormData.html#line.278">value</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormData.html#line.285">value</a></pre>
 <div class="block">A synonym for <a href="../../../../../org/apache/juneau/http/annotation/FormData.html#name--"><code>name()</code></a>.
 
  <p>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/FormDataAnnotation.Applier.html b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/FormDataAnnotation.Applier.html
index c94d7bb..3cd6c5c 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/FormDataAnnotation.Applier.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/FormDataAnnotation.Applier.html
@@ -117,7 +117,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.html#line.277">FormDataAnnotation.Applier</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.html#line.306">FormDataAnnotation.Applier</a>
 extends <a href="../../../../../org/apache/juneau/AnnotationApplier.html" title="class in org.apache.juneau">AnnotationApplier</a>&lt;<a href="../../../../../org/apache/juneau/http/annotation/FormData.html" title="annotation in org.apache.juneau.http.annotation">FormData</a>,<a href="../../../../../org/apache/juneau/BeanContext.Builder.html" title="class in org.apache.juneau">BeanContext.Builder</a>&gt;</pre>
 <div class="block">Applies targeted <a href="../../../../../org/apache/juneau/http/annotation/FormData.html" title="annotation in org.apache.juneau.http.annotation"><code>FormData</code></a> annotations to a <a href="../../../../../org/apache/juneau/BeanContext.Builder.html" title="class in org.apache.juneau"><code>BeanContext.Builder</code></a>.</div>
 </li>
@@ -214,7 +214,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Applier</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Applier.html#line.284">Applier</a>(<a href="../../../../../org/apache/juneau/svl/VarResolverSession.html" title="class in org.apache.juneau.svl">VarResolverSession</a>&nbsp;vr)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Applier.html#line.313">Applier</a>(<a href="../../../../../org/apache/juneau/svl/VarResolverSession.html" title="class in org.apache.juneau.svl">VarResolverSession</a>&nbsp;vr)</pre>
 <div class="block">Constructor.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -236,7 +236,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>apply</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Applier.html#line.289">apply</a>(<a href="../../../../../org/apache/juneau/reflect/AnnotationInfo.html" title="class in org.apache.juneau.reflect">AnnotationInfo</a>&lt;<a href="../../../../../org/apache/juneau/http/annotation/FormData.html" title="annotation in org.apache.juneau.http.annotation">FormData</a>&gt;&nbsp;ai,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Applier.html#line.318">apply</a>(<a href="../../../../../org/apache/juneau/reflect/AnnotationInfo.html" title="class in org.apache.juneau.reflect">AnnotationInfo</a>&lt;<a href="../../../../../org/apache/juneau/http/annotation/FormData.html" title="annotation in org.apache.juneau.http.annotation">FormData</a>&gt;&nbsp;ai,
                   <a href="../../../../../org/apache/juneau/BeanContext.Builder.html" title="class in org.apache.juneau">BeanContext.Builder</a>&nbsp;b)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/AnnotationApplier.html#apply-org.apache.juneau.reflect.AnnotationInfo-B-">AnnotationApplier</a></code></span></div>
 <div class="block">Apply the specified annotation to the specified property store builder.</div>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/FormDataAnnotation.Array.html b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/FormDataAnnotation.Array.html
index 1719b45..d0d3877 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/FormDataAnnotation.Array.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/FormDataAnnotation.Array.html
@@ -96,7 +96,7 @@
  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>={<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#TYPE" title="class or interface in java.lang.annotation">TYPE</a>})
  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Inherited.html?is-external=true" title="class or interface in java.lang.annotation">@Inherited</a>
-public static @interface <a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.html#line.308">FormDataAnnotation.Array</a></pre>
+public static @interface <a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.html#line.337">FormDataAnnotation.Array</a></pre>
 <div class="block">A collection of <a href="../../../../../org/apache/juneau/http/annotation/FormData.html" title="annotation in org.apache.juneau.http.annotation"><code>@FormData annotations</code></a>.</div>
 </li>
 </ul>
@@ -143,7 +143,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>value</h4>
-<pre>public abstract&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormData.html" title="annotation in org.apache.juneau.http.annotation">FormData</a>[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Array.html#line.315">value</a></pre>
+<pre>public abstract&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormData.html" title="annotation in org.apache.juneau.http.annotation">FormData</a>[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Array.html#line.344">value</a></pre>
 <div class="block">The child annotations.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html
index d65eea7..53aff21 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -132,7 +132,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.html#line.110">FormDataAnnotation.Builder</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.html#line.122">FormDataAnnotation.Builder</a>
 extends <a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationTMFBuilder.html" title="class in org.apache.juneau.annotation">TargetedAnnotationTMFBuilder</a></pre>
 <div class="block">Builder class.
 
@@ -186,59 +186,65 @@
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#def-java.lang.String-">def</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</code>
+<div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/FormData.html#def--"><code>FormData.def()</code></a> property on this annotation.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#name-java.lang.String-">name</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/FormData.html#name--"><code>FormData.name()</code></a> property on this annotation.</div>
 </td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#on-java.lang.Class...-">on</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</code>
 <div class="block">Appends the classes that this annotation applies to.</div>
 </td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#on-java.lang.reflect.Field...-">on</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>...&nbsp;value)</code>
 <div class="block">Appends the fields that this annotation applies to.</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#on-java.lang.reflect.Method...-">on</a></span>(<a href="https://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>...&nbsp;value)</code>
 <div class="block">Appends the methods that this annotation applies to.</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#on-java.lang.String...-">on</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;values)</code>
 <div class="block">The targets this annotation applies to.</div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#onClass-java.lang.Class...-">onClass</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</code>
 <div class="block">Appends the classes that this annotation applies to.</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#parser-java.lang.Class-">parser</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;&nbsp;value)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/FormData.html#parser--"><code>FormData.parser()</code></a> property on this annotation.</div>
 </td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#schema-org.apache.juneau.annotation.Schema-">schema</a></span>(<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a>&nbsp;value)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/FormData.html#schema--"><code>FormData.schema()</code></a> property on this annotation.</div>
 </td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#serializer-java.lang.Class-">serializer</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;&nbsp;value)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/FormData.html#serializer--"><code>FormData.serializer()</code></a> property on this annotation.</div>
 </td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#value-java.lang.String-">value</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/FormData.html#value--"><code>FormData.value()</code></a> property on this annotation.</div>
@@ -272,7 +278,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Builder</h4>
-<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.120">Builder</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.132">Builder</a>()</pre>
 <div class="block">Constructor.</div>
 </li>
 </ul>
@@ -290,7 +296,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>build</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormData.html" title="annotation in org.apache.juneau.http.annotation">FormData</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.129">build</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormData.html" title="annotation in org.apache.juneau.http.annotation">FormData</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.141">build</a>()</pre>
 <div class="block">Instantiates a new <a href="../../../../../org/apache/juneau/http/annotation/FormData.html" title="annotation in org.apache.juneau.http.annotation"><code>@FormData</code></a> object initialized with this builder.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -298,13 +304,29 @@
 </dl>
 </li>
 </ul>
+<a name="def-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>def</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.151">def</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/FormData.html#def--"><code>FormData.def()</code></a> property on this annotation.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>value</code> - The new value for this property.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>This object.</dd>
+</dl>
+</li>
+</ul>
 <a name="name-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>name</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.139">name</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.162">name</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/FormData.html#name--"><code>FormData.name()</code></a> property on this annotation.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -320,7 +342,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>parser</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.150">parser</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.173">parser</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;&nbsp;value)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/FormData.html#parser--"><code>FormData.parser()</code></a> property on this annotation.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -336,7 +358,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>schema</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.161">schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.184">schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a>&nbsp;value)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/FormData.html#schema--"><code>FormData.schema()</code></a> property on this annotation.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -352,7 +374,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>serializer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.172">serializer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.195">serializer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;&nbsp;value)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/FormData.html#serializer--"><code>FormData.serializer()</code></a> property on this annotation.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -368,7 +390,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>value</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.183">value</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.206">value</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/FormData.html#value--"><code>FormData.value()</code></a> property on this annotation.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -384,7 +406,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>on</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.191">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;values)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.214">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;values)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationBuilder.html#on-java.lang.String...-">TargetedAnnotationBuilder</a></code></span></div>
 <div class="block">The targets this annotation applies to.</div>
 <dl>
@@ -403,7 +425,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>on</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.197">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.220">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationTBuilder.html#on-java.lang.Class...-">TargetedAnnotationTBuilder</a></code></span></div>
 <div class="block">Appends the classes that this annotation applies to.</div>
 <dl>
@@ -422,7 +444,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>onClass</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.203">onClass</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.226">onClass</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationTBuilder.html#onClass-java.lang.Class...-">TargetedAnnotationTBuilder</a></code></span></div>
 <div class="block">Appends the classes that this annotation applies to.</div>
 <dl>
@@ -441,7 +463,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>on</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.209">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>...&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.232">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>...&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationTMFBuilder.html#on-java.lang.reflect.Field...-">TargetedAnnotationTMFBuilder</a></code></span></div>
 <div class="block">Appends the fields that this annotation applies to.</div>
 <dl>
@@ -460,7 +482,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>on</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.215">on</a>(<a href="https://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>...&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.238">on</a>(<a href="https://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>...&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationTMFBuilder.html#on-java.lang.reflect.Method...-">TargetedAnnotationTMFBuilder</a></code></span></div>
 <div class="block">Appends the methods that this annotation applies to.</div>
 <dl>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/FormDataAnnotation.html b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/FormDataAnnotation.html
index 43d68b3..4af2d22 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/FormDataAnnotation.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/FormDataAnnotation.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9};
+var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -230,6 +230,12 @@
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">Value</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.html#findDef-org.apache.juneau.reflect.ParamInfo-">findDef</a></span>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;pi)</code>
+<div class="block">Finds the default value from the specified list of annotations.</div>
+</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">Value</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.html#findName-org.apache.juneau.reflect.ParamInfo-">findName</a></span>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;pi)</code>
 <div class="block">Finds the name from the specified lists of annotations.</div>
 </td>
@@ -356,7 +362,7 @@
 <a name="findName-org.apache.juneau.reflect.ParamInfo-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>findName</h4>
 <pre>public static&nbsp;<a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">Value</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.html#line.92">findName</a>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;pi)</pre>
@@ -372,6 +378,22 @@
 </dl>
 </li>
 </ul>
+<a name="findDef-org.apache.juneau.reflect.ParamInfo-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>findDef</h4>
+<pre>public static&nbsp;<a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">Value</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.html#line.105">findDef</a>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;pi)</pre>
+<div class="block">Finds the default value from the specified list of annotations.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>pi</code> - The parameter.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The last matching default value, or <a href="../../../../../org/apache/juneau/Value.html#empty--"><code>Value.empty()</code></a> if not found.</dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/Header.html b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/Header.html
index f3b22bb..300e10f 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/Header.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/Header.html
@@ -176,41 +176,47 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Header.html#def--">def</a></span></code>
+<div class="block">Default value for this parameter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Header.html#name--">name</a></span></code>
 <div class="block">HTTP header name.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Header.html#on--">on</a></span></code>
 <div class="block">Dynamically apply this annotation to the specified classes.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Header.html#onClass--">onClass</a></span></code>
 <div class="block">Dynamically apply this annotation to the specified classes.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Header.html#parser--">parser</a></span></code>
 <div class="block">Specifies the <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart"><code>HttpPartParser</code></a> class used for parsing strings to values.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Header.html#schema--">schema</a></span></code>
 <div class="block"><mk>schema</mk> field of the <a class='doclink' href='https://swagger.io/specification/v2#parameterObject'>Swagger Parameter Object</a>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Header.html#serializer--">serializer</a></span></code>
 <div class="block">Specifies the <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart"><code>HttpPartSerializer</code></a> class used for serializing values to strings.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Header.html#value--">value</a></span></code>
 <div class="block">A synonym for <a href="../../../../../org/apache/juneau/http/annotation/Header.html#name--"><code>name()</code></a>.</div>
@@ -231,13 +237,34 @@
 <!--   -->
 </a>
 <h3>Element Detail</h3>
-<a name="name--">
+<a name="def--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>def</h4>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Header.html#line.96">def</a></pre>
+<div class="block">Default value for this parameter.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The annotation value.</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>""</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="name--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>name</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Header.html#line.150">name</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Header.html#line.157">name</a></pre>
 <div class="block">HTTP header name.
  <p>
  A blank value (the default) indicates to reuse the bean property name when used on a request bean property.
@@ -312,7 +339,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>on</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Header.html#line.161">on</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Header.html#line.168">on</a></pre>
 <div class="block">Dynamically apply this annotation to the specified classes.
 
  <ul class='seealso'>
@@ -337,7 +364,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>onClass</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Header.html#line.175">onClass</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Header.html#line.182">onClass</a></pre>
 <div class="block">Dynamically apply this annotation to the specified classes.
 
  <p>
@@ -365,7 +392,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>parser</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Header.html#line.185">parser</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Header.html#line.192">parser</a></pre>
 <div class="block">Specifies the <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart"><code>HttpPartParser</code></a> class used for parsing strings to values.
 
  <p>
@@ -389,7 +416,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>schema</h4>
-<pre>public abstract&nbsp;<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Header.html#line.210">schema</a></pre>
+<pre>public abstract&nbsp;<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Header.html#line.217">schema</a></pre>
 <div class="block"><mk>schema</mk> field of the <a class='doclink' href='https://swagger.io/specification/v2#parameterObject'>Swagger Parameter Object</a>.
 
  <p>
@@ -428,7 +455,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>serializer</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Header.html#line.220">serializer</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Header.html#line.227">serializer</a></pre>
 <div class="block">Specifies the <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart"><code>HttpPartSerializer</code></a> class used for serializing values to strings.
 
  <p>
@@ -452,7 +479,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>value</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Header.html#line.239">value</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Header.html#line.246">value</a></pre>
 <div class="block">A synonym for <a href="../../../../../org/apache/juneau/http/annotation/Header.html#name--"><code>name()</code></a>.
 
  <p>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/HeaderAnnotation.Applier.html b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/HeaderAnnotation.Applier.html
index c5d6181..03a0661 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/HeaderAnnotation.Applier.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/HeaderAnnotation.Applier.html
@@ -117,7 +117,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.html#line.278">HeaderAnnotation.Applier</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.html#line.307">HeaderAnnotation.Applier</a>
 extends <a href="../../../../../org/apache/juneau/AnnotationApplier.html" title="class in org.apache.juneau">AnnotationApplier</a>&lt;<a href="../../../../../org/apache/juneau/http/annotation/Header.html" title="annotation in org.apache.juneau.http.annotation">Header</a>,<a href="../../../../../org/apache/juneau/BeanContext.Builder.html" title="class in org.apache.juneau">BeanContext.Builder</a>&gt;</pre>
 <div class="block">Applies targeted <a href="../../../../../org/apache/juneau/http/annotation/Header.html" title="annotation in org.apache.juneau.http.annotation"><code>Header</code></a> annotations to a <a href="../../../../../org/apache/juneau/BeanContext.Builder.html" title="class in org.apache.juneau"><code>BeanContext.Builder</code></a>.</div>
 </li>
@@ -214,7 +214,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Applier</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Applier.html#line.285">Applier</a>(<a href="../../../../../org/apache/juneau/svl/VarResolverSession.html" title="class in org.apache.juneau.svl">VarResolverSession</a>&nbsp;vr)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Applier.html#line.314">Applier</a>(<a href="../../../../../org/apache/juneau/svl/VarResolverSession.html" title="class in org.apache.juneau.svl">VarResolverSession</a>&nbsp;vr)</pre>
 <div class="block">Constructor.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -236,7 +236,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>apply</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Applier.html#line.290">apply</a>(<a href="../../../../../org/apache/juneau/reflect/AnnotationInfo.html" title="class in org.apache.juneau.reflect">AnnotationInfo</a>&lt;<a href="../../../../../org/apache/juneau/http/annotation/Header.html" title="annotation in org.apache.juneau.http.annotation">Header</a>&gt;&nbsp;ai,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Applier.html#line.319">apply</a>(<a href="../../../../../org/apache/juneau/reflect/AnnotationInfo.html" title="class in org.apache.juneau.reflect">AnnotationInfo</a>&lt;<a href="../../../../../org/apache/juneau/http/annotation/Header.html" title="annotation in org.apache.juneau.http.annotation">Header</a>&gt;&nbsp;ai,
                   <a href="../../../../../org/apache/juneau/BeanContext.Builder.html" title="class in org.apache.juneau">BeanContext.Builder</a>&nbsp;b)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/AnnotationApplier.html#apply-org.apache.juneau.reflect.AnnotationInfo-B-">AnnotationApplier</a></code></span></div>
 <div class="block">Apply the specified annotation to the specified property store builder.</div>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/HeaderAnnotation.Array.html b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/HeaderAnnotation.Array.html
index 6a35fa0..897cdc2 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/HeaderAnnotation.Array.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/HeaderAnnotation.Array.html
@@ -96,7 +96,7 @@
  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>={<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#TYPE" title="class or interface in java.lang.annotation">TYPE</a>})
  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Inherited.html?is-external=true" title="class or interface in java.lang.annotation">@Inherited</a>
-public static @interface <a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.html#line.309">HeaderAnnotation.Array</a></pre>
+public static @interface <a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.html#line.338">HeaderAnnotation.Array</a></pre>
 <div class="block">A collection of <a href="../../../../../org/apache/juneau/http/annotation/Header.html" title="annotation in org.apache.juneau.http.annotation"><code>@Header annotations</code></a>.</div>
 </li>
 </ul>
@@ -143,7 +143,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>value</h4>
-<pre>public abstract&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/Header.html" title="annotation in org.apache.juneau.http.annotation">Header</a>[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Array.html#line.316">value</a></pre>
+<pre>public abstract&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/Header.html" title="annotation in org.apache.juneau.http.annotation">Header</a>[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Array.html#line.345">value</a></pre>
 <div class="block">The child annotations.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html
index 5e37489..e7f6d69 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -132,7 +132,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.html#line.111">HeaderAnnotation.Builder</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.html#line.123">HeaderAnnotation.Builder</a>
 extends <a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationTMFBuilder.html" title="class in org.apache.juneau.annotation">TargetedAnnotationTMFBuilder</a></pre>
 <div class="block">Builder class.
 
@@ -186,59 +186,65 @@
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#def-java.lang.String-">def</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</code>
+<div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Header.html#def--"><code>Header.def()</code></a> property on this annotation.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#name-java.lang.String-">name</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Header.html#name--"><code>Header.name()</code></a> property on this annotation.</div>
 </td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#on-java.lang.Class...-">on</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</code>
 <div class="block">Appends the classes that this annotation applies to.</div>
 </td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#on-java.lang.reflect.Field...-">on</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>...&nbsp;value)</code>
 <div class="block">Appends the fields that this annotation applies to.</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#on-java.lang.reflect.Method...-">on</a></span>(<a href="https://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>...&nbsp;value)</code>
 <div class="block">Appends the methods that this annotation applies to.</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#on-java.lang.String...-">on</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;values)</code>
 <div class="block">The targets this annotation applies to.</div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#onClass-java.lang.Class...-">onClass</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</code>
 <div class="block">Appends the classes that this annotation applies to.</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#parser-java.lang.Class-">parser</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;&nbsp;value)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Header.html#parser--"><code>Header.parser()</code></a> property on this annotation.</div>
 </td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#schema-org.apache.juneau.annotation.Schema-">schema</a></span>(<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a>&nbsp;value)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Header.html#schema--"><code>Header.schema()</code></a> property on this annotation.</div>
 </td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#serializer-java.lang.Class-">serializer</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;&nbsp;value)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Header.html#serializer--"><code>Header.serializer()</code></a> property on this annotation.</div>
 </td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#value-java.lang.String-">value</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Header.html#value--"><code>Header.value()</code></a> property on this annotation.</div>
@@ -272,7 +278,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Builder</h4>
-<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.121">Builder</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.133">Builder</a>()</pre>
 <div class="block">Constructor.</div>
 </li>
 </ul>
@@ -290,7 +296,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>build</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/Header.html" title="annotation in org.apache.juneau.http.annotation">Header</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.130">build</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/Header.html" title="annotation in org.apache.juneau.http.annotation">Header</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.142">build</a>()</pre>
 <div class="block">Instantiates a new <a href="../../../../../org/apache/juneau/http/annotation/Header.html" title="annotation in org.apache.juneau.http.annotation"><code>@Header</code></a> object initialized with this builder.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -298,13 +304,29 @@
 </dl>
 </li>
 </ul>
+<a name="def-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>def</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.152">def</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Header.html#def--"><code>Header.def()</code></a> property on this annotation.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>value</code> - The new value for this property.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>This object.</dd>
+</dl>
+</li>
+</ul>
 <a name="name-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>name</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.140">name</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.163">name</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Header.html#name--"><code>Header.name()</code></a> property on this annotation.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -320,7 +342,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>parser</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.151">parser</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.174">parser</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;&nbsp;value)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Header.html#parser--"><code>Header.parser()</code></a> property on this annotation.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -336,7 +358,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>schema</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.162">schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.185">schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a>&nbsp;value)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Header.html#schema--"><code>Header.schema()</code></a> property on this annotation.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -352,7 +374,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>serializer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.173">serializer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.196">serializer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;&nbsp;value)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Header.html#serializer--"><code>Header.serializer()</code></a> property on this annotation.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -368,7 +390,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>value</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.184">value</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.207">value</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Header.html#value--"><code>Header.value()</code></a> property on this annotation.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -384,7 +406,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>on</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.192">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;values)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.215">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;values)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationBuilder.html#on-java.lang.String...-">TargetedAnnotationBuilder</a></code></span></div>
 <div class="block">The targets this annotation applies to.</div>
 <dl>
@@ -403,7 +425,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>on</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.198">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.221">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationTBuilder.html#on-java.lang.Class...-">TargetedAnnotationTBuilder</a></code></span></div>
 <div class="block">Appends the classes that this annotation applies to.</div>
 <dl>
@@ -422,7 +444,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>onClass</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.204">onClass</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.227">onClass</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationTBuilder.html#onClass-java.lang.Class...-">TargetedAnnotationTBuilder</a></code></span></div>
 <div class="block">Appends the classes that this annotation applies to.</div>
 <dl>
@@ -441,7 +463,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>on</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.210">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>...&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.233">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>...&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationTMFBuilder.html#on-java.lang.reflect.Field...-">TargetedAnnotationTMFBuilder</a></code></span></div>
 <div class="block">Appends the fields that this annotation applies to.</div>
 <dl>
@@ -460,7 +482,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>on</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.216">on</a>(<a href="https://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>...&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.239">on</a>(<a href="https://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>...&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationTMFBuilder.html#on-java.lang.reflect.Method...-">TargetedAnnotationTMFBuilder</a></code></span></div>
 <div class="block">Appends the methods that this annotation applies to.</div>
 <dl>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/HeaderAnnotation.html b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/HeaderAnnotation.html
index b10c5bc..e323aaa 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/HeaderAnnotation.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/HeaderAnnotation.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9};
+var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -230,6 +230,12 @@
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">Value</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.html#findDef-org.apache.juneau.reflect.ParamInfo-">findDef</a></span>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;pi)</code>
+<div class="block">Finds the default value from the specified list of annotations.</div>
+</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">Value</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.html#findName-org.apache.juneau.reflect.ParamInfo-">findName</a></span>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;pi)</code>
 <div class="block">Finds the name from the specified lists of annotations.</div>
 </td>
@@ -356,7 +362,7 @@
 <a name="findName-org.apache.juneau.reflect.ParamInfo-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>findName</h4>
 <pre>public static&nbsp;<a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">Value</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.html#line.93">findName</a>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;pi)</pre>
@@ -372,6 +378,22 @@
 </dl>
 </li>
 </ul>
+<a name="findDef-org.apache.juneau.reflect.ParamInfo-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>findDef</h4>
+<pre>public static&nbsp;<a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">Value</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.html#line.106">findDef</a>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;pi)</pre>
+<div class="block">Finds the default value from the specified list of annotations.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>pi</code> - The parameter.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The last matching default value, or <a href="../../../../../org/apache/juneau/Value.html#empty--"><code>Value.empty()</code></a> if not found.</dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/Path.html b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/Path.html
index 0d4966e..cb823f7 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/Path.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/Path.html
@@ -173,41 +173,47 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Path.html#def--">def</a></span></code>
+<div class="block">Default value for this parameter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Path.html#name--">name</a></span></code>
 <div class="block">URL path variable name.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Path.html#on--">on</a></span></code>
 <div class="block">Dynamically apply this annotation to the specified classes.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Path.html#onClass--">onClass</a></span></code>
 <div class="block">Dynamically apply this annotation to the specified classes.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Path.html#parser--">parser</a></span></code>
 <div class="block">Specifies the <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart"><code>HttpPartParser</code></a> class used for parsing strings to values.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Path.html#schema--">schema</a></span></code>
 <div class="block"><mk>schema</mk> field of the <a class='doclink' href='https://swagger.io/specification/v2#parameterObject'>Swagger Parameter Object</a>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Path.html#serializer--">serializer</a></span></code>
 <div class="block">Specifies the <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart"><code>HttpPartSerializer</code></a> class used for serializing values to strings.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Path.html#value--">value</a></span></code>
 <div class="block">A synonym for <a href="../../../../../org/apache/juneau/http/annotation/Path.html#name--"><code>name()</code></a>.</div>
@@ -228,13 +234,34 @@
 <!--   -->
 </a>
 <h3>Element Detail</h3>
-<a name="name--">
+<a name="def--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>def</h4>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Path.html#line.93">def</a></pre>
+<div class="block">Default value for this parameter.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The annotation value.</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>""</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="name--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>name</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Path.html#line.155">name</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Path.html#line.162">name</a></pre>
 <div class="block">URL path variable name.
 
  <p>
@@ -317,7 +344,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>on</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Path.html#line.166">on</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Path.html#line.173">on</a></pre>
 <div class="block">Dynamically apply this annotation to the specified classes.
 
  <ul class='seealso'>
@@ -342,7 +369,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>onClass</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Path.html#line.180">onClass</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Path.html#line.187">onClass</a></pre>
 <div class="block">Dynamically apply this annotation to the specified classes.
 
  <p>
@@ -370,7 +397,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>parser</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Path.html#line.190">parser</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Path.html#line.197">parser</a></pre>
 <div class="block">Specifies the <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart"><code>HttpPartParser</code></a> class used for parsing strings to values.
 
  <p>
@@ -394,7 +421,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>schema</h4>
-<pre>public abstract&nbsp;<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Path.html#line.215">schema</a></pre>
+<pre>public abstract&nbsp;<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Path.html#line.222">schema</a></pre>
 <div class="block"><mk>schema</mk> field of the <a class='doclink' href='https://swagger.io/specification/v2#parameterObject'>Swagger Parameter Object</a>.
 
  <p>
@@ -433,7 +460,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>serializer</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Path.html#line.225">serializer</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Path.html#line.232">serializer</a></pre>
 <div class="block">Specifies the <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart"><code>HttpPartSerializer</code></a> class used for serializing values to strings.
 
  <p>
@@ -457,7 +484,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>value</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Path.html#line.246">value</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Path.html#line.253">value</a></pre>
 <div class="block">A synonym for <a href="../../../../../org/apache/juneau/http/annotation/Path.html#name--"><code>name()</code></a>.
 
  <p>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/PathAnnotation.Applier.html b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/PathAnnotation.Applier.html
index 6e92dd0..28f3d35 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/PathAnnotation.Applier.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/PathAnnotation.Applier.html
@@ -117,7 +117,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.html#line.277">PathAnnotation.Applier</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.html#line.306">PathAnnotation.Applier</a>
 extends <a href="../../../../../org/apache/juneau/AnnotationApplier.html" title="class in org.apache.juneau">AnnotationApplier</a>&lt;<a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation">Path</a>,<a href="../../../../../org/apache/juneau/BeanContext.Builder.html" title="class in org.apache.juneau">BeanContext.Builder</a>&gt;</pre>
 <div class="block">Applies targeted <a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation"><code>Path</code></a> annotations to a <a href="../../../../../org/apache/juneau/BeanContext.Builder.html" title="class in org.apache.juneau"><code>BeanContext.Builder</code></a>.</div>
 </li>
@@ -214,7 +214,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Applier</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Applier.html#line.284">Applier</a>(<a href="../../../../../org/apache/juneau/svl/VarResolverSession.html" title="class in org.apache.juneau.svl">VarResolverSession</a>&nbsp;vr)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Applier.html#line.313">Applier</a>(<a href="../../../../../org/apache/juneau/svl/VarResolverSession.html" title="class in org.apache.juneau.svl">VarResolverSession</a>&nbsp;vr)</pre>
 <div class="block">Constructor.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -236,7 +236,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>apply</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Applier.html#line.289">apply</a>(<a href="../../../../../org/apache/juneau/reflect/AnnotationInfo.html" title="class in org.apache.juneau.reflect">AnnotationInfo</a>&lt;<a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation">Path</a>&gt;&nbsp;ai,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Applier.html#line.318">apply</a>(<a href="../../../../../org/apache/juneau/reflect/AnnotationInfo.html" title="class in org.apache.juneau.reflect">AnnotationInfo</a>&lt;<a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation">Path</a>&gt;&nbsp;ai,
                   <a href="../../../../../org/apache/juneau/BeanContext.Builder.html" title="class in org.apache.juneau">BeanContext.Builder</a>&nbsp;b)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/AnnotationApplier.html#apply-org.apache.juneau.reflect.AnnotationInfo-B-">AnnotationApplier</a></code></span></div>
 <div class="block">Apply the specified annotation to the specified property store builder.</div>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/PathAnnotation.Array.html b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/PathAnnotation.Array.html
index cab0789..06008c5 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/PathAnnotation.Array.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/PathAnnotation.Array.html
@@ -96,7 +96,7 @@
  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>={<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#TYPE" title="class or interface in java.lang.annotation">TYPE</a>})
  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Inherited.html?is-external=true" title="class or interface in java.lang.annotation">@Inherited</a>
-public static @interface <a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.html#line.308">PathAnnotation.Array</a></pre>
+public static @interface <a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.html#line.337">PathAnnotation.Array</a></pre>
 <div class="block">A collection of <a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation"><code>@Path annotations</code></a>.</div>
 </li>
 </ul>
@@ -143,7 +143,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>value</h4>
-<pre>public abstract&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation">Path</a>[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Array.html#line.315">value</a></pre>
+<pre>public abstract&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation">Path</a>[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Array.html#line.344">value</a></pre>
 <div class="block">The child annotations.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/PathAnnotation.Builder.html b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/PathAnnotation.Builder.html
index 8c187fe..73372e6 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/PathAnnotation.Builder.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/PathAnnotation.Builder.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -132,7 +132,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.html#line.110">PathAnnotation.Builder</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.html#line.122">PathAnnotation.Builder</a>
 extends <a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationTMFBuilder.html" title="class in org.apache.juneau.annotation">TargetedAnnotationTMFBuilder</a></pre>
 <div class="block">Builder class.
 
@@ -186,59 +186,65 @@
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html#name-java.lang.String-">name</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html#def-java.lang.String-">def</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Path.html#name--"><code>Path.name()</code></a> property on this annotation.</div>
 </td>
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html#name-java.lang.String-">name</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</code>
+<div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Path.html#name--"><code>Path.name()</code></a> property on this annotation.</div>
+</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html#on-java.lang.Class...-">on</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</code>
 <div class="block">Appends the classes that this annotation applies to.</div>
 </td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html#on-java.lang.reflect.Field...-">on</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>...&nbsp;value)</code>
 <div class="block">Appends the fields that this annotation applies to.</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html#on-java.lang.reflect.Method...-">on</a></span>(<a href="https://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>...&nbsp;value)</code>
 <div class="block">Appends the methods that this annotation applies to.</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html#on-java.lang.String...-">on</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;values)</code>
 <div class="block">The targets this annotation applies to.</div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html#onClass-java.lang.Class...-">onClass</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</code>
 <div class="block">Appends the classes that this annotation applies to.</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html#parser-java.lang.Class-">parser</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;&nbsp;value)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Path.html#parser--"><code>Path.parser()</code></a> property on this annotation.</div>
 </td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html#schema-org.apache.juneau.annotation.Schema-">schema</a></span>(<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a>&nbsp;value)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Path.html#schema--"><code>Path.schema()</code></a> property on this annotation.</div>
 </td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html#serializer-java.lang.Class-">serializer</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;&nbsp;value)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Path.html#serializer--"><code>Path.serializer()</code></a> property on this annotation.</div>
 </td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html#value-java.lang.String-">value</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Path.html#value--"><code>Path.value()</code></a> property on this annotation.</div>
@@ -272,7 +278,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Builder</h4>
-<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.120">Builder</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.132">Builder</a>()</pre>
 <div class="block">Constructor.</div>
 </li>
 </ul>
@@ -290,7 +296,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>build</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation">Path</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.129">build</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation">Path</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.141">build</a>()</pre>
 <div class="block">Instantiates a new <a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation"><code>@Path</code></a> object initialized with this builder.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -304,7 +310,23 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>name</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.139">name</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.151">name</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Path.html#name--"><code>Path.name()</code></a> property on this annotation.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>value</code> - The new value for this property.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>This object.</dd>
+</dl>
+</li>
+</ul>
+<a name="def-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>def</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.162">def</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Path.html#name--"><code>Path.name()</code></a> property on this annotation.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -320,7 +342,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>parser</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.150">parser</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.173">parser</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;&nbsp;value)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Path.html#parser--"><code>Path.parser()</code></a> property on this annotation.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -336,7 +358,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>schema</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.161">schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.184">schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a>&nbsp;value)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Path.html#schema--"><code>Path.schema()</code></a> property on this annotation.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -352,7 +374,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>serializer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.172">serializer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.195">serializer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;&nbsp;value)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Path.html#serializer--"><code>Path.serializer()</code></a> property on this annotation.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -368,7 +390,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>value</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.183">value</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.206">value</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Path.html#value--"><code>Path.value()</code></a> property on this annotation.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -384,7 +406,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>on</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.191">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;values)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.214">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;values)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationBuilder.html#on-java.lang.String...-">TargetedAnnotationBuilder</a></code></span></div>
 <div class="block">The targets this annotation applies to.</div>
 <dl>
@@ -403,7 +425,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>on</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.197">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.220">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationTBuilder.html#on-java.lang.Class...-">TargetedAnnotationTBuilder</a></code></span></div>
 <div class="block">Appends the classes that this annotation applies to.</div>
 <dl>
@@ -422,7 +444,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>onClass</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.203">onClass</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.226">onClass</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationTBuilder.html#onClass-java.lang.Class...-">TargetedAnnotationTBuilder</a></code></span></div>
 <div class="block">Appends the classes that this annotation applies to.</div>
 <dl>
@@ -441,7 +463,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>on</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.209">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>...&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.232">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>...&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationTMFBuilder.html#on-java.lang.reflect.Field...-">TargetedAnnotationTMFBuilder</a></code></span></div>
 <div class="block">Appends the fields that this annotation applies to.</div>
 <dl>
@@ -460,7 +482,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>on</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.215">on</a>(<a href="https://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>...&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.238">on</a>(<a href="https://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>...&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationTMFBuilder.html#on-java.lang.reflect.Method...-">TargetedAnnotationTMFBuilder</a></code></span></div>
 <div class="block">Appends the methods that this annotation applies to.</div>
 <dl>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/PathAnnotation.html b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/PathAnnotation.html
index b42c59e..cc3ef6d 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/PathAnnotation.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/PathAnnotation.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9};
+var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -230,6 +230,12 @@
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">Value</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.html#findDef-org.apache.juneau.reflect.ParamInfo-">findDef</a></span>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;pi)</code>
+<div class="block">Finds the default value from the specified list of annotations.</div>
+</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">Value</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.html#findName-org.apache.juneau.reflect.ParamInfo-">findName</a></span>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;pi)</code>
 <div class="block">Finds the name from the specified lists of annotations.</div>
 </td>
@@ -356,7 +362,7 @@
 <a name="findName-org.apache.juneau.reflect.ParamInfo-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>findName</h4>
 <pre>public static&nbsp;<a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">Value</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.html#line.92">findName</a>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;pi)</pre>
@@ -372,6 +378,22 @@
 </dl>
 </li>
 </ul>
+<a name="findDef-org.apache.juneau.reflect.ParamInfo-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>findDef</h4>
+<pre>public static&nbsp;<a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">Value</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.html#line.105">findDef</a>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;pi)</pre>
+<div class="block">Finds the default value from the specified list of annotations.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>pi</code> - The parameter.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The last matching default value, or <a href="../../../../../org/apache/juneau/Value.html#empty--"><code>Value.empty()</code></a> if not found.</dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/Query.html b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/Query.html
index 1e33786..97807aa 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/Query.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/Query.html
@@ -184,41 +184,47 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Query.html#def--">def</a></span></code>
+<div class="block">Default value for this parameter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Query.html#name--">name</a></span></code>
 <div class="block">URL query parameter name.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Query.html#on--">on</a></span></code>
 <div class="block">Dynamically apply this annotation to the specified classes.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Query.html#onClass--">onClass</a></span></code>
 <div class="block">Dynamically apply this annotation to the specified classes.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Query.html#parser--">parser</a></span></code>
 <div class="block">Specifies the <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart"><code>HttpPartParser</code></a> class used for parsing strings to values.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Query.html#schema--">schema</a></span></code>
 <div class="block"><mk>schema</mk> field of the <a class='doclink' href='https://swagger.io/specification/v2#parameterObject'>Swagger Parameter Object</a>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Query.html#serializer--">serializer</a></span></code>
 <div class="block">Specifies the <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart"><code>HttpPartSerializer</code></a> class used for serializing values to strings.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/Query.html#value--">value</a></span></code>
 <div class="block">A synonym for <a href="../../../../../org/apache/juneau/http/annotation/Query.html#name--"><code>name()</code></a>.</div>
@@ -239,13 +245,34 @@
 <!--   -->
 </a>
 <h3>Element Detail</h3>
-<a name="name--">
+<a name="def--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>def</h4>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Query.html#line.104">def</a></pre>
+<div class="block">Default value for this parameter.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The annotation value.</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>""</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="name--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>name</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Query.html#line.161">name</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Query.html#line.168">name</a></pre>
 <div class="block">URL query parameter name.
 
  Required. The name of the parameter. Parameter names are case sensitive.
@@ -323,7 +350,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>on</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Query.html#line.172">on</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Query.html#line.179">on</a></pre>
 <div class="block">Dynamically apply this annotation to the specified classes.
 
  <ul class='seealso'>
@@ -348,7 +375,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>onClass</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Query.html#line.186">onClass</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Query.html#line.193">onClass</a></pre>
 <div class="block">Dynamically apply this annotation to the specified classes.
 
  <p>
@@ -376,7 +403,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>parser</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Query.html#line.196">parser</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Query.html#line.203">parser</a></pre>
 <div class="block">Specifies the <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart"><code>HttpPartParser</code></a> class used for parsing strings to values.
 
  <p>
@@ -400,7 +427,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>schema</h4>
-<pre>public abstract&nbsp;<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Query.html#line.221">schema</a></pre>
+<pre>public abstract&nbsp;<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Query.html#line.228">schema</a></pre>
 <div class="block"><mk>schema</mk> field of the <a class='doclink' href='https://swagger.io/specification/v2#parameterObject'>Swagger Parameter Object</a>.
 
  <p>
@@ -439,7 +466,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>serializer</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Query.html#line.231">serializer</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Query.html#line.238">serializer</a></pre>
 <div class="block">Specifies the <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart"><code>HttpPartSerializer</code></a> class used for serializing values to strings.
 
  <p>
@@ -463,7 +490,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>value</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Query.html#line.250">value</a></pre>
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/Query.html#line.257">value</a></pre>
 <div class="block">A synonym for <a href="../../../../../org/apache/juneau/http/annotation/Query.html#name--"><code>name()</code></a>.
 
  <p>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/QueryAnnotation.Applier.html b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/QueryAnnotation.Applier.html
index 47830f4..3957cb4 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/QueryAnnotation.Applier.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/QueryAnnotation.Applier.html
@@ -117,7 +117,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.html#line.277">QueryAnnotation.Applier</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.html#line.303">QueryAnnotation.Applier</a>
 extends <a href="../../../../../org/apache/juneau/AnnotationApplier.html" title="class in org.apache.juneau">AnnotationApplier</a>&lt;<a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">Query</a>,<a href="../../../../../org/apache/juneau/BeanContext.Builder.html" title="class in org.apache.juneau">BeanContext.Builder</a>&gt;</pre>
 <div class="block">Applies targeted <a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation"><code>Query</code></a> annotations to a <a href="../../../../../org/apache/juneau/BeanContext.Builder.html" title="class in org.apache.juneau"><code>BeanContext.Builder</code></a>.</div>
 </li>
@@ -214,7 +214,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Applier</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Applier.html#line.284">Applier</a>(<a href="../../../../../org/apache/juneau/svl/VarResolverSession.html" title="class in org.apache.juneau.svl">VarResolverSession</a>&nbsp;vr)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Applier.html#line.310">Applier</a>(<a href="../../../../../org/apache/juneau/svl/VarResolverSession.html" title="class in org.apache.juneau.svl">VarResolverSession</a>&nbsp;vr)</pre>
 <div class="block">Constructor.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -236,7 +236,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>apply</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Applier.html#line.289">apply</a>(<a href="../../../../../org/apache/juneau/reflect/AnnotationInfo.html" title="class in org.apache.juneau.reflect">AnnotationInfo</a>&lt;<a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">Query</a>&gt;&nbsp;ai,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Applier.html#line.315">apply</a>(<a href="../../../../../org/apache/juneau/reflect/AnnotationInfo.html" title="class in org.apache.juneau.reflect">AnnotationInfo</a>&lt;<a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">Query</a>&gt;&nbsp;ai,
                   <a href="../../../../../org/apache/juneau/BeanContext.Builder.html" title="class in org.apache.juneau">BeanContext.Builder</a>&nbsp;b)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/AnnotationApplier.html#apply-org.apache.juneau.reflect.AnnotationInfo-B-">AnnotationApplier</a></code></span></div>
 <div class="block">Apply the specified annotation to the specified property store builder.</div>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/QueryAnnotation.Array.html b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/QueryAnnotation.Array.html
index ad496ad..83faa76 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/QueryAnnotation.Array.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/QueryAnnotation.Array.html
@@ -96,7 +96,7 @@
  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>={<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#TYPE" title="class or interface in java.lang.annotation">TYPE</a>})
  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Inherited.html?is-external=true" title="class or interface in java.lang.annotation">@Inherited</a>
-public static @interface <a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.html#line.308">QueryAnnotation.Array</a></pre>
+public static @interface <a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.html#line.334">QueryAnnotation.Array</a></pre>
 <div class="block">A collection of <a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation"><code>@Query annotations</code></a>.</div>
 </li>
 </ul>
@@ -143,7 +143,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>value</h4>
-<pre>public abstract&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">Query</a>[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Array.html#line.315">value</a></pre>
+<pre>public abstract&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">Query</a>[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Array.html#line.341">value</a></pre>
 <div class="block">The child annotations.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html
index 7a1712f..02a555a 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -132,7 +132,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.html#line.110">QueryAnnotation.Builder</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.html#line.119">QueryAnnotation.Builder</a>
 extends <a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationTMFBuilder.html" title="class in org.apache.juneau.annotation">TargetedAnnotationTMFBuilder</a></pre>
 <div class="block">Builder class.
 
@@ -186,59 +186,65 @@
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#def-java.lang.String-">def</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</code>
+<div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Query.html#def--"><code>Query.def()</code></a> property on this annotation.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#name-java.lang.String-">name</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Query.html#name--"><code>Query.name()</code></a> property on this annotation.</div>
 </td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#on-java.lang.Class...-">on</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</code>
 <div class="block">Appends the classes that this annotation applies to.</div>
 </td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#on-java.lang.reflect.Field...-">on</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>...&nbsp;value)</code>
 <div class="block">Appends the fields that this annotation applies to.</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#on-java.lang.reflect.Method...-">on</a></span>(<a href="https://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>...&nbsp;value)</code>
 <div class="block">Appends the methods that this annotation applies to.</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#on-java.lang.String...-">on</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;values)</code>
 <div class="block">The targets this annotation applies to.</div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#onClass-java.lang.Class...-">onClass</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</code>
 <div class="block">Appends the classes that this annotation applies to.</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#parser-java.lang.Class-">parser</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;&nbsp;value)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Query.html#parser--"><code>Query.parser()</code></a> property on this annotation.</div>
 </td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#schema-org.apache.juneau.annotation.Schema-">schema</a></span>(<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a>&nbsp;value)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Query.html#schema--"><code>Query.schema()</code></a> property on this annotation.</div>
 </td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#serializer-java.lang.Class-">serializer</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;&nbsp;value)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Query.html#serializer--"><code>Query.serializer()</code></a> property on this annotation.</div>
 </td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#value-java.lang.String-">value</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Query.html#value--"><code>Query.value()</code></a> property on this annotation.</div>
@@ -272,7 +278,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Builder</h4>
-<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.120">Builder</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.129">Builder</a>()</pre>
 <div class="block">Constructor.</div>
 </li>
 </ul>
@@ -290,7 +296,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>build</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">Query</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.129">build</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">Query</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.138">build</a>()</pre>
 <div class="block">Instantiates a new <a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation"><code>@Query</code></a> object initialized with this builder.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -298,13 +304,29 @@
 </dl>
 </li>
 </ul>
+<a name="def-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>def</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.148">def</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Query.html#def--"><code>Query.def()</code></a> property on this annotation.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>value</code> - The new value for this property.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>This object.</dd>
+</dl>
+</li>
+</ul>
 <a name="name-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>name</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.139">name</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.159">name</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Query.html#name--"><code>Query.name()</code></a> property on this annotation.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -320,7 +342,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>parser</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.150">parser</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.170">parser</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>&gt;&nbsp;value)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Query.html#parser--"><code>Query.parser()</code></a> property on this annotation.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -336,7 +358,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>schema</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.161">schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.181">schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a>&nbsp;value)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Query.html#schema--"><code>Query.schema()</code></a> property on this annotation.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -352,7 +374,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>serializer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.172">serializer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.192">serializer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>&gt;&nbsp;value)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Query.html#serializer--"><code>Query.serializer()</code></a> property on this annotation.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -368,7 +390,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>value</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.183">value</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.203">value</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/juneau/http/annotation/Query.html#value--"><code>Query.value()</code></a> property on this annotation.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -384,7 +406,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>on</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.191">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;values)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.211">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;values)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationBuilder.html#on-java.lang.String...-">TargetedAnnotationBuilder</a></code></span></div>
 <div class="block">The targets this annotation applies to.</div>
 <dl>
@@ -403,7 +425,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>on</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.197">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.217">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationTBuilder.html#on-java.lang.Class...-">TargetedAnnotationTBuilder</a></code></span></div>
 <div class="block">Appends the classes that this annotation applies to.</div>
 <dl>
@@ -422,7 +444,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>onClass</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.203">onClass</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.223">onClass</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationTBuilder.html#onClass-java.lang.Class...-">TargetedAnnotationTBuilder</a></code></span></div>
 <div class="block">Appends the classes that this annotation applies to.</div>
 <dl>
@@ -441,7 +463,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>on</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.209">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>...&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.229">on</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>...&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationTMFBuilder.html#on-java.lang.reflect.Field...-">TargetedAnnotationTMFBuilder</a></code></span></div>
 <div class="block">Appends the fields that this annotation applies to.</div>
 <dl>
@@ -460,7 +482,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>on</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.215">on</a>(<a href="https://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>...&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.235">on</a>(<a href="https://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>...&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/annotation/TargetedAnnotationTMFBuilder.html#on-java.lang.reflect.Method...-">TargetedAnnotationTMFBuilder</a></code></span></div>
 <div class="block">Appends the methods that this annotation applies to.</div>
 <dl>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/QueryAnnotation.html b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/QueryAnnotation.html
index d8ffd5b..561e580 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/QueryAnnotation.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/http/annotation/QueryAnnotation.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9};
+var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -230,8 +230,14 @@
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">Value</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.html#findDef-org.apache.juneau.reflect.ParamInfo-">findDef</a></span>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;pi)</code>
+<div class="block">Finds the default value from the specified list of annotations.</div>
+</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">Value</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.html#findName-org.apache.juneau.reflect.ParamInfo-">findName</a></span>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;pi)</code>
-<div class="block">Finds the name from the specified lists of annotations.</div>
+<div class="block">Finds the name from the specified list of annotations.</div>
 </td>
 </tr>
 </table>
@@ -356,14 +362,11 @@
 <a name="findName-org.apache.juneau.reflect.ParamInfo-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>findName</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">Value</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.html#line.92">findName</a>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;pi)</pre>
-<div class="block">Finds the name from the specified lists of annotations.
-
- <p>
- The last matching name found is returned.</div>
+<pre>public static&nbsp;<a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">Value</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.html#line.89">findName</a>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;pi)</pre>
+<div class="block">Finds the name from the specified list of annotations.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>pi</code> - The parameter.</dd>
@@ -372,6 +375,22 @@
 </dl>
 </li>
 </ul>
+<a name="findDef-org.apache.juneau.reflect.ParamInfo-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>findDef</h4>
+<pre>public static&nbsp;<a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">Value</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.html#line.102">findDef</a>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;pi)</pre>
+<div class="block">Finds the default value from the specified list of annotations.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>pi</code> - The parameter.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The last matching default value, or <a href="../../../../../org/apache/juneau/Value.html#empty--"><code>Value.empty()</code></a> if not found.</dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/BasicMicroserviceListener.html b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/BasicMicroserviceListener.html
index fb2ef85..2001b65 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/BasicMicroserviceListener.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/BasicMicroserviceListener.html
@@ -49,7 +49,7 @@
 <div class="subNav">
 <ul class="navList">
 <li>Prev&nbsp;Class</li>
-<li><a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../index.html?org/apache/juneau/microservice/BasicMicroserviceListener.html" target="_top">Frames</a></li>
@@ -299,7 +299,7 @@
 <div class="subNav">
 <ul class="navList">
 <li>Prev&nbsp;Class</li>
-<li><a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../index.html?org/apache/juneau/microservice/BasicMicroserviceListener.html" target="_top">Frames</a></li>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/LogConfig.html b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/LogConfig.html
new file mode 100644
index 0000000..44e219c
--- /dev/null
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/LogConfig.html
@@ -0,0 +1,553 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>LogConfig (Apache Juneau 9.0.0)</title>
+<link rel="stylesheet" type="text/css" href="../../../../javadoc.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="LogConfig (Apache Juneau 9.0.0)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":9,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/apache/juneau/microservice/BasicMicroserviceListener.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/apache/juneau/microservice/LogConfig.html" target="_top">Frames</a></li>
+<li><a href="LogConfig.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.juneau.microservice</div>
+<h2 title="Class LogConfig" class="title">Class LogConfig</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.juneau.microservice.LogConfig</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <a href="../../../../src-html/org/apache/juneau/microservice/LogConfig.html#line.31">LogConfig</a>
+extends <a href="https://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">Can be used for configuration of simple logging in the microservice.
+
+ <p>
+ Instances of this class can be created using <a href="../../../../org/apache/juneau/microservice/LogConfig.html#create--"><code>create()</code></a> and passing the result to
+ <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html#logConfig-org.apache.juneau.microservice.LogConfig-"><code>Microservice.Builder.logConfig(LogConfig)</code></a>.
+
+ <p>
+ These values override values specified in the <js>"Logging"</js> configuration section.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier</th>
+<th class="colLast" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/LogConfig.html#LogConfig-org.apache.juneau.microservice.LogConfig-">LogConfig</a></span>(<a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a>&nbsp;copyFrom)</code>
+<div class="block">Copy constructor.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/LogConfig.html#append--">append</a></span>()</code>
+<div class="block">Specified append mode for the log file.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/LogConfig.html#consoleLevel-java.util.logging.Level-">consoleLevel</a></span>(<a href="https://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>&nbsp;consoleLevel)</code>
+<div class="block">The default logging level for the console.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/LogConfig.html#copy--">copy</a></span>()</code>
+<div class="block">Creates a copy of this log configuration.</div>
+</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/LogConfig.html#count-int-">count</a></span>(int&nbsp;count)</code>
+<div class="block">The number of log files to use.</div>
+</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>static <a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/LogConfig.html#create--">create</a></span>()</code>
+<div class="block">Creates a new instance of this config.</div>
+</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/LogConfig.html#fileLevel-java.util.logging.Level-">fileLevel</a></span>(<a href="https://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>&nbsp;fileLevel)</code>
+<div class="block">The default logging level for the log file.</div>
+</td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/LogConfig.html#formatter-java.util.logging.Formatter-">formatter</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/logging/Formatter.html?is-external=true" title="class or interface in java.util.logging">Formatter</a>&nbsp;formatter)</code>
+<div class="block">The log entry formatter.</div>
+</td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/LogConfig.html#level-java.lang.String-java.util.logging.Level-">level</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;logger,
+     <a href="https://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>&nbsp;level)</code>
+<div class="block">Default logging level for logger.</div>
+</td>
+</tr>
+<tr id="i8" class="altColor">
+<td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/LogConfig.html#levels-java.util.Map-">levels</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://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="https://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>&gt;&nbsp;levels)</code>
+<div class="block">Default logging levels for loggers.</div>
+</td>
+</tr>
+<tr id="i9" class="rowColor">
+<td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/LogConfig.html#limit-int-">limit</a></span>(int&nbsp;limit)</code>
+<div class="block">The maximum number of bytes to write to any one log file.</div>
+</td>
+</tr>
+<tr id="i10" class="altColor">
+<td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/LogConfig.html#logDir-java.lang.String-">logDir</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;logDir)</code>
+<div class="block">The location of the log directory to create the log file.</div>
+</td>
+</tr>
+<tr id="i11" class="rowColor">
+<td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/LogConfig.html#logFile-java.lang.String-">logFile</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;logFile)</code>
+<div class="block">Returns the name of the log file on the file system to store the log file for this microservice.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="LogConfig-org.apache.juneau.microservice.LogConfig-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>LogConfig</h4>
+<pre>protected&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/LogConfig.html#line.47">LogConfig</a>(<a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a>&nbsp;copyFrom)</pre>
+<div class="block">Copy constructor.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>copyFrom</code> - The log config to copy from.</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="copy--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>copy</h4>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/LogConfig.html#line.64">copy</a>()</pre>
+<div class="block">Creates a copy of this log configuration.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>A new copy of this log configuration.</dd>
+</dl>
+</li>
+</ul>
+<a name="create--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>create</h4>
+<pre>public static&nbsp;<a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/LogConfig.html#line.73">create</a>()</pre>
+<div class="block">Creates a new instance of this config.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>A new instance of this config.</dd>
+</dl>
+</li>
+</ul>
+<a name="logFile-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>logFile</h4>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/LogConfig.html#line.87">logFile</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;logFile)</pre>
+<div class="block">Returns the name of the log file on the file system to store the log file for this microservice.
+
+ <p>
+ This overrides the configuration value <js>"Logging/logFile"</js>.
+ If not specified, no file system logging will be used.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>logFile</code> - The log file.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>This object (for method chaining).</dd>
+</dl>
+</li>
+</ul>
+<a name="logDir-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>logDir</h4>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/LogConfig.html#line.102">logDir</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;logDir)</pre>
+<div class="block">The location of the log directory to create the log file.
+
+ <p>
+ This overrides the configuration value <js>"Logging/logDir"</js>.
+ If not specified, uses the JVM working directory.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>logDir</code> - The log directory location as a path relative to the working directory.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>This object (for method chaining).</dd>
+</dl>
+</li>
+</ul>
+<a name="formatter-java.util.logging.Formatter-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>formatter</h4>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/LogConfig.html#line.123">formatter</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/logging/Formatter.html?is-external=true" title="class or interface in java.util.logging">Formatter</a>&nbsp;formatter)</pre>
+<div class="block">The log entry formatter.
+
+ <p>
+ If not specified, uses the following values pulled from the configuration to construct a <a href="../../../../org/apache/juneau/microservice/resources/LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources"><code>LogEntryFormatter</code></a>:
+ <ul>
+   <li><js><js>"Logging/format"</js> (default is <js>"[{date} {level}] {msg}%n"</js>)
+   <li><js><js>"Logging/dateFormat"</js> (default is <js>"yyyy.MM.dd hh:mm:ss"</js>)
+   <li><js><js>"Logging/useStackTraceHashes"</js> (default is <jk>false</jk>)
+ </ul></div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>formatter</code> - The log entry formatter.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>This object (for method chaining).</dd>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../org/apache/juneau/microservice/resources/LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources"><code>LogEntryFormatter</code></a></dd>
+</dl>
+</li>
+</ul>
+<a name="append--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>append</h4>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/LogConfig.html#line.133">append</a>()</pre>
+<div class="block">Specified append mode for the log file.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>This object (for method chaining).</dd>
+</dl>
+</li>
+</ul>
+<a name="limit-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>limit</h4>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/LogConfig.html#line.144">limit</a>(int&nbsp;limit)</pre>
+<div class="block">The maximum number of bytes to write to any one log file.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>limit</code> - The number of bytes.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>This object (for method chaining).</dd>
+</dl>
+</li>
+</ul>
+<a name="count-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>count</h4>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/LogConfig.html#line.155">count</a>(int&nbsp;count)</pre>
+<div class="block">The number of log files to use.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>count</code> - The number of log files.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>This object (for method chaining).</dd>
+</dl>
+</li>
+</ul>
+<a name="fileLevel-java.util.logging.Level-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>fileLevel</h4>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/LogConfig.html#line.166">fileLevel</a>(<a href="https://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>&nbsp;fileLevel)</pre>
+<div class="block">The default logging level for the log file.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>fileLevel</code> - The logging level.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>This object (for method chaining).</dd>
+</dl>
+</li>
+</ul>
+<a name="consoleLevel-java.util.logging.Level-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>consoleLevel</h4>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/LogConfig.html#line.177">consoleLevel</a>(<a href="https://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>&nbsp;consoleLevel)</pre>
+<div class="block">The default logging level for the console.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>consoleLevel</code> - The logging level.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>This object (for method chaining).</dd>
+</dl>
+</li>
+</ul>
+<a name="levels-java.util.Map-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>levels</h4>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/LogConfig.html#line.188">levels</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://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="https://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>&gt;&nbsp;levels)</pre>
+<div class="block">Default logging levels for loggers.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>levels</code> - A map of logger names to logger levels.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>This object (for method chaining).</dd>
+</dl>
+</li>
+</ul>
+<a name="level-java.lang.String-java.util.logging.Level-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>level</h4>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/LogConfig.html#line.200">level</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;logger,
+                       <a href="https://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>&nbsp;level)</pre>
+<div class="block">Default logging level for logger.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>logger</code> - Logger name.</dd>
+<dd><code>level</code> - Logger level.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>This object (for method chaining).</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/apache/juneau/microservice/BasicMicroserviceListener.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/apache/juneau/microservice/LogConfig.html" target="_top">Frames</a></li>
+<li><a href="LogConfig.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2016&#x2013;2022 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/Microservice.Builder.html b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/Microservice.Builder.html
index 45e89d6..f4f6d08 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/Microservice.Builder.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/Microservice.Builder.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -116,7 +116,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.138">Microservice.Builder</a>
+<pre>public static class <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.143">Microservice.Builder</a>
 extends <a href="https://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">Builder class.</div>
 </li>
@@ -239,42 +239,48 @@
 </tr>
 <tr id="i12" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html#logConfig-org.apache.juneau.microservice.LogConfig-">logConfig</a></span>(<a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a>&nbsp;logConfig)</code>
+<div class="block">Specifies logging instructions for the microservice.</div>
+</td>
+</tr>
+<tr id="i13" class="rowColor">
+<td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html#logger-java.util.logging.Logger-">logger</a></span>(<a href="https://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>&nbsp;logger)</code>
 <div class="block">Specifies the logger used by the microservice and returned by the <a href="../../../../org/apache/juneau/microservice/Microservice.html#getLogger--"><code>Microservice.getLogger()</code></a> method.</div>
 </td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html#manifest-java.lang.Object-">manifest</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</code>
 <div class="block">Specifies the manifest file of the jar file this microservice is contained within.</div>
 </td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html#resolveFile-java.lang.String-">resolveFile</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)</code>
 <div class="block">Resolves the specified path.</div>
 </td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>&lt;T&gt;&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html#varBean-java.lang.Class-T-">varBean</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;c,
        T&nbsp;value)</code>
 <div class="block">Adds a bean for vars defined in the var resolver.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html#vars-java.lang.Class...-">vars</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/svl/Var.html" title="class in org.apache.juneau.svl">Var</a>&gt;...&nbsp;vars)</code>
 <div class="block">Augments the set of variables defined in the configuration and var resolver.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html#workingDir-java.io.File-">workingDir</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;workingDir)</code>
 <div class="block">Specifies the directory to use to resolve the config file and other paths defined with the config file.</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html#workingDir-java.lang.String-">workingDir</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;workingDir)</code>
 <div class="block">Specifies the directory to use to resolve the config file and other paths defined with the config file.</div>
@@ -308,7 +314,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>Builder</h4>
-<pre>protected&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.158">Builder</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.164">Builder</a>()</pre>
 <div class="block">Constructor.</div>
 </li>
 </ul>
@@ -318,7 +324,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Builder</h4>
-<pre>protected&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.165">Builder</a>(<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;copyFrom)</pre>
+<pre>protected&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.171">Builder</a>(<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;copyFrom)</pre>
 <div class="block">Copy constructor.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -340,7 +346,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>copy</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.183">copy</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.190">copy</a>()</pre>
 <div class="block">Creates a copy of this builder.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -354,7 +360,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>build</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.193">build</a>()
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.200">build</a>()
                    throws <a href="https://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">Instantiate a new microservice using the settings defined on this builder.</div>
 <dl>
@@ -371,7 +377,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>args</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.207">args</a>(<a href="../../../../org/apache/juneau/collections/Args.html" title="class in org.apache.juneau.collections">Args</a>&nbsp;args)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.214">args</a>(<a href="../../../../org/apache/juneau/collections/Args.html" title="class in org.apache.juneau.collections">Args</a>&nbsp;args)</pre>
 <div class="block">Specifies the command-line arguments passed into the Java command.
 
  <p>
@@ -390,7 +396,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>args</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.222">args</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;args)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.229">args</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;args)</pre>
 <div class="block">Specifies the command-line arguments passed into the Java command.
 
  <p>
@@ -409,7 +415,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>manifest</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.260">manifest</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.267">manifest</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)
                               throws <a href="https://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">Specifies the manifest file of the jar file this microservice is contained within.
 
@@ -453,8 +459,11 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>logger</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.289">logger</a>(<a href="https://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>&nbsp;logger)</pre>
-<div class="block">Specifies the logger used by the microservice and returned by the <a href="../../../../org/apache/juneau/microservice/Microservice.html#getLogger--"><code>Microservice.getLogger()</code></a> method.</div>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.299">logger</a>(<a href="https://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>&nbsp;logger)</pre>
+<div class="block">Specifies the logger used by the microservice and returned by the <a href="../../../../org/apache/juneau/microservice/Microservice.html#getLogger--"><code>Microservice.getLogger()</code></a> method.
+
+ <p>
+ Calling this method overrides the default logging mechanism controlled by the <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html#logConfig-org.apache.juneau.microservice.LogConfig-"><code>logConfig(LogConfig)</code></a> method.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>logger</code> - The logger to use for logging microservice messages.</dd>
@@ -463,13 +472,35 @@
 </dl>
 </li>
 </ul>
+<a name="logConfig-org.apache.juneau.microservice.LogConfig-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>logConfig</h4>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.316">logConfig</a>(<a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a>&nbsp;logConfig)</pre>
+<div class="block">Specifies logging instructions for the microservice.
+
+ <p>
+ If not specified, the values are taken from the <js>"Logging"</js> section of the configuration.
+
+ <p>
+ This method is ignored if <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html#logger-java.util.logging.Logger-"><code>logger(Logger)</code></a> is used to set the microservice logger.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>logConfig</code> - The log configuration.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>This object.</dd>
+</dl>
+</li>
+</ul>
 <a name="config-org.apache.juneau.config.Config-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>config</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.303">config</a>(<a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a>&nbsp;config)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.330">config</a>(<a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a>&nbsp;config)</pre>
 <div class="block">Specifies the config for initializing this microservice.
 
  <p>
@@ -488,7 +519,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>configName</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.337">configName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;configName)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.364">configName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;configName)</pre>
 <div class="block">Specifies the config name for initializing this microservice.
 
  <p>
@@ -527,7 +558,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>configStore</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.351">configStore</a>(<a href="../../../../org/apache/juneau/config/store/ConfigStore.html" title="class in org.apache.juneau.config.store">ConfigStore</a>&nbsp;configStore)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.378">configStore</a>(<a href="../../../../org/apache/juneau/config/store/ConfigStore.html" title="class in org.apache.juneau.config.store">ConfigStore</a>&nbsp;configStore)</pre>
 <div class="block">Specifies the config store to use for storing and retrieving configurations.
 
  <p>
@@ -546,7 +577,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>consoleEnabled</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.366">consoleEnabled</a>(boolean&nbsp;consoleEnabled)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.393">consoleEnabled</a>(boolean&nbsp;consoleEnabled)</pre>
 <div class="block">Specifies that the Java console is enabled for this microservice.
 
  <p>
@@ -566,7 +597,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>consoleCommands</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.388">consoleCommands</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/microservice/console/ConsoleCommand.html" title="class in org.apache.juneau.microservice.console">ConsoleCommand</a>&gt;...&nbsp;consoleCommands)
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.415">consoleCommands</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/microservice/console/ConsoleCommand.html" title="class in org.apache.juneau.microservice.console">ConsoleCommand</a>&gt;...&nbsp;consoleCommands)
                                      throws <a href="../../../../org/apache/juneau/ExecutableException.html" title="class in org.apache.juneau">ExecutableException</a></pre>
 <div class="block">Specifies console commands to make available on the Java console.
 
@@ -594,7 +625,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>consoleCommands</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.410">consoleCommands</a>(<a href="../../../../org/apache/juneau/microservice/console/ConsoleCommand.html" title="class in org.apache.juneau.microservice.console">ConsoleCommand</a>...&nbsp;consoleCommands)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.437">consoleCommands</a>(<a href="../../../../org/apache/juneau/microservice/console/ConsoleCommand.html" title="class in org.apache.juneau.microservice.console">ConsoleCommand</a>...&nbsp;consoleCommands)</pre>
 <div class="block">Specifies console commands to make available on the Java console.
 
  <p>
@@ -616,7 +647,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>console</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.429">console</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html?is-external=true" title="class or interface in java.util">Scanner</a>&nbsp;consoleReader,
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.456">console</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html?is-external=true" title="class or interface in java.util">Scanner</a>&nbsp;consoleReader,
                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a>&nbsp;consoleWriter)</pre>
 <div class="block">Specifies the console input and output.
 
@@ -641,7 +672,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>vars</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.446">vars</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/svl/Var.html" title="class in org.apache.juneau.svl">Var</a>&gt;...&nbsp;vars)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.473">vars</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/svl/Var.html" title="class in org.apache.juneau.svl">Var</a>&gt;...&nbsp;vars)</pre>
 <div class="block">Augments the set of variables defined in the configuration and var resolver.
 
  <p>
@@ -663,7 +694,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>varBean</h4>
-<pre>public&nbsp;&lt;T&gt;&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.463">varBean</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;c,
+<pre>public&nbsp;&lt;T&gt;&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.490">varBean</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;c,
                                         T&nbsp;value)</pre>
 <div class="block">Adds a bean for vars defined in the var resolver.
 
@@ -687,7 +718,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>workingDir</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.474">workingDir</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;workingDir)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.501">workingDir</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;workingDir)</pre>
 <div class="block">Specifies the directory to use to resolve the config file and other paths defined with the config file.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -703,7 +734,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>workingDir</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.485">workingDir</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;workingDir)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.512">workingDir</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;workingDir)</pre>
 <div class="block">Specifies the directory to use to resolve the config file and other paths defined with the config file.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -719,7 +750,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>listener</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.496">listener</a>(<a href="../../../../org/apache/juneau/microservice/MicroserviceListener.html" title="interface in org.apache.juneau.microservice">MicroserviceListener</a>&nbsp;listener)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.523">listener</a>(<a href="../../../../org/apache/juneau/microservice/MicroserviceListener.html" title="interface in org.apache.juneau.microservice">MicroserviceListener</a>&nbsp;listener)</pre>
 <div class="block">Registers an event listener for this microservice.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -735,7 +766,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>resolveFile</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.510">resolveFile</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)</pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.537">resolveFile</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)</pre>
 <div class="block">Resolves the specified path.
 
  <p>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/Microservice.html b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/Microservice.html
index 1979c0a..9976db1 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/Microservice.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/Microservice.html
@@ -48,7 +48,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../org/apache/juneau/microservice/BasicMicroserviceListener.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -116,7 +116,7 @@
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.93">Microservice</a>
+<pre>public class <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.98">Microservice</a>
 extends <a href="https://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/config/event/ConfigEventListener.html" title="interface in org.apache.juneau.config.event">ConfigEventListener</a></pre>
 <div class="block">Parent class for all microservices.
@@ -414,7 +414,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Microservice</h4>
-<pre>protected&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.547">Microservice</a>(<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;builder)
+<pre>protected&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.576">Microservice</a>(<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;builder)
                 throws <a href="https://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="../../../../org/apache/juneau/parser/ParseException.html" title="class in org.apache.juneau.parser">ParseException</a></pre>
 <div class="block">Constructor.</div>
@@ -441,7 +441,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getInstance</h4>
-<pre>public static&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.116">getInstance</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.121">getInstance</a>()</pre>
 <div class="block">Returns the Microservice instance.
 
  <p>
@@ -459,7 +459,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>create</h4>
-<pre>public static&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.127">create</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.132">create</a>()</pre>
 <div class="block">Creates a new builder for this object.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -473,7 +473,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>resolveFile</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.702">resolveFile</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)</pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.732">resolveFile</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)</pre>
 <div class="block">Resolves the specified path.
 
  <p>
@@ -492,7 +492,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>init</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.727">init</a>()
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.757">init</a>()
                   throws <a href="https://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="../../../../org/apache/juneau/parser/ParseException.html" title="class in org.apache.juneau.parser">ParseException</a></pre>
 <div class="block">Initializes this microservice.
@@ -517,7 +517,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.749">start</a>()
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.826">start</a>()
                    throws <a href="https://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.
 
@@ -537,7 +537,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startConsole</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.781">startConsole</a>()
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.858">startConsole</a>()
                           throws <a href="https://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>
@@ -554,7 +554,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>stopConsole</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.793">stopConsole</a>()
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.870">stopConsole</a>()
                          throws <a href="https://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>
@@ -571,7 +571,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getArgs</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/collections/Args.html" title="class in org.apache.juneau.collections">Args</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.810">getArgs</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/collections/Args.html" title="class in org.apache.juneau.collections">Args</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.887">getArgs</a>()</pre>
 <div class="block">Returns the command-line arguments passed into the application.
 
  <p>
@@ -591,7 +591,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfig</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.911">getConfig</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.988">getConfig</a>()</pre>
 <div class="block">Returns the external INI-style configuration file that can be used to configure your microservice.
 
  <p>
@@ -697,7 +697,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getManifest</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/utils/ManifestFile.html" title="class in org.apache.juneau.utils">ManifestFile</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.935">getManifest</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/utils/ManifestFile.html" title="class in org.apache.juneau.utils">ManifestFile</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1012">getManifest</a>()</pre>
 <div class="block">Returns the main jar manifest file contents as a simple <a href="../../../../org/apache/juneau/collections/JsonMap.html" title="class in org.apache.juneau.collections"><code>JsonMap</code></a>.
 
  <p>
@@ -726,7 +726,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getVarResolver</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/svl/VarResolver.html" title="class in org.apache.juneau.svl">VarResolver</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.951">getVarResolver</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/svl/VarResolver.html" title="class in org.apache.juneau.svl">VarResolver</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1028">getVarResolver</a>()</pre>
 <div class="block">Returns the variable resolver for resolving variables in strings and files.
 
  <p>
@@ -747,7 +747,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogger</h4>
-<pre>public&nbsp;<a href="https://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>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.960">getLogger</a>()</pre>
+<pre>public&nbsp;<a href="https://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>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1037">getLogger</a>()</pre>
 <div class="block">Returns the logger for this microservice.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -761,7 +761,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>executeCommand</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.974">executeCommand</a>(<a href="../../../../org/apache/juneau/collections/Args.html" title="class in org.apache.juneau.collections">Args</a>&nbsp;args,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1051">executeCommand</a>(<a href="../../../../org/apache/juneau/collections/Args.html" title="class in org.apache.juneau.collections">Args</a>&nbsp;args,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html?is-external=true" title="class or interface in java.util">Scanner</a>&nbsp;in,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a>&nbsp;out)</pre>
 <div class="block">Executes a console command.</div>
@@ -782,7 +782,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>executeCommand</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.999">executeCommand</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;command,
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1076">executeCommand</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;command,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;input,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>...&nbsp;args)</pre>
 <div class="block">Convenience method for executing a console command directly.
@@ -805,7 +805,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>join</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1021">join</a>()
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1098">join</a>()
                   throws <a href="https://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.
 
@@ -825,7 +825,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1034">stop</a>()
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1111">stop</a>()
                   throws <a href="https://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.
 
@@ -845,7 +845,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>exit</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1044">exit</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1121">exit</a>()
           throws <a href="https://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="https://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>
@@ -860,7 +860,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>kill</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1056">kill</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1133">kill</a>()</pre>
 <div class="block">Kill the JVM by calling <c>System.exit(2);</c>.</div>
 </li>
 </ul>
@@ -870,7 +870,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getConsoleCommands</h4>
-<pre>public final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://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>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1071">getConsoleCommands</a>()</pre>
+<pre>public final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://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>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1148">getConsoleCommands</a>()</pre>
 <div class="block">Returns the console commands associated with this microservice.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -884,7 +884,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getConsoleReader</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html?is-external=true" title="class or interface in java.util">Scanner</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1083">getConsoleReader</a>()</pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html?is-external=true" title="class or interface in java.util">Scanner</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1160">getConsoleReader</a>()</pre>
 <div class="block">Returns the console reader.
 
  <p>
@@ -901,7 +901,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getConsoleWriter</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1095">getConsoleWriter</a>()</pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1172">getConsoleWriter</a>()</pre>
 <div class="block">Returns the console writer.
 
  <p>
@@ -918,7 +918,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>out</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1109">out</a>(<a href="../../../../org/apache/juneau/cp/Messages.html" title="class in org.apache.juneau.cp">Messages</a>&nbsp;mb,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1186">out</a>(<a href="../../../../org/apache/juneau/cp/Messages.html" title="class in org.apache.juneau.cp">Messages</a>&nbsp;mb,
                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;messageKey,
                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>...&nbsp;args)</pre>
 <div class="block">Prints a localized message to the console writer.
@@ -939,7 +939,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>err</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1126">err</a>(<a href="../../../../org/apache/juneau/cp/Messages.html" title="class in org.apache.juneau.cp">Messages</a>&nbsp;mb,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1203">err</a>(<a href="../../../../org/apache/juneau/cp/Messages.html" title="class in org.apache.juneau.cp">Messages</a>&nbsp;mb,
                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;messageKey,
                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>...&nbsp;args)</pre>
 <div class="block">Prints a localized message to STDERR.
@@ -960,7 +960,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>log</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1140">log</a>(<a href="https://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>&nbsp;level,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1217">log</a>(<a href="https://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>&nbsp;level,
                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message,
                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>...&nbsp;args)</pre>
 <div class="block">Logs a message to the log file.</div>
@@ -978,7 +978,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>onConfigChange</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1146">onConfigChange</a>(<a href="../../../../org/apache/juneau/config/event/ConfigEvents.html" title="class in org.apache.juneau.config.event">ConfigEvents</a>&nbsp;events)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1223">onConfigChange</a>(<a href="../../../../org/apache/juneau/config/event/ConfigEvents.html" title="class in org.apache.juneau.config.event">ConfigEvents</a>&nbsp;events)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<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>
@@ -1016,7 +1016,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../org/apache/juneau/microservice/BasicMicroserviceListener.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/jetty/JettyMicroservice.Builder.html b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/jetty/JettyMicroservice.Builder.html
index 1badb5d..660f0e2 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/jetty/JettyMicroservice.Builder.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/jetty/JettyMicroservice.Builder.html
@@ -333,7 +333,7 @@
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.juneau.microservice.<a href="../../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a></h3>
-<code><a href="../../../../../org/apache/juneau/microservice/Microservice.Builder.html#consoleCommands-java.lang.Class...-">consoleCommands</a>, <a href="../../../../../org/apache/juneau/microservice/Microservice.Builder.html#listener-org.apache.juneau.microservice.MicroserviceListener-">listener</a>, <a href="../../../../../org/apache/juneau/microservice/Microservice.Builder.html#resolveFile-java.lang.String-">resolveFile</a></code></li>
+<code><a href="../../../../../org/apache/juneau/microservice/Microservice.Builder.html#consoleCommands-java.lang.Class...-">consoleCommands</a>, <a href="../../../../../org/apache/juneau/microservice/Microservice.Builder.html#listener-org.apache.juneau.microservice.MicroserviceListener-">listener</a>, <a href="../../../../../org/apache/juneau/microservice/Microservice.Builder.html#logConfig-org.apache.juneau.microservice.LogConfig-">logConfig</a>, <a href="../../../../../org/apache/juneau/microservice/Microservice.Builder.html#resolveFile-java.lang.String-">resolveFile</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -738,7 +738,10 @@
 <h4>logger</h4>
 <pre>public&nbsp;<a href="../../../../../org/apache/juneau/microservice/jetty/JettyMicroservice.Builder.html" title="class in org.apache.juneau.microservice.jetty">JettyMicroservice.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/jetty/JettyMicroservice.Builder.html#line.369">logger</a>(<a href="https://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>&nbsp;logger)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/microservice/Microservice.Builder.html#logger-java.util.logging.Logger-">Microservice.Builder</a></code></span></div>
-<div class="block">Specifies the logger used by the microservice and returned by the <a href="../../../../../org/apache/juneau/microservice/Microservice.html#getLogger--"><code>Microservice.getLogger()</code></a> method.</div>
+<div class="block">Specifies the logger used by the microservice and returned by the <a href="../../../../../org/apache/juneau/microservice/Microservice.html#getLogger--"><code>Microservice.getLogger()</code></a> method.
+
+ <p>
+ Calling this method overrides the default logging mechanism controlled by the <a href="../../../../../org/apache/juneau/microservice/Microservice.Builder.html#logConfig-org.apache.juneau.microservice.LogConfig-"><code>Microservice.Builder.logConfig(LogConfig)</code></a> method.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/juneau/microservice/Microservice.Builder.html#logger-java.util.logging.Logger-">logger</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a></code></dd>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/package-frame.html b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/package-frame.html
index c1e5b1d..9ec449c 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/package-frame.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/package-frame.html
@@ -18,6 +18,7 @@
 <h2 title="Classes">Classes</h2>
 <ul title="Classes">
 <li><a href="BasicMicroserviceListener.html" title="class in org.apache.juneau.microservice" target="classFrame">BasicMicroserviceListener</a></li>
+<li><a href="LogConfig.html" title="class in org.apache.juneau.microservice" target="classFrame">LogConfig</a></li>
 <li><a href="Microservice.html" title="class in org.apache.juneau.microservice" target="classFrame">Microservice</a></li>
 <li><a href="Microservice.Builder.html" title="class in org.apache.juneau.microservice" target="classFrame">Microservice.Builder</a></li>
 </ul>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/package-summary.html b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/package-summary.html
index 312eab9..8cc8d70 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/package-summary.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/package-summary.html
@@ -109,12 +109,18 @@
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a></td>
+<td class="colLast">
+<div class="block">Can be used for configuration of simple logging in the microservice.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a></td>
 <td class="colLast">
 <div class="block">Parent class for all microservices.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a></td>
 <td class="colLast">
 <div class="block">Builder class.</div>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/package-tree.html b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/package-tree.html
index 8cac9af..b260e21 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/package-tree.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/package-tree.html
@@ -81,6 +81,7 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Object</span></a>
 <ul>
 <li type="circle">org.apache.juneau.microservice.<a href="../../../../org/apache/juneau/microservice/BasicMicroserviceListener.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">BasicMicroserviceListener</span></a> (implements org.apache.juneau.microservice.<a href="../../../../org/apache/juneau/microservice/MicroserviceListener.html" title="interface in org.apache.juneau.microservice">MicroserviceListener</a>)</li>
+<li type="circle">org.apache.juneau.microservice.<a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">LogConfig</span></a></li>
 <li type="circle">org.apache.juneau.microservice.<a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Microservice</span></a> (implements org.apache.juneau.config.event.<a href="../../../../org/apache/juneau/config/event/ConfigEventListener.html" title="interface in org.apache.juneau.config.event">ConfigEventListener</a>)</li>
 <li type="circle">org.apache.juneau.microservice.<a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Microservice.Builder</span></a></li>
 </ul>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html
index 98024ce..665ef97 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html
@@ -49,7 +49,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.Action.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/juneau/microservice/resources/SampleRootResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html" target="_top">Frames</a></li>
@@ -307,7 +307,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.Action.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/juneau/microservice/resources/SampleRootResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html" target="_top">Frames</a></li>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/LogEntryFormatter.html b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/LogEntryFormatter.html
new file mode 100644
index 0000000..a9951bf
--- /dev/null
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/LogEntryFormatter.html
@@ -0,0 +1,405 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>LogEntryFormatter (Apache Juneau 9.0.0)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../javadoc.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="LogEntryFormatter (Apache Juneau 9.0.0)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/juneau/microservice/resources/LogEntryFormatter.html" target="_top">Frames</a></li>
+<li><a href="LogEntryFormatter.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.juneau.microservice.resources</div>
+<h2 title="Class LogEntryFormatter" class="title">Class LogEntryFormatter</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/util/logging/Formatter.html?is-external=true" title="class or interface in java.util.logging">java.util.logging.Formatter</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.juneau.microservice.resources.LogEntryFormatter</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogEntryFormatter.html#line.45">LogEntryFormatter</a>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/logging/Formatter.html?is-external=true" title="class or interface in java.util.logging">Formatter</a></pre>
+<div class="block">Log entry formatter.
+
+ <p>
+ Uses three simple parameter for configuring log entry formats:
+ <ul class='spaced-list'>
+   <li>
+      <c>dateFormat</c> - A <a href="https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html?is-external=true" title="class or interface in java.text"><code>SimpleDateFormat</code></a> string describing the format for dates.
+   <li>
+      <c>format</c> - A string with <c>{...}</c> replacement variables representing predefined fields.
+   <li>
+      <c>useStackTraceHashes</c> - A setting that causes duplicate stack traces to be replaced with 8-character
+       hash strings.
+ </ul>
+
+ <p>
+ This class converts the format strings into a regular expression that can be used to parse the resulting log file.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogEntryFormatter.html#LogEntryFormatter-java.lang.String-java.lang.String-boolean-">LogEntryFormatter</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format,
+                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;dateFormat,
+                 boolean&nbsp;useStackTraceHashes)</code>
+<div class="block">Create a new formatter.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogEntryFormatter.html#format-java.util.logging.LogRecord-">format</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/logging/LogRecord.html?is-external=true" title="class or interface in java.util.logging">LogRecord</a>&nbsp;r)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/text/DateFormat.html?is-external=true" title="class or interface in java.text">DateFormat</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogEntryFormatter.html#getDateFormat--">getDateFormat</a></span>()</code>
+<div class="block">Returns the <a href="https://docs.oracle.com/javase/8/docs/api/java/text/DateFormat.html?is-external=true" title="class or interface in java.text"><code>DateFormat</code></a> used for matching dates.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogEntryFormatter.html#getField-java.lang.String-java.util.regex.Matcher-">getField</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fieldName,
+        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Matcher.html?is-external=true" title="class or interface in java.util.regex">Matcher</a>&nbsp;m)</code>
+<div class="block">Given a matcher that has matched the pattern specified by <a href="../../../../../org/apache/juneau/microservice/resources/LogEntryFormatter.html#getLogEntryPattern--"><code>getLogEntryPattern()</code></a>, returns the field value
+ from the match.</div>
+</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogEntryFormatter.html#getLogEntryPattern--">getLogEntryPattern</a></span>()</code>
+<div class="block">Returns the regular expression pattern used for matching log entries.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.util.logging.Formatter">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.util.logging.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/logging/Formatter.html?is-external=true" title="class or interface in java.util.logging">Formatter</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/logging/Formatter.html?is-external=true#formatMessage-java.util.logging.LogRecord-" title="class or interface in java.util.logging">formatMessage</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/util/logging/Formatter.html?is-external=true#getHead-java.util.logging.Handler-" title="class or interface in java.util.logging">getHead</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/util/logging/Formatter.html?is-external=true#getTail-java.util.logging.Handler-" title="class or interface in java.util.logging">getTail</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="LogEntryFormatter-java.lang.String-java.lang.String-boolean-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>LogEntryFormatter</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogEntryFormatter.html#line.75">LogEntryFormatter</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format,
+                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;dateFormat,
+                         boolean&nbsp;useStackTraceHashes)</pre>
+<div class="block">Create a new formatter.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>format</code> - The log entry format.  e.g. <js>"[{date} {level}] {msg}%n"</js>
+   The string can contain any of the following variables:
+   <ol>
+      <li><js>"{date}"</js> - The date, formatted per <js>"Logging/dateFormat"</js>.
+      <li><js>"{class}"</js> - The class name.
+      <li><js>"{method}"</js> - The method name.
+      <li><js>"{logger}"</js> - The logger name.
+      <li><js>"{level}"</js> - The log level name.
+      <li><js>"{msg}"</js> - The log message.
+      <li><js>"{threadid}"</js> - The thread ID.
+      <li><js>"{exception}"</js> - The localized exception message.
+   </ol></dd>
+<dd><code>dateFormat</code> - The <a href="https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html?is-external=true" title="class or interface in java.text"><code>SimpleDateFormat</code></a> format to use for dates.  e.g. <js>"yyyy.MM.dd hh:mm:ss"</js>.</dd>
+<dd><code>useStackTraceHashes</code> - If <jk>true</jk>, only print unique stack traces once and then refer to them by a simple 8 character hash
+   identifier.</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="getLogEntryPattern--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getLogEntryPattern</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogEntryFormatter.html#line.190">getLogEntryPattern</a>()</pre>
+<div class="block">Returns the regular expression pattern used for matching log entries.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The regular expression pattern used for matching log entries.</dd>
+</dl>
+</li>
+</ul>
+<a name="getDateFormat--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getDateFormat</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/text/DateFormat.html?is-external=true" title="class or interface in java.text">DateFormat</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogEntryFormatter.html#line.199">getDateFormat</a>()</pre>
+<div class="block">Returns the <a href="https://docs.oracle.com/javase/8/docs/api/java/text/DateFormat.html?is-external=true" title="class or interface in java.text"><code>DateFormat</code></a> used for matching dates.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The <a href="https://docs.oracle.com/javase/8/docs/api/java/text/DateFormat.html?is-external=true" title="class or interface in java.text"><code>DateFormat</code></a> used for matching dates.</dd>
+</dl>
+</li>
+</ul>
+<a name="getField-java.lang.String-java.util.regex.Matcher-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getField</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogEntryFormatter.html#line.223">getField</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fieldName,
+                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Matcher.html?is-external=true" title="class or interface in java.util.regex">Matcher</a>&nbsp;m)</pre>
+<div class="block">Given a matcher that has matched the pattern specified by <a href="../../../../../org/apache/juneau/microservice/resources/LogEntryFormatter.html#getLogEntryPattern--"><code>getLogEntryPattern()</code></a>, returns the field value
+ from the match.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>fieldName</code> - The field name.
+   Possible values are:
+   <ul>
+      <li><js>"date"</js>
+      <li><js>"class"</js>
+      <li><js>"method"</js>
+      <li><js>"logger"</js>
+      <li><js>"level"</js>
+      <li><js>"msg"</js>
+      <li><js>"threadid"</js>
+      <li><js>"exception"</js>
+   </ul></dd>
+<dd><code>m</code> - The matcher.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The field value, or <jk>null</jk> if the specified field does not exist.</dd>
+</dl>
+</li>
+</ul>
+<a name="format-java.util.logging.LogRecord-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>format</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogEntryFormatter.html#line.229">format</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/logging/LogRecord.html?is-external=true" title="class or interface in java.util.logging">LogRecord</a>&nbsp;r)</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/logging/Formatter.html?is-external=true#format-java.util.logging.LogRecord-" title="class or interface in java.util.logging">format</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/logging/Formatter.html?is-external=true" title="class or interface in java.util.logging">Formatter</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/juneau/microservice/resources/LogEntryFormatter.html" target="_top">Frames</a></li>
+<li><a href="LogEntryFormatter.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2016&#x2013;2022 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/LogParser.Entry.html b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/LogParser.Entry.html
new file mode 100644
index 0000000..20ebfb1
--- /dev/null
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/LogParser.Entry.html
@@ -0,0 +1,417 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>LogParser.Entry (Apache Juneau 9.0.0)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../javadoc.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="LogParser.Entry (Apache Juneau 9.0.0)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/juneau/microservice/resources/LogParser.Entry.html" target="_top">Frames</a></li>
+<li><a href="LogParser.Entry.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.juneau.microservice.resources</div>
+<h2 title="Class LogParser.Entry" class="title">Class LogParser.Entry</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.juneau.microservice.resources.LogParser.Entry</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources">LogParser</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public final class <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogParser.html#line.133">LogParser.Entry</a>
+extends <a href="https://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">Represents a single line from the log file.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html#additionalText">additionalText</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Date.html?is-external=true" title="class or interface in java.util">Date</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html#date">date</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html#isRecord">isRecord</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html#line">line</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html#logger">logger</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html#severity">severity</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html#text">text</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html#thread">thread</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html#append-java.io.Writer-">append</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;w)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html#appendHtml-java.io.Writer-">appendHtml</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;w)</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html#getText--">getText</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html#getThread--">getThread</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="date">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>date</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Date.html?is-external=true" title="class or interface in java.util">Date</a> <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogParser.Entry.html#line.134">date</a></pre>
+</li>
+</ul>
+<a name="severity">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>severity</h4>
+<pre>public&nbsp;<a href="https://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/resources/LogParser.Entry.html#line.135">severity</a></pre>
+</li>
+</ul>
+<a name="logger">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>logger</h4>
+<pre>public&nbsp;<a href="https://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/resources/LogParser.Entry.html#line.135">logger</a></pre>
+</li>
+</ul>
+<a name="line">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>line</h4>
+<pre>protected&nbsp;<a href="https://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/resources/LogParser.Entry.html#line.136">line</a></pre>
+</li>
+</ul>
+<a name="text">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>text</h4>
+<pre>protected&nbsp;<a href="https://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/resources/LogParser.Entry.html#line.136">text</a></pre>
+</li>
+</ul>
+<a name="thread">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>thread</h4>
+<pre>protected&nbsp;<a href="https://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/resources/LogParser.Entry.html#line.137">thread</a></pre>
+</li>
+</ul>
+<a name="additionalText">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>additionalText</h4>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogParser.Entry.html#line.138">additionalText</a></pre>
+</li>
+</ul>
+<a name="isRecord">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>isRecord</h4>
+<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogParser.Entry.html#line.139">isRecord</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="getText--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getText</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogParser.Entry.html#line.168">getText</a>()</pre>
+</li>
+</ul>
+<a name="getThread--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getThread</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogParser.Entry.html#line.181">getThread</a>()</pre>
+</li>
+</ul>
+<a name="appendHtml-java.io.Writer-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>appendHtml</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogParser.Entry.html#line.185">appendHtml</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;w)
+                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="append-java.io.Writer-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>append</h4>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogParser.Entry.html#line.193">append</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;w)
+                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/juneau/microservice/resources/LogParser.Entry.html" target="_top">Frames</a></li>
+<li><a href="LogParser.Entry.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2016&#x2013;2022 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/LogParser.html b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/LogParser.html
new file mode 100644
index 0000000..fbbfacd
--- /dev/null
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/LogParser.html
@@ -0,0 +1,443 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>LogParser (Apache Juneau 9.0.0)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../javadoc.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="LogParser (Apache Juneau 9.0.0)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/juneau/microservice/resources/LogParser.html" target="_top">Frames</a></li>
+<li><a href="LogParser.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.juneau.microservice.resources</div>
+<h2 title="Class LogParser" class="title">Class LogParser</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.juneau.microservice.resources.LogParser</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a>&gt;, <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a>&gt;</dd>
+</dl>
+<hr>
+<br>
+<pre>public final class <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogParser.html#line.28">LogParser</a>
+extends <a href="https://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="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a>&gt;, <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a>&gt;, <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a></pre>
+<div class="block">Utility class for reading log files.
+
+ <p>
+ Provides the capability of returning splices of log files based on dates and filtering based on thread and logger
+ names.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a></span></code>
+<div class="block">Represents a single line from the log file.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.html#LogParser-org.apache.juneau.microservice.resources.LogEntryFormatter-java.io.File-java.util.Date-java.util.Date-java.lang.String-java.lang.String:A-java.lang.String:A-">LogParser</a></span>(<a href="../../../../../org/apache/juneau/microservice/resources/LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources">LogEntryFormatter</a>&nbsp;formatter,
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;f,
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Date.html?is-external=true" title="class or interface in java.util">Date</a>&nbsp;start,
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Date.html?is-external=true" title="class or interface in java.util">Date</a>&nbsp;end,
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;thread,
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;loggers,
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;severity)</code>
+<div class="block">Constructor.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.html#close--">close</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.html#hasNext--">hasNext</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.html#iterator--">iterator</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.html#next--">next</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.html#remove--">remove</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.html#writeTo-java.io.Writer-">writeTo</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;w)</code>
+<div class="block">Serializes the contents of the parsed log file to the specified writer and then closes the underlying reader.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Iterable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true#forEach-java.util.function.Consumer-" title="class or interface in java.lang">forEach</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true#spliterator--" title="class or interface in java.lang">spliterator</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.util.Iterator">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;java.util.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true#forEachRemaining-java.util.function.Consumer-" title="class or interface in java.util">forEachRemaining</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="LogParser-org.apache.juneau.microservice.resources.LogEntryFormatter-java.io.File-java.util.Date-java.util.Date-java.lang.String-java.lang.String:A-java.lang.String:A-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>LogParser</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogParser.html#line.48">LogParser</a>(<a href="../../../../../org/apache/juneau/microservice/resources/LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources">LogEntryFormatter</a>&nbsp;formatter,
+                 <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;f,
+                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Date.html?is-external=true" title="class or interface in java.util">Date</a>&nbsp;start,
+                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Date.html?is-external=true" title="class or interface in java.util">Date</a>&nbsp;end,
+                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;thread,
+                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;loggers,
+                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;severity)
+          throws <a href="https://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>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>formatter</code> - The log entry formatter.</dd>
+<dd><code>f</code> - The log file.</dd>
+<dd><code>start</code> - Don't return rows before this date.  If <jk>null</jk>, start from the beginning of the file.</dd>
+<dd><code>end</code> - Don't return rows after this date.  If <jk>null</jk>, go to the end of the file.</dd>
+<dd><code>thread</code> - Only return log entries with this thread name.</dd>
+<dd><code>loggers</code> - Only return log entries produced by these loggers (simple class names).</dd>
+<dd><code>severity</code> - Only return log entries with the specified severity.</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - Thrown by underlying stream.</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="hasNext--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>hasNext</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogParser.html#line.69">hasNext</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true#hasNext--" title="class or interface in java.util">hasNext</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a>&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="next--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>next</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogParser.html#line.74">next</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true#next--" title="class or interface in java.util">next</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a>&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="remove--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>remove</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogParser.html#line.98">remove</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true#remove--" title="class or interface in java.util">remove</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a>&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="iterator--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>iterator</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogParser.html#line.103">iterator</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true#iterator--" title="class or interface in java.lang">iterator</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a>&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="close--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>close</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogParser.html#line.108">close</a>()
+           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true#close--" title="class or interface in java.io">close</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a></code></dd>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html?is-external=true#close--" title="class or interface in java.lang">close</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></code></dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="writeTo-java.io.Writer-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>writeTo</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogParser.html#line.118">writeTo</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;w)
+             throws <a href="https://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">Serializes the contents of the parsed log file to the specified writer and then closes the underlying reader.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>w</code> - The writer to write the log file to.</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - Thrown by underlying stream.</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/juneau/microservice/resources/LogParser.html" target="_top">Frames</a></li>
+<li><a href="LogParser.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2016&#x2013;2022 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/LogsResource.Action.html b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/LogsResource.Action.html
new file mode 100644
index 0000000..e3def79
--- /dev/null
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/LogsResource.Action.html
@@ -0,0 +1,261 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>LogsResource.Action (Apache Juneau 9.0.0)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../javadoc.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="LogsResource.Action (Apache Juneau 9.0.0)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/juneau/microservice/resources/LogsResource.Action.html" target="_top">Frames</a></li>
+<li><a href="LogsResource.Action.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#methods.inherited.from.class.org.apache.juneau.dto.LinkString">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.juneau.microservice.resources</div>
+<h2 title="Class LogsResource.Action" class="title">Class LogsResource.Action</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../org/apache/juneau/dto/LinkString.html" title="class in org.apache.juneau.dto">org.apache.juneau.dto.LinkString</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.juneau.microservice.resources.LogsResource.Action</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../../../../../org/apache/juneau/dto/LinkString.html" title="class in org.apache.juneau.dto">LinkString</a>&gt;</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource</a></dd>
+</dl>
+<hr>
+<br>
+<pre><a href="../../../../../org/apache/juneau/http/annotation/Response.html" title="annotation in org.apache.juneau.http.annotation">@Response</a>(<a href="../../../../../org/apache/juneau/http/annotation/Response.html#schema--">schema</a>=<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">@Schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html#description--">description</a>="File action"))
+public static class <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.220">LogsResource.Action</a>
+extends <a href="../../../../../org/apache/juneau/dto/LinkString.html" title="class in org.apache.juneau.dto">LinkString</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.Action.html#Action-java.lang.String-java.lang.String-java.lang.Object...-">Action</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;uri,
+      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>...&nbsp;uriArgs)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.juneau.dto.LinkString">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.juneau.dto.<a href="../../../../../org/apache/juneau/dto/LinkString.html" title="class in org.apache.juneau.dto">LinkString</a></h3>
+<code><a href="../../../../../org/apache/juneau/dto/LinkString.html#compareTo-org.apache.juneau.dto.LinkString-">compareTo</a>, <a href="../../../../../org/apache/juneau/dto/LinkString.html#equals-java.lang.Object-">equals</a>, <a href="../../../../../org/apache/juneau/dto/LinkString.html#getName--">getName</a>, <a href="../../../../../org/apache/juneau/dto/LinkString.html#getUri--">getUri</a>, <a href="../../../../../org/apache/juneau/dto/LinkString.html#hashCode--">hashCode</a>, <a href="../../../../../org/apache/juneau/dto/LinkString.html#setName-java.lang.String-">setName</a>, <a href="../../../../../org/apache/juneau/dto/LinkString.html#setUri-java.lang.String-">setUri</a>, <a href="../../../../../org/apache/juneau/dto/LinkString.html#setUri-java.lang.String-java.lang.Object...-">setUri</a>, <a href="../../../../../org/apache/juneau/dto/LinkString.html#setUri-java.net.URI-">setUri</a>, <a href="../../../../../org/apache/juneau/dto/LinkString.html#toString--">toString</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="Action-java.lang.String-java.lang.String-java.lang.Object...-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>Action</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.Action.html#line.221">Action</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;uri,
+              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>...&nbsp;uriArgs)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/juneau/microservice/resources/LogsResource.Action.html" target="_top">Frames</a></li>
+<li><a href="LogsResource.Action.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#methods.inherited.from.class.org.apache.juneau.dto.LinkString">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2016&#x2013;2022 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/LogsResource.FileResource.html b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/LogsResource.FileResource.html
new file mode 100644
index 0000000..07b6470
--- /dev/null
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/LogsResource.FileResource.html
@@ -0,0 +1,353 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>LogsResource.FileResource (Apache Juneau 9.0.0)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../javadoc.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="LogsResource.FileResource (Apache Juneau 9.0.0)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.Action.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/microservice/resources/SampleRootResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/juneau/microservice/resources/LogsResource.FileResource.html" target="_top">Frames</a></li>
+<li><a href="LogsResource.FileResource.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.juneau.microservice.resources</div>
+<h2 title="Class LogsResource.FileResource" class="title">Class LogsResource.FileResource</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.juneau.microservice.resources.LogsResource.FileResource</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource</a></dd>
+</dl>
+<hr>
+<br>
+<pre><a href="../../../../../org/apache/juneau/http/annotation/Response.html" title="annotation in org.apache.juneau.http.annotation">@Response</a>(<a href="../../../../../org/apache/juneau/http/annotation/Response.html#schema--">schema</a>=<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">@Schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html#description--">description</a>="File or directory details"))
+ <a href="../../../../../org/apache/juneau/annotation/Bean.html" title="annotation in org.apache.juneau.annotation">@Bean</a>(<a href="../../../../../org/apache/juneau/annotation/Bean.html#properties--">properties</a>="type,name,size,lastModified,actions,files")
+public static class <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.228">LogsResource.FileResource</a>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html#FileResource-java.io.File-java.lang.String-boolean-boolean-">FileResource</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;f,
+            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
+            boolean&nbsp;allowDeletes,
+            boolean&nbsp;includeChildren)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.Action.html" title="class in org.apache.juneau.microservice.resources">LogsResource.Action</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html#getActions--">getActions</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource.FileResource</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html#getFiles--">getFiles</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Date.html?is-external=true" title="class or interface in java.util">Date</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html#getLastModified--">getLastModified</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/juneau/dto/LinkString.html" title="class in org.apache.juneau.dto">LinkString</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html#getName--">getName</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html#getSize--">getSize</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html#getType--">getType</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="FileResource-java.io.File-java.lang.String-boolean-boolean-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>FileResource</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.234">FileResource</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;f,
+                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
+                    boolean&nbsp;allowDeletes,
+                    boolean&nbsp;includeChildren)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="getType--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getType</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.242">getType</a>()</pre>
+</li>
+</ul>
+<a name="getName--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getName</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/dto/LinkString.html" title="class in org.apache.juneau.dto">LinkString</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.246">getName</a>()</pre>
+</li>
+</ul>
+<a name="getSize--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getSize</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.250">getSize</a>()</pre>
+</li>
+</ul>
+<a name="getLastModified--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getLastModified</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Date.html?is-external=true" title="class or interface in java.util">Date</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.254">getLastModified</a>()</pre>
+</li>
+</ul>
+<a name="getActions--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getActions</h4>
+<pre><a href="../../../../../org/apache/juneau/html/annotation/Html.html" title="annotation in org.apache.juneau.html.annotation">@Html</a>(<a href="../../../../../org/apache/juneau/html/annotation/Html.html#format--">format</a>=<a href="../../../../../org/apache/juneau/html/annotation/HtmlFormat.html#HTML_CDC">HTML_CDC</a>)
+public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.Action.html" title="class in org.apache.juneau.microservice.resources">LogsResource.Action</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.259">getActions</a>()
+                                                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="getFiles--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getFiles</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource.FileResource</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.272">getFiles</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.Action.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/microservice/resources/SampleRootResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/juneau/microservice/resources/LogsResource.FileResource.html" target="_top">Frames</a></li>
+<li><a href="LogsResource.FileResource.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2016&#x2013;2022 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/LogsResource.html b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/LogsResource.html
new file mode 100644
index 0000000..ab4e032
--- /dev/null
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/LogsResource.html
@@ -0,0 +1,502 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>LogsResource (Apache Juneau 9.0.0)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../javadoc.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="LogsResource (Apache Juneau 9.0.0)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.Action.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/juneau/microservice/resources/LogsResource.html" target="_top">Frames</a></li>
+<li><a href="LogsResource.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.juneau.microservice.resources</div>
+<h2 title="Class LogsResource" class="title">Class LogsResource</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>javax.servlet.GenericServlet</li>
+<li>
+<ul class="inheritance">
+<li>javax.servlet.http.HttpServlet</li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html" title="class in org.apache.juneau.rest.servlet">org.apache.juneau.rest.servlet.RestServlet</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServlet.html" title="class in org.apache.juneau.rest.servlet">org.apache.juneau.rest.servlet.BasicRestServlet</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.juneau.microservice.resources.LogsResource</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, javax.servlet.Servlet, javax.servlet.ServletConfig, <a href="../../../../../org/apache/juneau/rest/config/BasicJsonConfig.html" title="interface in org.apache.juneau.rest.config">BasicJsonConfig</a>, <a href="../../../../../org/apache/juneau/rest/config/BasicUniversalConfig.html" title="interface in org.apache.juneau.rest.config">BasicUniversalConfig</a>, <a href="../../../../../org/apache/juneau/rest/config/DefaultConfig.html" title="interface in org.apache.juneau.rest.config">DefaultConfig</a>, <a href="../../../../../org/apache/juneau/rest/config/DefaultHtmlConfig.html" title="interface in org.apache.juneau.rest.config">DefaultHtmlConfig</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestOperations.html" title="interface in org.apache.juneau.rest.servlet">BasicRestOperations</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public class <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.48">LogsResource</a>
+extends <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServlet.html" title="class in org.apache.juneau.rest.servlet">BasicRestServlet</a>
+implements <a href="../../../../../org/apache/juneau/rest/config/BasicUniversalConfig.html" title="interface in org.apache.juneau.rest.config">BasicUniversalConfig</a></pre>
+<div class="block">REST resource for viewing and accessing log files.</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../serialized-form.html#org.apache.juneau.microservice.resources.LogsResource">Serialized Form</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.Action.html" title="class in org.apache.juneau.microservice.resources">LogsResource.Action</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource.FileResource</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html#LogsResource--">LogsResource</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>org.apache.juneau.microservice.resources.LogsResource.RedirectToRoot</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html#deleteFile-java.lang.String-">deleteFile</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>org.apache.juneau.microservice.resources.LogsResource.FileContents</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html#downloadFile-org.apache.juneau.rest.RestResponse-java.lang.String-">downloadFile</a></span>(<a href="../../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;res,
+            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource.FileResource</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html#getFile-org.apache.juneau.rest.RestRequest-java.lang.String-">getFile</a></span>(<a href="../../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
+       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html#init-org.apache.juneau.config.Config-">init</a></span>(<a href="../../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a>&nbsp;config)</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html#viewFile-org.apache.juneau.rest.RestResponse-java.lang.String-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-java.lang.String:A-">viewFile</a></span>(<a href="../../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;res,
+        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
+        boolean&nbsp;highlight,
+        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;start,
+        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;end,
+        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;thread,
+        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;loggers,
+        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;severity)</code>&nbsp;</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources">LogParser</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html#viewParsedEntries-org.apache.juneau.rest.RestRequest-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-java.lang.String:A-">viewParsedEntries</a></span>(<a href="../../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
+                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
+                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;start,
+                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;end,
+                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;thread,
+                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;loggers,
+                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;severity)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.juneau.rest.servlet.BasicRestServlet">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.juneau.rest.servlet.<a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServlet.html" title="class in org.apache.juneau.rest.servlet">BasicRestServlet</a></h3>
+<code><a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServlet.html#error--">error</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServlet.html#getFavIcon--">getFavIcon</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServlet.html#getHtdoc-java.lang.String-java.util.Locale-">getHtdoc</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServlet.html#getStats-org.apache.juneau.rest.RestRequest-">getStats</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServlet.html#getSwagger-org.apache.juneau.rest.RestRequest-">getSwagger</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.juneau.rest.servlet.RestServlet">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.juneau.rest.servlet.<a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html" title="class in org.apache.juneau.rest.servlet">RestServlet</a></h3>
+<code><a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#createBeanStore-java.util.Optional-">createBeanStore</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#destroy--">destroy</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#doLog-java.util.logging.Level-java.lang.Throwable-java.util.function.Supplier-">doLog</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#getContext--">getContext</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#getPath--">getPath</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#getRequest--">getRequest</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#getResponse--">getResponse</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#log-java.lang.String-">log</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#log-java.lang.String-java.lang.Throwable-">log</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#onDestroy-org.apache.juneau.rest.RestContext-">onDestroy</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#onEndCall-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">onEndCall</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#onInit-org.apache.juneau.rest.RestContext.Builder-">onInit</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">onPostCall</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#onPostInit-org.apache.juneau.rest.RestContext-">onPostInit</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#onPostInitChildFirst-org.apache.juneau.rest.RestContext-">onPostInitChildFirst</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#onPreCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">onPreCall</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#onStartCall-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">onStartCall</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a>, <a href="../../../../../org/apache/juneau/rest/servlet/RestServlet.html#setContext-org.apache.juneau.rest.RestContext-">setContext</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.javax.servlet.http.HttpServlet">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;javax.servlet.http.HttpServlet</h3>
+<code>doDelete, doGet, doHead, doOptions, doPost, doPut, doTrace, getLastModified, service</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.javax.servlet.GenericServlet">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;javax.servlet.GenericServlet</h3>
+<code>getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="LogsResource--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>LogsResource</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.48">LogsResource</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="init-org.apache.juneau.config.Config-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>init</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.60">init</a>(<a href="../../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a>&nbsp;config)
+          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="getFile-org.apache.juneau.rest.RestRequest-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getFile</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource.FileResource</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.78">getFile</a>(<a href="../../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
+                                         <a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation">@Path</a>(<a href="../../../../../org/apache/juneau/http/annotation/Path.html#value--">value</a>="/*")
+                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)
+                                  throws <a href="../../../../../org/apache/juneau/http/response/NotFound.html" title="class in org.apache.juneau.http.response">NotFound</a>,
+                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="../../../../../org/apache/juneau/http/response/NotFound.html" title="class in org.apache.juneau.http.response">NotFound</a></code></dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="viewFile-org.apache.juneau.rest.RestResponse-java.lang.String-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-java.lang.String:A-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>viewFile</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.92">viewFile</a>(<a href="../../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;res,
+                     <a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation">@Path</a>(<a href="../../../../../org/apache/juneau/http/annotation/Path.html#value--">value</a>="/*")
+                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
+                     <a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">@Query</a>(<a href="../../../../../org/apache/juneau/http/annotation/Query.html#name--">name</a>="highlight",<a href="../../../../../org/apache/juneau/http/annotation/Query.html#schema--">schema</a>=<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">@Schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html#d--">d</a>="Add severity color highlighting."))
+                     boolean&nbsp;highlight,
+                     <a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">@Query</a>(<a href="../../../../../org/apache/juneau/http/annotation/Query.html#name--">name</a>="start",<a href="../../../../../org/apache/juneau/http/annotation/Query.html#schema--">schema</a>=<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">@Schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html#d--">d</a>="Start timestamp (ISO8601, full or partial).\nDon\'t print lines logged before the specified timestamp.\nUse any of the following formats: yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-ddThh, yyyy-MM-ddThh:mm, yyyy-MM-ddThh:mm:ss, yyyy-MM-ddThh:mm:ss.SSS"))
+                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;start,
+                     <a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">@Query</a>(<a href="../../../../../org/apache/juneau/http/annotation/Query.html#name--">name</a>="end",<a href="../../../../../org/apache/juneau/http/annotation/Query.html#schema--">schema</a>=<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">@Schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html#d--">d</a>="End timestamp (ISO8601, full or partial).\nDon\'t print lines logged after the specified timestamp.\nUse any of the following formats: yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-ddThh, yyyy-MM-ddThh:mm, yyyy-MM-ddThh:mm:ss, yyyy-MM-ddThh:mm:ss.SSS"))
+                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;end,
+                     <a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">@Query</a>(<a href="../../../../../org/apache/juneau/http/annotation/Query.html#name--">name</a>="thread",<a href="../../../../../org/apache/juneau/http/annotation/Query.html#schema--">schema</a>=<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">@Schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html#d--">d</a>="Thread name filter.\nOnly show log entries with the specified thread name."))
+                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;thread,
+                     <a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">@Query</a>(<a href="../../../../../org/apache/juneau/http/annotation/Query.html#name--">name</a>="loggers",<a href="../../../../../org/apache/juneau/http/annotation/Query.html#schema--">schema</a>=<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">@Schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html#d--">d</a>="Logger filter (simple class name).\nOnly show log entries if they were produced by one of the specified loggers."))
+                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;loggers,
+                     <a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">@Query</a>(<a href="../../../../../org/apache/juneau/http/annotation/Query.html#name--">name</a>="severity",<a href="../../../../../org/apache/juneau/http/annotation/Query.html#schema--">schema</a>=<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">@Schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html#d--">d</a>="Severity filter.\nOnly show log entries with the specified severity."))
+                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;severity)
+              throws <a href="../../../../../org/apache/juneau/http/response/NotFound.html" title="class in org.apache.juneau.http.response">NotFound</a>,
+                     <a href="../../../../../org/apache/juneau/http/response/MethodNotAllowed.html" title="class in org.apache.juneau.http.response">MethodNotAllowed</a>,
+                     <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="../../../../../org/apache/juneau/http/response/NotFound.html" title="class in org.apache.juneau.http.response">NotFound</a></code></dd>
+<dd><code><a href="../../../../../org/apache/juneau/http/response/MethodNotAllowed.html" title="class in org.apache.juneau.http.response">MethodNotAllowed</a></code></dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="viewParsedEntries-org.apache.juneau.rest.RestRequest-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-java.lang.String:A-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>viewParsedEntries</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources">LogParser</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.161">viewParsedEntries</a>(<a href="../../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
+                                   <a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation">@Path</a>(<a href="../../../../../org/apache/juneau/http/annotation/Path.html#value--">value</a>="/*")
+                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
+                                   <a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">@Query</a>(<a href="../../../../../org/apache/juneau/http/annotation/Query.html#name--">name</a>="start",<a href="../../../../../org/apache/juneau/http/annotation/Query.html#schema--">schema</a>=<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">@Schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html#d--">d</a>="Start timestamp (ISO8601, full or partial).\nDon\'t print lines logged before the specified timestamp.\nUse any of the following formats: yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-ddThh, yyyy-MM-ddThh:mm, yyyy-MM-ddThh:mm:ss, yyyy-MM-ddThh:mm:ss.SSS"))
+                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;start,
+                                   <a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">@Query</a>(<a href="../../../../../org/apache/juneau/http/annotation/Query.html#name--">name</a>="end",<a href="../../../../../org/apache/juneau/http/annotation/Query.html#schema--">schema</a>=<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">@Schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html#d--">d</a>="End timestamp (ISO8601, full or partial).\nDon\'t print lines logged after the specified timestamp.\nUse any of the following formats: yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-ddThh, yyyy-MM-ddThh:mm, yyyy-MM-ddThh:mm:ss, yyyy-MM-ddThh:mm:ss.SSS"))
+                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;end,
+                                   <a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">@Query</a>(<a href="../../../../../org/apache/juneau/http/annotation/Query.html#name--">name</a>="thread",<a href="../../../../../org/apache/juneau/http/annotation/Query.html#schema--">schema</a>=<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">@Schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html#d--">d</a>="Thread name filter.\nOnly show log entries with the specified thread name."))
+                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;thread,
+                                   <a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">@Query</a>(<a href="../../../../../org/apache/juneau/http/annotation/Query.html#name--">name</a>="loggers",<a href="../../../../../org/apache/juneau/http/annotation/Query.html#schema--">schema</a>=<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">@Schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html#d--">d</a>="Logger filter (simple class name).\nOnly show log entries if they were produced by one of the specified loggers."))
+                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;loggers,
+                                   <a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">@Query</a>(<a href="../../../../../org/apache/juneau/http/annotation/Query.html#name--">name</a>="severity",<a href="../../../../../org/apache/juneau/http/annotation/Query.html#schema--">schema</a>=<a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">@Schema</a>(<a href="../../../../../org/apache/juneau/annotation/Schema.html#d--">d</a>="Severity filter.\nOnly show log entries with the specified severity."))
+                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;severity)
+                            throws <a href="../../../../../org/apache/juneau/http/response/NotFound.html" title="class in org.apache.juneau.http.response">NotFound</a>,
+                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="../../../../../org/apache/juneau/http/response/NotFound.html" title="class in org.apache.juneau.http.response">NotFound</a></code></dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="downloadFile-org.apache.juneau.rest.RestResponse-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>downloadFile</h4>
+<pre>public&nbsp;org.apache.juneau.microservice.resources.LogsResource.FileContents&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.185">downloadFile</a>(<a href="../../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;res,
+                                                                                       <a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation">@Path</a>(<a href="../../../../../org/apache/juneau/http/annotation/Path.html#value--">value</a>="/*")
+                                                                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)
+                                                                                throws <a href="../../../../../org/apache/juneau/http/response/NotFound.html" title="class in org.apache.juneau.http.response">NotFound</a>,
+                                                                                       <a href="../../../../../org/apache/juneau/http/response/MethodNotAllowed.html" title="class in org.apache.juneau.http.response">MethodNotAllowed</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="../../../../../org/apache/juneau/http/response/NotFound.html" title="class in org.apache.juneau.http.response">NotFound</a></code></dd>
+<dd><code><a href="../../../../../org/apache/juneau/http/response/MethodNotAllowed.html" title="class in org.apache.juneau.http.response">MethodNotAllowed</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="deleteFile-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>deleteFile</h4>
+<pre>public&nbsp;org.apache.juneau.microservice.resources.LogsResource.RedirectToRoot&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.199">deleteFile</a>(<a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation">@Path</a>(<a href="../../../../../org/apache/juneau/http/annotation/Path.html#value--">value</a>="/*")
+                                                                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)
+                                                                                throws <a href="../../../../../org/apache/juneau/http/response/MethodNotAllowed.html" title="class in org.apache.juneau.http.response">MethodNotAllowed</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="../../../../../org/apache/juneau/http/response/MethodNotAllowed.html" title="class in org.apache.juneau.http.response">MethodNotAllowed</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.Action.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/juneau/microservice/resources/LogsResource.html" target="_top">Frames</a></li>
+<li><a href="LogsResource.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2016&#x2013;2022 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/SampleRootResource.html b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/SampleRootResource.html
index fa41081..6b41394 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/SampleRootResource.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/SampleRootResource.html
@@ -42,7 +42,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/juneau/microservice/resources/ShutdownResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -261,7 +261,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/juneau/microservice/resources/ShutdownResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/package-frame.html b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/package-frame.html
index 9510af3..e1d6aa5 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/package-frame.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/package-frame.html
@@ -16,6 +16,11 @@
 <li><a href="ConfigResource.html" title="class in org.apache.juneau.microservice.resources" target="classFrame">ConfigResource</a></li>
 <li><a href="DirectoryResource.html" title="class in org.apache.juneau.microservice.resources" target="classFrame">DirectoryResource</a></li>
 <li><a href="DirectoryResource.Action.html" title="class in org.apache.juneau.microservice.resources" target="classFrame">DirectoryResource.Action</a></li>
+<li><a href="LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources" target="classFrame">LogEntryFormatter</a></li>
+<li><a href="LogParser.html" title="class in org.apache.juneau.microservice.resources" target="classFrame">LogParser</a></li>
+<li><a href="LogsResource.html" title="class in org.apache.juneau.microservice.resources" target="classFrame">LogsResource</a></li>
+<li><a href="LogsResource.Action.html" title="class in org.apache.juneau.microservice.resources" target="classFrame">LogsResource.Action</a></li>
+<li><a href="LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources" target="classFrame">LogsResource.FileResource</a></li>
 <li><a href="SampleRootResource.html" title="class in org.apache.juneau.microservice.resources" target="classFrame">SampleRootResource</a></li>
 <li><a href="ShutdownResource.html" title="class in org.apache.juneau.microservice.resources" target="classFrame">ShutdownResource</a></li>
 </ul>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/package-summary.html b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/package-summary.html
index 9d70273..46be8b4 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/package-summary.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/package-summary.html
@@ -102,6 +102,32 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../org/apache/juneau/microservice/resources/LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources">LogEntryFormatter</a></td>
+<td class="colLast">
+<div class="block">Log entry formatter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources">LogParser</a></td>
+<td class="colLast">
+<div class="block">Utility class for reading log files.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource</a></td>
+<td class="colLast">
+<div class="block">REST resource for viewing and accessing log files.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.Action.html" title="class in org.apache.juneau.microservice.resources">LogsResource.Action</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource.FileResource</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/juneau/microservice/resources/SampleRootResource.html" title="class in org.apache.juneau.microservice.resources">SampleRootResource</a></td>
 <td class="colLast">
 <div class="block">Sample root REST resource.</div>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/package-tree.html b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/package-tree.html
index 6f8cfff..7c48cb0 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/package-tree.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/microservice/resources/package-tree.html
@@ -81,6 +81,11 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Object</span></a>
 <ul>
 <li type="circle">org.apache.juneau.microservice.resources.<a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.FileResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">DirectoryResource.FileResource</span></a></li>
+<li type="circle">java.util.logging.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/logging/Formatter.html?is-external=true" title="class or interface in java.util.logging"><span class="typeNameLink">Formatter</span></a>
+<ul>
+<li type="circle">org.apache.juneau.microservice.resources.<a href="../../../../../org/apache/juneau/microservice/resources/LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">LogEntryFormatter</span></a></li>
+</ul>
+</li>
 <li type="circle">javax.servlet.GenericServlet (implements java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, javax.servlet.Servlet, javax.servlet.ServletConfig)
 <ul>
 <li type="circle">javax.servlet.http.HttpServlet
@@ -96,6 +101,7 @@
 </li>
 <li type="circle">org.apache.juneau.microservice.resources.<a href="../../../../../org/apache/juneau/microservice/resources/ConfigResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">ConfigResource</span></a> (implements org.apache.juneau.rest.config.<a href="../../../../../org/apache/juneau/rest/config/BasicUniversalConfig.html" title="interface in org.apache.juneau.rest.config">BasicUniversalConfig</a>)</li>
 <li type="circle">org.apache.juneau.microservice.resources.<a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">DirectoryResource</span></a> (implements org.apache.juneau.rest.config.<a href="../../../../../org/apache/juneau/rest/config/BasicUniversalConfig.html" title="interface in org.apache.juneau.rest.config">BasicUniversalConfig</a>)</li>
+<li type="circle">org.apache.juneau.microservice.resources.<a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">LogsResource</span></a> (implements org.apache.juneau.rest.config.<a href="../../../../../org/apache/juneau/rest/config/BasicUniversalConfig.html" title="interface in org.apache.juneau.rest.config">BasicUniversalConfig</a>)</li>
 <li type="circle">org.apache.juneau.microservice.resources.<a href="../../../../../org/apache/juneau/microservice/resources/ShutdownResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">ShutdownResource</span></a> (implements org.apache.juneau.rest.config.<a href="../../../../../org/apache/juneau/rest/config/BasicUniversalConfig.html" title="interface in org.apache.juneau.rest.config">BasicUniversalConfig</a>)</li>
 </ul>
 </li>
@@ -108,8 +114,12 @@
 <li type="circle">org.apache.juneau.dto.<a href="../../../../../org/apache/juneau/dto/LinkString.html" title="class in org.apache.juneau.dto"><span class="typeNameLink">LinkString</span></a> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;)
 <ul>
 <li type="circle">org.apache.juneau.microservice.resources.<a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.Action.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">DirectoryResource.Action</span></a></li>
+<li type="circle">org.apache.juneau.microservice.resources.<a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.Action.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">LogsResource.Action</span></a></li>
 </ul>
 </li>
+<li type="circle">org.apache.juneau.microservice.resources.<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">LogParser</span></a> (implements java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>, java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;T&gt;, java.util.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;E&gt;)</li>
+<li type="circle">org.apache.juneau.microservice.resources.<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">LogParser.Entry</span></a></li>
+<li type="circle">org.apache.juneau.microservice.resources.<a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">LogsResource.FileResource</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/rest/arg/FormDataArg.html b/content/site/apidocs-9.0.0/org/apache/juneau/rest/arg/FormDataArg.html
index 4883a0c..fe82580 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/rest/arg/FormDataArg.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/rest/arg/FormDataArg.html
@@ -260,7 +260,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>resolve</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/arg/FormDataArg.html#line.96">resolve</a>(<a href="../../../../../org/apache/juneau/rest/RestOpSession.html" title="class in org.apache.juneau.rest">RestOpSession</a>&nbsp;opSession)
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/arg/FormDataArg.html#line.97">resolve</a>(<a href="../../../../../org/apache/juneau/rest/RestOpSession.html" title="class in org.apache.juneau.rest">RestOpSession</a>&nbsp;opSession)
                throws <a href="https://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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/juneau/rest/arg/RestOpArg.html#resolve-org.apache.juneau.rest.RestOpSession-">RestOpArg</a></code></span></div>
 <div class="block">Resolves the parameter object.</div>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/rest/arg/HeaderArg.html b/content/site/apidocs-9.0.0/org/apache/juneau/rest/arg/HeaderArg.html
index 90b9797..38f49cd 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/rest/arg/HeaderArg.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/rest/arg/HeaderArg.html
@@ -300,7 +300,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>resolve</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/arg/HeaderArg.html#line.137">resolve</a>(<a href="../../../../../org/apache/juneau/rest/RestOpSession.html" title="class in org.apache.juneau.rest">RestOpSession</a>&nbsp;opSession)
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/arg/HeaderArg.html#line.138">resolve</a>(<a href="../../../../../org/apache/juneau/rest/RestOpSession.html" title="class in org.apache.juneau.rest">RestOpSession</a>&nbsp;opSession)
                throws <a href="https://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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/juneau/rest/arg/RestOpArg.html#resolve-org.apache.juneau.rest.RestOpSession-">RestOpArg</a></code></span></div>
 <div class="block">Resolves the parameter object.</div>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/rest/arg/PathArg.html b/content/site/apidocs-9.0.0/org/apache/juneau/rest/arg/PathArg.html
index eacbbb8..1cb483b 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/rest/arg/PathArg.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/rest/arg/PathArg.html
@@ -263,7 +263,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>resolve</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/arg/PathArg.html#line.114">resolve</a>(<a href="../../../../../org/apache/juneau/rest/RestOpSession.html" title="class in org.apache.juneau.rest">RestOpSession</a>&nbsp;opSession)
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/arg/PathArg.html#line.115">resolve</a>(<a href="../../../../../org/apache/juneau/rest/RestOpSession.html" title="class in org.apache.juneau.rest">RestOpSession</a>&nbsp;opSession)
                throws <a href="https://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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/juneau/rest/arg/RestOpArg.html#resolve-org.apache.juneau.rest.RestOpSession-">RestOpArg</a></code></span></div>
 <div class="block">Resolves the parameter object.</div>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/rest/arg/QueryArg.html b/content/site/apidocs-9.0.0/org/apache/juneau/rest/arg/QueryArg.html
index d3a5210..d53f651 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/rest/arg/QueryArg.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/rest/arg/QueryArg.html
@@ -112,7 +112,7 @@
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/juneau/rest/arg/QueryArg.html#line.55">QueryArg</a>
+<pre>public class <a href="../../../../../src-html/org/apache/juneau/rest/arg/QueryArg.html#line.56">QueryArg</a>
 extends <a href="https://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/arg/RestOpArg.html" title="interface in org.apache.juneau.rest.arg">RestOpArg</a></pre>
 <div class="block">Resolves method parameters and parameter types annotated with <a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation"><code>Query</code></a> on <a href="../../../../../org/apache/juneau/rest/annotation/RestOp.html" title="annotation in org.apache.juneau.rest.annotation"><code>RestOp</code></a>-annotated Java methods.
@@ -218,7 +218,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>QueryArg</h4>
-<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/arg/QueryArg.html#line.81">QueryArg</a>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;pi,
+<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/arg/QueryArg.html#line.82">QueryArg</a>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;pi,
                    <a href="../../../../../org/apache/juneau/AnnotationWorkList.html" title="class in org.apache.juneau">AnnotationWorkList</a>&nbsp;annotations)</pre>
 <div class="block">Constructor.</div>
 <dl>
@@ -242,7 +242,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>create</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/juneau/rest/arg/QueryArg.html" title="class in org.apache.juneau.rest.arg">QueryArg</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/arg/QueryArg.html#line.69">create</a>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;paramInfo,
+<pre>public static&nbsp;<a href="../../../../../org/apache/juneau/rest/arg/QueryArg.html" title="class in org.apache.juneau.rest.arg">QueryArg</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/arg/QueryArg.html#line.70">create</a>(<a href="../../../../../org/apache/juneau/reflect/ParamInfo.html" title="class in org.apache.juneau.reflect">ParamInfo</a>&nbsp;paramInfo,
                               <a href="../../../../../org/apache/juneau/AnnotationWorkList.html" title="class in org.apache.juneau">AnnotationWorkList</a>&nbsp;annotations)</pre>
 <div class="block">Static creator.</div>
 <dl>
@@ -260,7 +260,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>resolve</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/arg/QueryArg.html#line.95">resolve</a>(<a href="../../../../../org/apache/juneau/rest/RestOpSession.html" title="class in org.apache.juneau.rest">RestOpSession</a>&nbsp;opSession)
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/arg/QueryArg.html#line.97">resolve</a>(<a href="../../../../../org/apache/juneau/rest/RestOpSession.html" title="class in org.apache.juneau.rest">RestOpSession</a>&nbsp;opSession)
                throws <a href="https://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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/juneau/rest/arg/RestOpArg.html#resolve-org.apache.juneau.rest.RestOpSession-">RestOpArg</a></code></span></div>
 <div class="block">Resolves the parameter object.</div>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/rest/config/BasicJsonConfig.html b/content/site/apidocs-9.0.0/org/apache/juneau/rest/config/BasicJsonConfig.html
index e0f62fd..a72abd4 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/rest/config/BasicJsonConfig.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/rest/config/BasicJsonConfig.html
@@ -98,7 +98,7 @@
 </dl>
 <dl>
 <dt>All Known Implementing Classes:</dt>
-<dd><a href="../../../../../org/apache/juneau/examples/rest/dto/AtomFeedResource.html" title="class in org.apache.juneau.examples.rest.dto">AtomFeedResource</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestObject.html" title="class in org.apache.juneau.rest.servlet">BasicRestObject</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestObjectGroup.html" title="class in org.apache.juneau.rest.servlet">BasicRestObjectGroup</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServlet.html" title="class in org.apache.juneau.rest.servlet">BasicRestServlet</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServletGroup.html" title="class in org.apache.juneau.rest.servlet">BasicRestServletGroup</a>, <a href="../../../../../org/apache/juneau/rest/springboot/BasicSpringRestServlet.html" title="class in org.apache.juneau.rest.springboot">BasicSpringRestServlet</a>, <a href="../../../../../org/apache/juneau/rest/springboot/BasicSpringRestServletGroup.html" title="class in org.apache.juneau.rest.springboot">BasicSpringRestServletGroup</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ConfigResource.html" title="class in org.apache.juneau.microservice.resources">ConfigResource</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/resources/DebugResource.html" title="class in org.apache.juneau.microservice.jetty.resources">DebugResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/DtoExamples.html" title="class in org.apache.juneau.examples.rest.dto">DtoExamples</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/template/HelloWorldResource.html" title="class in org.apache.juneau.microservice.jetty.template">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/HelloWorldResource.html" title="class in org.apache.juneau.examples.rest">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/microservice/springboot/template/HelloWorldResource.html" title="class in org.apache.juneau.microservice.springboot.template">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/springboot/HelloWorldResource.html" title="class in org.apache.juneau.examples.rest.springboot">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/HtmlBeansResource.html" title="class in org.apache.juneau.examples.rest">HtmlBeansResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/JsonSchemaResource.html" title="class in org.apache.juneau.examples.rest.dto">JsonSchemaResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/PhotosResource.html" title="class in org.apache.juneau.examples.rest">PhotosResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/RequestEchoResource.html" title="class in org.apache.juneau.examples.rest">RequestEchoResource</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/template/RootResources.html" title="class in org.apache.juneau.microservice.jetty.template">RootResources</a>, <a href="../../../../../org/apache/juneau/examples/rest/RootResources.html" title="class in org.apache.juneau.examples.rest">RootResources</a>, <a href="../../../../../org/apache/juneau/microservice/springboot/template/RootResources.html" title="class in org.apache.juneau.microservice.springboot.template">RootResources</a>, <a href="../../../../../org/apache/juneau/examples/rest/springboot/RootResources.html" title="class in org.apache.juneau.examples.rest.springboot">RootResources</a>, <a href="../../../../../org/apache/juneau/rest/remote/RrpcServlet.html" title="class in org.apache.juneau.rest.remote">RrpcServlet</a>, <a href="../../../../../org/apache/juneau/microservice/resources/SampleRootResource.html" title="class in org.apache.juneau.microservice.resources">SampleRootResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ShutdownResource.html" title="class in org.apache.juneau.microservice.resources">ShutdownResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/UtilityBeansResource.html" title="class in org.apache.juneau.examples.rest">UtilityBeansResource</a></dd>
+<dd><a href="../../../../../org/apache/juneau/examples/rest/dto/AtomFeedResource.html" title="class in org.apache.juneau.examples.rest.dto">AtomFeedResource</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestObject.html" title="class in org.apache.juneau.rest.servlet">BasicRestObject</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestObjectGroup.html" title="class in org.apache.juneau.rest.servlet">BasicRestObjectGroup</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServlet.html" title="class in org.apache.juneau.rest.servlet">BasicRestServlet</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServletGroup.html" title="class in org.apache.juneau.rest.servlet">BasicRestServletGroup</a>, <a href="../../../../../org/apache/juneau/rest/springboot/BasicSpringRestServlet.html" title="class in org.apache.juneau.rest.springboot">BasicSpringRestServlet</a>, <a href="../../../../../org/apache/juneau/rest/springboot/BasicSpringRestServletGroup.html" title="class in org.apache.juneau.rest.springboot">BasicSpringRestServletGroup</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ConfigResource.html" title="class in org.apache.juneau.microservice.resources">ConfigResource</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/resources/DebugResource.html" title="class in org.apache.juneau.microservice.jetty.resources">DebugResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/DtoExamples.html" title="class in org.apache.juneau.examples.rest.dto">DtoExamples</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/template/HelloWorldResource.html" title="class in org.apache.juneau.microservice.jetty.template">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/HelloWorldResource.html" title="class in org.apache.juneau.examples.rest">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/microservice/springboot/template/HelloWorldResource.html" title="class in org.apache.juneau.microservice.springboot.template">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/springboot/HelloWorldResource.html" title="class in org.apache.juneau.examples.rest.springboot">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/HtmlBeansResource.html" title="class in org.apache.juneau.examples.rest">HtmlBeansResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/JsonSchemaResource.html" title="class in org.apache.juneau.examples.rest.dto">JsonSchemaResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/PhotosResource.html" title="class in org.apache.juneau.examples.rest">PhotosResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/RequestEchoResource.html" title="class in org.apache.juneau.examples.rest">RequestEchoResource</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/template/RootResources.html" title="class in org.apache.juneau.microservice.jetty.template">RootResources</a>, <a href="../../../../../org/apache/juneau/examples/rest/RootResources.html" title="class in org.apache.juneau.examples.rest">RootResources</a>, <a href="../../../../../org/apache/juneau/microservice/springboot/template/RootResources.html" title="class in org.apache.juneau.microservice.springboot.template">RootResources</a>, <a href="../../../../../org/apache/juneau/examples/rest/springboot/RootResources.html" title="class in org.apache.juneau.examples.rest.springboot">RootResources</a>, <a href="../../../../../org/apache/juneau/rest/remote/RrpcServlet.html" title="class in org.apache.juneau.rest.remote">RrpcServlet</a>, <a href="../../../../../org/apache/juneau/microservice/resources/SampleRootResource.html" title="class in org.apache.juneau.microservice.resources">SampleRootResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ShutdownResource.html" title="class in org.apache.juneau.microservice.resources">ShutdownResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/UtilityBeansResource.html" title="class in org.apache.juneau.examples.rest">UtilityBeansResource</a></dd>
 </dl>
 <hr>
 <br>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/rest/config/BasicUniversalConfig.html b/content/site/apidocs-9.0.0/org/apache/juneau/rest/config/BasicUniversalConfig.html
index 735d50c..4495609 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/rest/config/BasicUniversalConfig.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/rest/config/BasicUniversalConfig.html
@@ -102,7 +102,7 @@
 </dl>
 <dl>
 <dt>All Known Implementing Classes:</dt>
-<dd><a href="../../../../../org/apache/juneau/examples/rest/dto/AtomFeedResource.html" title="class in org.apache.juneau.examples.rest.dto">AtomFeedResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ConfigResource.html" title="class in org.apache.juneau.microservice.resources">ConfigResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/DtoExamples.html" title="class in org.apache.juneau.examples.rest.dto">DtoExamples</a>, <a href="../../../../../org/apache/juneau/examples/rest/HelloWorldResource.html" title="class in org.apache.juneau.examples.rest">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/microservice/springboot/template/HelloWorldResource.html" title="class in org.apache.juneau.microservice.springboot.template">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/springboot/HelloWorldResource.html" title="class in org.apache.juneau.examples.rest.springboot">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/HtmlBeansResource.html" title="class in org.apache.juneau.examples.rest">HtmlBeansResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/JsonSchemaResource.html" title="class in org.apache.juneau.examples.rest.dto">JsonSchemaResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/PhotosResource.html" title="class in org.apache.juneau.examples.rest">PhotosResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/RequestEchoResource.html" title="class in org.apache.juneau.examples.rest">RequestEchoResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/RootResources.html" title="class in org.apache.juneau.examples.rest">RootResources</a>, <a href="../../../../../org/apache/juneau/microservice/springboot/template/RootResources.html" title="class in org.apache.juneau.microservice.springboot.template">RootResources</a>, <a href="../../../../../org/apache/juneau/examples/rest/springboot/RootResources.html" title="class in org.apache.juneau.examples.rest.springboot">RootResources</a>, <a href="../../../../../org/apache/juneau/microservice/resources/SampleRootResource.html" title="class in org.apache.juneau.microservice.resources">SampleRootResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ShutdownResource.html" title="class in org.apache.juneau.microservice.resources">ShutdownResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/UtilityBeansResource.html" title="class in org.apache.juneau.examples.rest">UtilityBeansResource</a></dd>
+<dd><a href="../../../../../org/apache/juneau/examples/rest/dto/AtomFeedResource.html" title="class in org.apache.juneau.examples.rest.dto">AtomFeedResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ConfigResource.html" title="class in org.apache.juneau.microservice.resources">ConfigResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/DtoExamples.html" title="class in org.apache.juneau.examples.rest.dto">DtoExamples</a>, <a href="../../../../../org/apache/juneau/examples/rest/HelloWorldResource.html" title="class in org.apache.juneau.examples.rest">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/microservice/springboot/template/HelloWorldResource.html" title="class in org.apache.juneau.microservice.springboot.template">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/springboot/HelloWorldResource.html" title="class in org.apache.juneau.examples.rest.springboot">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/HtmlBeansResource.html" title="class in org.apache.juneau.examples.rest">HtmlBeansResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/JsonSchemaResource.html" title="class in org.apache.juneau.examples.rest.dto">JsonSchemaResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/PhotosResource.html" title="class in org.apache.juneau.examples.rest">PhotosResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/RequestEchoResource.html" title="class in org.apache.juneau.examples.rest">RequestEchoResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/RootResources.html" title="class in org.apache.juneau.examples.rest">RootResources</a>, <a href="../../../../../org/apache/juneau/microservice/springboot/template/RootResources.html" title="class in org.apache.juneau.microservice.springboot.template">RootResources</a>, <a href="../../../../../org/apache/juneau/examples/rest/springboot/RootResources.html" title="class in org.apache.juneau.examples.rest.springboot">RootResources</a>, <a href="../../../../../org/apache/juneau/microservice/resources/SampleRootResource.html" title="class in org.apache.juneau.microservice.resources">SampleRootResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ShutdownResource.html" title="class in org.apache.juneau.microservice.resources">ShutdownResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/UtilityBeansResource.html" title="class in org.apache.juneau.examples.rest">UtilityBeansResource</a></dd>
 </dl>
 <hr>
 <br>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/rest/config/DefaultConfig.html b/content/site/apidocs-9.0.0/org/apache/juneau/rest/config/DefaultConfig.html
index 3125ed9..a30aa53 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/rest/config/DefaultConfig.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/rest/config/DefaultConfig.html
@@ -98,7 +98,7 @@
 </dl>
 <dl>
 <dt>All Known Implementing Classes:</dt>
-<dd><a href="../../../../../org/apache/juneau/examples/rest/dto/AtomFeedResource.html" title="class in org.apache.juneau.examples.rest.dto">AtomFeedResource</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestObject.html" title="class in org.apache.juneau.rest.servlet">BasicRestObject</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestObjectGroup.html" title="class in org.apache.juneau.rest.servlet">BasicRestObjectGroup</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServlet.html" title="class in org.apache.juneau.rest.servlet">BasicRestServlet</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServletGroup.html" title="class in org.apache.juneau.rest.servlet">BasicRestServletGroup</a>, <a href="../../../../../org/apache/juneau/rest/springboot/BasicSpringRestServlet.html" title="class in org.apache.juneau.rest.springboot">BasicSpringRestServlet</a>, <a href="../../../../../org/apache/juneau/rest/springboot/BasicSpringRestServletGroup.html" title="class in org.apache.juneau.rest.springboot">BasicSpringRestServletGroup</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ConfigResource.html" title="class in org.apache.juneau.microservice.resources">ConfigResource</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/resources/DebugResource.html" title="class in org.apache.juneau.microservice.jetty.resources">DebugResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/DtoExamples.html" title="class in org.apache.juneau.examples.rest.dto">DtoExamples</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/template/HelloWorldResource.html" title="class in org.apache.juneau.microservice.jetty.template">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/HelloWorldResource.html" title="class in org.apache.juneau.examples.rest">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/microservice/springboot/template/HelloWorldResource.html" title="class in org.apache.juneau.microservice.springboot.template">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/springboot/HelloWorldResource.html" title="class in org.apache.juneau.examples.rest.springboot">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/HtmlBeansResource.html" title="class in org.apache.juneau.examples.rest">HtmlBeansResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/JsonSchemaResource.html" title="class in org.apache.juneau.examples.rest.dto">JsonSchemaResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/PhotosResource.html" title="class in org.apache.juneau.examples.rest">PhotosResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/RequestEchoResource.html" title="class in org.apache.juneau.examples.rest">RequestEchoResource</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/template/RootResources.html" title="class in org.apache.juneau.microservice.jetty.template">RootResources</a>, <a href="../../../../../org/apache/juneau/examples/rest/RootResources.html" title="class in org.apache.juneau.examples.rest">RootResources</a>, <a href="../../../../../org/apache/juneau/microservice/springboot/template/RootResources.html" title="class in org.apache.juneau.microservice.springboot.template">RootResources</a>, <a href="../../../../../org/apache/juneau/examples/rest/springboot/RootResources.html" title="class in org.apache.juneau.examples.rest.springboot">RootResources</a>, <a href="../../../../../org/apache/juneau/rest/remote/RrpcServlet.html" title="class in org.apache.juneau.rest.remote">RrpcServlet</a>, <a href="../../../../../org/apache/juneau/microservice/resources/SampleRootResource.html" title="class in org.apache.juneau.microservice.resources">SampleRootResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ShutdownResource.html" title="class in org.apache.juneau.microservice.resources">ShutdownResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/UtilityBeansResource.html" title="class in org.apache.juneau.examples.rest">UtilityBeansResource</a></dd>
+<dd><a href="../../../../../org/apache/juneau/examples/rest/dto/AtomFeedResource.html" title="class in org.apache.juneau.examples.rest.dto">AtomFeedResource</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestObject.html" title="class in org.apache.juneau.rest.servlet">BasicRestObject</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestObjectGroup.html" title="class in org.apache.juneau.rest.servlet">BasicRestObjectGroup</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServlet.html" title="class in org.apache.juneau.rest.servlet">BasicRestServlet</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServletGroup.html" title="class in org.apache.juneau.rest.servlet">BasicRestServletGroup</a>, <a href="../../../../../org/apache/juneau/rest/springboot/BasicSpringRestServlet.html" title="class in org.apache.juneau.rest.springboot">BasicSpringRestServlet</a>, <a href="../../../../../org/apache/juneau/rest/springboot/BasicSpringRestServletGroup.html" title="class in org.apache.juneau.rest.springboot">BasicSpringRestServletGroup</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ConfigResource.html" title="class in org.apache.juneau.microservice.resources">ConfigResource</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/resources/DebugResource.html" title="class in org.apache.juneau.microservice.jetty.resources">DebugResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/DtoExamples.html" title="class in org.apache.juneau.examples.rest.dto">DtoExamples</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/template/HelloWorldResource.html" title="class in org.apache.juneau.microservice.jetty.template">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/HelloWorldResource.html" title="class in org.apache.juneau.examples.rest">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/microservice/springboot/template/HelloWorldResource.html" title="class in org.apache.juneau.microservice.springboot.template">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/springboot/HelloWorldResource.html" title="class in org.apache.juneau.examples.rest.springboot">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/HtmlBeansResource.html" title="class in org.apache.juneau.examples.rest">HtmlBeansResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/JsonSchemaResource.html" title="class in org.apache.juneau.examples.rest.dto">JsonSchemaResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/PhotosResource.html" title="class in org.apache.juneau.examples.rest">PhotosResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/RequestEchoResource.html" title="class in org.apache.juneau.examples.rest">RequestEchoResource</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/template/RootResources.html" title="class in org.apache.juneau.microservice.jetty.template">RootResources</a>, <a href="../../../../../org/apache/juneau/examples/rest/RootResources.html" title="class in org.apache.juneau.examples.rest">RootResources</a>, <a href="../../../../../org/apache/juneau/microservice/springboot/template/RootResources.html" title="class in org.apache.juneau.microservice.springboot.template">RootResources</a>, <a href="../../../../../org/apache/juneau/examples/rest/springboot/RootResources.html" title="class in org.apache.juneau.examples.rest.springboot">RootResources</a>, <a href="../../../../../org/apache/juneau/rest/remote/RrpcServlet.html" title="class in org.apache.juneau.rest.remote">RrpcServlet</a>, <a href="../../../../../org/apache/juneau/microservice/resources/SampleRootResource.html" title="class in org.apache.juneau.microservice.resources">SampleRootResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ShutdownResource.html" title="class in org.apache.juneau.microservice.resources">ShutdownResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/UtilityBeansResource.html" title="class in org.apache.juneau.examples.rest">UtilityBeansResource</a></dd>
 </dl>
 <hr>
 <br>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/rest/config/DefaultHtmlConfig.html b/content/site/apidocs-9.0.0/org/apache/juneau/rest/config/DefaultHtmlConfig.html
index b39c9e4..154deec 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/rest/config/DefaultHtmlConfig.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/rest/config/DefaultHtmlConfig.html
@@ -98,7 +98,7 @@
 </dl>
 <dl>
 <dt>All Known Implementing Classes:</dt>
-<dd><a href="../../../../../org/apache/juneau/examples/rest/dto/AtomFeedResource.html" title="class in org.apache.juneau.examples.rest.dto">AtomFeedResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ConfigResource.html" title="class in org.apache.juneau.microservice.resources">ConfigResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/DtoExamples.html" title="class in org.apache.juneau.examples.rest.dto">DtoExamples</a>, <a href="../../../../../org/apache/juneau/examples/rest/HelloWorldResource.html" title="class in org.apache.juneau.examples.rest">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/microservice/springboot/template/HelloWorldResource.html" title="class in org.apache.juneau.microservice.springboot.template">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/springboot/HelloWorldResource.html" title="class in org.apache.juneau.examples.rest.springboot">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/HtmlBeansResource.html" title="class in org.apache.juneau.examples.rest">HtmlBeansResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/JsonSchemaResource.html" title="class in org.apache.juneau.examples.rest.dto">JsonSchemaResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/PhotosResource.html" title="class in org.apache.juneau.examples.rest">PhotosResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/RequestEchoResource.html" title="class in org.apache.juneau.examples.rest">RequestEchoResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/RootResources.html" title="class in org.apache.juneau.examples.rest">RootResources</a>, <a href="../../../../../org/apache/juneau/microservice/springboot/template/RootResources.html" title="class in org.apache.juneau.microservice.springboot.template">RootResources</a>, <a href="../../../../../org/apache/juneau/examples/rest/springboot/RootResources.html" title="class in org.apache.juneau.examples.rest.springboot">RootResources</a>, <a href="../../../../../org/apache/juneau/microservice/resources/SampleRootResource.html" title="class in org.apache.juneau.microservice.resources">SampleRootResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ShutdownResource.html" title="class in org.apache.juneau.microservice.resources">ShutdownResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/UtilityBeansResource.html" title="class in org.apache.juneau.examples.rest">UtilityBeansResource</a></dd>
+<dd><a href="../../../../../org/apache/juneau/examples/rest/dto/AtomFeedResource.html" title="class in org.apache.juneau.examples.rest.dto">AtomFeedResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ConfigResource.html" title="class in org.apache.juneau.microservice.resources">ConfigResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/DtoExamples.html" title="class in org.apache.juneau.examples.rest.dto">DtoExamples</a>, <a href="../../../../../org/apache/juneau/examples/rest/HelloWorldResource.html" title="class in org.apache.juneau.examples.rest">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/microservice/springboot/template/HelloWorldResource.html" title="class in org.apache.juneau.microservice.springboot.template">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/springboot/HelloWorldResource.html" title="class in org.apache.juneau.examples.rest.springboot">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/HtmlBeansResource.html" title="class in org.apache.juneau.examples.rest">HtmlBeansResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/JsonSchemaResource.html" title="class in org.apache.juneau.examples.rest.dto">JsonSchemaResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/PhotosResource.html" title="class in org.apache.juneau.examples.rest">PhotosResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/RequestEchoResource.html" title="class in org.apache.juneau.examples.rest">RequestEchoResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/RootResources.html" title="class in org.apache.juneau.examples.rest">RootResources</a>, <a href="../../../../../org/apache/juneau/microservice/springboot/template/RootResources.html" title="class in org.apache.juneau.microservice.springboot.template">RootResources</a>, <a href="../../../../../org/apache/juneau/examples/rest/springboot/RootResources.html" title="class in org.apache.juneau.examples.rest.springboot">RootResources</a>, <a href="../../../../../org/apache/juneau/microservice/resources/SampleRootResource.html" title="class in org.apache.juneau.microservice.resources">SampleRootResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ShutdownResource.html" title="class in org.apache.juneau.microservice.resources">ShutdownResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/UtilityBeansResource.html" title="class in org.apache.juneau.examples.rest">UtilityBeansResource</a></dd>
 </dl>
 <hr>
 <br>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/rest/httppart/RequestFormParam.html b/content/site/apidocs-9.0.0/org/apache/juneau/rest/httppart/RequestFormParam.html
index fa3caf5..0a21aca 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/rest/httppart/RequestFormParam.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/rest/httppart/RequestFormParam.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -259,18 +259,24 @@
 </td>
 </tr>
 <tr id="i5" class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html#def-java.lang.String-">def</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;def)</code>
+<div class="block">Sets a default value for this part.</div>
+</td>
+</tr>
+<tr id="i6" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html#getValue--">getValue</a></span>()</code>
 <div class="block">Gets the value of this part.</div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html#parser-org.apache.juneau.httppart.HttpPartParserSession-">parser</a></span>(<a href="../../../../../org/apache/juneau/httppart/HttpPartParserSession.html" title="interface in org.apache.juneau.httppart">HttpPartParserSession</a>&nbsp;value)</code>
 <div class="block">Specifies the part parser to use for this part.</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html#schema-org.apache.juneau.httppart.HttpPartSchema-">schema</a></span>(<a href="../../../../../org/apache/juneau/httppart/HttpPartSchema.html" title="class in org.apache.juneau.httppart">HttpPartSchema</a>&nbsp;value)</code>
 <div class="block">Specifies the part schema for this part.</div>
@@ -373,13 +379,29 @@
 </dl>
 </li>
 </ul>
+<a name="def-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>def</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestFormParam.html#line.145">def</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;def)</pre>
+<div class="block">Sets a default value for this part.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>def</code> - The default value.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>This object.</dd>
+</dl>
+</li>
+</ul>
 <a name="assertString--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>assertString</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentStringAssertion.html" title="class in org.apache.juneau.assertions">FluentStringAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestFormParam.html#line.163">assertString</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentStringAssertion.html" title="class in org.apache.juneau.assertions">FluentStringAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestFormParam.html#line.176">assertString</a>()</pre>
 <div class="block">Provides the ability to perform fluent-style assertions on this parameter.
 
  <h5 class='section'>Examples:</h5>
@@ -409,7 +431,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertInteger</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentIntegerAssertion.html" title="class in org.apache.juneau.assertions">FluentIntegerAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestFormParam.html#line.179">assertInteger</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentIntegerAssertion.html" title="class in org.apache.juneau.assertions">FluentIntegerAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestFormParam.html#line.192">assertInteger</a>()</pre>
 <div class="block">Provides the ability to perform fluent-style assertions on an integer parameter.
 
  <h5 class='section'>Examples:</h5>
@@ -430,7 +452,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertLong</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentLongAssertion.html" title="class in org.apache.juneau.assertions">FluentLongAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestFormParam.html#line.195">assertLong</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentLongAssertion.html" title="class in org.apache.juneau.assertions">FluentLongAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestFormParam.html#line.208">assertLong</a>()</pre>
 <div class="block">Provides the ability to perform fluent-style assertions on a long parameter.
 
  <h5 class='section'>Examples:</h5>
@@ -451,7 +473,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertDate</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentZonedDateTimeAssertion.html" title="class in org.apache.juneau.assertions">FluentZonedDateTimeAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestFormParam.html#line.211">assertDate</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentZonedDateTimeAssertion.html" title="class in org.apache.juneau.assertions">FluentZonedDateTimeAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestFormParam.html#line.224">assertDate</a>()</pre>
 <div class="block">Provides the ability to perform fluent-style assertions on a date parameter.
 
  <h5 class='section'>Examples:</h5>
@@ -472,7 +494,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertCsvArray</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentListAssertion.html" title="class in org.apache.juneau.assertions">FluentListAssertion</a>&lt;<a href="https://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/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestFormParam.html#line.227">assertCsvArray</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentListAssertion.html" title="class in org.apache.juneau.assertions">FluentListAssertion</a>&lt;<a href="https://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/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestFormParam.html#line.240">assertCsvArray</a>()</pre>
 <div class="block">Provides the ability to perform fluent-style assertions on comma-separated string parameters.
 
  <h5 class='section'>Examples:</h5>
@@ -493,7 +515,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>schema</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestFormParam.html#line.234">schema</a>(<a href="../../../../../org/apache/juneau/httppart/HttpPartSchema.html" title="class in org.apache.juneau.httppart">HttpPartSchema</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestFormParam.html#line.247">schema</a>(<a href="../../../../../org/apache/juneau/httppart/HttpPartSchema.html" title="class in org.apache.juneau.httppart">HttpPartSchema</a>&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/rest/httppart/RequestHttpPart.html#schema-org.apache.juneau.httppart.HttpPartSchema-">RequestHttpPart</a></code></span></div>
 <div class="block">Specifies the part schema for this part.
 
@@ -515,7 +537,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>parser</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestFormParam.html#line.240">parser</a>(<a href="../../../../../org/apache/juneau/httppart/HttpPartParserSession.html" title="interface in org.apache.juneau.httppart">HttpPartParserSession</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestFormParam.html#line.253">parser</a>(<a href="../../../../../org/apache/juneau/httppart/HttpPartParserSession.html" title="interface in org.apache.juneau.httppart">HttpPartParserSession</a>&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/rest/httppart/RequestHttpPart.html#parser-org.apache.juneau.httppart.HttpPartParserSession-">RequestHttpPart</a></code></span></div>
 <div class="block">Specifies the part parser to use for this part.
 
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/rest/httppart/RequestHeader.html b/content/site/apidocs-9.0.0/org/apache/juneau/rest/httppart/RequestHeader.html
index 8837823..873a36d 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/rest/httppart/RequestHeader.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/rest/httppart/RequestHeader.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -316,30 +316,36 @@
 </td>
 </tr>
 <tr id="i15" class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html#def-java.lang.String-">def</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;def)</code>
+<div class="block">Sets a default value for this part.</div>
+</td>
+</tr>
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>org.apache.http.HeaderElement[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html#getElements--">getElements</a></span>()</code>
 <div class="block">Parses the value.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html#getValue--">getValue</a></span>()</code>
 <div class="block">Gets the value of this part.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html#parser-org.apache.juneau.httppart.HttpPartParserSession-">parser</a></span>(<a href="../../../../../org/apache/juneau/httppart/HttpPartParserSession.html" title="interface in org.apache.juneau.httppart">HttpPartParserSession</a>&nbsp;value)</code>
 <div class="block">Specifies the part parser to use for this part.</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html#schema-org.apache.juneau.httppart.HttpPartSchema-">schema</a></span>(<a href="../../../../../org/apache/juneau/httppart/HttpPartSchema.html" title="class in org.apache.juneau.httppart">HttpPartSchema</a>&nbsp;value)</code>
 <div class="block">Specifies the part schema for this part.</div>
 </td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html#toString--">toString</a></span>()</code>&nbsp;</td>
 </tr>
@@ -405,13 +411,29 @@
 <!--   -->
 </a>
 <h3>Method Detail</h3>
+<a name="def-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>def</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.118">def</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;def)</pre>
+<div class="block">Sets a default value for this part.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>def</code> - The default value.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>This object.</dd>
+</dl>
+</li>
+</ul>
 <a name="getValue--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getValue</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.117">getValue</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.129">getValue</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/rest/httppart/RequestHttpPart.html#getValue--">RequestHttpPart</a></code></span></div>
 <div class="block">Gets the value of this part.</div>
 <dl>
@@ -430,7 +452,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>asCsvHeader</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/header/BasicCsvHeader.html" title="class in org.apache.juneau.http.header">BasicCsvHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.126">asCsvHeader</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/header/BasicCsvHeader.html" title="class in org.apache.juneau.http.header">BasicCsvHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.138">asCsvHeader</a>()</pre>
 <div class="block">Returns the value of this header as a <a href="../../../../../org/apache/juneau/http/header/BasicCsvHeader.html" title="class in org.apache.juneau.http.header"><code>BasicCsvHeader</code></a>.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -444,7 +466,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>asDateHeader</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/header/BasicDateHeader.html" title="class in org.apache.juneau.http.header">BasicDateHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.135">asDateHeader</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/header/BasicDateHeader.html" title="class in org.apache.juneau.http.header">BasicDateHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.147">asDateHeader</a>()</pre>
 <div class="block">Returns the value of this header as a <a href="../../../../../org/apache/juneau/http/header/BasicDateHeader.html" title="class in org.apache.juneau.http.header"><code>BasicDateHeader</code></a>.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -458,7 +480,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>asEntityTagsHeader</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/header/BasicEntityTagsHeader.html" title="class in org.apache.juneau.http.header">BasicEntityTagsHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.144">asEntityTagsHeader</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/header/BasicEntityTagsHeader.html" title="class in org.apache.juneau.http.header">BasicEntityTagsHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.156">asEntityTagsHeader</a>()</pre>
 <div class="block">Returns the value of this header as a <a href="../../../../../org/apache/juneau/http/header/BasicEntityTagsHeader.html" title="class in org.apache.juneau.http.header"><code>BasicEntityTagsHeader</code></a>.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -472,7 +494,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>asEntityTagHeader</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/header/BasicEntityTagHeader.html" title="class in org.apache.juneau.http.header">BasicEntityTagHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.153">asEntityTagHeader</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/header/BasicEntityTagHeader.html" title="class in org.apache.juneau.http.header">BasicEntityTagHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.165">asEntityTagHeader</a>()</pre>
 <div class="block">Returns the value of this header as a <a href="../../../../../org/apache/juneau/http/header/BasicEntityTagHeader.html" title="class in org.apache.juneau.http.header"><code>BasicEntityTagHeader</code></a>.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -486,7 +508,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>asIntegerHeader</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/header/BasicIntegerHeader.html" title="class in org.apache.juneau.http.header">BasicIntegerHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.162">asIntegerHeader</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/header/BasicIntegerHeader.html" title="class in org.apache.juneau.http.header">BasicIntegerHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.174">asIntegerHeader</a>()</pre>
 <div class="block">Returns the value of this header as a <a href="../../../../../org/apache/juneau/http/header/BasicIntegerHeader.html" title="class in org.apache.juneau.http.header"><code>BasicIntegerHeader</code></a>.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -500,7 +522,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>asBooleanHeader</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/header/BasicBooleanHeader.html" title="class in org.apache.juneau.http.header">BasicBooleanHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.171">asBooleanHeader</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/header/BasicBooleanHeader.html" title="class in org.apache.juneau.http.header">BasicBooleanHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.183">asBooleanHeader</a>()</pre>
 <div class="block">Returns the value of this header as a <a href="../../../../../org/apache/juneau/http/header/BasicBooleanHeader.html" title="class in org.apache.juneau.http.header"><code>BasicBooleanHeader</code></a>.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -514,7 +536,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>asLongHeader</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/header/BasicLongHeader.html" title="class in org.apache.juneau.http.header">BasicLongHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.180">asLongHeader</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/header/BasicLongHeader.html" title="class in org.apache.juneau.http.header">BasicLongHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.192">asLongHeader</a>()</pre>
 <div class="block">Returns the value of this header as a <a href="../../../../../org/apache/juneau/http/header/BasicLongHeader.html" title="class in org.apache.juneau.http.header"><code>BasicLongHeader</code></a>.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -528,7 +550,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>asStringRangesHeader</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/header/BasicStringRangesHeader.html" title="class in org.apache.juneau.http.header">BasicStringRangesHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.189">asStringRangesHeader</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/header/BasicStringRangesHeader.html" title="class in org.apache.juneau.http.header">BasicStringRangesHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.201">asStringRangesHeader</a>()</pre>
 <div class="block">Returns the value of this header as a <a href="../../../../../org/apache/juneau/http/header/BasicStringRangesHeader.html" title="class in org.apache.juneau.http.header"><code>BasicStringRangesHeader</code></a>.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -542,7 +564,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>asStringHeader</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/header/BasicStringHeader.html" title="class in org.apache.juneau.http.header">BasicStringHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.198">asStringHeader</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/header/BasicStringHeader.html" title="class in org.apache.juneau.http.header">BasicStringHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.210">asStringHeader</a>()</pre>
 <div class="block">Returns the value of this header as a <a href="../../../../../org/apache/juneau/http/header/BasicStringHeader.html" title="class in org.apache.juneau.http.header"><code>BasicStringHeader</code></a>.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -556,7 +578,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>asUriHeader</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/header/BasicUriHeader.html" title="class in org.apache.juneau.http.header">BasicUriHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.207">asUriHeader</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/http/header/BasicUriHeader.html" title="class in org.apache.juneau.http.header">BasicUriHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.219">asUriHeader</a>()</pre>
 <div class="block">Returns the value of this header as a <a href="../../../../../org/apache/juneau/http/header/BasicUriHeader.html" title="class in org.apache.juneau.http.header"><code>BasicUriHeader</code></a>.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -570,7 +592,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertString</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentStringAssertion.html" title="class in org.apache.juneau.assertions">FluentStringAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.236">assertString</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentStringAssertion.html" title="class in org.apache.juneau.assertions">FluentStringAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.248">assertString</a>()</pre>
 <div class="block">Provides the ability to perform fluent-style assertions on this parameter.
 
  <h5 class='section'>Examples:</h5>
@@ -600,7 +622,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertInteger</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentIntegerAssertion.html" title="class in org.apache.juneau.assertions">FluentIntegerAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.252">assertInteger</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentIntegerAssertion.html" title="class in org.apache.juneau.assertions">FluentIntegerAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.264">assertInteger</a>()</pre>
 <div class="block">Provides the ability to perform fluent-style assertions on an integer parameter.
 
  <h5 class='section'>Examples:</h5>
@@ -621,7 +643,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertLong</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentLongAssertion.html" title="class in org.apache.juneau.assertions">FluentLongAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.268">assertLong</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentLongAssertion.html" title="class in org.apache.juneau.assertions">FluentLongAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.280">assertLong</a>()</pre>
 <div class="block">Provides the ability to perform fluent-style assertions on a long parameter.
 
  <h5 class='section'>Examples:</h5>
@@ -642,7 +664,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertDate</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentZonedDateTimeAssertion.html" title="class in org.apache.juneau.assertions">FluentZonedDateTimeAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.284">assertDate</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentZonedDateTimeAssertion.html" title="class in org.apache.juneau.assertions">FluentZonedDateTimeAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.296">assertDate</a>()</pre>
 <div class="block">Provides the ability to perform fluent-style assertions on a date parameter.
 
  <h5 class='section'>Examples:</h5>
@@ -663,7 +685,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertCsvArray</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentListAssertion.html" title="class in org.apache.juneau.assertions">FluentListAssertion</a>&lt;<a href="https://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/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.300">assertCsvArray</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentListAssertion.html" title="class in org.apache.juneau.assertions">FluentListAssertion</a>&lt;<a href="https://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/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.312">assertCsvArray</a>()</pre>
 <div class="block">Provides the ability to perform fluent-style assertions on comma-separated string parameters.
 
  <h5 class='section'>Examples:</h5>
@@ -684,7 +706,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getElements</h4>
-<pre>public&nbsp;org.apache.http.HeaderElement[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.311">getElements</a>()
+<pre>public&nbsp;org.apache.http.HeaderElement[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.323">getElements</a>()
                                             throws <a href="../../../../../org/apache/juneau/http/response/BasicHttpException.html" title="class in org.apache.juneau.http.response">BasicHttpException</a></pre>
 <div class="block">Parses the value.</div>
 <dl>
@@ -703,7 +725,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.316">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.328">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/juneau/rest/httppart/RequestHttpPart.html#toString--">toString</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/juneau/rest/httppart/RequestHttpPart.html" title="class in org.apache.juneau.rest.httppart">RequestHttpPart</a></code></dd>
@@ -716,7 +738,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>schema</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.323">schema</a>(<a href="../../../../../org/apache/juneau/httppart/HttpPartSchema.html" title="class in org.apache.juneau.httppart">HttpPartSchema</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.335">schema</a>(<a href="../../../../../org/apache/juneau/httppart/HttpPartSchema.html" title="class in org.apache.juneau.httppart">HttpPartSchema</a>&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/rest/httppart/RequestHttpPart.html#schema-org.apache.juneau.httppart.HttpPartSchema-">RequestHttpPart</a></code></span></div>
 <div class="block">Specifies the part schema for this part.
 
@@ -738,7 +760,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>parser</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.329">parser</a>(<a href="../../../../../org/apache/juneau/httppart/HttpPartParserSession.html" title="interface in org.apache.juneau.httppart">HttpPartParserSession</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.341">parser</a>(<a href="../../../../../org/apache/juneau/httppart/HttpPartParserSession.html" title="interface in org.apache.juneau.httppart">HttpPartParserSession</a>&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/rest/httppart/RequestHttpPart.html#parser-org.apache.juneau.httppart.HttpPartParserSession-">RequestHttpPart</a></code></span></div>
 <div class="block">Specifies the part parser to use for this part.
 
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/rest/httppart/RequestPathParam.html b/content/site/apidocs-9.0.0/org/apache/juneau/rest/httppart/RequestPathParam.html
index 246edcc..4c36d79 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/rest/httppart/RequestPathParam.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/rest/httppart/RequestPathParam.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -253,18 +253,24 @@
 </td>
 </tr>
 <tr id="i5" class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html#def-java.lang.String-">def</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;def)</code>
+<div class="block">Sets a default value for this part.</div>
+</td>
+</tr>
+<tr id="i6" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html#getValue--">getValue</a></span>()</code>
 <div class="block">Gets the value of this part.</div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html#parser-org.apache.juneau.httppart.HttpPartParserSession-">parser</a></span>(<a href="../../../../../org/apache/juneau/httppart/HttpPartParserSession.html" title="interface in org.apache.juneau.httppart">HttpPartParserSession</a>&nbsp;value)</code>
 <div class="block">Specifies the part parser to use for this part.</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html#schema-org.apache.juneau.httppart.HttpPartSchema-">schema</a></span>(<a href="../../../../../org/apache/juneau/httppart/HttpPartSchema.html" title="class in org.apache.juneau.httppart">HttpPartSchema</a>&nbsp;value)</code>
 <div class="block">Specifies the part schema for this part.</div>
@@ -332,13 +338,29 @@
 <!--   -->
 </a>
 <h3>Method Detail</h3>
+<a name="def-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>def</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.113">def</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;def)</pre>
+<div class="block">Sets a default value for this part.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>def</code> - The default value.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>This object.</dd>
+</dl>
+</li>
+</ul>
 <a name="getValue--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getValue</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.112">getValue</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.124">getValue</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/rest/httppart/RequestHttpPart.html#getValue--">RequestHttpPart</a></code></span></div>
 <div class="block">Gets the value of this part.</div>
 <dl>
@@ -357,7 +379,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertString</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentStringAssertion.html" title="class in org.apache.juneau.assertions">FluentStringAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.141">assertString</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentStringAssertion.html" title="class in org.apache.juneau.assertions">FluentStringAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.153">assertString</a>()</pre>
 <div class="block">Provides the ability to perform fluent-style assertions on this parameter.
 
  <h5 class='section'>Examples:</h5>
@@ -387,7 +409,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertInteger</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentIntegerAssertion.html" title="class in org.apache.juneau.assertions">FluentIntegerAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.157">assertInteger</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentIntegerAssertion.html" title="class in org.apache.juneau.assertions">FluentIntegerAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.169">assertInteger</a>()</pre>
 <div class="block">Provides the ability to perform fluent-style assertions on an integer parameter.
 
  <h5 class='section'>Examples:</h5>
@@ -408,7 +430,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertLong</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentLongAssertion.html" title="class in org.apache.juneau.assertions">FluentLongAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.173">assertLong</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentLongAssertion.html" title="class in org.apache.juneau.assertions">FluentLongAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.185">assertLong</a>()</pre>
 <div class="block">Provides the ability to perform fluent-style assertions on a long parameter.
 
  <h5 class='section'>Examples:</h5>
@@ -429,7 +451,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertDate</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentZonedDateTimeAssertion.html" title="class in org.apache.juneau.assertions">FluentZonedDateTimeAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.189">assertDate</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentZonedDateTimeAssertion.html" title="class in org.apache.juneau.assertions">FluentZonedDateTimeAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.201">assertDate</a>()</pre>
 <div class="block">Provides the ability to perform fluent-style assertions on a date parameter.
 
  <h5 class='section'>Examples:</h5>
@@ -450,7 +472,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertCsvArray</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentListAssertion.html" title="class in org.apache.juneau.assertions">FluentListAssertion</a>&lt;<a href="https://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/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.205">assertCsvArray</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentListAssertion.html" title="class in org.apache.juneau.assertions">FluentListAssertion</a>&lt;<a href="https://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/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.217">assertCsvArray</a>()</pre>
 <div class="block">Provides the ability to perform fluent-style assertions on comma-separated string parameters.
 
  <h5 class='section'>Examples:</h5>
@@ -471,7 +493,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>schema</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.212">schema</a>(<a href="../../../../../org/apache/juneau/httppart/HttpPartSchema.html" title="class in org.apache.juneau.httppart">HttpPartSchema</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.224">schema</a>(<a href="../../../../../org/apache/juneau/httppart/HttpPartSchema.html" title="class in org.apache.juneau.httppart">HttpPartSchema</a>&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/rest/httppart/RequestHttpPart.html#schema-org.apache.juneau.httppart.HttpPartSchema-">RequestHttpPart</a></code></span></div>
 <div class="block">Specifies the part schema for this part.
 
@@ -493,7 +515,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>parser</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.218">parser</a>(<a href="../../../../../org/apache/juneau/httppart/HttpPartParserSession.html" title="interface in org.apache.juneau.httppart">HttpPartParserSession</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.230">parser</a>(<a href="../../../../../org/apache/juneau/httppart/HttpPartParserSession.html" title="interface in org.apache.juneau.httppart">HttpPartParserSession</a>&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/rest/httppart/RequestHttpPart.html#parser-org.apache.juneau.httppart.HttpPartParserSession-">RequestHttpPart</a></code></span></div>
 <div class="block">Specifies the part parser to use for this part.
 
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/rest/httppart/RequestQueryParam.html b/content/site/apidocs-9.0.0/org/apache/juneau/rest/httppart/RequestQueryParam.html
index 1b4a20a..a032207 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/rest/httppart/RequestQueryParam.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/rest/httppart/RequestQueryParam.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -253,18 +253,24 @@
 </td>
 </tr>
 <tr id="i5" class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html#def-java.lang.String-">def</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;def)</code>
+<div class="block">Sets a default value for this part.</div>
+</td>
+</tr>
+<tr id="i6" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html#getValue--">getValue</a></span>()</code>
 <div class="block">Gets the value of this part.</div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html#parser-org.apache.juneau.httppart.HttpPartParserSession-">parser</a></span>(<a href="../../../../../org/apache/juneau/httppart/HttpPartParserSession.html" title="interface in org.apache.juneau.httppart">HttpPartParserSession</a>&nbsp;value)</code>
 <div class="block">Specifies the part parser to use for this part.</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html#schema-org.apache.juneau.httppart.HttpPartSchema-">schema</a></span>(<a href="../../../../../org/apache/juneau/httppart/HttpPartSchema.html" title="class in org.apache.juneau.httppart">HttpPartSchema</a>&nbsp;value)</code>
 <div class="block">Specifies the part schema for this part.</div>
@@ -332,13 +338,29 @@
 <!--   -->
 </a>
 <h3>Method Detail</h3>
+<a name="def-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>def</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.113">def</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;def)</pre>
+<div class="block">Sets a default value for this part.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>def</code> - The default value.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>This object.</dd>
+</dl>
+</li>
+</ul>
 <a name="getValue--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getValue</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.112">getValue</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.124">getValue</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/rest/httppart/RequestHttpPart.html#getValue--">RequestHttpPart</a></code></span></div>
 <div class="block">Gets the value of this part.</div>
 <dl>
@@ -357,7 +379,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertString</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentStringAssertion.html" title="class in org.apache.juneau.assertions">FluentStringAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.141">assertString</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentStringAssertion.html" title="class in org.apache.juneau.assertions">FluentStringAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.153">assertString</a>()</pre>
 <div class="block">Provides the ability to perform fluent-style assertions on this parameter.
 
  <h5 class='section'>Examples:</h5>
@@ -387,7 +409,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertInteger</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentIntegerAssertion.html" title="class in org.apache.juneau.assertions">FluentIntegerAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.157">assertInteger</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentIntegerAssertion.html" title="class in org.apache.juneau.assertions">FluentIntegerAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.169">assertInteger</a>()</pre>
 <div class="block">Provides the ability to perform fluent-style assertions on an integer parameter.
 
  <h5 class='section'>Examples:</h5>
@@ -408,7 +430,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertLong</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentLongAssertion.html" title="class in org.apache.juneau.assertions">FluentLongAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.173">assertLong</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentLongAssertion.html" title="class in org.apache.juneau.assertions">FluentLongAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.185">assertLong</a>()</pre>
 <div class="block">Provides the ability to perform fluent-style assertions on a long parameter.
 
  <h5 class='section'>Examples:</h5>
@@ -429,7 +451,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertDate</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentZonedDateTimeAssertion.html" title="class in org.apache.juneau.assertions">FluentZonedDateTimeAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.189">assertDate</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentZonedDateTimeAssertion.html" title="class in org.apache.juneau.assertions">FluentZonedDateTimeAssertion</a>&lt;<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.201">assertDate</a>()</pre>
 <div class="block">Provides the ability to perform fluent-style assertions on a date parameter.
 
  <h5 class='section'>Examples:</h5>
@@ -450,7 +472,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertCsvArray</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentListAssertion.html" title="class in org.apache.juneau.assertions">FluentListAssertion</a>&lt;<a href="https://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/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.205">assertCsvArray</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/assertions/FluentListAssertion.html" title="class in org.apache.juneau.assertions">FluentListAssertion</a>&lt;<a href="https://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/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.217">assertCsvArray</a>()</pre>
 <div class="block">Provides the ability to perform fluent-style assertions on comma-separated string parameters.
 
  <h5 class='section'>Examples:</h5>
@@ -471,7 +493,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>schema</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.212">schema</a>(<a href="../../../../../org/apache/juneau/httppart/HttpPartSchema.html" title="class in org.apache.juneau.httppart">HttpPartSchema</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.224">schema</a>(<a href="../../../../../org/apache/juneau/httppart/HttpPartSchema.html" title="class in org.apache.juneau.httppart">HttpPartSchema</a>&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/rest/httppart/RequestHttpPart.html#schema-org.apache.juneau.httppart.HttpPartSchema-">RequestHttpPart</a></code></span></div>
 <div class="block">Specifies the part schema for this part.
 
@@ -493,7 +515,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>parser</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.218">parser</a>(<a href="../../../../../org/apache/juneau/httppart/HttpPartParserSession.html" title="interface in org.apache.juneau.httppart">HttpPartParserSession</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.230">parser</a>(<a href="../../../../../org/apache/juneau/httppart/HttpPartParserSession.html" title="interface in org.apache.juneau.httppart">HttpPartParserSession</a>&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/rest/httppart/RequestHttpPart.html#parser-org.apache.juneau.httppart.HttpPartParserSession-">RequestHttpPart</a></code></span></div>
 <div class="block">Specifies the part parser to use for this part.
 
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/rest/servlet/BasicRestOperations.html b/content/site/apidocs-9.0.0/org/apache/juneau/rest/servlet/BasicRestOperations.html
index 1003241..4bb227d 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/rest/servlet/BasicRestOperations.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/rest/servlet/BasicRestOperations.html
@@ -100,7 +100,7 @@
 <li class="blockList">
 <dl>
 <dt>All Known Implementing Classes:</dt>
-<dd><a href="../../../../../org/apache/juneau/examples/rest/dto/AtomFeedResource.html" title="class in org.apache.juneau.examples.rest.dto">AtomFeedResource</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestObject.html" title="class in org.apache.juneau.rest.servlet">BasicRestObject</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestObjectGroup.html" title="class in org.apache.juneau.rest.servlet">BasicRestObjectGroup</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServlet.html" title="class in org.apache.juneau.rest.servlet">BasicRestServlet</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServletGroup.html" title="class in org.apache.juneau.rest.servlet">BasicRestServletGroup</a>, <a href="../../../../../org/apache/juneau/rest/springboot/BasicSpringRestServlet.html" title="class in org.apache.juneau.rest.springboot">BasicSpringRestServlet</a>, <a href="../../../../../org/apache/juneau/rest/springboot/BasicSpringRestServletGroup.html" title="class in org.apache.juneau.rest.springboot">BasicSpringRestServletGroup</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ConfigResource.html" title="class in org.apache.juneau.microservice.resources">ConfigResource</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/resources/DebugResource.html" title="class in org.apache.juneau.microservice.jetty.resources">DebugResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/DtoExamples.html" title="class in org.apache.juneau.examples.rest.dto">DtoExamples</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/template/HelloWorldResource.html" title="class in org.apache.juneau.microservice.jetty.template">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/HelloWorldResource.html" title="class in org.apache.juneau.examples.rest">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/microservice/springboot/template/HelloWorldResource.html" title="class in org.apache.juneau.microservice.springboot.template">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/springboot/HelloWorldResource.html" title="class in org.apache.juneau.examples.rest.springboot">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/HtmlBeansResource.html" title="class in org.apache.juneau.examples.rest">HtmlBeansResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/JsonSchemaResource.html" title="class in org.apache.juneau.examples.rest.dto">JsonSchemaResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/PhotosResource.html" title="class in org.apache.juneau.examples.rest">PhotosResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/RequestEchoResource.html" title="class in org.apache.juneau.examples.rest">RequestEchoResource</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/template/RootResources.html" title="class in org.apache.juneau.microservice.jetty.template">RootResources</a>, <a href="../../../../../org/apache/juneau/examples/rest/RootResources.html" title="class in org.apache.juneau.examples.rest">RootResources</a>, <a href="../../../../../org/apache/juneau/microservice/springboot/template/RootResources.html" title="class in org.apache.juneau.microservice.springboot.template">RootResources</a>, <a href="../../../../../org/apache/juneau/examples/rest/springboot/RootResources.html" title="class in org.apache.juneau.examples.rest.springboot">RootResources</a>, <a href="../../../../../org/apache/juneau/rest/remote/RrpcServlet.html" title="class in org.apache.juneau.rest.remote">RrpcServlet</a>, <a href="../../../../../org/apache/juneau/microservice/resources/SampleRootResource.html" title="class in org.apache.juneau.microservice.resources">SampleRootResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ShutdownResource.html" title="class in org.apache.juneau.microservice.resources">ShutdownResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/UtilityBeansResource.html" title="class in org.apache.juneau.examples.rest">UtilityBeansResource</a></dd>
+<dd><a href="../../../../../org/apache/juneau/examples/rest/dto/AtomFeedResource.html" title="class in org.apache.juneau.examples.rest.dto">AtomFeedResource</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestObject.html" title="class in org.apache.juneau.rest.servlet">BasicRestObject</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestObjectGroup.html" title="class in org.apache.juneau.rest.servlet">BasicRestObjectGroup</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServlet.html" title="class in org.apache.juneau.rest.servlet">BasicRestServlet</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServletGroup.html" title="class in org.apache.juneau.rest.servlet">BasicRestServletGroup</a>, <a href="../../../../../org/apache/juneau/rest/springboot/BasicSpringRestServlet.html" title="class in org.apache.juneau.rest.springboot">BasicSpringRestServlet</a>, <a href="../../../../../org/apache/juneau/rest/springboot/BasicSpringRestServletGroup.html" title="class in org.apache.juneau.rest.springboot">BasicSpringRestServletGroup</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ConfigResource.html" title="class in org.apache.juneau.microservice.resources">ConfigResource</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/resources/DebugResource.html" title="class in org.apache.juneau.microservice.jetty.resources">DebugResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/DtoExamples.html" title="class in org.apache.juneau.examples.rest.dto">DtoExamples</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/template/HelloWorldResource.html" title="class in org.apache.juneau.microservice.jetty.template">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/HelloWorldResource.html" title="class in org.apache.juneau.examples.rest">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/microservice/springboot/template/HelloWorldResource.html" title="class in org.apache.juneau.microservice.springboot.template">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/springboot/HelloWorldResource.html" title="class in org.apache.juneau.examples.rest.springboot">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/HtmlBeansResource.html" title="class in org.apache.juneau.examples.rest">HtmlBeansResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/JsonSchemaResource.html" title="class in org.apache.juneau.examples.rest.dto">JsonSchemaResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/PhotosResource.html" title="class in org.apache.juneau.examples.rest">PhotosResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/RequestEchoResource.html" title="class in org.apache.juneau.examples.rest">RequestEchoResource</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/template/RootResources.html" title="class in org.apache.juneau.microservice.jetty.template">RootResources</a>, <a href="../../../../../org/apache/juneau/examples/rest/RootResources.html" title="class in org.apache.juneau.examples.rest">RootResources</a>, <a href="../../../../../org/apache/juneau/microservice/springboot/template/RootResources.html" title="class in org.apache.juneau.microservice.springboot.template">RootResources</a>, <a href="../../../../../org/apache/juneau/examples/rest/springboot/RootResources.html" title="class in org.apache.juneau.examples.rest.springboot">RootResources</a>, <a href="../../../../../org/apache/juneau/rest/remote/RrpcServlet.html" title="class in org.apache.juneau.rest.remote">RrpcServlet</a>, <a href="../../../../../org/apache/juneau/microservice/resources/SampleRootResource.html" title="class in org.apache.juneau.microservice.resources">SampleRootResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ShutdownResource.html" title="class in org.apache.juneau.microservice.resources">ShutdownResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/UtilityBeansResource.html" title="class in org.apache.juneau.examples.rest">UtilityBeansResource</a></dd>
 </dl>
 <hr>
 <br>
diff --git a/content/site/apidocs-9.0.0/org/apache/juneau/rest/servlet/BasicRestServlet.html b/content/site/apidocs-9.0.0/org/apache/juneau/rest/servlet/BasicRestServlet.html
index d6ffc09..01116d8 100644
--- a/content/site/apidocs-9.0.0/org/apache/juneau/rest/servlet/BasicRestServlet.html
+++ b/content/site/apidocs-9.0.0/org/apache/juneau/rest/servlet/BasicRestServlet.html
@@ -127,7 +127,7 @@
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
-<dd><a href="../../../../../org/apache/juneau/examples/rest/dto/AtomFeedResource.html" title="class in org.apache.juneau.examples.rest.dto">AtomFeedResource</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServletGroup.html" title="class in org.apache.juneau.rest.servlet">BasicRestServletGroup</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ConfigResource.html" title="class in org.apache.juneau.microservice.resources">ConfigResource</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/resources/DebugResource.html" title="class in org.apache.juneau.microservice.jetty.resources">DebugResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/template/HelloWorldResource.html" title="class in org.apache.juneau.microservice.jetty.template">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/JsonSchemaResource.html" title="class in org.apache.juneau.examples.rest.dto">JsonSchemaResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/PhotosResource.html" title="class in org.apache.juneau.examples.rest">PhotosResource</a>, <a href="../../../../../org/apache/juneau/rest/remote/RrpcServlet.html" title="class in org.apache.juneau.rest.remote">RrpcServlet</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ShutdownResource.html" title="class in org.apache.juneau.microservice.resources">ShutdownResource</a></dd>
+<dd><a href="../../../../../org/apache/juneau/examples/rest/dto/AtomFeedResource.html" title="class in org.apache.juneau.examples.rest.dto">AtomFeedResource</a>, <a href="../../../../../org/apache/juneau/rest/servlet/BasicRestServletGroup.html" title="class in org.apache.juneau.rest.servlet">BasicRestServletGroup</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ConfigResource.html" title="class in org.apache.juneau.microservice.resources">ConfigResource</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/resources/DebugResource.html" title="class in org.apache.juneau.microservice.jetty.resources">DebugResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/DirectoryResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource</a>, <a href="../../../../../org/apache/juneau/microservice/jetty/template/HelloWorldResource.html" title="class in org.apache.juneau.microservice.jetty.template">HelloWorldResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/dto/JsonSchemaResource.html" title="class in org.apache.juneau.examples.rest.dto">JsonSchemaResource</a>, <a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource</a>, <a href="../../../../../org/apache/juneau/examples/rest/PhotosResource.html" title="class in org.apache.juneau.examples.rest">PhotosResource</a>, <a href="../../../../../org/apache/juneau/rest/remote/RrpcServlet.html" title="class in org.apache.juneau.rest.remote">RrpcServlet</a>, <a href="../../../../../org/apache/juneau/microservice/resources/ShutdownResource.html" title="class in org.apache.juneau.microservice.resources">ShutdownResource</a></dd>
 </dl>
 <hr>
 <br>
diff --git a/content/site/apidocs-9.0.0/overview-summary.html b/content/site/apidocs-9.0.0/overview-summary.html
index 993b46e..0a1894a 100644
--- a/content/site/apidocs-9.0.0/overview-summary.html
+++ b/content/site/apidocs-9.0.0/overview-summary.html
@@ -18975,7 +18975,53 @@
 <div class='topic'><!-- START: 8.4.3 - juneau-rest-server.jrs.HttpParts.jrs.DefaultParts -->
 <div class='topic'>
    <p>
-      The following annotations are provided for specifying default part values for requests and responses:
+      By default, HTTP parts that don't have value (such as missing query parameters) end up with null
+      values:
+   </p>
+   <p class='bjava'>
+   <ja>@RestPost</ja>(<js>"/example"</js>)
+   <jk>public</jk> String doGetExample1(
+      <ja>@Query</ja>(<js>"p1"</js>) <jk>int</jk> <jv>p1</jv>,
+      <ja>@FormData</ja>(<js>"f1"</js>) MyBean <jv>f1</jv>,
+      <ja>@Header</ja>(<js>"Accept-Language"</js>) AcceptLanguage <jv>h1</jv>
+   ) {
+      <jk>if</jk> (<jv>p1</jv> == <jk>null</jk>) <jv>p1</jv> = -1;
+      <jk>if</jk> (<jv>f1</jv> == <jk>null</jk>) <jv>f1</jv> = <jsf>DEFAULT_BEAN</jsf>;
+      <jk>if</jk> (<jv>h1</jv> == <jk>null</jk>) <jv>h1</jv> = AcceptLanguage.<jsm>of</jsm>(<js>"en"</js>);
+   }
+   </p>
+   <p>
+      You have several options to provide default values for HTTP parts.  The most common is to simply
+      use <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util"><code>Optional</code></a> parameters and handle default values programmatically:
+   </p>
+   <p class='bjava'>
+   <ja>@RestPost</ja>(<js>"/example"</js>)
+   <jk>public</jk> String doGetExample1(
+      <ja>@Query</ja>(<js>"p1"</js>) Optional&lt;Integer&gt; <jv>p1</jv>,
+      <ja>@FormData</ja>(<js>"f1"</js>) Optional&lt;MyBean&gt; <jv>f1</jv>,
+      <ja>@Header</ja>(<js>"Accept-Language"</js>) Optional&lt;AcceptLanguage&gt; <jv>h1</jv>
+   ) {
+      <jk>int</jk> <jv>_p1</jv> = <jv>p1</jv>.orElse(-1);
+      Bean <jv>_f1</jv> = <jv>f1</jv>.orElse(<jsf>DEFAULT_BEAN</jsf>);
+      AcceptLanguage <jv>_h1</jv> = <jv>h1</jv>.orElse(AcceptLanguage.<jsm>of</jsm>(<js>"en"</js>));
+   }
+   </p>
+   <p>
+      You can also specify default values on the annotations:
+   </p>
+   <p class='bjava'>
+   <ja>@RestPost</ja>(<js>"/example"</js>)
+   <jk>public</jk> String doGetExample1(
+      <ja>@Query</ja>(name=<js>"p1"</js>, def=<js>"-1"</js>) <jk>int</jk> <jv>p1</jv>,
+      <ja>@FormData</ja>(name=<js>"f1"</js>, def=<js>"foo=bar,baz=qux"</js>) MyBean <jv>f1</jv>,
+      <ja>@Header</ja>(name=<js>"Accept-Language"</js>, def=<js>"en"</js>) AcceptLanguage <jv>lang</jv>
+   ) {
+      ...
+   }
+   </p>
+   <p>
+      A third option is to specify default values via the <a href="org/apache/juneau/rest/annotation/Rest.html" title="annotation in org.apache.juneau.rest.annotation"><code>Rest</code></a> and
+      <a href="org/apache/juneau/rest/annotation/RestOp.html" title="annotation in org.apache.juneau.rest.annotation"><code>RestOp</code></a> annotations. 
    </p>
    <ul class='javatree'>
       <li class='ja'><a href="org/apache/juneau/rest/annotation/Rest.html" title="annotation in org.apache.juneau.rest.annotation"><code>Rest</code></a> 
@@ -28511,7 +28557,7 @@
    
    <cc># Various look-and-feel settings used in the BasicRestConfig interface.</cc>
    <ck>headerIcon</ck> = <cv>servlet:/htdocs/images/juneau.png</cv>
-         v  <ck>headerLink</ck> = <cv>http://juneau.apache.org</cv>
+   <ck>headerLink</ck> = <cv>http://juneau.apache.org</cv>
    <ck>footerIcon</ck> = <cv>servlet:/htdocs/images/asf.png</cv>
    <ck>footerLink</ck> = <cv>http://www.apache.org</cv>
    <ck>favicon</ck> = <cv>$C{REST/headerIcon}</cv>
@@ -28523,7 +28569,7 @@
       <cv>&lt;a href='$U{$C{REST/footerLink}}'&gt;
          &lt;img src='$U{$C{REST/footerIcon}}' style='float:right;padding-right:20px;height:32px'/&gt;
       &lt;/a&gt;</cv>
-      </p>
+         </p>
    </ul>
    <p>
       At this point, you're ready to start the microservice from your workspace.
@@ -32889,7 +32935,7 @@
       <li>New predefined reusable resources:
          <ul>
             <li><a href="org/apache/juneau/microservice/resources/ConfigResource.html" title="class in org.apache.juneau.microservice.resources"><code>ConfigResource</code></a> - REST resource for viewing and editing microservice config file.
-            <li><code>org.apache.juneau.microservice.resources.LogsResource</code> - REST resource for viewing log files.
+            <li><a href="org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources"><code>LogsResource</code></a> - REST resource for viewing log files.
             <li><a href="org/apache/juneau/microservice/resources/SampleRootResource.html" title="class in org.apache.juneau.microservice.resources"><code>SampleRootResource</code></a> - Sample REST resource that contains the config and logs resource as children.
             <li><a href="org/apache/juneau/microservice/resources/ShutdownResource.html" title="class in org.apache.juneau.microservice.resources"><code>ShutdownResource</code></a> - REST resource for stopping the microservice JVM.  Useful for testing purposes.
          </ul>
diff --git a/content/site/apidocs-9.0.0/overview-tree.html b/content/site/apidocs-9.0.0/overview-tree.html
index 591d594..056a61c 100644
--- a/content/site/apidocs-9.0.0/overview-tree.html
+++ b/content/site/apidocs-9.0.0/overview-tree.html
@@ -1569,6 +1569,11 @@
 <li type="circle">org.apache.juneau.internal.<a href="org/apache/juneau/internal/FileUtils.html" title="class in org.apache.juneau.internal"><span class="typeNameLink">FileUtils</span></a></li>
 <li type="circle">org.apache.juneau.internal.<a href="org/apache/juneau/internal/FileWriterBuilder.html" title="class in org.apache.juneau.internal"><span class="typeNameLink">FileWriterBuilder</span></a></li>
 <li type="circle">org.apache.juneau.internal.<a href="org/apache/juneau/internal/Flag.html" title="class in org.apache.juneau.internal"><span class="typeNameLink">Flag</span></a></li>
+<li type="circle">java.util.logging.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/logging/Formatter.html?is-external=true" title="class or interface in java.util.logging"><span class="typeNameLink">Formatter</span></a>
+<ul>
+<li type="circle">org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">LogEntryFormatter</span></a></li>
+</ul>
+</li>
 <li type="circle">org.apache.juneau.http.annotation.<a href="org/apache/juneau/http/annotation/FormatType.html" title="class in org.apache.juneau.http.annotation"><span class="typeNameLink">FormatType</span></a></li>
 <li type="circle">org.apache.juneau.http.annotation.<a href="org/apache/juneau/http/annotation/FormDataAnnotation.html" title="class in org.apache.juneau.http.annotation"><span class="typeNameLink">FormDataAnnotation</span></a></li>
 <li type="circle">org.apache.juneau.rest.arg.<a href="org/apache/juneau/rest/arg/FormDataArg.html" title="class in org.apache.juneau.rest.arg"><span class="typeNameLink">FormDataArg</span></a> (implements org.apache.juneau.rest.arg.<a href="org/apache/juneau/rest/arg/RestOpArg.html" title="interface in org.apache.juneau.rest.arg">RestOpArg</a>)</li>
@@ -1594,6 +1599,7 @@
 <li type="circle">org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/DirectoryResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">DirectoryResource</span></a> (implements org.apache.juneau.rest.config.<a href="org/apache/juneau/rest/config/BasicUniversalConfig.html" title="interface in org.apache.juneau.rest.config">BasicUniversalConfig</a>)</li>
 <li type="circle">org.apache.juneau.microservice.jetty.template.<a href="org/apache/juneau/microservice/jetty/template/HelloWorldResource.html" title="class in org.apache.juneau.microservice.jetty.template"><span class="typeNameLink">HelloWorldResource</span></a></li>
 <li type="circle">org.apache.juneau.examples.rest.dto.<a href="org/apache/juneau/examples/rest/dto/JsonSchemaResource.html" title="class in org.apache.juneau.examples.rest.dto"><span class="typeNameLink">JsonSchemaResource</span></a> (implements org.apache.juneau.rest.config.<a href="org/apache/juneau/rest/config/BasicUniversalJenaConfig.html" title="interface in org.apache.juneau.rest.config">BasicUniversalJenaConfig</a>)</li>
+<li type="circle">org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">LogsResource</span></a> (implements org.apache.juneau.rest.config.<a href="org/apache/juneau/rest/config/BasicUniversalConfig.html" title="interface in org.apache.juneau.rest.config">BasicUniversalConfig</a>)</li>
 <li type="circle">org.apache.juneau.examples.rest.<a href="org/apache/juneau/examples/rest/PhotosResource.html" title="class in org.apache.juneau.examples.rest"><span class="typeNameLink">PhotosResource</span></a> (implements org.apache.juneau.rest.config.<a href="org/apache/juneau/rest/config/BasicUniversalConfig.html" title="interface in org.apache.juneau.rest.config">BasicUniversalConfig</a>)</li>
 <li type="circle">org.apache.juneau.rest.remote.<a href="org/apache/juneau/rest/remote/RrpcServlet.html" title="class in org.apache.juneau.rest.remote"><span class="typeNameLink">RrpcServlet</span></a></li>
 <li type="circle">org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/ShutdownResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">ShutdownResource</span></a> (implements org.apache.juneau.rest.config.<a href="org/apache/juneau/rest/config/BasicUniversalConfig.html" title="interface in org.apache.juneau.rest.config">BasicUniversalConfig</a>)</li>
@@ -1845,16 +1851,21 @@
 <li type="circle">org.apache.juneau.dto.<a href="org/apache/juneau/dto/LinkString.html" title="class in org.apache.juneau.dto"><span class="typeNameLink">LinkString</span></a> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;)
 <ul>
 <li type="circle">org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/DirectoryResource.Action.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">DirectoryResource.Action</span></a></li>
+<li type="circle">org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogsResource.Action.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">LogsResource.Action</span></a></li>
 </ul>
 </li>
 <li type="circle">org.apache.juneau.internal.<a href="org/apache/juneau/internal/ListBuilder.html" title="class in org.apache.juneau.internal"><span class="typeNameLink">ListBuilder</span></a>&lt;E&gt;</li>
 <li type="circle">org.apache.juneau.cp.<a href="org/apache/juneau/cp/LocalDir.html" title="class in org.apache.juneau.cp"><span class="typeNameLink">LocalDir</span></a></li>
 <li type="circle">org.apache.juneau.cp.<a href="org/apache/juneau/cp/LocalFile.html" title="class in org.apache.juneau.cp"><span class="typeNameLink">LocalFile</span></a></li>
+<li type="circle">org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">LogConfig</span></a></li>
 <li type="circle">java.util.logging.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/logging/Logger.html?is-external=true" title="class or interface in java.util.logging"><span class="typeNameLink">Logger</span></a>
 <ul>
 <li type="circle">org.apache.juneau.rest.mock.<a href="org/apache/juneau/rest/mock/MockLogger.html" title="class in org.apache.juneau.rest.mock"><span class="typeNameLink">MockLogger</span></a></li>
 </ul>
 </li>
+<li type="circle">org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">LogParser</span></a> (implements java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>, java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;T&gt;, java.util.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;E&gt;)</li>
+<li type="circle">org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">LogParser.Entry</span></a></li>
+<li type="circle">org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources"><span class="typeNameLink">LogsResource.FileResource</span></a></li>
 <li type="circle">org.apache.juneau.internal.<a href="org/apache/juneau/internal/MapBuilder.html" title="class in org.apache.juneau.internal"><span class="typeNameLink">MapBuilder</span></a>&lt;K,V&gt;</li>
 <li type="circle">org.apache.juneau.annotation.<a href="org/apache/juneau/annotation/MarshalledAnnotation.html" title="class in org.apache.juneau.annotation"><span class="typeNameLink">MarshalledAnnotation</span></a></li>
 <li type="circle">org.apache.juneau.<a href="org/apache/juneau/MarshalledFilter.html" title="class in org.apache.juneau"><span class="typeNameLink">MarshalledFilter</span></a></li>
diff --git a/content/site/apidocs-9.0.0/serialized-form.html b/content/site/apidocs-9.0.0/serialized-form.html
index e920ba7..da8ba37 100644
--- a/content/site/apidocs-9.0.0/serialized-form.html
+++ b/content/site/apidocs-9.0.0/serialized-form.html
@@ -147,6 +147,39 @@
 </ul>
 </li>
 <li class="blockList">
+<h2 title="Package">Package&nbsp;org.apache.juneau.microservice.resources</h2>
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.juneau.microservice.resources.LogsResource">
+<!--   -->
+</a>
+<h3>Class <a href="org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources">org.apache.juneau.microservice.resources.LogsResource</a> extends <a href="org/apache/juneau/rest/servlet/BasicRestServlet.html" title="class in org.apache.juneau.rest.servlet">BasicRestServlet</a> implements Serializable</h3>
+<dl class="nameValue">
+<dt>serialVersionUID:</dt>
+<dd>1L</dd>
+</dl>
+<ul class="blockList">
+<li class="blockList">
+<h3>Serialized Fields</h3>
+<ul class="blockList">
+<li class="blockList">
+<h4>logDir</h4>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a> logDir</pre>
+</li>
+<li class="blockList">
+<h4>leFormatter</h4>
+<pre><a href="org/apache/juneau/microservice/resources/LogEntryFormatter.html" title="class in org.apache.juneau.microservice.resources">LogEntryFormatter</a> leFormatter</pre>
+</li>
+<li class="blockListLast">
+<h4>allowDeletes</h4>
+<pre>boolean allowDeletes</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="blockList">
 <h2 title="Package">Package&nbsp;org.apache.juneau.rest.client</h2>
 <ul class="blockList">
 <li class="blockList"><a name="org.apache.juneau.rest.client.ResponseHeader">
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html
index 1eac0f3..92cf98b 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html
@@ -62,92 +62,91 @@
 <span class="sourceLineNo">054</span>   },<a name="line.54"></a>
 <span class="sourceLineNo">055</span>   asideFloat="RIGHT"<a name="line.55"></a>
 <span class="sourceLineNo">056</span>)<a name="line.56"></a>
-<span class="sourceLineNo">057</span>@SuppressWarnings("javadoc")<a name="line.57"></a>
-<span class="sourceLineNo">058</span>public class HtmlBeansResource extends BasicRestObject implements BasicUniversalConfig {<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>   @SuppressWarnings("unused")<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   private static final long serialVersionUID = 1L;<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>   /**<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    * [HTTP GET /htmlbeans]<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    * @return Descriptive links to the child endpoints.<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    */<a name="line.66"></a>
-<span class="sourceLineNo">067</span>   @RestGet("/")<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   public ResourceDescriptions getChildDescriptions() {<a name="line.68"></a>
-<span class="sourceLineNo">069</span>      return ResourceDescriptions<a name="line.69"></a>
-<span class="sourceLineNo">070</span>         .create()<a name="line.70"></a>
-<span class="sourceLineNo">071</span>         .append("table", "Example of a serialized table")<a name="line.71"></a>
-<span class="sourceLineNo">072</span>         .append("div", "Example of a serialized div tag")<a name="line.72"></a>
-<span class="sourceLineNo">073</span>         .append("form", "Example of a serialized form");<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>   /**<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    * [HTTP GET /htmlbeans/table]<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    * @return An example table.<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    */<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   @RestGet("/table")<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   @HtmlDocConfig(<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      aside={<a name="line.82"></a>
-<span class="sourceLineNo">083</span>         "&lt;div class='text'&gt;",<a name="line.83"></a>
-<span class="sourceLineNo">084</span>         "  &lt;p&gt;Example of serialized table.&lt;/p&gt;",<a name="line.84"></a>
-<span class="sourceLineNo">085</span>         "&lt;/div&gt;"<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>   public Table aTable() {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      return table(<a name="line.89"></a>
-<span class="sourceLineNo">090</span>         tr(<a name="line.90"></a>
-<span class="sourceLineNo">091</span>            th("c1"),<a name="line.91"></a>
-<span class="sourceLineNo">092</span>            th("c2")<a name="line.92"></a>
-<span class="sourceLineNo">093</span>         ),<a name="line.93"></a>
-<span class="sourceLineNo">094</span>         tr(<a name="line.94"></a>
-<span class="sourceLineNo">095</span>            td("v1"),<a name="line.95"></a>
-<span class="sourceLineNo">096</span>            td("v2")<a name="line.96"></a>
-<span class="sourceLineNo">097</span>         )<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">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>   /**<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    * [HTTP GET /htmlbeans/div]<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    * @return An example div tag.<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    */<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   @RestGet("/div")<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   @HtmlDocConfig(<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      aside={<a name="line.107"></a>
-<span class="sourceLineNo">108</span>         "&lt;div class='text'&gt;",<a name="line.108"></a>
-<span class="sourceLineNo">109</span>         "  &lt;p&gt;Example of serialized div tag.&lt;/p&gt;",<a name="line.109"></a>
-<span class="sourceLineNo">110</span>         "&lt;/div&gt;"<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      }<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   )<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   public HtmlElement aDiv() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      return div()<a name="line.114"></a>
-<span class="sourceLineNo">115</span>         .children(<a name="line.115"></a>
-<span class="sourceLineNo">116</span>            p("Juneau supports ", b(i("mixed")), " content!")<a name="line.116"></a>
-<span class="sourceLineNo">117</span>         )<a name="line.117"></a>
-<span class="sourceLineNo">118</span>         .onmouseover("alert(\"boo!\");");<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   }<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>   /**<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    * [HTTP GET /htmlbeans/form]<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    * @return An example form tag.<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    */<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   @RestGet("/form")<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   @HtmlDocConfig(<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      aside={<a name="line.127"></a>
-<span class="sourceLineNo">128</span>         "&lt;div class='text'&gt;",<a name="line.128"></a>
-<span class="sourceLineNo">129</span>         "  &lt;p&gt;Example of serialized HTML form.&lt;/p&gt;",<a name="line.129"></a>
-<span class="sourceLineNo">130</span>         "&lt;/div&gt;"<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>   public Form aForm() {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      return form().action("/submit").method("POST")<a name="line.134"></a>
-<span class="sourceLineNo">135</span>         .children(<a name="line.135"></a>
-<span class="sourceLineNo">136</span>            "Position (1-10000): ", input("number").name("pos").value(1), br(),<a name="line.136"></a>
-<span class="sourceLineNo">137</span>            "Limit (1-10000): ", input("number").name("limit").value(100), br(),<a name="line.137"></a>
-<span class="sourceLineNo">138</span>            button("submit", "Submit"),<a name="line.138"></a>
-<span class="sourceLineNo">139</span>            button("reset", "Reset")<a name="line.139"></a>
-<span class="sourceLineNo">140</span>         );<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">057</span>public class HtmlBeansResource extends BasicRestObject implements BasicUniversalConfig {<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>   @SuppressWarnings("unused")<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   private static final long serialVersionUID = 1L;<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>   /**<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    * [HTTP GET /htmlbeans]<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    * @return Descriptive links to the child endpoints.<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    */<a name="line.65"></a>
+<span class="sourceLineNo">066</span>   @RestGet("/")<a name="line.66"></a>
+<span class="sourceLineNo">067</span>   public ResourceDescriptions getChildDescriptions() {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>      return ResourceDescriptions<a name="line.68"></a>
+<span class="sourceLineNo">069</span>         .create()<a name="line.69"></a>
+<span class="sourceLineNo">070</span>         .append("table", "Example of a serialized table")<a name="line.70"></a>
+<span class="sourceLineNo">071</span>         .append("div", "Example of a serialized div tag")<a name="line.71"></a>
+<span class="sourceLineNo">072</span>         .append("form", "Example of a serialized form");<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   }<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>    * [HTTP GET /htmlbeans/table]<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    * @return An example table.<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    */<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   @RestGet("/table")<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   @HtmlDocConfig(<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      aside={<a name="line.81"></a>
+<span class="sourceLineNo">082</span>         "&lt;div class='text'&gt;",<a name="line.82"></a>
+<span class="sourceLineNo">083</span>         "  &lt;p&gt;Example of serialized table.&lt;/p&gt;",<a name="line.83"></a>
+<span class="sourceLineNo">084</span>         "&lt;/div&gt;"<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      }<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   )<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   public Table aTable() {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      return table(<a name="line.88"></a>
+<span class="sourceLineNo">089</span>         tr(<a name="line.89"></a>
+<span class="sourceLineNo">090</span>            th("c1"),<a name="line.90"></a>
+<span class="sourceLineNo">091</span>            th("c2")<a name="line.91"></a>
+<span class="sourceLineNo">092</span>         ),<a name="line.92"></a>
+<span class="sourceLineNo">093</span>         tr(<a name="line.93"></a>
+<span class="sourceLineNo">094</span>            td("v1"),<a name="line.94"></a>
+<span class="sourceLineNo">095</span>            td("v2")<a name="line.95"></a>
+<span class="sourceLineNo">096</span>         )<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      );<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">100</span>   /**<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    * [HTTP GET /htmlbeans/div]<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    * @return An example div tag.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    */<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   @RestGet("/div")<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   @HtmlDocConfig(<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      aside={<a name="line.106"></a>
+<span class="sourceLineNo">107</span>         "&lt;div class='text'&gt;",<a name="line.107"></a>
+<span class="sourceLineNo">108</span>         "  &lt;p&gt;Example of serialized div tag.&lt;/p&gt;",<a name="line.108"></a>
+<span class="sourceLineNo">109</span>         "&lt;/div&gt;"<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      }<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   )<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   public HtmlElement aDiv() {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      return div()<a name="line.113"></a>
+<span class="sourceLineNo">114</span>         .children(<a name="line.114"></a>
+<span class="sourceLineNo">115</span>            p("Juneau supports ", b(i("mixed")), " content!")<a name="line.115"></a>
+<span class="sourceLineNo">116</span>         )<a name="line.116"></a>
+<span class="sourceLineNo">117</span>         .onmouseover("alert(\"boo!\");");<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>   /**<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    * [HTTP GET /htmlbeans/form]<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    * @return An example form tag.<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    */<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   @RestGet("/form")<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   @HtmlDocConfig(<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      aside={<a name="line.126"></a>
+<span class="sourceLineNo">127</span>         "&lt;div class='text'&gt;",<a name="line.127"></a>
+<span class="sourceLineNo">128</span>         "  &lt;p&gt;Example of serialized HTML form.&lt;/p&gt;",<a name="line.128"></a>
+<span class="sourceLineNo">129</span>         "&lt;/div&gt;"<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      }<a name="line.130"></a>
+<span class="sourceLineNo">131</span>   )<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   public Form aForm() {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      return form().action("/submit").method("POST")<a name="line.133"></a>
+<span class="sourceLineNo">134</span>         .children(<a name="line.134"></a>
+<span class="sourceLineNo">135</span>            "Position (1-10000): ", input("number").name("pos").value(1), br(),<a name="line.135"></a>
+<span class="sourceLineNo">136</span>            "Limit (1-10000): ", input("number").name("limit").value(100), br(),<a name="line.136"></a>
+<span class="sourceLineNo">137</span>            button("submit", "Submit"),<a name="line.137"></a>
+<span class="sourceLineNo">138</span>            button("reset", "Reset")<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>}<a name="line.141"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/examples/rest/RootResources.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/examples/rest/RootResources.html
index 9268b82..a91adcb 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/examples/rest/RootResources.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/examples/rest/RootResources.html
@@ -47,44 +47,45 @@
 <span class="sourceLineNo">039</span>      UtilityBeansResource.class,<a name="line.39"></a>
 <span class="sourceLineNo">040</span>      HtmlBeansResource.class,<a name="line.40"></a>
 <span class="sourceLineNo">041</span>      ConfigResource.class,<a name="line.41"></a>
-<span class="sourceLineNo">042</span>      ShutdownResource.class<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>@HtmlDocConfig(<a name="line.45"></a>
-<span class="sourceLineNo">046</span>   widgets={<a name="line.46"></a>
-<span class="sourceLineNo">047</span>      ContentTypeMenuItem.class<a name="line.47"></a>
-<span class="sourceLineNo">048</span>   },<a name="line.48"></a>
-<span class="sourceLineNo">049</span>   navlinks={<a name="line.49"></a>
-<span class="sourceLineNo">050</span>      "api: servlet:/api",<a name="line.50"></a>
-<span class="sourceLineNo">051</span>      "stats: servlet:/stats",<a name="line.51"></a>
-<span class="sourceLineNo">052</span>      "$W{ContentTypeMenuItem}",<a name="line.52"></a>
-<span class="sourceLineNo">053</span>      "source: $C{Source/gitHub}/org/apache/juneau/examples/rest/RootResources.java"<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   },<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   aside={<a name="line.55"></a>
-<span class="sourceLineNo">056</span>      "&lt;div class='text'&gt;",<a name="line.56"></a>
-<span class="sourceLineNo">057</span>      "  &lt;p&gt;This is an example of a 'router' page that serves as a jumping-off point to child resources.&lt;/p&gt;",<a name="line.57"></a>
-<span class="sourceLineNo">058</span>      "  &lt;p&gt;Resources can be nested arbitrarily deep through router pages.&lt;/p&gt;",<a name="line.58"></a>
-<span class="sourceLineNo">059</span>      "  &lt;p&gt;Note the &lt;span class='link'&gt;API&lt;/span&gt; link provided that lets you see the generated swagger doc for this page.&lt;/p&gt;",<a name="line.59"></a>
-<span class="sourceLineNo">060</span>      "  &lt;p&gt;Also note the &lt;span class='link'&gt;STATS&lt;/span&gt; link to view runtime statistics on this page.&lt;/p&gt;",<a name="line.60"></a>
-<span class="sourceLineNo">061</span>      "  &lt;p&gt;Also note the &lt;span class='link'&gt;SOURCE&lt;/span&gt; link to view the source code for the page.&lt;/p&gt;",<a name="line.61"></a>
-<span class="sourceLineNo">062</span>      "  &lt;p&gt;All content on pages in the UI are serialized POJOs.  In this case, it's a serialized array of beans with 2 properties, 'name' and 'description'.&lt;/p&gt;",<a name="line.62"></a>
-<span class="sourceLineNo">063</span>      "  &lt;p&gt;Other features (such as this aside) are added through annotations.&lt;/p&gt;",<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      "&lt;/div&gt;"<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   },<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   asideFloat="RIGHT"<a name="line.66"></a>
-<span class="sourceLineNo">067</span>)<a name="line.67"></a>
-<span class="sourceLineNo">068</span>@SerializerConfig(<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   // For testing purposes, we want to use single quotes in all the serializers so it's easier to do simple<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   // String comparisons.<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   // You can apply any of the Serializer/Parser/BeanContext settings this way.<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   quoteChar="'"<a name="line.72"></a>
-<span class="sourceLineNo">073</span>)<a name="line.73"></a>
-<span class="sourceLineNo">074</span>public class RootResources extends BasicRestServletGroup implements BasicUniversalJenaConfig {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   // IMPORTANT!  If you don't need RDF support, change the parent interface to BasicUniversalConfig.<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   // It allows you to remove the Jena prerequisite.<a name="line.76"></a>
-<span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span>   private static final long serialVersionUID = 1L;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>}<a name="line.79"></a>
+<span class="sourceLineNo">042</span>      LogsResource.class,<a name="line.42"></a>
+<span class="sourceLineNo">043</span>      ShutdownResource.class<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>@HtmlDocConfig(<a name="line.46"></a>
+<span class="sourceLineNo">047</span>   widgets={<a name="line.47"></a>
+<span class="sourceLineNo">048</span>      ContentTypeMenuItem.class<a name="line.48"></a>
+<span class="sourceLineNo">049</span>   },<a name="line.49"></a>
+<span class="sourceLineNo">050</span>   navlinks={<a name="line.50"></a>
+<span class="sourceLineNo">051</span>      "api: servlet:/api",<a name="line.51"></a>
+<span class="sourceLineNo">052</span>      "stats: servlet:/stats",<a name="line.52"></a>
+<span class="sourceLineNo">053</span>      "$W{ContentTypeMenuItem}",<a name="line.53"></a>
+<span class="sourceLineNo">054</span>      "source: $C{Source/gitHub}/org/apache/juneau/examples/rest/RootResources.java"<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   },<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   aside={<a name="line.56"></a>
+<span class="sourceLineNo">057</span>      "&lt;div class='text'&gt;",<a name="line.57"></a>
+<span class="sourceLineNo">058</span>      "  &lt;p&gt;This is an example of a 'router' page that serves as a jumping-off point to child resources.&lt;/p&gt;",<a name="line.58"></a>
+<span class="sourceLineNo">059</span>      "  &lt;p&gt;Resources can be nested arbitrarily deep through router pages.&lt;/p&gt;",<a name="line.59"></a>
+<span class="sourceLineNo">060</span>      "  &lt;p&gt;Note the &lt;span class='link'&gt;API&lt;/span&gt; link provided that lets you see the generated swagger doc for this page.&lt;/p&gt;",<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      "  &lt;p&gt;Also note the &lt;span class='link'&gt;STATS&lt;/span&gt; link to view runtime statistics on this page.&lt;/p&gt;",<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      "  &lt;p&gt;Also note the &lt;span class='link'&gt;SOURCE&lt;/span&gt; link to view the source code for the page.&lt;/p&gt;",<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      "  &lt;p&gt;All content on pages in the UI are serialized POJOs.  In this case, it's a serialized array of beans with 2 properties, 'name' and 'description'.&lt;/p&gt;",<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      "  &lt;p&gt;Other features (such as this aside) are added through annotations.&lt;/p&gt;",<a name="line.64"></a>
+<span class="sourceLineNo">065</span>      "&lt;/div&gt;"<a name="line.65"></a>
+<span class="sourceLineNo">066</span>   },<a name="line.66"></a>
+<span class="sourceLineNo">067</span>   asideFloat="RIGHT"<a name="line.67"></a>
+<span class="sourceLineNo">068</span>)<a name="line.68"></a>
+<span class="sourceLineNo">069</span>@SerializerConfig(<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   // For testing purposes, we want to use single quotes in all the serializers so it's easier to do simple<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   // String comparisons.<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   // You can apply any of the Serializer/Parser/BeanContext settings this way.<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   quoteChar="'"<a name="line.73"></a>
+<span class="sourceLineNo">074</span>)<a name="line.74"></a>
+<span class="sourceLineNo">075</span>public class RootResources extends BasicRestServletGroup implements BasicUniversalJenaConfig {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   // IMPORTANT!  If you don't need RDF support, change the parent interface to BasicUniversalConfig.<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   // It allows you to remove the Jena prerequisite.<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span>   private static final long serialVersionUID = 1L;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>}<a name="line.80"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/FormData.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/FormData.html
index 9e2925e..fbf4b38 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/FormData.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/FormData.html
@@ -131,160 +131,167 @@
 <span class="sourceLineNo">123</span>public @interface FormData {<a name="line.123"></a>
 <span class="sourceLineNo">124</span><a name="line.124"></a>
 <span class="sourceLineNo">125</span>   /**<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    * FORM parameter name.<a name="line.126"></a>
+<span class="sourceLineNo">126</span>    * Default value for this parameter.<a name="line.126"></a>
 <span class="sourceLineNo">127</span>    *<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    * &lt;p&gt;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    * The name of the parameter (required).<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    *<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    * &lt;p&gt;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    * The value should be either a valid form parameter name, or &lt;js&gt;"*"&lt;/js&gt; to represent multiple name/value pairs<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    *<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    * &lt;p&gt;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    * A blank value (the default) has the following behavior:<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    * &lt;ul class='spaced-list'&gt;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    *    &lt;li&gt;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    *       If the data type is &lt;c&gt;NameValuePairs&lt;/c&gt;, &lt;c&gt;Map&lt;/c&gt;, or a bean,<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    *       then it's the equivalent to &lt;js&gt;"*"&lt;/js&gt; which will cause the value to be serialized as name/value pairs.<a name="line.139"></a>
+<span class="sourceLineNo">128</span>    * @return The annotation value.<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    */<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   String def() default "";<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>    * FORM parameter name.<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    *<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    * &lt;p&gt;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    * The name of the parameter (required).<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    *<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    * &lt;p&gt;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    * The value should be either a valid form parameter name, or &lt;js&gt;"*"&lt;/js&gt; to represent multiple name/value pairs<a name="line.139"></a>
 <span class="sourceLineNo">140</span>    *<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    *       &lt;h5 class='figure'&gt;Examples:&lt;/h5&gt;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    *       &lt;p class='bjava'&gt;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    *    &lt;jc&gt;// When used on a REST method&lt;/jc&gt;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    *    &lt;ja&gt;@RestPost&lt;/ja&gt;(&lt;js&gt;"/addPet"&lt;/js&gt;)<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    *    &lt;jk&gt;public void&lt;/jk&gt; addPet(&lt;ja&gt;@FormData&lt;/ja&gt; JsonMap &lt;jv&gt;allFormDataParameters&lt;/jv&gt;) {...}<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    *       &lt;/p&gt;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    *       &lt;p class='bjava'&gt;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    *    &lt;jc&gt;// When used on a remote method parameter&lt;/jc&gt;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    *    &lt;ja&gt;@RemoteResource&lt;/ja&gt;(path=&lt;js&gt;"/myproxy"&lt;/js&gt;)<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyProxy {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    *<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    *       &lt;jc&gt;// Equivalent to @FormData("*")&lt;/jc&gt;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    *       &lt;ja&gt;@RemotePost&lt;/ja&gt;(&lt;js&gt;"/mymethod"&lt;/js&gt;)<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    *       String myProxyMethod1(&lt;ja&gt;@FormData&lt;/ja&gt; Map&amp;lt;String,Object&amp;gt; &lt;jv&gt;allFormDataParameters&lt;/jv&gt;);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    *    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    *       &lt;/p&gt;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    *       &lt;p class='bjava'&gt;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    *    &lt;jc&gt;// When used on a request bean method&lt;/jc&gt;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyRequest {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    *<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    *       &lt;jc&gt;// Equivalent to @FormData("*")&lt;/jc&gt;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    *       &lt;ja&gt;@FormData&lt;/ja&gt;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    *       Map&amp;lt;String,Object&amp;gt; getFoo();<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    *    }<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    *       &lt;/p&gt;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    *    &lt;/li&gt;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    *    &lt;li&gt;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    *       If used on a request bean method, uses the bean property name.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    *<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    *       &lt;h5 class='figure'&gt;Example:&lt;/h5&gt;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    *       &lt;p class='bjava'&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyRequest {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    *<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    *       &lt;jc&gt;// Equivalent to @FormData("foo")&lt;/jc&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    *       &lt;ja&gt;@FormData&lt;/ja&gt;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    *       String getFoo();<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    *    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    *       &lt;/p&gt;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    *    &lt;/li&gt;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    * &lt;/ul&gt;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    *<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    * &lt;ul class='notes'&gt;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    *    &lt;li class='note'&gt;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    *       The format is plain-text.<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    * &lt;/ul&gt;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    *<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    * @return The annotation value.<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    */<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   String name() default "";<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>    * Dynamically apply this annotation to the specified classes.<a name="line.192"></a>
+<span class="sourceLineNo">141</span>    * &lt;p&gt;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    * A blank value (the default) has the following behavior:<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    * &lt;ul class='spaced-list'&gt;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    *    &lt;li&gt;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    *       If the data type is &lt;c&gt;NameValuePairs&lt;/c&gt;, &lt;c&gt;Map&lt;/c&gt;, or a bean,<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    *       then it's the equivalent to &lt;js&gt;"*"&lt;/js&gt; which will cause the value to be serialized as name/value pairs.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    *<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    *       &lt;h5 class='figure'&gt;Examples:&lt;/h5&gt;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    *       &lt;p class='bjava'&gt;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    *    &lt;jc&gt;// When used on a REST method&lt;/jc&gt;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    *    &lt;ja&gt;@RestPost&lt;/ja&gt;(&lt;js&gt;"/addPet"&lt;/js&gt;)<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    *    &lt;jk&gt;public void&lt;/jk&gt; addPet(&lt;ja&gt;@FormData&lt;/ja&gt; JsonMap &lt;jv&gt;allFormDataParameters&lt;/jv&gt;) {...}<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    *       &lt;/p&gt;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    *       &lt;p class='bjava'&gt;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    *    &lt;jc&gt;// When used on a remote method parameter&lt;/jc&gt;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    *    &lt;ja&gt;@RemoteResource&lt;/ja&gt;(path=&lt;js&gt;"/myproxy"&lt;/js&gt;)<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyProxy {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    *<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    *       &lt;jc&gt;// Equivalent to @FormData("*")&lt;/jc&gt;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    *       &lt;ja&gt;@RemotePost&lt;/ja&gt;(&lt;js&gt;"/mymethod"&lt;/js&gt;)<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    *       String myProxyMethod1(&lt;ja&gt;@FormData&lt;/ja&gt; Map&amp;lt;String,Object&amp;gt; &lt;jv&gt;allFormDataParameters&lt;/jv&gt;);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    *    }<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    *       &lt;/p&gt;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    *       &lt;p class='bjava'&gt;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    *    &lt;jc&gt;// When used on a request bean method&lt;/jc&gt;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyRequest {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    *<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    *       &lt;jc&gt;// Equivalent to @FormData("*")&lt;/jc&gt;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    *       &lt;ja&gt;@FormData&lt;/ja&gt;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    *       Map&amp;lt;String,Object&amp;gt; getFoo();<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    *    }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    *       &lt;/p&gt;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    *    &lt;/li&gt;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    *    &lt;li&gt;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    *       If used on a request bean method, uses the bean property name.<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    *<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    *       &lt;h5 class='figure'&gt;Example:&lt;/h5&gt;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    *       &lt;p class='bjava'&gt;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyRequest {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    *<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    *       &lt;jc&gt;// Equivalent to @FormData("foo")&lt;/jc&gt;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    *       &lt;ja&gt;@FormData&lt;/ja&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    *       String getFoo();<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    *    }<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    *       &lt;/p&gt;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    *    &lt;/li&gt;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    * &lt;/ul&gt;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    *<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    * &lt;ul class='notes'&gt;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    *    &lt;li class='note'&gt;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    *       The format is plain-text.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    * &lt;/ul&gt;<a name="line.192"></a>
 <span class="sourceLineNo">193</span>    *<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    * &lt;ul class='seealso'&gt;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    *    &lt;li class='link'&gt;{@doc jm.DynamicallyAppliedAnnotations}<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    * &lt;/ul&gt;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    *<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    * @return The annotation value.<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    */<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   String[] on() default {};<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>   /**<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    * Dynamically apply this annotation to the specified classes.<a name="line.203"></a>
+<span class="sourceLineNo">194</span>    * @return The annotation value.<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    */<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   String name() default "";<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span>   /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    * Dynamically apply this annotation to the specified classes.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    *<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    * &lt;ul class='seealso'&gt;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    *    &lt;li class='link'&gt;{@doc jm.DynamicallyAppliedAnnotations}<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    * &lt;/ul&gt;<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    *<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    * &lt;p&gt;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    * Identical to {@link #on()} except allows you to specify class objects instead of a strings.<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    *<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    * &lt;ul class='seealso'&gt;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    *    &lt;li class='link'&gt;{@doc jm.DynamicallyAppliedAnnotations}<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    * &lt;/ul&gt;<a name="line.210"></a>
+<span class="sourceLineNo">205</span>    * @return The annotation value.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    */<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   String[] on() default {};<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>    * Dynamically apply this annotation to the specified classes.<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    *<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    * @return The annotation value.<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    */<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   Class&lt;?&gt;[] onClass() default {};<a name="line.214"></a>
-<span class="sourceLineNo">215</span><a name="line.215"></a>
-<span class="sourceLineNo">216</span>   /**<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    * Specifies the {@link HttpPartParser} class used for parsing strings to values.<a name="line.217"></a>
+<span class="sourceLineNo">212</span>    * &lt;p&gt;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    * Identical to {@link #on()} except allows you to specify class objects instead of a strings.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    *<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    * &lt;ul class='seealso'&gt;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    *    &lt;li class='link'&gt;{@doc jm.DynamicallyAppliedAnnotations}<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    * &lt;/ul&gt;<a name="line.217"></a>
 <span class="sourceLineNo">218</span>    *<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    * &lt;p&gt;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    * Overrides for this part the part parser defined on the REST resource which by default is {@link OpenApiParser}.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    *<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    * @return The annotation value.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    */<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   Class&lt;? extends HttpPartParser&gt; parser() default HttpPartParser.Void.class;<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>   /**<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    * &lt;mk&gt;schema&lt;/mk&gt; field of the {@doc ext.SwaggerParameterObject}.<a name="line.227"></a>
+<span class="sourceLineNo">219</span>    * @return The annotation value.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   Class&lt;?&gt;[] onClass() default {};<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>    * Specifies the {@link HttpPartParser} class used for parsing strings to values.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    *<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    * &lt;p&gt;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    * Overrides for this part the part parser defined on the REST resource which by default is {@link OpenApiParser}.<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    *<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    * &lt;p&gt;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    * The schema defining the type used for parameter.<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    *<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    * &lt;p&gt;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    * The {@link Schema @Schema} annotation can also be used standalone on the parameter or type.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    * Values specified on this field override values specified on the type, and values specified on child types override values<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    * specified on parent types.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    *<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    * &lt;h5 class='section'&gt;Used for:&lt;/h5&gt;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    * &lt;ul class='spaced-list'&gt;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    *    &lt;li&gt;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    *       Server-side schema-based parsing and parsing validation.<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    *    &lt;li&gt;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    *       Server-side generated Swagger documentation.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    *    &lt;li&gt;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    *       Client-side schema-based serializing and serializing validation.<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    * &lt;/ul&gt;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    *<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    * @return The annotation value.<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    */<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   Schema schema() default @Schema;<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>   /**<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    * Specifies the {@link HttpPartSerializer} class used for serializing values to strings.<a name="line.252"></a>
+<span class="sourceLineNo">229</span>    * @return The annotation value.<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    */<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   Class&lt;? extends HttpPartParser&gt; parser() default HttpPartParser.Void.class;<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>    * &lt;mk&gt;schema&lt;/mk&gt; field of the {@doc ext.SwaggerParameterObject}.<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    *<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    * &lt;p&gt;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    * The schema defining the type used for parameter.<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    *<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    * &lt;p&gt;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    * The {@link Schema @Schema} annotation can also be used standalone on the parameter or type.<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    * Values specified on this field override values specified on the type, and values specified on child types override values<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    * specified on parent types.<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    *<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    * &lt;h5 class='section'&gt;Used for:&lt;/h5&gt;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    * &lt;ul class='spaced-list'&gt;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    *    &lt;li&gt;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    *       Server-side schema-based parsing and parsing validation.<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    *    &lt;li&gt;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    *       Server-side generated Swagger documentation.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    *    &lt;li&gt;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    *       Client-side schema-based serializing and serializing validation.<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    * &lt;/ul&gt;<a name="line.252"></a>
 <span class="sourceLineNo">253</span>    *<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    * &lt;p&gt;<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    * Overrides for this part the part serializer defined on the REST client which by default is {@link OpenApiSerializer}.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    *<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    * @return The annotation value.<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    */<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   Class&lt;? extends HttpPartSerializer&gt; serializer() default HttpPartSerializer.Void.class;<a name="line.259"></a>
-<span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span>   /**<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    * A synonym for {@link #name()}.<a name="line.262"></a>
+<span class="sourceLineNo">254</span>    * @return The annotation value.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    */<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   Schema schema() default @Schema;<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>   /**<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    * Specifies the {@link HttpPartSerializer} class used for serializing values to strings.<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    *<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    * &lt;p&gt;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    * Overrides for this part the part serializer defined on the REST client which by default is {@link OpenApiSerializer}.<a name="line.262"></a>
 <span class="sourceLineNo">263</span>    *<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    * &lt;p&gt;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    * Allows you to use shortened notation if you're only specifying the name.<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    *<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    * &lt;p&gt;<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    * The following are completely equivalent ways of defining a form post entry:<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    * &lt;p class='bjava'&gt;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    *    &lt;jk&gt;public&lt;/jk&gt; Order placeOrder(&lt;ja&gt;@FormData&lt;/ja&gt;(name=&lt;js&gt;"petId"&lt;/js&gt;) &lt;jk&gt;long&lt;/jk&gt; &lt;jv&gt;petId&lt;/jv&gt;) {...}<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    * &lt;/p&gt;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    * &lt;p class='bjava'&gt;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    *    &lt;jk&gt;public&lt;/jk&gt; Order placeOrder(&lt;ja&gt;@FormData&lt;/ja&gt;(&lt;js&gt;"petId"&lt;/js&gt;) &lt;jk&gt;long&lt;/jk&gt; &lt;jv&gt;petId&lt;/jv&gt;) {...}<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    * &lt;/p&gt;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    *<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    * @return The annotation value.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    */<a name="line.277"></a>
-<span class="sourceLineNo">278</span>   String value() default "";<a name="line.278"></a>
-<span class="sourceLineNo">279</span>}<a name="line.279"></a>
+<span class="sourceLineNo">264</span>    * @return The annotation value.<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    */<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   Class&lt;? extends HttpPartSerializer&gt; serializer() default HttpPartSerializer.Void.class;<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>   /**<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    * A synonym for {@link #name()}.<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    *<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    * &lt;p&gt;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    * Allows you to use shortened notation if you're only specifying the name.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    *<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    * &lt;p&gt;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    * The following are completely equivalent ways of defining a form post entry:<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    * &lt;p class='bjava'&gt;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    *    &lt;jk&gt;public&lt;/jk&gt; Order placeOrder(&lt;ja&gt;@FormData&lt;/ja&gt;(name=&lt;js&gt;"petId"&lt;/js&gt;) &lt;jk&gt;long&lt;/jk&gt; &lt;jv&gt;petId&lt;/jv&gt;) {...}<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    * &lt;/p&gt;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    * &lt;p class='bjava'&gt;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    *    &lt;jk&gt;public&lt;/jk&gt; Order placeOrder(&lt;ja&gt;@FormData&lt;/ja&gt;(&lt;js&gt;"petId"&lt;/js&gt;) &lt;jk&gt;long&lt;/jk&gt; &lt;jv&gt;petId&lt;/jv&gt;) {...}<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    * &lt;/p&gt;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    *<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    * @return The annotation value.<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    */<a name="line.284"></a>
+<span class="sourceLineNo">285</span>   String value() default "";<a name="line.285"></a>
+<span class="sourceLineNo">286</span>}<a name="line.286"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Applier.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Applier.html
index a0b34af..7fcf9e9 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Applier.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Applier.html
@@ -104,225 +104,254 @@
 <span class="sourceLineNo">096</span>      return n;<a name="line.96"></a>
 <span class="sourceLineNo">097</span>   }<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">100</span>   // Builder<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>   /**<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    * Builder class.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    *<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    * &lt;ul class='seealso'&gt;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    * &lt;/ul&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    */<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      String name="", value="";<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>      /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>       * Constructor.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>       */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      protected Builder() {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>         super(FormData.class);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      }<a name="line.122"></a>
+<span class="sourceLineNo">099</span>   /**<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    * Finds the default value from the specified list of annotations.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    *<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    * @param pi The parameter.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    * @return The last matching default value, or {@link Value#empty()} if not found.<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    */<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   public static Value&lt;String&gt; findDef(ParamInfo pi) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      Value&lt;String&gt; n = Value.empty();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      pi.forEachAnnotation(FormData.class, x -&gt; isNotEmpty(x.def()), x -&gt; n.set(x.def()));<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      return n;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   // Builder<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   //-----------------------------------------------------------------------------------------------------------------<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>    * Builder class.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    *<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    * &lt;ul class='seealso'&gt;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    * &lt;/ul&gt;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    */<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.122"></a>
 <span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>      /**<a name="line.124"></a>
-<span class="sourceLineNo">125</span>       * Instantiates a new {@link FormData @FormData} object initialized with this builder.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>       *<a name="line.126"></a>
-<span class="sourceLineNo">127</span>       * @return A new {@link FormData @FormData} object.<a name="line.127"></a>
-<span class="sourceLineNo">128</span>       */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      public FormData build() {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>         return new Impl(this);<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>      /**<a name="line.133"></a>
-<span class="sourceLineNo">134</span>       * Sets the {@link FormData#name} property on this annotation.<a name="line.134"></a>
-<span class="sourceLineNo">135</span>       *<a name="line.135"></a>
-<span class="sourceLineNo">136</span>       * @param value The new value for this property.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>       * @return This object.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>       */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      public Builder name(String value) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>         this.name = value;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>         return this;<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>      /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>       * Sets the {@link FormData#parser} property on this annotation.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>       *<a name="line.146"></a>
-<span class="sourceLineNo">147</span>       * @param value The new value for this property.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>       * @return This object.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>       */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>         this.parser = value;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>         return this;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>      /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>       * Sets the {@link FormData#schema} property on this annotation.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>       *<a name="line.157"></a>
-<span class="sourceLineNo">158</span>       * @param value The new value for this property.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>       * @return This object.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>       */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      public Builder schema(Schema value) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>         this.schema = value;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>         return this;<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>      /**<a name="line.166"></a>
-<span class="sourceLineNo">167</span>       * Sets the {@link FormData#serializer} property on this annotation.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>       *<a name="line.168"></a>
-<span class="sourceLineNo">169</span>       * @param value The new value for this property.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>       * @return This object.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>       */<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>         this.serializer = value;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>         return this;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>      /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>       * Sets the {@link FormData#value} property on this annotation.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>       *<a name="line.179"></a>
-<span class="sourceLineNo">180</span>       * @param value The new value for this property.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>       * @return This object.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>       */<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      public Builder value(String value) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>         this.value = value;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      public Builder on(String...values) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>         super.on(values);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>         return this;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>         super.on(value);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>         return this;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>         super.onClass(value);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>         return this;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      public Builder on(Field...value) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>         super.on(value);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>         return this;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      public Builder on(Method...value) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>         super.on(value);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>         return this;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // &lt;/FluentSetters&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   }<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>   // Implementation<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>   private static class Impl extends TargetedAnnotationTImpl implements FormData {<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      private final String name, value;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      private final Schema schema;<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>      Impl(Builder b) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>         super(b);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>         this.name = b.name;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>         this.parser = b.parser;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>         this.schema = b.schema;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>         this.serializer = b.serializer;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>         this.value = b.value;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>         postConstruct();<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>      @Override /* FormData */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      public String name() {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>         return name;<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>      @Override /* FormData */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>         return parser;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>      @Override /* FormData */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      public Schema schema() {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>         return schema;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>      @Override /* FormData */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>         return serializer;<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>      @Override<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      public String value() {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>         return value;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      }<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   // Appliers<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>   /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    * Applies targeted {@link FormData} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   public static class Applier extends AnnotationApplier&lt;FormData,BeanContext.Builder&gt; {<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>       * Constructor.<a name="line.280"></a>
-<span class="sourceLineNo">281</span>       *<a name="line.281"></a>
-<span class="sourceLineNo">282</span>       * @param vr The resolver for resolving values in annotations.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>       */<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      public Applier(VarResolverSession vr) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>         super(FormData.class, BeanContext.Builder.class, vr);<a name="line.285"></a>
+<span class="sourceLineNo">124</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      String def="", name="", value="";<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>      /**<a name="line.129"></a>
+<span class="sourceLineNo">130</span>       * Constructor.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>       */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      protected Builder() {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>         super(FormData.class);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      }<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>       * Instantiates a new {@link FormData @FormData} object initialized with this builder.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>       *<a name="line.138"></a>
+<span class="sourceLineNo">139</span>       * @return A new {@link FormData @FormData} object.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>       */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      public FormData build() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>         return new Impl(this);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>      /**<a name="line.145"></a>
+<span class="sourceLineNo">146</span>       * Sets the {@link FormData#def} property on this annotation.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>       *<a name="line.147"></a>
+<span class="sourceLineNo">148</span>       * @param value The new value for this property.<a name="line.148"></a>
+<span class="sourceLineNo">149</span>       * @return This object.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>       */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      public Builder def(String value) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>         this.def = value;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>         return this;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>      /**<a name="line.156"></a>
+<span class="sourceLineNo">157</span>       * Sets the {@link FormData#name} property on this annotation.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>       *<a name="line.158"></a>
+<span class="sourceLineNo">159</span>       * @param value The new value for this property.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>       * @return This object.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>       */<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      public Builder name(String value) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>         this.name = value;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>         return this;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>      /**<a name="line.167"></a>
+<span class="sourceLineNo">168</span>       * Sets the {@link FormData#parser} property on this annotation.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>       *<a name="line.169"></a>
+<span class="sourceLineNo">170</span>       * @param value The new value for this property.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>       * @return This object.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>       */<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>         this.parser = value;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>         return this;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>      /**<a name="line.178"></a>
+<span class="sourceLineNo">179</span>       * Sets the {@link FormData#schema} property on this annotation.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>       *<a name="line.180"></a>
+<span class="sourceLineNo">181</span>       * @param value The new value for this property.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>       * @return This object.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>       */<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      public Builder schema(Schema value) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>         this.schema = value;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>         return this;<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>      /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>       * Sets the {@link FormData#serializer} property on this annotation.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>       *<a name="line.191"></a>
+<span class="sourceLineNo">192</span>       * @param value The new value for this property.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>       * @return This object.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>       */<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>         this.serializer = value;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>         return this;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>      /**<a name="line.200"></a>
+<span class="sourceLineNo">201</span>       * Sets the {@link FormData#value} property on this annotation.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>       *<a name="line.202"></a>
+<span class="sourceLineNo">203</span>       * @param value The new value for this property.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>       * @return This object.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>       */<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      public Builder value(String value) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>         this.value = value;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      public Builder on(String...values) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>         super.on(values);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>         return 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>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>         super.on(value);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>         super.onClass(value);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      public Builder on(Field...value) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>         super.on(value);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>         return this;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      }<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      public Builder on(Method...value) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>         super.on(value);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>         return this;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      }<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>      // &lt;/FluentSetters&gt;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   // Implementation<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>   private static class Impl extends TargetedAnnotationTImpl implements FormData {<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      private final String name, value, def;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      private final Schema schema;<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>      Impl(Builder b) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>         super(b);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>         this.def = b.def;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>         this.name = b.name;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>         this.parser = b.parser;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>         this.schema = b.schema;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>         this.serializer = b.serializer;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>         this.value = b.value;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>         postConstruct();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      }<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>      @Override /* FormData */<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      public String def() {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>         return def;<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>      @Override /* FormData */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      public String name() {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>         return name;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>      @Override /* FormData */<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>         return parser;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>      @Override /* FormData */<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      public Schema schema() {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>         return schema;<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>      @Override<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      public void apply(AnnotationInfo&lt;FormData&gt; ai, BeanContext.Builder b) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>         FormData a = ai.inner();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            return;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>         b.annotations(a);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   // Other<a name="line.298"></a>
+<span class="sourceLineNo">288</span>      @Override /* FormData */<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>         return serializer;<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>      @Override<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      public String value() {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>         return value;<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><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>    * A collection of {@link FormData @FormData annotations}.<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    */<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   @Documented<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   @Target({METHOD,TYPE})<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   @Retention(RUNTIME)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   @Inherited<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   public static @interface Array {<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>       * The child annotations.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>       *<a name="line.312"></a>
-<span class="sourceLineNo">313</span>       * @return The annotation value.<a name="line.313"></a>
-<span class="sourceLineNo">314</span>       */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      FormData[] value();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>}<a name="line.317"></a>
+<span class="sourceLineNo">300</span>   // Appliers<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>   /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    * Applies targeted {@link FormData} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   public static class Applier extends AnnotationApplier&lt;FormData,BeanContext.Builder&gt; {<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>      /**<a name="line.308"></a>
+<span class="sourceLineNo">309</span>       * Constructor.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>       *<a name="line.310"></a>
+<span class="sourceLineNo">311</span>       * @param vr The resolver for resolving values in annotations.<a name="line.311"></a>
+<span class="sourceLineNo">312</span>       */<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      public Applier(VarResolverSession vr) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>         super(FormData.class, BeanContext.Builder.class, vr);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>      @Override<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      public void apply(AnnotationInfo&lt;FormData&gt; ai, BeanContext.Builder b) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>         FormData a = ai.inner();<a name="line.319"></a>
+<span class="sourceLineNo">320</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.320"></a>
+<span class="sourceLineNo">321</span>            return;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>         b.annotations(a);<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><a name="line.325"></a>
+<span class="sourceLineNo">326</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   // Other<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   //-----------------------------------------------------------------------------------------------------------------<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 collection of {@link FormData @FormData annotations}.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   @Documented<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   @Target({METHOD,TYPE})<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   @Retention(RUNTIME)<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   @Inherited<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   public static @interface Array {<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>       * The child annotations.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>       *<a name="line.341"></a>
+<span class="sourceLineNo">342</span>       * @return The annotation value.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>       */<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      FormData[] value();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>}<a name="line.346"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Array.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Array.html
index a0b34af..7fcf9e9 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Array.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Array.html
@@ -104,225 +104,254 @@
 <span class="sourceLineNo">096</span>      return n;<a name="line.96"></a>
 <span class="sourceLineNo">097</span>   }<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">100</span>   // Builder<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>   /**<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    * Builder class.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    *<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    * &lt;ul class='seealso'&gt;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    * &lt;/ul&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    */<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      String name="", value="";<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>      /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>       * Constructor.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>       */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      protected Builder() {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>         super(FormData.class);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      }<a name="line.122"></a>
+<span class="sourceLineNo">099</span>   /**<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    * Finds the default value from the specified list of annotations.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    *<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    * @param pi The parameter.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    * @return The last matching default value, or {@link Value#empty()} if not found.<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    */<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   public static Value&lt;String&gt; findDef(ParamInfo pi) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      Value&lt;String&gt; n = Value.empty();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      pi.forEachAnnotation(FormData.class, x -&gt; isNotEmpty(x.def()), x -&gt; n.set(x.def()));<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      return n;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   // Builder<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   //-----------------------------------------------------------------------------------------------------------------<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>    * Builder class.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    *<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    * &lt;ul class='seealso'&gt;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    * &lt;/ul&gt;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    */<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.122"></a>
 <span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>      /**<a name="line.124"></a>
-<span class="sourceLineNo">125</span>       * Instantiates a new {@link FormData @FormData} object initialized with this builder.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>       *<a name="line.126"></a>
-<span class="sourceLineNo">127</span>       * @return A new {@link FormData @FormData} object.<a name="line.127"></a>
-<span class="sourceLineNo">128</span>       */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      public FormData build() {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>         return new Impl(this);<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>      /**<a name="line.133"></a>
-<span class="sourceLineNo">134</span>       * Sets the {@link FormData#name} property on this annotation.<a name="line.134"></a>
-<span class="sourceLineNo">135</span>       *<a name="line.135"></a>
-<span class="sourceLineNo">136</span>       * @param value The new value for this property.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>       * @return This object.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>       */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      public Builder name(String value) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>         this.name = value;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>         return this;<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>      /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>       * Sets the {@link FormData#parser} property on this annotation.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>       *<a name="line.146"></a>
-<span class="sourceLineNo">147</span>       * @param value The new value for this property.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>       * @return This object.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>       */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>         this.parser = value;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>         return this;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>      /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>       * Sets the {@link FormData#schema} property on this annotation.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>       *<a name="line.157"></a>
-<span class="sourceLineNo">158</span>       * @param value The new value for this property.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>       * @return This object.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>       */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      public Builder schema(Schema value) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>         this.schema = value;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>         return this;<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>      /**<a name="line.166"></a>
-<span class="sourceLineNo">167</span>       * Sets the {@link FormData#serializer} property on this annotation.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>       *<a name="line.168"></a>
-<span class="sourceLineNo">169</span>       * @param value The new value for this property.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>       * @return This object.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>       */<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>         this.serializer = value;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>         return this;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>      /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>       * Sets the {@link FormData#value} property on this annotation.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>       *<a name="line.179"></a>
-<span class="sourceLineNo">180</span>       * @param value The new value for this property.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>       * @return This object.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>       */<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      public Builder value(String value) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>         this.value = value;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      public Builder on(String...values) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>         super.on(values);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>         return this;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>         super.on(value);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>         return this;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>         super.onClass(value);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>         return this;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      public Builder on(Field...value) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>         super.on(value);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>         return this;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      public Builder on(Method...value) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>         super.on(value);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>         return this;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // &lt;/FluentSetters&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   }<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>   // Implementation<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>   private static class Impl extends TargetedAnnotationTImpl implements FormData {<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      private final String name, value;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      private final Schema schema;<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>      Impl(Builder b) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>         super(b);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>         this.name = b.name;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>         this.parser = b.parser;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>         this.schema = b.schema;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>         this.serializer = b.serializer;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>         this.value = b.value;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>         postConstruct();<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>      @Override /* FormData */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      public String name() {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>         return name;<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>      @Override /* FormData */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>         return parser;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>      @Override /* FormData */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      public Schema schema() {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>         return schema;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>      @Override /* FormData */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>         return serializer;<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>      @Override<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      public String value() {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>         return value;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      }<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   // Appliers<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>   /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    * Applies targeted {@link FormData} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   public static class Applier extends AnnotationApplier&lt;FormData,BeanContext.Builder&gt; {<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>       * Constructor.<a name="line.280"></a>
-<span class="sourceLineNo">281</span>       *<a name="line.281"></a>
-<span class="sourceLineNo">282</span>       * @param vr The resolver for resolving values in annotations.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>       */<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      public Applier(VarResolverSession vr) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>         super(FormData.class, BeanContext.Builder.class, vr);<a name="line.285"></a>
+<span class="sourceLineNo">124</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      String def="", name="", value="";<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>      /**<a name="line.129"></a>
+<span class="sourceLineNo">130</span>       * Constructor.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>       */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      protected Builder() {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>         super(FormData.class);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      }<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>       * Instantiates a new {@link FormData @FormData} object initialized with this builder.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>       *<a name="line.138"></a>
+<span class="sourceLineNo">139</span>       * @return A new {@link FormData @FormData} object.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>       */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      public FormData build() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>         return new Impl(this);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>      /**<a name="line.145"></a>
+<span class="sourceLineNo">146</span>       * Sets the {@link FormData#def} property on this annotation.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>       *<a name="line.147"></a>
+<span class="sourceLineNo">148</span>       * @param value The new value for this property.<a name="line.148"></a>
+<span class="sourceLineNo">149</span>       * @return This object.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>       */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      public Builder def(String value) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>         this.def = value;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>         return this;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>      /**<a name="line.156"></a>
+<span class="sourceLineNo">157</span>       * Sets the {@link FormData#name} property on this annotation.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>       *<a name="line.158"></a>
+<span class="sourceLineNo">159</span>       * @param value The new value for this property.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>       * @return This object.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>       */<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      public Builder name(String value) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>         this.name = value;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>         return this;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>      /**<a name="line.167"></a>
+<span class="sourceLineNo">168</span>       * Sets the {@link FormData#parser} property on this annotation.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>       *<a name="line.169"></a>
+<span class="sourceLineNo">170</span>       * @param value The new value for this property.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>       * @return This object.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>       */<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>         this.parser = value;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>         return this;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>      /**<a name="line.178"></a>
+<span class="sourceLineNo">179</span>       * Sets the {@link FormData#schema} property on this annotation.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>       *<a name="line.180"></a>
+<span class="sourceLineNo">181</span>       * @param value The new value for this property.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>       * @return This object.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>       */<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      public Builder schema(Schema value) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>         this.schema = value;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>         return this;<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>      /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>       * Sets the {@link FormData#serializer} property on this annotation.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>       *<a name="line.191"></a>
+<span class="sourceLineNo">192</span>       * @param value The new value for this property.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>       * @return This object.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>       */<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>         this.serializer = value;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>         return this;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>      /**<a name="line.200"></a>
+<span class="sourceLineNo">201</span>       * Sets the {@link FormData#value} property on this annotation.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>       *<a name="line.202"></a>
+<span class="sourceLineNo">203</span>       * @param value The new value for this property.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>       * @return This object.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>       */<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      public Builder value(String value) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>         this.value = value;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      public Builder on(String...values) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>         super.on(values);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>         return 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>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>         super.on(value);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>         super.onClass(value);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      public Builder on(Field...value) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>         super.on(value);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>         return this;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      }<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      public Builder on(Method...value) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>         super.on(value);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>         return this;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      }<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>      // &lt;/FluentSetters&gt;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   // Implementation<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>   private static class Impl extends TargetedAnnotationTImpl implements FormData {<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      private final String name, value, def;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      private final Schema schema;<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>      Impl(Builder b) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>         super(b);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>         this.def = b.def;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>         this.name = b.name;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>         this.parser = b.parser;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>         this.schema = b.schema;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>         this.serializer = b.serializer;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>         this.value = b.value;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>         postConstruct();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      }<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>      @Override /* FormData */<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      public String def() {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>         return def;<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>      @Override /* FormData */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      public String name() {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>         return name;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>      @Override /* FormData */<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>         return parser;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>      @Override /* FormData */<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      public Schema schema() {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>         return schema;<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>      @Override<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      public void apply(AnnotationInfo&lt;FormData&gt; ai, BeanContext.Builder b) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>         FormData a = ai.inner();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            return;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>         b.annotations(a);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   // Other<a name="line.298"></a>
+<span class="sourceLineNo">288</span>      @Override /* FormData */<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>         return serializer;<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>      @Override<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      public String value() {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>         return value;<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><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>    * A collection of {@link FormData @FormData annotations}.<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    */<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   @Documented<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   @Target({METHOD,TYPE})<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   @Retention(RUNTIME)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   @Inherited<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   public static @interface Array {<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>       * The child annotations.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>       *<a name="line.312"></a>
-<span class="sourceLineNo">313</span>       * @return The annotation value.<a name="line.313"></a>
-<span class="sourceLineNo">314</span>       */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      FormData[] value();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>}<a name="line.317"></a>
+<span class="sourceLineNo">300</span>   // Appliers<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>   /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    * Applies targeted {@link FormData} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   public static class Applier extends AnnotationApplier&lt;FormData,BeanContext.Builder&gt; {<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>      /**<a name="line.308"></a>
+<span class="sourceLineNo">309</span>       * Constructor.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>       *<a name="line.310"></a>
+<span class="sourceLineNo">311</span>       * @param vr The resolver for resolving values in annotations.<a name="line.311"></a>
+<span class="sourceLineNo">312</span>       */<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      public Applier(VarResolverSession vr) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>         super(FormData.class, BeanContext.Builder.class, vr);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>      @Override<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      public void apply(AnnotationInfo&lt;FormData&gt; ai, BeanContext.Builder b) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>         FormData a = ai.inner();<a name="line.319"></a>
+<span class="sourceLineNo">320</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.320"></a>
+<span class="sourceLineNo">321</span>            return;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>         b.annotations(a);<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><a name="line.325"></a>
+<span class="sourceLineNo">326</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   // Other<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   //-----------------------------------------------------------------------------------------------------------------<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 collection of {@link FormData @FormData annotations}.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   @Documented<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   @Target({METHOD,TYPE})<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   @Retention(RUNTIME)<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   @Inherited<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   public static @interface Array {<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>       * The child annotations.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>       *<a name="line.341"></a>
+<span class="sourceLineNo">342</span>       * @return The annotation value.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>       */<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      FormData[] value();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>}<a name="line.346"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html
index a0b34af..7fcf9e9 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html
@@ -104,225 +104,254 @@
 <span class="sourceLineNo">096</span>      return n;<a name="line.96"></a>
 <span class="sourceLineNo">097</span>   }<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">100</span>   // Builder<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>   /**<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    * Builder class.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    *<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    * &lt;ul class='seealso'&gt;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    * &lt;/ul&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    */<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      String name="", value="";<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>      /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>       * Constructor.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>       */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      protected Builder() {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>         super(FormData.class);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      }<a name="line.122"></a>
+<span class="sourceLineNo">099</span>   /**<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    * Finds the default value from the specified list of annotations.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    *<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    * @param pi The parameter.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    * @return The last matching default value, or {@link Value#empty()} if not found.<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    */<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   public static Value&lt;String&gt; findDef(ParamInfo pi) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      Value&lt;String&gt; n = Value.empty();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      pi.forEachAnnotation(FormData.class, x -&gt; isNotEmpty(x.def()), x -&gt; n.set(x.def()));<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      return n;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   // Builder<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   //-----------------------------------------------------------------------------------------------------------------<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>    * Builder class.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    *<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    * &lt;ul class='seealso'&gt;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    * &lt;/ul&gt;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    */<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.122"></a>
 <span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>      /**<a name="line.124"></a>
-<span class="sourceLineNo">125</span>       * Instantiates a new {@link FormData @FormData} object initialized with this builder.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>       *<a name="line.126"></a>
-<span class="sourceLineNo">127</span>       * @return A new {@link FormData @FormData} object.<a name="line.127"></a>
-<span class="sourceLineNo">128</span>       */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      public FormData build() {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>         return new Impl(this);<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>      /**<a name="line.133"></a>
-<span class="sourceLineNo">134</span>       * Sets the {@link FormData#name} property on this annotation.<a name="line.134"></a>
-<span class="sourceLineNo">135</span>       *<a name="line.135"></a>
-<span class="sourceLineNo">136</span>       * @param value The new value for this property.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>       * @return This object.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>       */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      public Builder name(String value) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>         this.name = value;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>         return this;<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>      /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>       * Sets the {@link FormData#parser} property on this annotation.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>       *<a name="line.146"></a>
-<span class="sourceLineNo">147</span>       * @param value The new value for this property.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>       * @return This object.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>       */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>         this.parser = value;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>         return this;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>      /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>       * Sets the {@link FormData#schema} property on this annotation.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>       *<a name="line.157"></a>
-<span class="sourceLineNo">158</span>       * @param value The new value for this property.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>       * @return This object.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>       */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      public Builder schema(Schema value) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>         this.schema = value;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>         return this;<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>      /**<a name="line.166"></a>
-<span class="sourceLineNo">167</span>       * Sets the {@link FormData#serializer} property on this annotation.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>       *<a name="line.168"></a>
-<span class="sourceLineNo">169</span>       * @param value The new value for this property.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>       * @return This object.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>       */<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>         this.serializer = value;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>         return this;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>      /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>       * Sets the {@link FormData#value} property on this annotation.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>       *<a name="line.179"></a>
-<span class="sourceLineNo">180</span>       * @param value The new value for this property.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>       * @return This object.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>       */<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      public Builder value(String value) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>         this.value = value;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      public Builder on(String...values) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>         super.on(values);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>         return this;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>         super.on(value);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>         return this;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>         super.onClass(value);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>         return this;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      public Builder on(Field...value) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>         super.on(value);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>         return this;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      public Builder on(Method...value) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>         super.on(value);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>         return this;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // &lt;/FluentSetters&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   }<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>   // Implementation<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>   private static class Impl extends TargetedAnnotationTImpl implements FormData {<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      private final String name, value;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      private final Schema schema;<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>      Impl(Builder b) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>         super(b);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>         this.name = b.name;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>         this.parser = b.parser;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>         this.schema = b.schema;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>         this.serializer = b.serializer;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>         this.value = b.value;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>         postConstruct();<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>      @Override /* FormData */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      public String name() {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>         return name;<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>      @Override /* FormData */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>         return parser;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>      @Override /* FormData */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      public Schema schema() {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>         return schema;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>      @Override /* FormData */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>         return serializer;<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>      @Override<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      public String value() {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>         return value;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      }<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   // Appliers<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>   /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    * Applies targeted {@link FormData} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   public static class Applier extends AnnotationApplier&lt;FormData,BeanContext.Builder&gt; {<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>       * Constructor.<a name="line.280"></a>
-<span class="sourceLineNo">281</span>       *<a name="line.281"></a>
-<span class="sourceLineNo">282</span>       * @param vr The resolver for resolving values in annotations.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>       */<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      public Applier(VarResolverSession vr) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>         super(FormData.class, BeanContext.Builder.class, vr);<a name="line.285"></a>
+<span class="sourceLineNo">124</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      String def="", name="", value="";<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>      /**<a name="line.129"></a>
+<span class="sourceLineNo">130</span>       * Constructor.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>       */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      protected Builder() {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>         super(FormData.class);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      }<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>       * Instantiates a new {@link FormData @FormData} object initialized with this builder.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>       *<a name="line.138"></a>
+<span class="sourceLineNo">139</span>       * @return A new {@link FormData @FormData} object.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>       */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      public FormData build() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>         return new Impl(this);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>      /**<a name="line.145"></a>
+<span class="sourceLineNo">146</span>       * Sets the {@link FormData#def} property on this annotation.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>       *<a name="line.147"></a>
+<span class="sourceLineNo">148</span>       * @param value The new value for this property.<a name="line.148"></a>
+<span class="sourceLineNo">149</span>       * @return This object.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>       */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      public Builder def(String value) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>         this.def = value;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>         return this;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>      /**<a name="line.156"></a>
+<span class="sourceLineNo">157</span>       * Sets the {@link FormData#name} property on this annotation.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>       *<a name="line.158"></a>
+<span class="sourceLineNo">159</span>       * @param value The new value for this property.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>       * @return This object.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>       */<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      public Builder name(String value) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>         this.name = value;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>         return this;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>      /**<a name="line.167"></a>
+<span class="sourceLineNo">168</span>       * Sets the {@link FormData#parser} property on this annotation.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>       *<a name="line.169"></a>
+<span class="sourceLineNo">170</span>       * @param value The new value for this property.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>       * @return This object.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>       */<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>         this.parser = value;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>         return this;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>      /**<a name="line.178"></a>
+<span class="sourceLineNo">179</span>       * Sets the {@link FormData#schema} property on this annotation.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>       *<a name="line.180"></a>
+<span class="sourceLineNo">181</span>       * @param value The new value for this property.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>       * @return This object.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>       */<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      public Builder schema(Schema value) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>         this.schema = value;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>         return this;<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>      /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>       * Sets the {@link FormData#serializer} property on this annotation.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>       *<a name="line.191"></a>
+<span class="sourceLineNo">192</span>       * @param value The new value for this property.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>       * @return This object.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>       */<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>         this.serializer = value;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>         return this;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>      /**<a name="line.200"></a>
+<span class="sourceLineNo">201</span>       * Sets the {@link FormData#value} property on this annotation.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>       *<a name="line.202"></a>
+<span class="sourceLineNo">203</span>       * @param value The new value for this property.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>       * @return This object.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>       */<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      public Builder value(String value) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>         this.value = value;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      public Builder on(String...values) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>         super.on(values);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>         return 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>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>         super.on(value);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>         super.onClass(value);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      public Builder on(Field...value) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>         super.on(value);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>         return this;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      }<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      public Builder on(Method...value) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>         super.on(value);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>         return this;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      }<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>      // &lt;/FluentSetters&gt;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   // Implementation<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>   private static class Impl extends TargetedAnnotationTImpl implements FormData {<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      private final String name, value, def;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      private final Schema schema;<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>      Impl(Builder b) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>         super(b);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>         this.def = b.def;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>         this.name = b.name;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>         this.parser = b.parser;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>         this.schema = b.schema;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>         this.serializer = b.serializer;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>         this.value = b.value;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>         postConstruct();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      }<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>      @Override /* FormData */<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      public String def() {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>         return def;<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>      @Override /* FormData */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      public String name() {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>         return name;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>      @Override /* FormData */<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>         return parser;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>      @Override /* FormData */<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      public Schema schema() {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>         return schema;<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>      @Override<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      public void apply(AnnotationInfo&lt;FormData&gt; ai, BeanContext.Builder b) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>         FormData a = ai.inner();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            return;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>         b.annotations(a);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   // Other<a name="line.298"></a>
+<span class="sourceLineNo">288</span>      @Override /* FormData */<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>         return serializer;<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>      @Override<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      public String value() {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>         return value;<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><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>    * A collection of {@link FormData @FormData annotations}.<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    */<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   @Documented<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   @Target({METHOD,TYPE})<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   @Retention(RUNTIME)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   @Inherited<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   public static @interface Array {<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>       * The child annotations.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>       *<a name="line.312"></a>
-<span class="sourceLineNo">313</span>       * @return The annotation value.<a name="line.313"></a>
-<span class="sourceLineNo">314</span>       */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      FormData[] value();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>}<a name="line.317"></a>
+<span class="sourceLineNo">300</span>   // Appliers<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>   /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    * Applies targeted {@link FormData} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   public static class Applier extends AnnotationApplier&lt;FormData,BeanContext.Builder&gt; {<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>      /**<a name="line.308"></a>
+<span class="sourceLineNo">309</span>       * Constructor.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>       *<a name="line.310"></a>
+<span class="sourceLineNo">311</span>       * @param vr The resolver for resolving values in annotations.<a name="line.311"></a>
+<span class="sourceLineNo">312</span>       */<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      public Applier(VarResolverSession vr) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>         super(FormData.class, BeanContext.Builder.class, vr);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>      @Override<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      public void apply(AnnotationInfo&lt;FormData&gt; ai, BeanContext.Builder b) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>         FormData a = ai.inner();<a name="line.319"></a>
+<span class="sourceLineNo">320</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.320"></a>
+<span class="sourceLineNo">321</span>            return;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>         b.annotations(a);<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><a name="line.325"></a>
+<span class="sourceLineNo">326</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   // Other<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   //-----------------------------------------------------------------------------------------------------------------<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 collection of {@link FormData @FormData annotations}.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   @Documented<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   @Target({METHOD,TYPE})<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   @Retention(RUNTIME)<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   @Inherited<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   public static @interface Array {<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>       * The child annotations.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>       *<a name="line.341"></a>
+<span class="sourceLineNo">342</span>       * @return The annotation value.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>       */<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      FormData[] value();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>}<a name="line.346"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/FormDataAnnotation.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/FormDataAnnotation.html
index a0b34af..7fcf9e9 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/FormDataAnnotation.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/FormDataAnnotation.html
@@ -104,225 +104,254 @@
 <span class="sourceLineNo">096</span>      return n;<a name="line.96"></a>
 <span class="sourceLineNo">097</span>   }<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">100</span>   // Builder<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>   /**<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    * Builder class.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    *<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    * &lt;ul class='seealso'&gt;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    * &lt;/ul&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    */<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      String name="", value="";<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>      /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>       * Constructor.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>       */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      protected Builder() {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>         super(FormData.class);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      }<a name="line.122"></a>
+<span class="sourceLineNo">099</span>   /**<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    * Finds the default value from the specified list of annotations.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    *<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    * @param pi The parameter.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    * @return The last matching default value, or {@link Value#empty()} if not found.<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    */<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   public static Value&lt;String&gt; findDef(ParamInfo pi) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      Value&lt;String&gt; n = Value.empty();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      pi.forEachAnnotation(FormData.class, x -&gt; isNotEmpty(x.def()), x -&gt; n.set(x.def()));<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      return n;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   // Builder<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   //-----------------------------------------------------------------------------------------------------------------<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>    * Builder class.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    *<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    * &lt;ul class='seealso'&gt;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    * &lt;/ul&gt;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    */<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.122"></a>
 <span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>      /**<a name="line.124"></a>
-<span class="sourceLineNo">125</span>       * Instantiates a new {@link FormData @FormData} object initialized with this builder.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>       *<a name="line.126"></a>
-<span class="sourceLineNo">127</span>       * @return A new {@link FormData @FormData} object.<a name="line.127"></a>
-<span class="sourceLineNo">128</span>       */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      public FormData build() {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>         return new Impl(this);<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>      /**<a name="line.133"></a>
-<span class="sourceLineNo">134</span>       * Sets the {@link FormData#name} property on this annotation.<a name="line.134"></a>
-<span class="sourceLineNo">135</span>       *<a name="line.135"></a>
-<span class="sourceLineNo">136</span>       * @param value The new value for this property.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>       * @return This object.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>       */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      public Builder name(String value) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>         this.name = value;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>         return this;<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>      /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>       * Sets the {@link FormData#parser} property on this annotation.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>       *<a name="line.146"></a>
-<span class="sourceLineNo">147</span>       * @param value The new value for this property.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>       * @return This object.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>       */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>         this.parser = value;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>         return this;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>      /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>       * Sets the {@link FormData#schema} property on this annotation.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>       *<a name="line.157"></a>
-<span class="sourceLineNo">158</span>       * @param value The new value for this property.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>       * @return This object.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>       */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      public Builder schema(Schema value) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>         this.schema = value;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>         return this;<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>      /**<a name="line.166"></a>
-<span class="sourceLineNo">167</span>       * Sets the {@link FormData#serializer} property on this annotation.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>       *<a name="line.168"></a>
-<span class="sourceLineNo">169</span>       * @param value The new value for this property.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>       * @return This object.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>       */<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>         this.serializer = value;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>         return this;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>      /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>       * Sets the {@link FormData#value} property on this annotation.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>       *<a name="line.179"></a>
-<span class="sourceLineNo">180</span>       * @param value The new value for this property.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>       * @return This object.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>       */<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      public Builder value(String value) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>         this.value = value;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      public Builder on(String...values) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>         super.on(values);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>         return this;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>         super.on(value);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>         return this;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>         super.onClass(value);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>         return this;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      public Builder on(Field...value) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>         super.on(value);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>         return this;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      public Builder on(Method...value) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>         super.on(value);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>         return this;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // &lt;/FluentSetters&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   }<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>   // Implementation<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>   private static class Impl extends TargetedAnnotationTImpl implements FormData {<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      private final String name, value;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      private final Schema schema;<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>      Impl(Builder b) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>         super(b);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>         this.name = b.name;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>         this.parser = b.parser;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>         this.schema = b.schema;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>         this.serializer = b.serializer;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>         this.value = b.value;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>         postConstruct();<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>      @Override /* FormData */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      public String name() {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>         return name;<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>      @Override /* FormData */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>         return parser;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>      @Override /* FormData */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      public Schema schema() {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>         return schema;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>      @Override /* FormData */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>         return serializer;<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>      @Override<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      public String value() {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>         return value;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      }<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   // Appliers<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>   /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    * Applies targeted {@link FormData} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   public static class Applier extends AnnotationApplier&lt;FormData,BeanContext.Builder&gt; {<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>       * Constructor.<a name="line.280"></a>
-<span class="sourceLineNo">281</span>       *<a name="line.281"></a>
-<span class="sourceLineNo">282</span>       * @param vr The resolver for resolving values in annotations.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>       */<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      public Applier(VarResolverSession vr) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>         super(FormData.class, BeanContext.Builder.class, vr);<a name="line.285"></a>
+<span class="sourceLineNo">124</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      String def="", name="", value="";<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>      /**<a name="line.129"></a>
+<span class="sourceLineNo">130</span>       * Constructor.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>       */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      protected Builder() {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>         super(FormData.class);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      }<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>       * Instantiates a new {@link FormData @FormData} object initialized with this builder.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>       *<a name="line.138"></a>
+<span class="sourceLineNo">139</span>       * @return A new {@link FormData @FormData} object.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>       */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      public FormData build() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>         return new Impl(this);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>      /**<a name="line.145"></a>
+<span class="sourceLineNo">146</span>       * Sets the {@link FormData#def} property on this annotation.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>       *<a name="line.147"></a>
+<span class="sourceLineNo">148</span>       * @param value The new value for this property.<a name="line.148"></a>
+<span class="sourceLineNo">149</span>       * @return This object.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>       */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      public Builder def(String value) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>         this.def = value;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>         return this;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>      /**<a name="line.156"></a>
+<span class="sourceLineNo">157</span>       * Sets the {@link FormData#name} property on this annotation.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>       *<a name="line.158"></a>
+<span class="sourceLineNo">159</span>       * @param value The new value for this property.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>       * @return This object.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>       */<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      public Builder name(String value) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>         this.name = value;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>         return this;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>      /**<a name="line.167"></a>
+<span class="sourceLineNo">168</span>       * Sets the {@link FormData#parser} property on this annotation.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>       *<a name="line.169"></a>
+<span class="sourceLineNo">170</span>       * @param value The new value for this property.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>       * @return This object.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>       */<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>         this.parser = value;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>         return this;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>      /**<a name="line.178"></a>
+<span class="sourceLineNo">179</span>       * Sets the {@link FormData#schema} property on this annotation.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>       *<a name="line.180"></a>
+<span class="sourceLineNo">181</span>       * @param value The new value for this property.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>       * @return This object.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>       */<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      public Builder schema(Schema value) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>         this.schema = value;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>         return this;<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>      /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>       * Sets the {@link FormData#serializer} property on this annotation.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>       *<a name="line.191"></a>
+<span class="sourceLineNo">192</span>       * @param value The new value for this property.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>       * @return This object.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>       */<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>         this.serializer = value;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>         return this;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>      /**<a name="line.200"></a>
+<span class="sourceLineNo">201</span>       * Sets the {@link FormData#value} property on this annotation.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>       *<a name="line.202"></a>
+<span class="sourceLineNo">203</span>       * @param value The new value for this property.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>       * @return This object.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>       */<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      public Builder value(String value) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>         this.value = value;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      public Builder on(String...values) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>         super.on(values);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>         return 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>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>         super.on(value);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>         super.onClass(value);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      public Builder on(Field...value) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>         super.on(value);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>         return this;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      }<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      public Builder on(Method...value) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>         super.on(value);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>         return this;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      }<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>      // &lt;/FluentSetters&gt;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   // Implementation<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>   private static class Impl extends TargetedAnnotationTImpl implements FormData {<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      private final String name, value, def;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      private final Schema schema;<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>      Impl(Builder b) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>         super(b);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>         this.def = b.def;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>         this.name = b.name;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>         this.parser = b.parser;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>         this.schema = b.schema;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>         this.serializer = b.serializer;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>         this.value = b.value;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>         postConstruct();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      }<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>      @Override /* FormData */<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      public String def() {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>         return def;<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>      @Override /* FormData */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      public String name() {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>         return name;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>      @Override /* FormData */<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>         return parser;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>      @Override /* FormData */<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      public Schema schema() {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>         return schema;<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>      @Override<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      public void apply(AnnotationInfo&lt;FormData&gt; ai, BeanContext.Builder b) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>         FormData a = ai.inner();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            return;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>         b.annotations(a);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   // Other<a name="line.298"></a>
+<span class="sourceLineNo">288</span>      @Override /* FormData */<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>         return serializer;<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>      @Override<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      public String value() {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>         return value;<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><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>    * A collection of {@link FormData @FormData annotations}.<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    */<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   @Documented<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   @Target({METHOD,TYPE})<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   @Retention(RUNTIME)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   @Inherited<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   public static @interface Array {<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>       * The child annotations.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>       *<a name="line.312"></a>
-<span class="sourceLineNo">313</span>       * @return The annotation value.<a name="line.313"></a>
-<span class="sourceLineNo">314</span>       */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      FormData[] value();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>}<a name="line.317"></a>
+<span class="sourceLineNo">300</span>   // Appliers<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>   /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    * Applies targeted {@link FormData} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   public static class Applier extends AnnotationApplier&lt;FormData,BeanContext.Builder&gt; {<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>      /**<a name="line.308"></a>
+<span class="sourceLineNo">309</span>       * Constructor.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>       *<a name="line.310"></a>
+<span class="sourceLineNo">311</span>       * @param vr The resolver for resolving values in annotations.<a name="line.311"></a>
+<span class="sourceLineNo">312</span>       */<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      public Applier(VarResolverSession vr) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>         super(FormData.class, BeanContext.Builder.class, vr);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>      @Override<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      public void apply(AnnotationInfo&lt;FormData&gt; ai, BeanContext.Builder b) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>         FormData a = ai.inner();<a name="line.319"></a>
+<span class="sourceLineNo">320</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.320"></a>
+<span class="sourceLineNo">321</span>            return;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>         b.annotations(a);<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><a name="line.325"></a>
+<span class="sourceLineNo">326</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   // Other<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   //-----------------------------------------------------------------------------------------------------------------<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 collection of {@link FormData @FormData annotations}.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   @Documented<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   @Target({METHOD,TYPE})<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   @Retention(RUNTIME)<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   @Inherited<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   public static @interface Array {<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>       * The child annotations.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>       *<a name="line.341"></a>
+<span class="sourceLineNo">342</span>       * @return The annotation value.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>       */<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      FormData[] value();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>}<a name="line.346"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/Header.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/Header.html
index d4b1f47..a549625 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/Header.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/Header.html
@@ -97,155 +97,162 @@
 <span class="sourceLineNo">089</span>public @interface Header {<a name="line.89"></a>
 <span class="sourceLineNo">090</span><a name="line.90"></a>
 <span class="sourceLineNo">091</span>   /**<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    * HTTP header name.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    * &lt;p&gt;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    * A blank value (the default) indicates to reuse the bean property name when used on a request bean property.<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    *<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    * &lt;p&gt;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    * The value should be either a valid HTTP header name, or &lt;js&gt;"*"&lt;/js&gt; to represent multiple name/value pairs<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    *<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    * &lt;p&gt;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    * A blank value (the default) has the following behavior:<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    * &lt;ul class='spaced-list'&gt;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    *    &lt;li&gt;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    *       If the data type is &lt;c&gt;NameValuePairs&lt;/c&gt;, &lt;c&gt;Map&lt;/c&gt;, or a bean,<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    *       then it's the equivalent to &lt;js&gt;"*"&lt;/js&gt; which will cause the value to be serialized as name/value pairs.<a name="line.104"></a>
+<span class="sourceLineNo">092</span>    * Default value for this parameter.<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    *<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    * @return The annotation value.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    */<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   String def() default "";<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>   /**<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    * HTTP header name.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    * &lt;p&gt;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    * A blank value (the default) indicates to reuse the bean property name when used on a request bean property.<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    *<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    * &lt;p&gt;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    * The value should be either a valid HTTP header name, or &lt;js&gt;"*"&lt;/js&gt; to represent multiple name/value pairs<a name="line.104"></a>
 <span class="sourceLineNo">105</span>    *<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    *       &lt;h5 class='figure'&gt;Examples:&lt;/h5&gt;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    *       &lt;p class='bjava'&gt;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    *    &lt;jc&gt;// When used on a REST method&lt;/jc&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    *    &lt;ja&gt;@RestPost&lt;/ja&gt;(&lt;js&gt;"/addPet"&lt;/js&gt;)<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    *    &lt;jk&gt;public void&lt;/jk&gt; addPet(&lt;ja&gt;@Header&lt;/ja&gt; JsonMap &lt;jv&gt;allHeaderParameters&lt;/jv&gt;) {...}<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    *       &lt;/p&gt;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    *       &lt;p class='bjava'&gt;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    *    &lt;jc&gt;// When used on a remote method parameter&lt;/jc&gt;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    *    &lt;ja&gt;@RemoteResource&lt;/ja&gt;(path=&lt;js&gt;"/myproxy"&lt;/js&gt;)<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyProxy {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    *<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    *       &lt;jc&gt;// Equivalent to @Header("*")&lt;/jc&gt;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    *       &lt;ja&gt;@RemoteGet&lt;/ja&gt;(&lt;js&gt;"/mymethod"&lt;/js&gt;)<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    *       String myProxyMethod1(&lt;ja&gt;@Header&lt;/ja&gt; Map&amp;lt;String,Object&amp;gt; &lt;jv&gt;allHeaderParameters&lt;/jv&gt;);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    *    }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    *       &lt;/p&gt;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    *       &lt;p class='bjava'&gt;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    *    &lt;jc&gt;// When used on a request bean method&lt;/jc&gt;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyRequest {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    *<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    *       &lt;jc&gt;// Equivalent to @Header("*")&lt;/jc&gt;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    *       &lt;ja&gt;@Header&lt;/ja&gt;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    *       Map&amp;lt;String,Object&amp;gt; getFoo();<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    *    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    *       &lt;/p&gt;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    *    &lt;/li&gt;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    *    &lt;li&gt;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    *       If used on a request bean method, uses the bean property name.<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    *<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    *       &lt;h5 class='figure'&gt;Example:&lt;/h5&gt;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    *       &lt;p class='bjava'&gt;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyRequest {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    *<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    *       &lt;jc&gt;// Equivalent to @Header("Foo")&lt;/jc&gt;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    *       &lt;ja&gt;@Header&lt;/ja&gt;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    *       &lt;ja&gt;@Beanp&lt;/ja&gt;(&lt;js&gt;"Foo"&lt;/js&gt;)<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    *       String getFoo();<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    *    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    *       &lt;/p&gt;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    *    &lt;/li&gt;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    * &lt;/ul&gt;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    *<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    * @return The annotation value.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   String name() default "";<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>   /**<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    * Dynamically apply this annotation to the specified classes.<a name="line.153"></a>
+<span class="sourceLineNo">106</span>    * &lt;p&gt;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    * A blank value (the default) has the following behavior:<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    * &lt;ul class='spaced-list'&gt;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    *    &lt;li&gt;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    *       If the data type is &lt;c&gt;NameValuePairs&lt;/c&gt;, &lt;c&gt;Map&lt;/c&gt;, or a bean,<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    *       then it's the equivalent to &lt;js&gt;"*"&lt;/js&gt; which will cause the value to be serialized as name/value pairs.<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    *<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    *       &lt;h5 class='figure'&gt;Examples:&lt;/h5&gt;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    *       &lt;p class='bjava'&gt;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    *    &lt;jc&gt;// When used on a REST method&lt;/jc&gt;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    *    &lt;ja&gt;@RestPost&lt;/ja&gt;(&lt;js&gt;"/addPet"&lt;/js&gt;)<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    *    &lt;jk&gt;public void&lt;/jk&gt; addPet(&lt;ja&gt;@Header&lt;/ja&gt; JsonMap &lt;jv&gt;allHeaderParameters&lt;/jv&gt;) {...}<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    *       &lt;/p&gt;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    *       &lt;p class='bjava'&gt;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    *    &lt;jc&gt;// When used on a remote method parameter&lt;/jc&gt;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    *    &lt;ja&gt;@RemoteResource&lt;/ja&gt;(path=&lt;js&gt;"/myproxy"&lt;/js&gt;)<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyProxy {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    *<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    *       &lt;jc&gt;// Equivalent to @Header("*")&lt;/jc&gt;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    *       &lt;ja&gt;@RemoteGet&lt;/ja&gt;(&lt;js&gt;"/mymethod"&lt;/js&gt;)<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    *       String myProxyMethod1(&lt;ja&gt;@Header&lt;/ja&gt; Map&amp;lt;String,Object&amp;gt; &lt;jv&gt;allHeaderParameters&lt;/jv&gt;);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    *    }<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    *       &lt;/p&gt;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    *       &lt;p class='bjava'&gt;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    *    &lt;jc&gt;// When used on a request bean method&lt;/jc&gt;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyRequest {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    *<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    *       &lt;jc&gt;// Equivalent to @Header("*")&lt;/jc&gt;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    *       &lt;ja&gt;@Header&lt;/ja&gt;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    *       Map&amp;lt;String,Object&amp;gt; getFoo();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    *    }<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    *       &lt;/p&gt;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    *    &lt;/li&gt;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    *    &lt;li&gt;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    *       If used on a request bean method, uses the bean property name.<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    *<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    *       &lt;h5 class='figure'&gt;Example:&lt;/h5&gt;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    *       &lt;p class='bjava'&gt;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyRequest {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    *<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    *       &lt;jc&gt;// Equivalent to @Header("Foo")&lt;/jc&gt;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    *       &lt;ja&gt;@Header&lt;/ja&gt;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    *       &lt;ja&gt;@Beanp&lt;/ja&gt;(&lt;js&gt;"Foo"&lt;/js&gt;)<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    *       String getFoo();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    *    }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    *       &lt;/p&gt;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    *    &lt;/li&gt;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    * &lt;/ul&gt;<a name="line.153"></a>
 <span class="sourceLineNo">154</span>    *<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    * &lt;ul class='seealso'&gt;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    *    &lt;li class='link'&gt;{@doc jm.DynamicallyAppliedAnnotations}<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    * &lt;/ul&gt;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    *<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    * @return The annotation value.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   String[] on() default {};<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>    * Dynamically apply this annotation to the specified classes.<a name="line.164"></a>
+<span class="sourceLineNo">155</span>    * @return The annotation value.<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    */<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   String name() default "";<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>   /**<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    * Dynamically apply this annotation to the specified classes.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    *<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    * &lt;ul class='seealso'&gt;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    *    &lt;li class='link'&gt;{@doc jm.DynamicallyAppliedAnnotations}<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    * &lt;/ul&gt;<a name="line.164"></a>
 <span class="sourceLineNo">165</span>    *<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    * &lt;p&gt;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    * Identical to {@link #on()} except allows you to specify class objects instead of a strings.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    *<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    * &lt;ul class='seealso'&gt;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    *    &lt;li class='link'&gt;{@doc jm.DynamicallyAppliedAnnotations}<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    * &lt;/ul&gt;<a name="line.171"></a>
+<span class="sourceLineNo">166</span>    * @return The annotation value.<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    */<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   String[] on() default {};<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>   /**<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    * Dynamically apply this annotation to the specified classes.<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    *<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    * @return The annotation value.<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    */<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   Class&lt;?&gt;[] onClass() default {};<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>   /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    * Specifies the {@link HttpPartParser} class used for parsing strings to values.<a name="line.178"></a>
+<span class="sourceLineNo">173</span>    * &lt;p&gt;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    * Identical to {@link #on()} except allows you to specify class objects instead of a strings.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    *<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    * &lt;ul class='seealso'&gt;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    *    &lt;li class='link'&gt;{@doc jm.DynamicallyAppliedAnnotations}<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    * &lt;/ul&gt;<a name="line.178"></a>
 <span class="sourceLineNo">179</span>    *<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    * &lt;p&gt;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    * Overrides for this part the part parser defined on the REST resource which by default is {@link OpenApiParser}.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    *<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    * @return The annotation value.<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    */<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   Class&lt;? extends HttpPartParser&gt; parser() default HttpPartParser.Void.class;<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>    * &lt;mk&gt;schema&lt;/mk&gt; field of the {@doc ext.SwaggerParameterObject}.<a name="line.188"></a>
+<span class="sourceLineNo">180</span>    * @return The annotation value.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    */<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   Class&lt;?&gt;[] onClass() default {};<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>   /**<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    * Specifies the {@link HttpPartParser} class used for parsing strings to values.<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    *<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    * &lt;p&gt;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    * Overrides for this part the part parser defined on the REST resource which by default is {@link OpenApiParser}.<a name="line.188"></a>
 <span class="sourceLineNo">189</span>    *<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    * &lt;p&gt;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    * The schema defining the type used for parameter.<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    *<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    * &lt;p&gt;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    * The {@link Schema @Schema} annotation can also be used standalone on the parameter or type.<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    * Values specified on this field override values specified on the type, and values specified on child types override values<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    * specified on parent types.<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    *<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    * &lt;h5 class='section'&gt;Used for:&lt;/h5&gt;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    * &lt;ul class='spaced-list'&gt;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    *    &lt;li&gt;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    *       Server-side schema-based parsing and parsing validation.<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    *    &lt;li&gt;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    *       Server-side generated Swagger documentation.<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    *    &lt;li&gt;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    *       Client-side schema-based serializing and serializing validation.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    * &lt;/ul&gt;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    *<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    * @return The annotation value.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    */<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   Schema schema() default @Schema;<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>    * Specifies the {@link HttpPartSerializer} class used for serializing values to strings.<a name="line.213"></a>
+<span class="sourceLineNo">190</span>    * @return The annotation value.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    */<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   Class&lt;? extends HttpPartParser&gt; parser() default HttpPartParser.Void.class;<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>   /**<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    * &lt;mk&gt;schema&lt;/mk&gt; field of the {@doc ext.SwaggerParameterObject}.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    *<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    * &lt;p&gt;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    * The schema defining the type used for parameter.<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    *<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    * &lt;p&gt;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    * The {@link Schema @Schema} annotation can also be used standalone on the parameter or type.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    * Values specified on this field override values specified on the type, and values specified on child types override values<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    * specified on parent types.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    *<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    * &lt;h5 class='section'&gt;Used for:&lt;/h5&gt;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    * &lt;ul class='spaced-list'&gt;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    *    &lt;li&gt;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    *       Server-side schema-based parsing and parsing validation.<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    *    &lt;li&gt;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    *       Server-side generated Swagger documentation.<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    *    &lt;li&gt;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    *       Client-side schema-based serializing and serializing validation.<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    * &lt;/ul&gt;<a name="line.213"></a>
 <span class="sourceLineNo">214</span>    *<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    * &lt;p&gt;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    * Overrides for this part the part serializer defined on the REST client which by default is {@link OpenApiSerializer}.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    *<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    * @return The annotation value.<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    */<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   Class&lt;? extends HttpPartSerializer&gt; serializer() default HttpPartSerializer.Void.class;<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span>   /**<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    * A synonym for {@link #name()}.<a name="line.223"></a>
+<span class="sourceLineNo">215</span>    * @return The annotation value.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    */<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   Schema schema() default @Schema;<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>   /**<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    * Specifies the {@link HttpPartSerializer} class used for serializing values to strings.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    *<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    * &lt;p&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    * Overrides for this part the part serializer defined on the REST client which by default is {@link OpenApiSerializer}.<a name="line.223"></a>
 <span class="sourceLineNo">224</span>    *<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    * &lt;p&gt;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    * Allows you to use shortened notation if you're only specifying the name.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    *<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    * &lt;p&gt;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    * The following are completely equivalent ways of defining a header entry:<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    * &lt;p class='bjava'&gt;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    *    &lt;jk&gt;public&lt;/jk&gt; Order placeOrder(&lt;ja&gt;@Header&lt;/ja&gt;(name=&lt;js&gt;"api_key"&lt;/js&gt;) String &lt;jv&gt;apiKey&lt;/jv&gt;) {...}<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    * &lt;/p&gt;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    * &lt;p class='bjava'&gt;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    *    &lt;jk&gt;public&lt;/jk&gt; Order placeOrder(&lt;ja&gt;@Header&lt;/ja&gt;(&lt;js&gt;"api_key"&lt;/js&gt;) String &lt;jv&gt;apiKey&lt;/jv&gt;) {...}<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    * &lt;/p&gt;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    *<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    * @return The annotation value.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    */<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   String value() default "";<a name="line.239"></a>
-<span class="sourceLineNo">240</span>}<a name="line.240"></a>
+<span class="sourceLineNo">225</span>    * @return The annotation value.<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    */<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   Class&lt;? extends HttpPartSerializer&gt; serializer() default HttpPartSerializer.Void.class;<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>    * A synonym for {@link #name()}.<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    *<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    * &lt;p&gt;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    * Allows you to use shortened notation if you're only specifying the name.<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    *<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    * &lt;p&gt;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    * The following are completely equivalent ways of defining a header entry:<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    * &lt;p class='bjava'&gt;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    *    &lt;jk&gt;public&lt;/jk&gt; Order placeOrder(&lt;ja&gt;@Header&lt;/ja&gt;(name=&lt;js&gt;"api_key"&lt;/js&gt;) String &lt;jv&gt;apiKey&lt;/jv&gt;) {...}<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    * &lt;/p&gt;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    * &lt;p class='bjava'&gt;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    *    &lt;jk&gt;public&lt;/jk&gt; Order placeOrder(&lt;ja&gt;@Header&lt;/ja&gt;(&lt;js&gt;"api_key"&lt;/js&gt;) String &lt;jv&gt;apiKey&lt;/jv&gt;) {...}<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    * &lt;/p&gt;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    *<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    * @return The annotation value.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    */<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   String value() default "";<a name="line.246"></a>
+<span class="sourceLineNo">247</span>}<a name="line.247"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Applier.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Applier.html
index 87fb827..a51d681 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Applier.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Applier.html
@@ -105,225 +105,254 @@
 <span class="sourceLineNo">097</span>      return n;<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">100</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   // Builder<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>   /**<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    * Builder class.<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    *<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    * &lt;ul class='seealso'&gt;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    * &lt;/ul&gt;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    */<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      String name="", value="";<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>       * Constructor.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>       */<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      protected Builder() {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>         super(Header.class);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      }<a name="line.123"></a>
+<span class="sourceLineNo">100</span>   /**<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    * Finds the default value from the specified list of annotations.<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    *<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    * @param pi The parameter.<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    * @return The last matching default value, or {@link Value#empty()} if not found.<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    */<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   public static Value&lt;String&gt; findDef(ParamInfo pi) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      Value&lt;String&gt; n = Value.empty();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      pi.forEachAnnotation(Header.class, x -&gt; isNotEmpty(x.def()), x -&gt; n.set(x.def()));<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      return n;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   }<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   // Builder<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>   /**<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    * Builder class.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    *<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    * &lt;ul class='seealso'&gt;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    * &lt;/ul&gt;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.123"></a>
 <span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>      /**<a name="line.125"></a>
-<span class="sourceLineNo">126</span>       * Instantiates a new {@link Header @Header} object initialized with this builder.<a name="line.126"></a>
-<span class="sourceLineNo">127</span>       *<a name="line.127"></a>
-<span class="sourceLineNo">128</span>       * @return A new {@link Header @Header} object.<a name="line.128"></a>
-<span class="sourceLineNo">129</span>       */<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      public Header build() {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>         return new Impl(this);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      }<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>      /**<a name="line.134"></a>
-<span class="sourceLineNo">135</span>       * Sets the {@link Header#name} property on this annotation.<a name="line.135"></a>
-<span class="sourceLineNo">136</span>       *<a name="line.136"></a>
-<span class="sourceLineNo">137</span>       * @param value The new value for this property.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>       * @return This object.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>       */<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      public Builder name(String value) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>         this.name = value;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>         return this;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>      /**<a name="line.145"></a>
-<span class="sourceLineNo">146</span>       * Sets the {@link Header#parser} property on this annotation.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>       *<a name="line.147"></a>
-<span class="sourceLineNo">148</span>       * @param value The new value for this property.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>       * @return This object.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>       */<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>         this.parser = value;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>         return this;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      }<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>      /**<a name="line.156"></a>
-<span class="sourceLineNo">157</span>       * Sets the {@link Header#schema} property on this annotation.<a name="line.157"></a>
-<span class="sourceLineNo">158</span>       *<a name="line.158"></a>
-<span class="sourceLineNo">159</span>       * @param value The new value for this property.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>       * @return This object.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>       */<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      public Builder schema(Schema value) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>         this.schema = value;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>         return this;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      }<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span>      /**<a name="line.167"></a>
-<span class="sourceLineNo">168</span>       * Sets the {@link Header#serializer} property on this annotation.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>       *<a name="line.169"></a>
-<span class="sourceLineNo">170</span>       * @param value The new value for this property.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>       * @return This object.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>       */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>         this.serializer = value;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>         return this;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>      /**<a name="line.178"></a>
-<span class="sourceLineNo">179</span>       * Sets the {@link Header#value} property on this annotation.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>       *<a name="line.180"></a>
-<span class="sourceLineNo">181</span>       * @param value The new value for this property.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>       * @return This object.<a name="line.182"></a>
-<span class="sourceLineNo">183</span>       */<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      public Builder value(String value) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>         this.value = value;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      public Builder on(String...values) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>         super.on(values);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>         return this;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>         super.on(value);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>         return this;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>         super.onClass(value);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>         return this;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      public Builder on(Field...value) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>         super.on(value);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>         return this;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      public Builder on(Method...value) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>         super.on(value);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>         return this;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>      // &lt;/FluentSetters&gt;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   // Implementation<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>   private static class Impl extends TargetedAnnotationTImpl implements Header {<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      private final String name, value;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      private final Schema schema;<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>      Impl(Builder b) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>         super(b);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>         this.name = b.name;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>         this.parser = b.parser;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>         this.schema = b.schema;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>         this.serializer = b.serializer;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>         this.value = b.value;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>         postConstruct();<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>      @Override /* Header */<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      public String name() {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>         return name;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      }<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>      @Override /* Header */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>         return parser;<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>      @Override /* Header */<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      public Schema schema() {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>         return schema;<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>      @Override /* Header */<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>         return serializer;<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>      @Override /* Header */<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      public String value() {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>         return value;<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><a name="line.270"></a>
-<span class="sourceLineNo">271</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   // Appliers<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   //-----------------------------------------------------------------------------------------------------------------<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>    * Applies targeted {@link Header} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    */<a name="line.277"></a>
-<span class="sourceLineNo">278</span>   public static class Applier extends AnnotationApplier&lt;Header,BeanContext.Builder&gt; {<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>       * Constructor.<a name="line.281"></a>
-<span class="sourceLineNo">282</span>       *<a name="line.282"></a>
-<span class="sourceLineNo">283</span>       * @param vr The resolver for resolving values in annotations.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>       */<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      public Applier(VarResolverSession vr) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>         super(Header.class, BeanContext.Builder.class, vr);<a name="line.286"></a>
+<span class="sourceLineNo">125</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      String name="", value="", def="";<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>      /**<a name="line.130"></a>
+<span class="sourceLineNo">131</span>       * Constructor.<a name="line.131"></a>
+<span class="sourceLineNo">132</span>       */<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      protected Builder() {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>         super(Header.class);<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>       * Instantiates a new {@link Header @Header} object initialized with this builder.<a name="line.138"></a>
+<span class="sourceLineNo">139</span>       *<a name="line.139"></a>
+<span class="sourceLineNo">140</span>       * @return A new {@link Header @Header} object.<a name="line.140"></a>
+<span class="sourceLineNo">141</span>       */<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      public Header build() {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>         return new Impl(this);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      }<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>       * Sets the {@link Header#def} property on this annotation.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>       *<a name="line.148"></a>
+<span class="sourceLineNo">149</span>       * @param value The new value for this property.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>       * @return This object.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>       */<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      public Builder def(String value) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>         this.def = value;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>         return this;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      }<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>      /**<a name="line.157"></a>
+<span class="sourceLineNo">158</span>       * Sets the {@link Header#name} property on this annotation.<a name="line.158"></a>
+<span class="sourceLineNo">159</span>       *<a name="line.159"></a>
+<span class="sourceLineNo">160</span>       * @param value The new value for this property.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>       * @return This object.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>       */<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      public Builder name(String value) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>         this.name = value;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>         return this;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span><a name="line.167"></a>
+<span class="sourceLineNo">168</span>      /**<a name="line.168"></a>
+<span class="sourceLineNo">169</span>       * Sets the {@link Header#parser} property on this annotation.<a name="line.169"></a>
+<span class="sourceLineNo">170</span>       *<a name="line.170"></a>
+<span class="sourceLineNo">171</span>       * @param value The new value for this property.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>       * @return This object.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>       */<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>         this.parser = value;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>         return this;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      }<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>      /**<a name="line.179"></a>
+<span class="sourceLineNo">180</span>       * Sets the {@link Header#schema} property on this annotation.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>       *<a name="line.181"></a>
+<span class="sourceLineNo">182</span>       * @param value The new value for this property.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>       * @return This object.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>       */<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      public Builder schema(Schema value) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>         this.schema = value;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>         return this;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>      /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span>       * Sets the {@link Header#serializer} property on this annotation.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>       *<a name="line.192"></a>
+<span class="sourceLineNo">193</span>       * @param value The new value for this property.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>       * @return This object.<a name="line.194"></a>
+<span class="sourceLineNo">195</span>       */<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>         this.serializer = value;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>         return this;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>      /**<a name="line.201"></a>
+<span class="sourceLineNo">202</span>       * Sets the {@link Header#value} property on this annotation.<a name="line.202"></a>
+<span class="sourceLineNo">203</span>       *<a name="line.203"></a>
+<span class="sourceLineNo">204</span>       * @param value The new value for this property.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>       * @return This object.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>       */<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      public Builder value(String value) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>         this.value = value;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      public Builder on(String...values) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>         super.on(values);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>         return this;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>         super.on(value);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>         return this;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      }<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>         super.onClass(value);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      public Builder on(Field...value) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>         super.on(value);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>         return this;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      public Builder on(Method...value) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>         super.on(value);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>         return this;<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>      // &lt;/FluentSetters&gt;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   // Implementation<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>   private static class Impl extends TargetedAnnotationTImpl implements Header {<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      private final String name, value, def;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      private final Schema schema;<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>      Impl(Builder b) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>         super(b);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>         this.def = b.def;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>         this.name = b.name;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>         this.parser = b.parser;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>         this.schema = b.schema;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>         this.serializer = b.serializer;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>         this.value = b.value;<a name="line.265"></a>
+<span class="sourceLineNo">266</span>         postConstruct();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>      @Override /* Header */<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      public String def() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>         return def;<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>      @Override /* Header */<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      public String name() {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>         return name;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      }<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span>      @Override /* Header */<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>         return parser;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>      @Override /* Header */<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      public Schema schema() {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>         return schema;<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>      @Override<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      public void apply(AnnotationInfo&lt;Header&gt; ai, BeanContext.Builder b) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>         Header a = ai.inner();<a name="line.291"></a>
-<span class="sourceLineNo">292</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.292"></a>
-<span class="sourceLineNo">293</span>            return;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>         b.annotations(a);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   // Other<a name="line.299"></a>
+<span class="sourceLineNo">289</span>      @Override /* Header */<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>         return serializer;<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>      @Override /* Header */<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      public String value() {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>         return value;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>   /**<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    * A collection of {@link Header @Header annotations}.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    */<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   @Documented<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   @Target({METHOD,TYPE})<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   @Retention(RUNTIME)<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   @Inherited<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   public static @interface Array {<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>       * The child annotations.<a name="line.312"></a>
-<span class="sourceLineNo">313</span>       *<a name="line.313"></a>
-<span class="sourceLineNo">314</span>       * @return The annotation value.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>       */<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      Header[] value();<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">301</span>   // Appliers<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>   /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    * Applies targeted {@link Header} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    */<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   public static class Applier extends AnnotationApplier&lt;Header,BeanContext.Builder&gt; {<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>      /**<a name="line.309"></a>
+<span class="sourceLineNo">310</span>       * Constructor.<a name="line.310"></a>
+<span class="sourceLineNo">311</span>       *<a name="line.311"></a>
+<span class="sourceLineNo">312</span>       * @param vr The resolver for resolving values in annotations.<a name="line.312"></a>
+<span class="sourceLineNo">313</span>       */<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      public Applier(VarResolverSession vr) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>         super(Header.class, BeanContext.Builder.class, vr);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span>      @Override<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      public void apply(AnnotationInfo&lt;Header&gt; ai, BeanContext.Builder b) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>         Header a = ai.inner();<a name="line.320"></a>
+<span class="sourceLineNo">321</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.321"></a>
+<span class="sourceLineNo">322</span>            return;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>         b.annotations(a);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      }<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   // Other<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>    * A collection of {@link Header @Header annotations}.<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    */<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   @Documented<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   @Target({METHOD,TYPE})<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   @Retention(RUNTIME)<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   @Inherited<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   public static @interface Array {<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>       * The child annotations.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>       *<a name="line.342"></a>
+<span class="sourceLineNo">343</span>       * @return The annotation value.<a name="line.343"></a>
+<span class="sourceLineNo">344</span>       */<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      Header[] value();<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   }<a name="line.346"></a>
+<span class="sourceLineNo">347</span>}<a name="line.347"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Array.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Array.html
index 87fb827..a51d681 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Array.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Array.html
@@ -105,225 +105,254 @@
 <span class="sourceLineNo">097</span>      return n;<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">100</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   // Builder<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>   /**<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    * Builder class.<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    *<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    * &lt;ul class='seealso'&gt;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    * &lt;/ul&gt;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    */<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      String name="", value="";<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>       * Constructor.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>       */<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      protected Builder() {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>         super(Header.class);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      }<a name="line.123"></a>
+<span class="sourceLineNo">100</span>   /**<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    * Finds the default value from the specified list of annotations.<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    *<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    * @param pi The parameter.<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    * @return The last matching default value, or {@link Value#empty()} if not found.<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    */<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   public static Value&lt;String&gt; findDef(ParamInfo pi) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      Value&lt;String&gt; n = Value.empty();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      pi.forEachAnnotation(Header.class, x -&gt; isNotEmpty(x.def()), x -&gt; n.set(x.def()));<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      return n;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   }<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   // Builder<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>   /**<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    * Builder class.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    *<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    * &lt;ul class='seealso'&gt;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    * &lt;/ul&gt;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.123"></a>
 <span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>      /**<a name="line.125"></a>
-<span class="sourceLineNo">126</span>       * Instantiates a new {@link Header @Header} object initialized with this builder.<a name="line.126"></a>
-<span class="sourceLineNo">127</span>       *<a name="line.127"></a>
-<span class="sourceLineNo">128</span>       * @return A new {@link Header @Header} object.<a name="line.128"></a>
-<span class="sourceLineNo">129</span>       */<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      public Header build() {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>         return new Impl(this);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      }<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>      /**<a name="line.134"></a>
-<span class="sourceLineNo">135</span>       * Sets the {@link Header#name} property on this annotation.<a name="line.135"></a>
-<span class="sourceLineNo">136</span>       *<a name="line.136"></a>
-<span class="sourceLineNo">137</span>       * @param value The new value for this property.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>       * @return This object.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>       */<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      public Builder name(String value) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>         this.name = value;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>         return this;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>      /**<a name="line.145"></a>
-<span class="sourceLineNo">146</span>       * Sets the {@link Header#parser} property on this annotation.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>       *<a name="line.147"></a>
-<span class="sourceLineNo">148</span>       * @param value The new value for this property.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>       * @return This object.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>       */<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>         this.parser = value;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>         return this;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      }<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>      /**<a name="line.156"></a>
-<span class="sourceLineNo">157</span>       * Sets the {@link Header#schema} property on this annotation.<a name="line.157"></a>
-<span class="sourceLineNo">158</span>       *<a name="line.158"></a>
-<span class="sourceLineNo">159</span>       * @param value The new value for this property.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>       * @return This object.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>       */<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      public Builder schema(Schema value) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>         this.schema = value;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>         return this;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      }<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span>      /**<a name="line.167"></a>
-<span class="sourceLineNo">168</span>       * Sets the {@link Header#serializer} property on this annotation.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>       *<a name="line.169"></a>
-<span class="sourceLineNo">170</span>       * @param value The new value for this property.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>       * @return This object.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>       */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>         this.serializer = value;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>         return this;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>      /**<a name="line.178"></a>
-<span class="sourceLineNo">179</span>       * Sets the {@link Header#value} property on this annotation.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>       *<a name="line.180"></a>
-<span class="sourceLineNo">181</span>       * @param value The new value for this property.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>       * @return This object.<a name="line.182"></a>
-<span class="sourceLineNo">183</span>       */<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      public Builder value(String value) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>         this.value = value;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      public Builder on(String...values) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>         super.on(values);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>         return this;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>         super.on(value);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>         return this;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>         super.onClass(value);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>         return this;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      public Builder on(Field...value) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>         super.on(value);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>         return this;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      public Builder on(Method...value) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>         super.on(value);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>         return this;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>      // &lt;/FluentSetters&gt;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   // Implementation<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>   private static class Impl extends TargetedAnnotationTImpl implements Header {<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      private final String name, value;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      private final Schema schema;<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>      Impl(Builder b) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>         super(b);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>         this.name = b.name;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>         this.parser = b.parser;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>         this.schema = b.schema;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>         this.serializer = b.serializer;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>         this.value = b.value;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>         postConstruct();<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>      @Override /* Header */<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      public String name() {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>         return name;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      }<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>      @Override /* Header */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>         return parser;<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>      @Override /* Header */<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      public Schema schema() {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>         return schema;<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>      @Override /* Header */<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>         return serializer;<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>      @Override /* Header */<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      public String value() {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>         return value;<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><a name="line.270"></a>
-<span class="sourceLineNo">271</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   // Appliers<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   //-----------------------------------------------------------------------------------------------------------------<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>    * Applies targeted {@link Header} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    */<a name="line.277"></a>
-<span class="sourceLineNo">278</span>   public static class Applier extends AnnotationApplier&lt;Header,BeanContext.Builder&gt; {<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>       * Constructor.<a name="line.281"></a>
-<span class="sourceLineNo">282</span>       *<a name="line.282"></a>
-<span class="sourceLineNo">283</span>       * @param vr The resolver for resolving values in annotations.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>       */<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      public Applier(VarResolverSession vr) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>         super(Header.class, BeanContext.Builder.class, vr);<a name="line.286"></a>
+<span class="sourceLineNo">125</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      String name="", value="", def="";<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>      /**<a name="line.130"></a>
+<span class="sourceLineNo">131</span>       * Constructor.<a name="line.131"></a>
+<span class="sourceLineNo">132</span>       */<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      protected Builder() {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>         super(Header.class);<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>       * Instantiates a new {@link Header @Header} object initialized with this builder.<a name="line.138"></a>
+<span class="sourceLineNo">139</span>       *<a name="line.139"></a>
+<span class="sourceLineNo">140</span>       * @return A new {@link Header @Header} object.<a name="line.140"></a>
+<span class="sourceLineNo">141</span>       */<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      public Header build() {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>         return new Impl(this);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      }<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>       * Sets the {@link Header#def} property on this annotation.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>       *<a name="line.148"></a>
+<span class="sourceLineNo">149</span>       * @param value The new value for this property.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>       * @return This object.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>       */<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      public Builder def(String value) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>         this.def = value;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>         return this;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      }<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>      /**<a name="line.157"></a>
+<span class="sourceLineNo">158</span>       * Sets the {@link Header#name} property on this annotation.<a name="line.158"></a>
+<span class="sourceLineNo">159</span>       *<a name="line.159"></a>
+<span class="sourceLineNo">160</span>       * @param value The new value for this property.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>       * @return This object.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>       */<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      public Builder name(String value) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>         this.name = value;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>         return this;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span><a name="line.167"></a>
+<span class="sourceLineNo">168</span>      /**<a name="line.168"></a>
+<span class="sourceLineNo">169</span>       * Sets the {@link Header#parser} property on this annotation.<a name="line.169"></a>
+<span class="sourceLineNo">170</span>       *<a name="line.170"></a>
+<span class="sourceLineNo">171</span>       * @param value The new value for this property.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>       * @return This object.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>       */<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>         this.parser = value;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>         return this;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      }<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>      /**<a name="line.179"></a>
+<span class="sourceLineNo">180</span>       * Sets the {@link Header#schema} property on this annotation.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>       *<a name="line.181"></a>
+<span class="sourceLineNo">182</span>       * @param value The new value for this property.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>       * @return This object.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>       */<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      public Builder schema(Schema value) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>         this.schema = value;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>         return this;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>      /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span>       * Sets the {@link Header#serializer} property on this annotation.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>       *<a name="line.192"></a>
+<span class="sourceLineNo">193</span>       * @param value The new value for this property.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>       * @return This object.<a name="line.194"></a>
+<span class="sourceLineNo">195</span>       */<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>         this.serializer = value;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>         return this;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>      /**<a name="line.201"></a>
+<span class="sourceLineNo">202</span>       * Sets the {@link Header#value} property on this annotation.<a name="line.202"></a>
+<span class="sourceLineNo">203</span>       *<a name="line.203"></a>
+<span class="sourceLineNo">204</span>       * @param value The new value for this property.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>       * @return This object.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>       */<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      public Builder value(String value) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>         this.value = value;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      public Builder on(String...values) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>         super.on(values);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>         return this;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>         super.on(value);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>         return this;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      }<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>         super.onClass(value);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      public Builder on(Field...value) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>         super.on(value);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>         return this;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      public Builder on(Method...value) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>         super.on(value);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>         return this;<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>      // &lt;/FluentSetters&gt;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   // Implementation<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>   private static class Impl extends TargetedAnnotationTImpl implements Header {<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      private final String name, value, def;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      private final Schema schema;<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>      Impl(Builder b) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>         super(b);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>         this.def = b.def;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>         this.name = b.name;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>         this.parser = b.parser;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>         this.schema = b.schema;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>         this.serializer = b.serializer;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>         this.value = b.value;<a name="line.265"></a>
+<span class="sourceLineNo">266</span>         postConstruct();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>      @Override /* Header */<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      public String def() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>         return def;<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>      @Override /* Header */<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      public String name() {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>         return name;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      }<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span>      @Override /* Header */<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>         return parser;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>      @Override /* Header */<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      public Schema schema() {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>         return schema;<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>      @Override<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      public void apply(AnnotationInfo&lt;Header&gt; ai, BeanContext.Builder b) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>         Header a = ai.inner();<a name="line.291"></a>
-<span class="sourceLineNo">292</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.292"></a>
-<span class="sourceLineNo">293</span>            return;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>         b.annotations(a);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   // Other<a name="line.299"></a>
+<span class="sourceLineNo">289</span>      @Override /* Header */<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>         return serializer;<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>      @Override /* Header */<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      public String value() {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>         return value;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>   /**<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    * A collection of {@link Header @Header annotations}.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    */<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   @Documented<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   @Target({METHOD,TYPE})<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   @Retention(RUNTIME)<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   @Inherited<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   public static @interface Array {<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>       * The child annotations.<a name="line.312"></a>
-<span class="sourceLineNo">313</span>       *<a name="line.313"></a>
-<span class="sourceLineNo">314</span>       * @return The annotation value.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>       */<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      Header[] value();<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">301</span>   // Appliers<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>   /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    * Applies targeted {@link Header} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    */<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   public static class Applier extends AnnotationApplier&lt;Header,BeanContext.Builder&gt; {<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>      /**<a name="line.309"></a>
+<span class="sourceLineNo">310</span>       * Constructor.<a name="line.310"></a>
+<span class="sourceLineNo">311</span>       *<a name="line.311"></a>
+<span class="sourceLineNo">312</span>       * @param vr The resolver for resolving values in annotations.<a name="line.312"></a>
+<span class="sourceLineNo">313</span>       */<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      public Applier(VarResolverSession vr) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>         super(Header.class, BeanContext.Builder.class, vr);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span>      @Override<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      public void apply(AnnotationInfo&lt;Header&gt; ai, BeanContext.Builder b) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>         Header a = ai.inner();<a name="line.320"></a>
+<span class="sourceLineNo">321</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.321"></a>
+<span class="sourceLineNo">322</span>            return;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>         b.annotations(a);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      }<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   // Other<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>    * A collection of {@link Header @Header annotations}.<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    */<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   @Documented<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   @Target({METHOD,TYPE})<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   @Retention(RUNTIME)<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   @Inherited<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   public static @interface Array {<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>       * The child annotations.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>       *<a name="line.342"></a>
+<span class="sourceLineNo">343</span>       * @return The annotation value.<a name="line.343"></a>
+<span class="sourceLineNo">344</span>       */<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      Header[] value();<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   }<a name="line.346"></a>
+<span class="sourceLineNo">347</span>}<a name="line.347"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html
index 87fb827..a51d681 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html
@@ -105,225 +105,254 @@
 <span class="sourceLineNo">097</span>      return n;<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">100</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   // Builder<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>   /**<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    * Builder class.<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    *<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    * &lt;ul class='seealso'&gt;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    * &lt;/ul&gt;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    */<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      String name="", value="";<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>       * Constructor.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>       */<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      protected Builder() {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>         super(Header.class);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      }<a name="line.123"></a>
+<span class="sourceLineNo">100</span>   /**<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    * Finds the default value from the specified list of annotations.<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    *<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    * @param pi The parameter.<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    * @return The last matching default value, or {@link Value#empty()} if not found.<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    */<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   public static Value&lt;String&gt; findDef(ParamInfo pi) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      Value&lt;String&gt; n = Value.empty();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      pi.forEachAnnotation(Header.class, x -&gt; isNotEmpty(x.def()), x -&gt; n.set(x.def()));<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      return n;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   }<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   // Builder<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>   /**<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    * Builder class.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    *<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    * &lt;ul class='seealso'&gt;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    * &lt;/ul&gt;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.123"></a>
 <span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>      /**<a name="line.125"></a>
-<span class="sourceLineNo">126</span>       * Instantiates a new {@link Header @Header} object initialized with this builder.<a name="line.126"></a>
-<span class="sourceLineNo">127</span>       *<a name="line.127"></a>
-<span class="sourceLineNo">128</span>       * @return A new {@link Header @Header} object.<a name="line.128"></a>
-<span class="sourceLineNo">129</span>       */<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      public Header build() {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>         return new Impl(this);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      }<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>      /**<a name="line.134"></a>
-<span class="sourceLineNo">135</span>       * Sets the {@link Header#name} property on this annotation.<a name="line.135"></a>
-<span class="sourceLineNo">136</span>       *<a name="line.136"></a>
-<span class="sourceLineNo">137</span>       * @param value The new value for this property.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>       * @return This object.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>       */<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      public Builder name(String value) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>         this.name = value;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>         return this;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>      /**<a name="line.145"></a>
-<span class="sourceLineNo">146</span>       * Sets the {@link Header#parser} property on this annotation.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>       *<a name="line.147"></a>
-<span class="sourceLineNo">148</span>       * @param value The new value for this property.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>       * @return This object.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>       */<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>         this.parser = value;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>         return this;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      }<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>      /**<a name="line.156"></a>
-<span class="sourceLineNo">157</span>       * Sets the {@link Header#schema} property on this annotation.<a name="line.157"></a>
-<span class="sourceLineNo">158</span>       *<a name="line.158"></a>
-<span class="sourceLineNo">159</span>       * @param value The new value for this property.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>       * @return This object.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>       */<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      public Builder schema(Schema value) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>         this.schema = value;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>         return this;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      }<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span>      /**<a name="line.167"></a>
-<span class="sourceLineNo">168</span>       * Sets the {@link Header#serializer} property on this annotation.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>       *<a name="line.169"></a>
-<span class="sourceLineNo">170</span>       * @param value The new value for this property.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>       * @return This object.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>       */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>         this.serializer = value;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>         return this;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>      /**<a name="line.178"></a>
-<span class="sourceLineNo">179</span>       * Sets the {@link Header#value} property on this annotation.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>       *<a name="line.180"></a>
-<span class="sourceLineNo">181</span>       * @param value The new value for this property.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>       * @return This object.<a name="line.182"></a>
-<span class="sourceLineNo">183</span>       */<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      public Builder value(String value) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>         this.value = value;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      public Builder on(String...values) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>         super.on(values);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>         return this;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>         super.on(value);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>         return this;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>         super.onClass(value);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>         return this;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      public Builder on(Field...value) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>         super.on(value);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>         return this;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      public Builder on(Method...value) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>         super.on(value);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>         return this;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>      // &lt;/FluentSetters&gt;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   // Implementation<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>   private static class Impl extends TargetedAnnotationTImpl implements Header {<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      private final String name, value;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      private final Schema schema;<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>      Impl(Builder b) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>         super(b);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>         this.name = b.name;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>         this.parser = b.parser;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>         this.schema = b.schema;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>         this.serializer = b.serializer;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>         this.value = b.value;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>         postConstruct();<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>      @Override /* Header */<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      public String name() {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>         return name;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      }<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>      @Override /* Header */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>         return parser;<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>      @Override /* Header */<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      public Schema schema() {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>         return schema;<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>      @Override /* Header */<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>         return serializer;<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>      @Override /* Header */<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      public String value() {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>         return value;<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><a name="line.270"></a>
-<span class="sourceLineNo">271</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   // Appliers<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   //-----------------------------------------------------------------------------------------------------------------<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>    * Applies targeted {@link Header} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    */<a name="line.277"></a>
-<span class="sourceLineNo">278</span>   public static class Applier extends AnnotationApplier&lt;Header,BeanContext.Builder&gt; {<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>       * Constructor.<a name="line.281"></a>
-<span class="sourceLineNo">282</span>       *<a name="line.282"></a>
-<span class="sourceLineNo">283</span>       * @param vr The resolver for resolving values in annotations.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>       */<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      public Applier(VarResolverSession vr) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>         super(Header.class, BeanContext.Builder.class, vr);<a name="line.286"></a>
+<span class="sourceLineNo">125</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      String name="", value="", def="";<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>      /**<a name="line.130"></a>
+<span class="sourceLineNo">131</span>       * Constructor.<a name="line.131"></a>
+<span class="sourceLineNo">132</span>       */<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      protected Builder() {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>         super(Header.class);<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>       * Instantiates a new {@link Header @Header} object initialized with this builder.<a name="line.138"></a>
+<span class="sourceLineNo">139</span>       *<a name="line.139"></a>
+<span class="sourceLineNo">140</span>       * @return A new {@link Header @Header} object.<a name="line.140"></a>
+<span class="sourceLineNo">141</span>       */<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      public Header build() {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>         return new Impl(this);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      }<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>       * Sets the {@link Header#def} property on this annotation.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>       *<a name="line.148"></a>
+<span class="sourceLineNo">149</span>       * @param value The new value for this property.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>       * @return This object.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>       */<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      public Builder def(String value) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>         this.def = value;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>         return this;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      }<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>      /**<a name="line.157"></a>
+<span class="sourceLineNo">158</span>       * Sets the {@link Header#name} property on this annotation.<a name="line.158"></a>
+<span class="sourceLineNo">159</span>       *<a name="line.159"></a>
+<span class="sourceLineNo">160</span>       * @param value The new value for this property.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>       * @return This object.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>       */<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      public Builder name(String value) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>         this.name = value;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>         return this;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span><a name="line.167"></a>
+<span class="sourceLineNo">168</span>      /**<a name="line.168"></a>
+<span class="sourceLineNo">169</span>       * Sets the {@link Header#parser} property on this annotation.<a name="line.169"></a>
+<span class="sourceLineNo">170</span>       *<a name="line.170"></a>
+<span class="sourceLineNo">171</span>       * @param value The new value for this property.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>       * @return This object.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>       */<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>         this.parser = value;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>         return this;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      }<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>      /**<a name="line.179"></a>
+<span class="sourceLineNo">180</span>       * Sets the {@link Header#schema} property on this annotation.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>       *<a name="line.181"></a>
+<span class="sourceLineNo">182</span>       * @param value The new value for this property.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>       * @return This object.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>       */<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      public Builder schema(Schema value) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>         this.schema = value;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>         return this;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>      /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span>       * Sets the {@link Header#serializer} property on this annotation.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>       *<a name="line.192"></a>
+<span class="sourceLineNo">193</span>       * @param value The new value for this property.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>       * @return This object.<a name="line.194"></a>
+<span class="sourceLineNo">195</span>       */<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>         this.serializer = value;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>         return this;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>      /**<a name="line.201"></a>
+<span class="sourceLineNo">202</span>       * Sets the {@link Header#value} property on this annotation.<a name="line.202"></a>
+<span class="sourceLineNo">203</span>       *<a name="line.203"></a>
+<span class="sourceLineNo">204</span>       * @param value The new value for this property.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>       * @return This object.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>       */<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      public Builder value(String value) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>         this.value = value;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      public Builder on(String...values) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>         super.on(values);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>         return this;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>         super.on(value);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>         return this;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      }<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>         super.onClass(value);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      public Builder on(Field...value) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>         super.on(value);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>         return this;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      public Builder on(Method...value) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>         super.on(value);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>         return this;<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>      // &lt;/FluentSetters&gt;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   // Implementation<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>   private static class Impl extends TargetedAnnotationTImpl implements Header {<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      private final String name, value, def;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      private final Schema schema;<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>      Impl(Builder b) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>         super(b);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>         this.def = b.def;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>         this.name = b.name;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>         this.parser = b.parser;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>         this.schema = b.schema;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>         this.serializer = b.serializer;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>         this.value = b.value;<a name="line.265"></a>
+<span class="sourceLineNo">266</span>         postConstruct();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>      @Override /* Header */<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      public String def() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>         return def;<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>      @Override /* Header */<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      public String name() {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>         return name;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      }<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span>      @Override /* Header */<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>         return parser;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>      @Override /* Header */<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      public Schema schema() {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>         return schema;<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>      @Override<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      public void apply(AnnotationInfo&lt;Header&gt; ai, BeanContext.Builder b) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>         Header a = ai.inner();<a name="line.291"></a>
-<span class="sourceLineNo">292</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.292"></a>
-<span class="sourceLineNo">293</span>            return;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>         b.annotations(a);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   // Other<a name="line.299"></a>
+<span class="sourceLineNo">289</span>      @Override /* Header */<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>         return serializer;<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>      @Override /* Header */<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      public String value() {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>         return value;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>   /**<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    * A collection of {@link Header @Header annotations}.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    */<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   @Documented<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   @Target({METHOD,TYPE})<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   @Retention(RUNTIME)<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   @Inherited<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   public static @interface Array {<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>       * The child annotations.<a name="line.312"></a>
-<span class="sourceLineNo">313</span>       *<a name="line.313"></a>
-<span class="sourceLineNo">314</span>       * @return The annotation value.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>       */<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      Header[] value();<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">301</span>   // Appliers<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>   /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    * Applies targeted {@link Header} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    */<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   public static class Applier extends AnnotationApplier&lt;Header,BeanContext.Builder&gt; {<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>      /**<a name="line.309"></a>
+<span class="sourceLineNo">310</span>       * Constructor.<a name="line.310"></a>
+<span class="sourceLineNo">311</span>       *<a name="line.311"></a>
+<span class="sourceLineNo">312</span>       * @param vr The resolver for resolving values in annotations.<a name="line.312"></a>
+<span class="sourceLineNo">313</span>       */<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      public Applier(VarResolverSession vr) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>         super(Header.class, BeanContext.Builder.class, vr);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span>      @Override<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      public void apply(AnnotationInfo&lt;Header&gt; ai, BeanContext.Builder b) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>         Header a = ai.inner();<a name="line.320"></a>
+<span class="sourceLineNo">321</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.321"></a>
+<span class="sourceLineNo">322</span>            return;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>         b.annotations(a);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      }<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   // Other<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>    * A collection of {@link Header @Header annotations}.<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    */<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   @Documented<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   @Target({METHOD,TYPE})<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   @Retention(RUNTIME)<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   @Inherited<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   public static @interface Array {<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>       * The child annotations.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>       *<a name="line.342"></a>
+<span class="sourceLineNo">343</span>       * @return The annotation value.<a name="line.343"></a>
+<span class="sourceLineNo">344</span>       */<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      Header[] value();<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   }<a name="line.346"></a>
+<span class="sourceLineNo">347</span>}<a name="line.347"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/HeaderAnnotation.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/HeaderAnnotation.html
index 87fb827..a51d681 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/HeaderAnnotation.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/HeaderAnnotation.html
@@ -105,225 +105,254 @@
 <span class="sourceLineNo">097</span>      return n;<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">100</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   // Builder<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>   /**<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    * Builder class.<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    *<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    * &lt;ul class='seealso'&gt;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    * &lt;/ul&gt;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    */<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      String name="", value="";<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>       * Constructor.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>       */<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      protected Builder() {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>         super(Header.class);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      }<a name="line.123"></a>
+<span class="sourceLineNo">100</span>   /**<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    * Finds the default value from the specified list of annotations.<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    *<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    * @param pi The parameter.<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    * @return The last matching default value, or {@link Value#empty()} if not found.<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    */<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   public static Value&lt;String&gt; findDef(ParamInfo pi) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      Value&lt;String&gt; n = Value.empty();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      pi.forEachAnnotation(Header.class, x -&gt; isNotEmpty(x.def()), x -&gt; n.set(x.def()));<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      return n;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   }<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   // Builder<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>   /**<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    * Builder class.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    *<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    * &lt;ul class='seealso'&gt;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    * &lt;/ul&gt;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.123"></a>
 <span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>      /**<a name="line.125"></a>
-<span class="sourceLineNo">126</span>       * Instantiates a new {@link Header @Header} object initialized with this builder.<a name="line.126"></a>
-<span class="sourceLineNo">127</span>       *<a name="line.127"></a>
-<span class="sourceLineNo">128</span>       * @return A new {@link Header @Header} object.<a name="line.128"></a>
-<span class="sourceLineNo">129</span>       */<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      public Header build() {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>         return new Impl(this);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      }<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>      /**<a name="line.134"></a>
-<span class="sourceLineNo">135</span>       * Sets the {@link Header#name} property on this annotation.<a name="line.135"></a>
-<span class="sourceLineNo">136</span>       *<a name="line.136"></a>
-<span class="sourceLineNo">137</span>       * @param value The new value for this property.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>       * @return This object.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>       */<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      public Builder name(String value) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>         this.name = value;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>         return this;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>      /**<a name="line.145"></a>
-<span class="sourceLineNo">146</span>       * Sets the {@link Header#parser} property on this annotation.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>       *<a name="line.147"></a>
-<span class="sourceLineNo">148</span>       * @param value The new value for this property.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>       * @return This object.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>       */<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>         this.parser = value;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>         return this;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      }<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>      /**<a name="line.156"></a>
-<span class="sourceLineNo">157</span>       * Sets the {@link Header#schema} property on this annotation.<a name="line.157"></a>
-<span class="sourceLineNo">158</span>       *<a name="line.158"></a>
-<span class="sourceLineNo">159</span>       * @param value The new value for this property.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>       * @return This object.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>       */<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      public Builder schema(Schema value) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>         this.schema = value;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>         return this;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      }<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span>      /**<a name="line.167"></a>
-<span class="sourceLineNo">168</span>       * Sets the {@link Header#serializer} property on this annotation.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>       *<a name="line.169"></a>
-<span class="sourceLineNo">170</span>       * @param value The new value for this property.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>       * @return This object.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>       */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>         this.serializer = value;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>         return this;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>      /**<a name="line.178"></a>
-<span class="sourceLineNo">179</span>       * Sets the {@link Header#value} property on this annotation.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>       *<a name="line.180"></a>
-<span class="sourceLineNo">181</span>       * @param value The new value for this property.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>       * @return This object.<a name="line.182"></a>
-<span class="sourceLineNo">183</span>       */<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      public Builder value(String value) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>         this.value = value;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      public Builder on(String...values) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>         super.on(values);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>         return this;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>         super.on(value);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>         return this;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>         super.onClass(value);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>         return this;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      public Builder on(Field...value) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>         super.on(value);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>         return this;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      public Builder on(Method...value) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>         super.on(value);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>         return this;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>      // &lt;/FluentSetters&gt;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   // Implementation<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>   private static class Impl extends TargetedAnnotationTImpl implements Header {<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      private final String name, value;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      private final Schema schema;<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>      Impl(Builder b) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>         super(b);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>         this.name = b.name;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>         this.parser = b.parser;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>         this.schema = b.schema;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>         this.serializer = b.serializer;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>         this.value = b.value;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>         postConstruct();<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>      @Override /* Header */<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      public String name() {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>         return name;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      }<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>      @Override /* Header */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>         return parser;<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>      @Override /* Header */<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      public Schema schema() {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>         return schema;<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>      @Override /* Header */<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>         return serializer;<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>      @Override /* Header */<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      public String value() {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>         return value;<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><a name="line.270"></a>
-<span class="sourceLineNo">271</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   // Appliers<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   //-----------------------------------------------------------------------------------------------------------------<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>    * Applies targeted {@link Header} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    */<a name="line.277"></a>
-<span class="sourceLineNo">278</span>   public static class Applier extends AnnotationApplier&lt;Header,BeanContext.Builder&gt; {<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>       * Constructor.<a name="line.281"></a>
-<span class="sourceLineNo">282</span>       *<a name="line.282"></a>
-<span class="sourceLineNo">283</span>       * @param vr The resolver for resolving values in annotations.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>       */<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      public Applier(VarResolverSession vr) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>         super(Header.class, BeanContext.Builder.class, vr);<a name="line.286"></a>
+<span class="sourceLineNo">125</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      String name="", value="", def="";<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>      /**<a name="line.130"></a>
+<span class="sourceLineNo">131</span>       * Constructor.<a name="line.131"></a>
+<span class="sourceLineNo">132</span>       */<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      protected Builder() {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>         super(Header.class);<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>       * Instantiates a new {@link Header @Header} object initialized with this builder.<a name="line.138"></a>
+<span class="sourceLineNo">139</span>       *<a name="line.139"></a>
+<span class="sourceLineNo">140</span>       * @return A new {@link Header @Header} object.<a name="line.140"></a>
+<span class="sourceLineNo">141</span>       */<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      public Header build() {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>         return new Impl(this);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      }<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>       * Sets the {@link Header#def} property on this annotation.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>       *<a name="line.148"></a>
+<span class="sourceLineNo">149</span>       * @param value The new value for this property.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>       * @return This object.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>       */<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      public Builder def(String value) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>         this.def = value;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>         return this;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      }<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>      /**<a name="line.157"></a>
+<span class="sourceLineNo">158</span>       * Sets the {@link Header#name} property on this annotation.<a name="line.158"></a>
+<span class="sourceLineNo">159</span>       *<a name="line.159"></a>
+<span class="sourceLineNo">160</span>       * @param value The new value for this property.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>       * @return This object.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>       */<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      public Builder name(String value) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>         this.name = value;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>         return this;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span><a name="line.167"></a>
+<span class="sourceLineNo">168</span>      /**<a name="line.168"></a>
+<span class="sourceLineNo">169</span>       * Sets the {@link Header#parser} property on this annotation.<a name="line.169"></a>
+<span class="sourceLineNo">170</span>       *<a name="line.170"></a>
+<span class="sourceLineNo">171</span>       * @param value The new value for this property.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>       * @return This object.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>       */<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>         this.parser = value;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>         return this;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      }<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>      /**<a name="line.179"></a>
+<span class="sourceLineNo">180</span>       * Sets the {@link Header#schema} property on this annotation.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>       *<a name="line.181"></a>
+<span class="sourceLineNo">182</span>       * @param value The new value for this property.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>       * @return This object.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>       */<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      public Builder schema(Schema value) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>         this.schema = value;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>         return this;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>      /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span>       * Sets the {@link Header#serializer} property on this annotation.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>       *<a name="line.192"></a>
+<span class="sourceLineNo">193</span>       * @param value The new value for this property.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>       * @return This object.<a name="line.194"></a>
+<span class="sourceLineNo">195</span>       */<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>         this.serializer = value;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>         return this;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>      /**<a name="line.201"></a>
+<span class="sourceLineNo">202</span>       * Sets the {@link Header#value} property on this annotation.<a name="line.202"></a>
+<span class="sourceLineNo">203</span>       *<a name="line.203"></a>
+<span class="sourceLineNo">204</span>       * @param value The new value for this property.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>       * @return This object.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>       */<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      public Builder value(String value) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>         this.value = value;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      public Builder on(String...values) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>         super.on(values);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>         return this;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>         super.on(value);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>         return this;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      }<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>         super.onClass(value);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      public Builder on(Field...value) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>         super.on(value);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>         return this;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      public Builder on(Method...value) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>         super.on(value);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>         return this;<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>      // &lt;/FluentSetters&gt;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   // Implementation<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>   private static class Impl extends TargetedAnnotationTImpl implements Header {<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      private final String name, value, def;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      private final Schema schema;<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>      Impl(Builder b) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>         super(b);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>         this.def = b.def;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>         this.name = b.name;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>         this.parser = b.parser;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>         this.schema = b.schema;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>         this.serializer = b.serializer;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>         this.value = b.value;<a name="line.265"></a>
+<span class="sourceLineNo">266</span>         postConstruct();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>      @Override /* Header */<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      public String def() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>         return def;<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>      @Override /* Header */<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      public String name() {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>         return name;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      }<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span>      @Override /* Header */<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>         return parser;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>      @Override /* Header */<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      public Schema schema() {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>         return schema;<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>      @Override<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      public void apply(AnnotationInfo&lt;Header&gt; ai, BeanContext.Builder b) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>         Header a = ai.inner();<a name="line.291"></a>
-<span class="sourceLineNo">292</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.292"></a>
-<span class="sourceLineNo">293</span>            return;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>         b.annotations(a);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   // Other<a name="line.299"></a>
+<span class="sourceLineNo">289</span>      @Override /* Header */<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>         return serializer;<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>      @Override /* Header */<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      public String value() {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>         return value;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>   /**<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    * A collection of {@link Header @Header annotations}.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    */<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   @Documented<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   @Target({METHOD,TYPE})<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   @Retention(RUNTIME)<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   @Inherited<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   public static @interface Array {<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>       * The child annotations.<a name="line.312"></a>
-<span class="sourceLineNo">313</span>       *<a name="line.313"></a>
-<span class="sourceLineNo">314</span>       * @return The annotation value.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>       */<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      Header[] value();<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">301</span>   // Appliers<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>   /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    * Applies targeted {@link Header} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    */<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   public static class Applier extends AnnotationApplier&lt;Header,BeanContext.Builder&gt; {<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>      /**<a name="line.309"></a>
+<span class="sourceLineNo">310</span>       * Constructor.<a name="line.310"></a>
+<span class="sourceLineNo">311</span>       *<a name="line.311"></a>
+<span class="sourceLineNo">312</span>       * @param vr The resolver for resolving values in annotations.<a name="line.312"></a>
+<span class="sourceLineNo">313</span>       */<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      public Applier(VarResolverSession vr) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>         super(Header.class, BeanContext.Builder.class, vr);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span>      @Override<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      public void apply(AnnotationInfo&lt;Header&gt; ai, BeanContext.Builder b) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>         Header a = ai.inner();<a name="line.320"></a>
+<span class="sourceLineNo">321</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.321"></a>
+<span class="sourceLineNo">322</span>            return;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>         b.annotations(a);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      }<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   // Other<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>    * A collection of {@link Header @Header annotations}.<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    */<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   @Documented<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   @Target({METHOD,TYPE})<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   @Retention(RUNTIME)<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   @Inherited<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   public static @interface Array {<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>       * The child annotations.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>       *<a name="line.342"></a>
+<span class="sourceLineNo">343</span>       * @return The annotation value.<a name="line.343"></a>
+<span class="sourceLineNo">344</span>       */<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      Header[] value();<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   }<a name="line.346"></a>
+<span class="sourceLineNo">347</span>}<a name="line.347"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/Path.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/Path.html
index f8ce4c3..ec667df 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/Path.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/Path.html
@@ -94,165 +94,172 @@
 <span class="sourceLineNo">086</span>public @interface Path {<a name="line.86"></a>
 <span class="sourceLineNo">087</span><a name="line.87"></a>
 <span class="sourceLineNo">088</span>   /**<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    * URL path variable name.<a name="line.89"></a>
+<span class="sourceLineNo">089</span>    * Default value for this parameter.<a name="line.89"></a>
 <span class="sourceLineNo">090</span>    *<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    * &lt;p&gt;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    * The path remainder after the path match can be referenced using the name &lt;js&gt;"/*"&lt;/js&gt;.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    * &lt;br&gt;The non-URL-decoded path remainder after the path match can be referenced using the name &lt;js&gt;"/**"&lt;/js&gt;.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    *<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    * &lt;p&gt;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    * The value should be either a valid path parameter name, or &lt;js&gt;"*"&lt;/js&gt; to represent multiple name/value pairs<a name="line.96"></a>
+<span class="sourceLineNo">091</span>    * @return The annotation value.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    */<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   String def() default "";<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>   /**<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    * URL path variable name.<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    *<a name="line.97"></a>
 <span class="sourceLineNo">098</span>    * &lt;p&gt;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    * A blank value (the default) has the following behavior:<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    * &lt;ul class='spaced-list'&gt;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    *    &lt;li&gt;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    *       If the data type is &lt;c&gt;NameValuePairs&lt;/c&gt;, &lt;c&gt;Map&lt;/c&gt;, or a bean,<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    *       then it's the equivalent to &lt;js&gt;"*"&lt;/js&gt; which will cause the value to be treated as name/value pairs.<a name="line.103"></a>
+<span class="sourceLineNo">099</span>    * The path remainder after the path match can be referenced using the name &lt;js&gt;"/*"&lt;/js&gt;.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    * &lt;br&gt;The non-URL-decoded path remainder after the path match can be referenced using the name &lt;js&gt;"/**"&lt;/js&gt;.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    *<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    * &lt;p&gt;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    * The value should be either a valid path parameter name, or &lt;js&gt;"*"&lt;/js&gt; to represent multiple name/value pairs<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    *<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    *       &lt;h5 class='figure'&gt;Examples:&lt;/h5&gt;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    *       &lt;p class='bjava'&gt;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    *    &lt;jc&gt;// When used on a REST method&lt;/jc&gt;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    *    &lt;ja&gt;@RestPost&lt;/ja&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    *    &lt;jk&gt;public void&lt;/jk&gt; addPet(&lt;ja&gt;@Path&lt;/ja&gt; JsonMap &lt;jv&gt;allPathParameters&lt;/jv&gt;) {...}<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    *       &lt;/p&gt;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    *       &lt;p class='bjava'&gt;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    *    &lt;jc&gt;// When used on a remote method parameter&lt;/jc&gt;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    *    &lt;ja&gt;@RemoteResource&lt;/ja&gt;(path=&lt;js&gt;"/myproxy"&lt;/js&gt;)<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyProxy {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    *<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    *       &lt;jc&gt;// Equivalent to @Path("*")&lt;/jc&gt;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    *       &lt;ja&gt;@RemoteGet&lt;/ja&gt;(&lt;js&gt;"/mymethod/{foo}/{bar}"&lt;/js&gt;)<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    *       String myProxyMethod1(&lt;ja&gt;@Path&lt;/ja&gt; Map&amp;lt;String,Object&amp;gt; &lt;jv&gt;allPathParameters&lt;/jv&gt;);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    *    }<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    *       &lt;/p&gt;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    *       &lt;p class='bjava'&gt;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    *    &lt;jc&gt;// When used on a request bean method&lt;/jc&gt;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyRequest {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    *<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    *       &lt;jc&gt;// Equivalent to @Path("*")&lt;/jc&gt;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    *       &lt;ja&gt;@Path&lt;/ja&gt;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    *       Map&amp;lt;String,Object&amp;gt; getPathVars();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    *    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    *       &lt;/p&gt;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    *    &lt;/li&gt;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    *    &lt;li&gt;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    *       If used on a request bean method, uses the bean property name.<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    *<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    *       &lt;h5 class='figure'&gt;Example:&lt;/h5&gt;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    *       &lt;p class='bjava'&gt;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyRequest {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    *<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    *       &lt;jc&gt;// Equivalent to @Path("foo")&lt;/jc&gt;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    *       &lt;ja&gt;@Path&lt;/ja&gt;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    *       String getFoo();<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    *    }<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    * &lt;/ul&gt;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    *<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    * &lt;p&gt;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    * The name field MUST correspond to the associated {@doc ext.SwaggerPathsPath path} segment from the path field in the {@doc ext.SwaggerPathsObject Paths Object}.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    * See {@doc ext.SwaggerPathTemplating Path Templating} for further information.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    *<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    * &lt;ul class='notes'&gt;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    *    &lt;li class='note'&gt;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    *       The format is plain-text.<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    * &lt;/ul&gt;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    *<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    * @return The annotation value.<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    */<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   String name() default "";<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>   /**<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    * Dynamically apply this annotation to the specified classes.<a name="line.158"></a>
+<span class="sourceLineNo">105</span>    * &lt;p&gt;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    * A blank value (the default) has the following behavior:<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    * &lt;ul class='spaced-list'&gt;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    *    &lt;li&gt;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    *       If the data type is &lt;c&gt;NameValuePairs&lt;/c&gt;, &lt;c&gt;Map&lt;/c&gt;, or a bean,<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    *       then it's the equivalent to &lt;js&gt;"*"&lt;/js&gt; which will cause the value to be treated as name/value pairs.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    *<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    *       &lt;h5 class='figure'&gt;Examples:&lt;/h5&gt;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    *       &lt;p class='bjava'&gt;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    *    &lt;jc&gt;// When used on a REST method&lt;/jc&gt;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    *    &lt;ja&gt;@RestPost&lt;/ja&gt;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    *    &lt;jk&gt;public void&lt;/jk&gt; addPet(&lt;ja&gt;@Path&lt;/ja&gt; JsonMap &lt;jv&gt;allPathParameters&lt;/jv&gt;) {...}<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    *       &lt;/p&gt;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    *       &lt;p class='bjava'&gt;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    *    &lt;jc&gt;// When used on a remote method parameter&lt;/jc&gt;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    *    &lt;ja&gt;@RemoteResource&lt;/ja&gt;(path=&lt;js&gt;"/myproxy"&lt;/js&gt;)<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyProxy {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    *<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    *       &lt;jc&gt;// Equivalent to @Path("*")&lt;/jc&gt;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    *       &lt;ja&gt;@RemoteGet&lt;/ja&gt;(&lt;js&gt;"/mymethod/{foo}/{bar}"&lt;/js&gt;)<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    *       String myProxyMethod1(&lt;ja&gt;@Path&lt;/ja&gt; Map&amp;lt;String,Object&amp;gt; &lt;jv&gt;allPathParameters&lt;/jv&gt;);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    *    }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    *       &lt;/p&gt;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    *       &lt;p class='bjava'&gt;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    *    &lt;jc&gt;// When used on a request bean method&lt;/jc&gt;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyRequest {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    *<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    *       &lt;jc&gt;// Equivalent to @Path("*")&lt;/jc&gt;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    *       &lt;ja&gt;@Path&lt;/ja&gt;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    *       Map&amp;lt;String,Object&amp;gt; getPathVars();<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    *    }<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    *       &lt;/p&gt;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    *    &lt;/li&gt;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    *    &lt;li&gt;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    *       If used on a request bean method, uses the bean property name.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    *<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    *       &lt;h5 class='figure'&gt;Example:&lt;/h5&gt;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    *       &lt;p class='bjava'&gt;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyRequest {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    *<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    *       &lt;jc&gt;// Equivalent to @Path("foo")&lt;/jc&gt;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    *       &lt;ja&gt;@Path&lt;/ja&gt;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    *       String getFoo();<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    *    }<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    * &lt;/ul&gt;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    *<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    * &lt;p&gt;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    * The name field MUST correspond to the associated {@doc ext.SwaggerPathsPath path} segment from the path field in the {@doc ext.SwaggerPathsObject Paths Object}.<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    * See {@doc ext.SwaggerPathTemplating Path Templating} for further information.<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    *<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    * &lt;ul class='notes'&gt;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    *    &lt;li class='note'&gt;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    *       The format is plain-text.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    * &lt;/ul&gt;<a name="line.158"></a>
 <span class="sourceLineNo">159</span>    *<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    * &lt;ul class='seealso'&gt;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    *    &lt;li class='link'&gt;{@doc jm.DynamicallyAppliedAnnotations}<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    * &lt;/ul&gt;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    *<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    * @return The annotation value.<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    */<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   String[] on() default {};<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>   /**<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    * Dynamically apply this annotation to the specified classes.<a name="line.169"></a>
+<span class="sourceLineNo">160</span>    * @return The annotation value.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    */<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   String name() default "";<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>   /**<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    * Dynamically apply this annotation to the specified classes.<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    *<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    * &lt;ul class='seealso'&gt;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    *    &lt;li class='link'&gt;{@doc jm.DynamicallyAppliedAnnotations}<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    * &lt;/ul&gt;<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    *<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    * &lt;p&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    * Identical to {@link #on()} except allows you to specify class objects instead of a strings.<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    *<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    * &lt;ul class='seealso'&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    *    &lt;li class='link'&gt;{@doc jm.DynamicallyAppliedAnnotations}<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    * &lt;/ul&gt;<a name="line.176"></a>
+<span class="sourceLineNo">171</span>    * @return The annotation value.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    */<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   String[] on() default {};<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>   /**<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    * Dynamically apply this annotation to the specified classes.<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    *<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    * @return The annotation value.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    */<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   Class&lt;?&gt;[] onClass() default {};<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>    * Specifies the {@link HttpPartParser} class used for parsing strings to values.<a name="line.183"></a>
+<span class="sourceLineNo">178</span>    * &lt;p&gt;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    * Identical to {@link #on()} except allows you to specify class objects instead of a strings.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    *<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    * &lt;ul class='seealso'&gt;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    *    &lt;li class='link'&gt;{@doc jm.DynamicallyAppliedAnnotations}<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    * &lt;/ul&gt;<a name="line.183"></a>
 <span class="sourceLineNo">184</span>    *<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    * &lt;p&gt;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    * Overrides for this part the part parser defined on the REST resource which by default is {@link OpenApiParser}.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    *<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    * @return The annotation value.<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    */<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   Class&lt;? extends HttpPartParser&gt; parser() default HttpPartParser.Void.class;<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>   /**<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    * &lt;mk&gt;schema&lt;/mk&gt; field of the {@doc ext.SwaggerParameterObject}.<a name="line.193"></a>
+<span class="sourceLineNo">185</span>    * @return The annotation value.<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    */<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   Class&lt;?&gt;[] onClass() default {};<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>   /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    * Specifies the {@link HttpPartParser} class used for parsing strings to values.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    *<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    * &lt;p&gt;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    * Overrides for this part the part parser defined on the REST resource which by default is {@link OpenApiParser}.<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    *<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    * &lt;p&gt;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    * The schema defining the type used for parameter.<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    *<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    * &lt;p&gt;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    * The {@link Schema @Schema} annotation can also be used standalone on the parameter or type.<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    * Values specified on this field override values specified on the type, and values specified on child types override values<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    * specified on parent types.<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    *<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    * &lt;h5 class='section'&gt;Used for:&lt;/h5&gt;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    * &lt;ul class='spaced-list'&gt;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    *    &lt;li&gt;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    *       Server-side schema-based parsing and parsing validation.<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    *    &lt;li&gt;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    *       Server-side generated Swagger documentation.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    *    &lt;li&gt;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    *       Client-side schema-based serializing and serializing validation.<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    * &lt;/ul&gt;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    *<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    * @return The annotation value.<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   Schema schema() default @Schema;<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>    * Specifies the {@link HttpPartSerializer} class used for serializing values to strings.<a name="line.218"></a>
+<span class="sourceLineNo">195</span>    * @return The annotation value.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    */<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   Class&lt;? extends HttpPartParser&gt; parser() default HttpPartParser.Void.class;<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>   /**<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    * &lt;mk&gt;schema&lt;/mk&gt; field of the {@doc ext.SwaggerParameterObject}.<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    *<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    * &lt;p&gt;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    * The schema defining the type used for parameter.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    *<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    * &lt;p&gt;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    * The {@link Schema @Schema} annotation can also be used standalone on the parameter or type.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    * Values specified on this field override values specified on the type, and values specified on child types override values<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    * specified on parent types.<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    *<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    * &lt;h5 class='section'&gt;Used for:&lt;/h5&gt;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    * &lt;ul class='spaced-list'&gt;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    *    &lt;li&gt;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    *       Server-side schema-based parsing and parsing validation.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    *    &lt;li&gt;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    *       Server-side generated Swagger documentation.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    *    &lt;li&gt;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    *       Client-side schema-based serializing and serializing validation.<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    * &lt;/ul&gt;<a name="line.218"></a>
 <span class="sourceLineNo">219</span>    *<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    * &lt;p&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    * Overrides for this part the part serializer defined on the REST client which by default is {@link OpenApiSerializer}.<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    *<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    * @return The annotation value.<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    */<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   Class&lt;? extends HttpPartSerializer&gt; serializer() default HttpPartSerializer.Void.class;<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>    * A synonym for {@link #name()}.<a name="line.228"></a>
+<span class="sourceLineNo">220</span>    * @return The annotation value.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    */<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   Schema schema() default @Schema;<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>    * Specifies the {@link HttpPartSerializer} class used for serializing values to strings.<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    *<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    * &lt;p&gt;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    * Overrides for this part the part serializer defined on the REST client which by default is {@link OpenApiSerializer}.<a name="line.228"></a>
 <span class="sourceLineNo">229</span>    *<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    * &lt;p&gt;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    * Allows you to use shortened notation if you're only specifying the name.<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    *<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    * &lt;p&gt;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    * The following are completely equivalent ways of defining a path entry:<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    * &lt;p class='bjava'&gt;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    *    &lt;ja&gt;@RestGet&lt;/ja&gt;(&lt;js&gt;"/pet/{petId}"&lt;/js&gt;)<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    *    &lt;jk&gt;public&lt;/jk&gt; Pet getPet(&lt;ja&gt;@Path&lt;/ja&gt;(name=&lt;js&gt;"petId"&lt;/js&gt;) &lt;jk&gt;long&lt;/jk&gt; &lt;jv&gt;petId&lt;/jv&gt;) { ... }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    * &lt;/p&gt;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    * &lt;p class='bjava'&gt;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    *    &lt;ja&gt;@RestGet&lt;/ja&gt;(&lt;js&gt;"/pet/{petId}"&lt;/js&gt;)<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    *    &lt;jk&gt;public&lt;/jk&gt; Pet getPet(&lt;ja&gt;@Path&lt;/ja&gt;(&lt;js&gt;"petId"&lt;/js&gt;) &lt;jk&gt;long&lt;/jk&gt; &lt;jv&gt;petId&lt;/jv&gt;) { ... }<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    * &lt;/p&gt;<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    *<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    * @return The annotation value.<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    */<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   String value() default "";<a name="line.246"></a>
-<span class="sourceLineNo">247</span>}<a name="line.247"></a>
+<span class="sourceLineNo">230</span>    * @return The annotation value.<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    */<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   Class&lt;? extends HttpPartSerializer&gt; serializer() default HttpPartSerializer.Void.class;<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>   /**<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    * A synonym for {@link #name()}.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    *<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    * &lt;p&gt;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    * Allows you to use shortened notation if you're only specifying the name.<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    *<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    * &lt;p&gt;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    * The following are completely equivalent ways of defining a path entry:<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    * &lt;p class='bjava'&gt;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    *    &lt;ja&gt;@RestGet&lt;/ja&gt;(&lt;js&gt;"/pet/{petId}"&lt;/js&gt;)<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    *    &lt;jk&gt;public&lt;/jk&gt; Pet getPet(&lt;ja&gt;@Path&lt;/ja&gt;(name=&lt;js&gt;"petId"&lt;/js&gt;) &lt;jk&gt;long&lt;/jk&gt; &lt;jv&gt;petId&lt;/jv&gt;) { ... }<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    * &lt;/p&gt;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    * &lt;p class='bjava'&gt;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    *    &lt;ja&gt;@RestGet&lt;/ja&gt;(&lt;js&gt;"/pet/{petId}"&lt;/js&gt;)<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    *    &lt;jk&gt;public&lt;/jk&gt; Pet getPet(&lt;ja&gt;@Path&lt;/ja&gt;(&lt;js&gt;"petId"&lt;/js&gt;) &lt;jk&gt;long&lt;/jk&gt; &lt;jv&gt;petId&lt;/jv&gt;) { ... }<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    * &lt;/p&gt;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    *<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    * @return The annotation value.<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    */<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   String value() default "";<a name="line.253"></a>
+<span class="sourceLineNo">254</span>}<a name="line.254"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/PathAnnotation.Applier.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/PathAnnotation.Applier.html
index 0e0bd78..2766ba1 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/PathAnnotation.Applier.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/PathAnnotation.Applier.html
@@ -104,225 +104,254 @@
 <span class="sourceLineNo">096</span>      return n;<a name="line.96"></a>
 <span class="sourceLineNo">097</span>   }<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">100</span>   // Builder<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>   /**<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    * Builder class.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    *<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    * &lt;ul class='seealso'&gt;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    * &lt;/ul&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    */<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      String name="", value="";<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>      /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>       * Constructor.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>       */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      protected Builder() {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>         super(Path.class);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      }<a name="line.122"></a>
+<span class="sourceLineNo">099</span>   /**<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    * Finds the default value from the specified list of annotations.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    *<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    * @param pi The parameter.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    * @return The last matching default value, or {@link Value#empty()} if not found.<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    */<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   public static Value&lt;String&gt; findDef(ParamInfo pi) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      Value&lt;String&gt; n = Value.empty();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      pi.forEachAnnotation(Path.class, x -&gt; isNotEmpty(x.def()), x -&gt; n.set(x.def()));<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      return n;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   // Builder<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   //-----------------------------------------------------------------------------------------------------------------<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>    * Builder class.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    *<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    * &lt;ul class='seealso'&gt;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    * &lt;/ul&gt;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    */<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.122"></a>
 <span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>      /**<a name="line.124"></a>
-<span class="sourceLineNo">125</span>       * Instantiates a new {@link Path @Path} object initialized with this builder.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>       *<a name="line.126"></a>
-<span class="sourceLineNo">127</span>       * @return A new {@link Path @Path} object.<a name="line.127"></a>
-<span class="sourceLineNo">128</span>       */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      public Path build() {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>         return new Impl(this);<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>      /**<a name="line.133"></a>
-<span class="sourceLineNo">134</span>       * Sets the {@link Path#name} property on this annotation.<a name="line.134"></a>
-<span class="sourceLineNo">135</span>       *<a name="line.135"></a>
-<span class="sourceLineNo">136</span>       * @param value The new value for this property.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>       * @return This object.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>       */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      public Builder name(String value) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>         this.name = value;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>         return this;<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>      /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>       * Sets the {@link Path#parser} property on this annotation.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>       *<a name="line.146"></a>
-<span class="sourceLineNo">147</span>       * @param value The new value for this property.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>       * @return This object.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>       */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>         this.parser = value;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>         return this;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>      /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>       * Sets the {@link Path#schema} property on this annotation.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>       *<a name="line.157"></a>
-<span class="sourceLineNo">158</span>       * @param value The new value for this property.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>       * @return This object.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>       */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      public Builder schema(Schema value) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>         this.schema = value;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>         return this;<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>      /**<a name="line.166"></a>
-<span class="sourceLineNo">167</span>       * Sets the {@link Path#serializer} property on this annotation.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>       *<a name="line.168"></a>
-<span class="sourceLineNo">169</span>       * @param value The new value for this property.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>       * @return This object.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>       */<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>         this.serializer = value;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>         return this;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>      /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>       * Sets the {@link Path#value} property on this annotation.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>       *<a name="line.179"></a>
-<span class="sourceLineNo">180</span>       * @param value The new value for this property.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>       * @return This object.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>       */<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      public Builder value(String value) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>         this.value = value;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      public Builder on(String...values) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>         super.on(values);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>         return this;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>         super.on(value);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>         return this;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>         super.onClass(value);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>         return this;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      public Builder on(Field...value) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>         super.on(value);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>         return this;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      public Builder on(Method...value) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>         super.on(value);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>         return this;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // &lt;/FluentSetters&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   }<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>   // Implementation<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>   private static class Impl extends TargetedAnnotationTImpl implements Path {<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      private final String  name, value;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      private final Schema schema;<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>      Impl(Builder b) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>         super(b);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>         this.name = b.name;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>         this.parser = b.parser;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>         this.schema = b.schema;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>         this.serializer = b.serializer;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>         this.value = b.value;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>         postConstruct();<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>      @Override /* Path */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      public String name() {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>         return name;<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>      @Override /* Path */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>         return parser;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>      @Override /* Path */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      public Schema schema() {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>         return schema;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>      @Override /* Path */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>         return serializer;<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>      @Override /* Path */<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      public String value() {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>         return value;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      }<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   // Appliers<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>   /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    * Applies targeted {@link Path} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   public static class Applier extends AnnotationApplier&lt;Path,BeanContext.Builder&gt; {<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>       * Constructor.<a name="line.280"></a>
-<span class="sourceLineNo">281</span>       *<a name="line.281"></a>
-<span class="sourceLineNo">282</span>       * @param vr The resolver for resolving values in annotations.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>       */<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      public Applier(VarResolverSession vr) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>         super(Path.class, BeanContext.Builder.class, vr);<a name="line.285"></a>
+<span class="sourceLineNo">124</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      String name="", value="", def="";<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>      /**<a name="line.129"></a>
+<span class="sourceLineNo">130</span>       * Constructor.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>       */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      protected Builder() {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>         super(Path.class);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      }<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>       * Instantiates a new {@link Path @Path} object initialized with this builder.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>       *<a name="line.138"></a>
+<span class="sourceLineNo">139</span>       * @return A new {@link Path @Path} object.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>       */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      public Path build() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>         return new Impl(this);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>      /**<a name="line.145"></a>
+<span class="sourceLineNo">146</span>       * Sets the {@link Path#name} property on this annotation.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>       *<a name="line.147"></a>
+<span class="sourceLineNo">148</span>       * @param value The new value for this property.<a name="line.148"></a>
+<span class="sourceLineNo">149</span>       * @return This object.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>       */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      public Builder name(String value) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>         this.name = value;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>         return this;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>      /**<a name="line.156"></a>
+<span class="sourceLineNo">157</span>       * Sets the {@link Path#name} property on this annotation.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>       *<a name="line.158"></a>
+<span class="sourceLineNo">159</span>       * @param value The new value for this property.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>       * @return This object.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>       */<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      public Builder def(String value) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>         this.def = value;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>         return this;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>      /**<a name="line.167"></a>
+<span class="sourceLineNo">168</span>       * Sets the {@link Path#parser} property on this annotation.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>       *<a name="line.169"></a>
+<span class="sourceLineNo">170</span>       * @param value The new value for this property.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>       * @return This object.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>       */<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>         this.parser = value;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>         return this;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>      /**<a name="line.178"></a>
+<span class="sourceLineNo">179</span>       * Sets the {@link Path#schema} property on this annotation.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>       *<a name="line.180"></a>
+<span class="sourceLineNo">181</span>       * @param value The new value for this property.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>       * @return This object.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>       */<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      public Builder schema(Schema value) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>         this.schema = value;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>         return this;<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>      /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>       * Sets the {@link Path#serializer} property on this annotation.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>       *<a name="line.191"></a>
+<span class="sourceLineNo">192</span>       * @param value The new value for this property.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>       * @return This object.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>       */<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>         this.serializer = value;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>         return this;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>      /**<a name="line.200"></a>
+<span class="sourceLineNo">201</span>       * Sets the {@link Path#value} property on this annotation.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>       *<a name="line.202"></a>
+<span class="sourceLineNo">203</span>       * @param value The new value for this property.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>       * @return This object.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>       */<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      public Builder value(String value) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>         this.value = value;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      public Builder on(String...values) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>         super.on(values);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>         return 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>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>         super.on(value);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>         super.onClass(value);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      public Builder on(Field...value) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>         super.on(value);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>         return this;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      }<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      public Builder on(Method...value) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>         super.on(value);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>         return this;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      }<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>      // &lt;/FluentSetters&gt;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   // Implementation<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>   private static class Impl extends TargetedAnnotationTImpl implements Path {<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      private final String  name, value, def;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      private final Schema schema;<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>      Impl(Builder b) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>         super(b);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>         this.def = b.def;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>         this.name = b.name;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>         this.parser = b.parser;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>         this.schema = b.schema;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>         this.serializer = b.serializer;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>         this.value = b.value;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>         postConstruct();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      }<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>      @Override /* Path */<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      public String name() {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>         return name;<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>      @Override /* Path */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      public String def() {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>         return def;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>      @Override /* Path */<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>         return parser;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>      @Override /* Path */<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      public Schema schema() {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>         return schema;<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>      @Override<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      public void apply(AnnotationInfo&lt;Path&gt; ai, BeanContext.Builder b) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>         Path a = ai.inner();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            return;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>         b.annotations(a);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   // Other<a name="line.298"></a>
+<span class="sourceLineNo">288</span>      @Override /* Path */<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>         return serializer;<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>      @Override /* Path */<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      public String value() {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>         return value;<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><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>    * A collection of {@link Path @Path annotations}.<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    */<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   @Documented<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   @Target({METHOD,TYPE})<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   @Retention(RUNTIME)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   @Inherited<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   public static @interface Array {<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>       * The child annotations.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>       *<a name="line.312"></a>
-<span class="sourceLineNo">313</span>       * @return The annotation value.<a name="line.313"></a>
-<span class="sourceLineNo">314</span>       */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      Path[] value();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>}<a name="line.317"></a>
+<span class="sourceLineNo">300</span>   // Appliers<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>   /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    * Applies targeted {@link Path} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   public static class Applier extends AnnotationApplier&lt;Path,BeanContext.Builder&gt; {<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>      /**<a name="line.308"></a>
+<span class="sourceLineNo">309</span>       * Constructor.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>       *<a name="line.310"></a>
+<span class="sourceLineNo">311</span>       * @param vr The resolver for resolving values in annotations.<a name="line.311"></a>
+<span class="sourceLineNo">312</span>       */<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      public Applier(VarResolverSession vr) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>         super(Path.class, BeanContext.Builder.class, vr);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>      @Override<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      public void apply(AnnotationInfo&lt;Path&gt; ai, BeanContext.Builder b) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>         Path a = ai.inner();<a name="line.319"></a>
+<span class="sourceLineNo">320</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.320"></a>
+<span class="sourceLineNo">321</span>            return;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>         b.annotations(a);<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><a name="line.325"></a>
+<span class="sourceLineNo">326</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   // Other<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   //-----------------------------------------------------------------------------------------------------------------<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 collection of {@link Path @Path annotations}.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   @Documented<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   @Target({METHOD,TYPE})<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   @Retention(RUNTIME)<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   @Inherited<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   public static @interface Array {<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>       * The child annotations.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>       *<a name="line.341"></a>
+<span class="sourceLineNo">342</span>       * @return The annotation value.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>       */<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      Path[] value();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>}<a name="line.346"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/PathAnnotation.Array.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/PathAnnotation.Array.html
index 0e0bd78..2766ba1 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/PathAnnotation.Array.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/PathAnnotation.Array.html
@@ -104,225 +104,254 @@
 <span class="sourceLineNo">096</span>      return n;<a name="line.96"></a>
 <span class="sourceLineNo">097</span>   }<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">100</span>   // Builder<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>   /**<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    * Builder class.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    *<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    * &lt;ul class='seealso'&gt;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    * &lt;/ul&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    */<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      String name="", value="";<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>      /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>       * Constructor.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>       */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      protected Builder() {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>         super(Path.class);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      }<a name="line.122"></a>
+<span class="sourceLineNo">099</span>   /**<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    * Finds the default value from the specified list of annotations.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    *<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    * @param pi The parameter.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    * @return The last matching default value, or {@link Value#empty()} if not found.<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    */<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   public static Value&lt;String&gt; findDef(ParamInfo pi) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      Value&lt;String&gt; n = Value.empty();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      pi.forEachAnnotation(Path.class, x -&gt; isNotEmpty(x.def()), x -&gt; n.set(x.def()));<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      return n;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   // Builder<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   //-----------------------------------------------------------------------------------------------------------------<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>    * Builder class.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    *<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    * &lt;ul class='seealso'&gt;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    * &lt;/ul&gt;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    */<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.122"></a>
 <span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>      /**<a name="line.124"></a>
-<span class="sourceLineNo">125</span>       * Instantiates a new {@link Path @Path} object initialized with this builder.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>       *<a name="line.126"></a>
-<span class="sourceLineNo">127</span>       * @return A new {@link Path @Path} object.<a name="line.127"></a>
-<span class="sourceLineNo">128</span>       */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      public Path build() {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>         return new Impl(this);<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>      /**<a name="line.133"></a>
-<span class="sourceLineNo">134</span>       * Sets the {@link Path#name} property on this annotation.<a name="line.134"></a>
-<span class="sourceLineNo">135</span>       *<a name="line.135"></a>
-<span class="sourceLineNo">136</span>       * @param value The new value for this property.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>       * @return This object.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>       */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      public Builder name(String value) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>         this.name = value;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>         return this;<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>      /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>       * Sets the {@link Path#parser} property on this annotation.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>       *<a name="line.146"></a>
-<span class="sourceLineNo">147</span>       * @param value The new value for this property.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>       * @return This object.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>       */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>         this.parser = value;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>         return this;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>      /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>       * Sets the {@link Path#schema} property on this annotation.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>       *<a name="line.157"></a>
-<span class="sourceLineNo">158</span>       * @param value The new value for this property.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>       * @return This object.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>       */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      public Builder schema(Schema value) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>         this.schema = value;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>         return this;<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>      /**<a name="line.166"></a>
-<span class="sourceLineNo">167</span>       * Sets the {@link Path#serializer} property on this annotation.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>       *<a name="line.168"></a>
-<span class="sourceLineNo">169</span>       * @param value The new value for this property.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>       * @return This object.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>       */<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>         this.serializer = value;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>         return this;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>      /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>       * Sets the {@link Path#value} property on this annotation.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>       *<a name="line.179"></a>
-<span class="sourceLineNo">180</span>       * @param value The new value for this property.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>       * @return This object.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>       */<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      public Builder value(String value) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>         this.value = value;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      public Builder on(String...values) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>         super.on(values);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>         return this;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>         super.on(value);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>         return this;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>         super.onClass(value);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>         return this;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      public Builder on(Field...value) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>         super.on(value);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>         return this;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      public Builder on(Method...value) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>         super.on(value);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>         return this;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // &lt;/FluentSetters&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   }<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>   // Implementation<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>   private static class Impl extends TargetedAnnotationTImpl implements Path {<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      private final String  name, value;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      private final Schema schema;<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>      Impl(Builder b) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>         super(b);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>         this.name = b.name;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>         this.parser = b.parser;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>         this.schema = b.schema;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>         this.serializer = b.serializer;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>         this.value = b.value;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>         postConstruct();<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>      @Override /* Path */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      public String name() {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>         return name;<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>      @Override /* Path */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>         return parser;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>      @Override /* Path */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      public Schema schema() {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>         return schema;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>      @Override /* Path */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>         return serializer;<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>      @Override /* Path */<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      public String value() {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>         return value;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      }<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   // Appliers<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>   /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    * Applies targeted {@link Path} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   public static class Applier extends AnnotationApplier&lt;Path,BeanContext.Builder&gt; {<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>       * Constructor.<a name="line.280"></a>
-<span class="sourceLineNo">281</span>       *<a name="line.281"></a>
-<span class="sourceLineNo">282</span>       * @param vr The resolver for resolving values in annotations.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>       */<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      public Applier(VarResolverSession vr) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>         super(Path.class, BeanContext.Builder.class, vr);<a name="line.285"></a>
+<span class="sourceLineNo">124</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      String name="", value="", def="";<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>      /**<a name="line.129"></a>
+<span class="sourceLineNo">130</span>       * Constructor.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>       */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      protected Builder() {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>         super(Path.class);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      }<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>       * Instantiates a new {@link Path @Path} object initialized with this builder.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>       *<a name="line.138"></a>
+<span class="sourceLineNo">139</span>       * @return A new {@link Path @Path} object.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>       */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      public Path build() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>         return new Impl(this);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>      /**<a name="line.145"></a>
+<span class="sourceLineNo">146</span>       * Sets the {@link Path#name} property on this annotation.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>       *<a name="line.147"></a>
+<span class="sourceLineNo">148</span>       * @param value The new value for this property.<a name="line.148"></a>
+<span class="sourceLineNo">149</span>       * @return This object.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>       */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      public Builder name(String value) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>         this.name = value;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>         return this;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>      /**<a name="line.156"></a>
+<span class="sourceLineNo">157</span>       * Sets the {@link Path#name} property on this annotation.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>       *<a name="line.158"></a>
+<span class="sourceLineNo">159</span>       * @param value The new value for this property.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>       * @return This object.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>       */<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      public Builder def(String value) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>         this.def = value;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>         return this;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>      /**<a name="line.167"></a>
+<span class="sourceLineNo">168</span>       * Sets the {@link Path#parser} property on this annotation.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>       *<a name="line.169"></a>
+<span class="sourceLineNo">170</span>       * @param value The new value for this property.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>       * @return This object.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>       */<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>         this.parser = value;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>         return this;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>      /**<a name="line.178"></a>
+<span class="sourceLineNo">179</span>       * Sets the {@link Path#schema} property on this annotation.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>       *<a name="line.180"></a>
+<span class="sourceLineNo">181</span>       * @param value The new value for this property.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>       * @return This object.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>       */<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      public Builder schema(Schema value) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>         this.schema = value;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>         return this;<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>      /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>       * Sets the {@link Path#serializer} property on this annotation.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>       *<a name="line.191"></a>
+<span class="sourceLineNo">192</span>       * @param value The new value for this property.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>       * @return This object.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>       */<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>         this.serializer = value;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>         return this;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>      /**<a name="line.200"></a>
+<span class="sourceLineNo">201</span>       * Sets the {@link Path#value} property on this annotation.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>       *<a name="line.202"></a>
+<span class="sourceLineNo">203</span>       * @param value The new value for this property.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>       * @return This object.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>       */<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      public Builder value(String value) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>         this.value = value;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      public Builder on(String...values) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>         super.on(values);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>         return 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>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>         super.on(value);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>         super.onClass(value);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      public Builder on(Field...value) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>         super.on(value);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>         return this;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      }<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      public Builder on(Method...value) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>         super.on(value);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>         return this;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      }<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>      // &lt;/FluentSetters&gt;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   // Implementation<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>   private static class Impl extends TargetedAnnotationTImpl implements Path {<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      private final String  name, value, def;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      private final Schema schema;<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>      Impl(Builder b) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>         super(b);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>         this.def = b.def;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>         this.name = b.name;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>         this.parser = b.parser;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>         this.schema = b.schema;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>         this.serializer = b.serializer;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>         this.value = b.value;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>         postConstruct();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      }<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>      @Override /* Path */<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      public String name() {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>         return name;<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>      @Override /* Path */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      public String def() {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>         return def;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>      @Override /* Path */<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>         return parser;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>      @Override /* Path */<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      public Schema schema() {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>         return schema;<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>      @Override<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      public void apply(AnnotationInfo&lt;Path&gt; ai, BeanContext.Builder b) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>         Path a = ai.inner();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            return;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>         b.annotations(a);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   // Other<a name="line.298"></a>
+<span class="sourceLineNo">288</span>      @Override /* Path */<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>         return serializer;<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>      @Override /* Path */<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      public String value() {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>         return value;<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><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>    * A collection of {@link Path @Path annotations}.<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    */<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   @Documented<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   @Target({METHOD,TYPE})<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   @Retention(RUNTIME)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   @Inherited<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   public static @interface Array {<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>       * The child annotations.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>       *<a name="line.312"></a>
-<span class="sourceLineNo">313</span>       * @return The annotation value.<a name="line.313"></a>
-<span class="sourceLineNo">314</span>       */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      Path[] value();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>}<a name="line.317"></a>
+<span class="sourceLineNo">300</span>   // Appliers<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>   /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    * Applies targeted {@link Path} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   public static class Applier extends AnnotationApplier&lt;Path,BeanContext.Builder&gt; {<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>      /**<a name="line.308"></a>
+<span class="sourceLineNo">309</span>       * Constructor.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>       *<a name="line.310"></a>
+<span class="sourceLineNo">311</span>       * @param vr The resolver for resolving values in annotations.<a name="line.311"></a>
+<span class="sourceLineNo">312</span>       */<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      public Applier(VarResolverSession vr) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>         super(Path.class, BeanContext.Builder.class, vr);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>      @Override<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      public void apply(AnnotationInfo&lt;Path&gt; ai, BeanContext.Builder b) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>         Path a = ai.inner();<a name="line.319"></a>
+<span class="sourceLineNo">320</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.320"></a>
+<span class="sourceLineNo">321</span>            return;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>         b.annotations(a);<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><a name="line.325"></a>
+<span class="sourceLineNo">326</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   // Other<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   //-----------------------------------------------------------------------------------------------------------------<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 collection of {@link Path @Path annotations}.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   @Documented<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   @Target({METHOD,TYPE})<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   @Retention(RUNTIME)<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   @Inherited<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   public static @interface Array {<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>       * The child annotations.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>       *<a name="line.341"></a>
+<span class="sourceLineNo">342</span>       * @return The annotation value.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>       */<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      Path[] value();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>}<a name="line.346"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html
index 0e0bd78..2766ba1 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html
@@ -104,225 +104,254 @@
 <span class="sourceLineNo">096</span>      return n;<a name="line.96"></a>
 <span class="sourceLineNo">097</span>   }<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">100</span>   // Builder<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>   /**<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    * Builder class.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    *<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    * &lt;ul class='seealso'&gt;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    * &lt;/ul&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    */<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      String name="", value="";<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>      /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>       * Constructor.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>       */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      protected Builder() {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>         super(Path.class);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      }<a name="line.122"></a>
+<span class="sourceLineNo">099</span>   /**<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    * Finds the default value from the specified list of annotations.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    *<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    * @param pi The parameter.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    * @return The last matching default value, or {@link Value#empty()} if not found.<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    */<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   public static Value&lt;String&gt; findDef(ParamInfo pi) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      Value&lt;String&gt; n = Value.empty();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      pi.forEachAnnotation(Path.class, x -&gt; isNotEmpty(x.def()), x -&gt; n.set(x.def()));<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      return n;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   // Builder<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   //-----------------------------------------------------------------------------------------------------------------<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>    * Builder class.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    *<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    * &lt;ul class='seealso'&gt;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    * &lt;/ul&gt;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    */<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.122"></a>
 <span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>      /**<a name="line.124"></a>
-<span class="sourceLineNo">125</span>       * Instantiates a new {@link Path @Path} object initialized with this builder.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>       *<a name="line.126"></a>
-<span class="sourceLineNo">127</span>       * @return A new {@link Path @Path} object.<a name="line.127"></a>
-<span class="sourceLineNo">128</span>       */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      public Path build() {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>         return new Impl(this);<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>      /**<a name="line.133"></a>
-<span class="sourceLineNo">134</span>       * Sets the {@link Path#name} property on this annotation.<a name="line.134"></a>
-<span class="sourceLineNo">135</span>       *<a name="line.135"></a>
-<span class="sourceLineNo">136</span>       * @param value The new value for this property.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>       * @return This object.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>       */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      public Builder name(String value) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>         this.name = value;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>         return this;<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>      /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>       * Sets the {@link Path#parser} property on this annotation.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>       *<a name="line.146"></a>
-<span class="sourceLineNo">147</span>       * @param value The new value for this property.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>       * @return This object.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>       */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>         this.parser = value;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>         return this;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>      /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>       * Sets the {@link Path#schema} property on this annotation.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>       *<a name="line.157"></a>
-<span class="sourceLineNo">158</span>       * @param value The new value for this property.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>       * @return This object.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>       */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      public Builder schema(Schema value) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>         this.schema = value;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>         return this;<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>      /**<a name="line.166"></a>
-<span class="sourceLineNo">167</span>       * Sets the {@link Path#serializer} property on this annotation.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>       *<a name="line.168"></a>
-<span class="sourceLineNo">169</span>       * @param value The new value for this property.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>       * @return This object.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>       */<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>         this.serializer = value;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>         return this;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>      /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>       * Sets the {@link Path#value} property on this annotation.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>       *<a name="line.179"></a>
-<span class="sourceLineNo">180</span>       * @param value The new value for this property.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>       * @return This object.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>       */<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      public Builder value(String value) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>         this.value = value;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      public Builder on(String...values) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>         super.on(values);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>         return this;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>         super.on(value);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>         return this;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>         super.onClass(value);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>         return this;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      public Builder on(Field...value) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>         super.on(value);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>         return this;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      public Builder on(Method...value) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>         super.on(value);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>         return this;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // &lt;/FluentSetters&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   }<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>   // Implementation<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>   private static class Impl extends TargetedAnnotationTImpl implements Path {<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      private final String  name, value;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      private final Schema schema;<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>      Impl(Builder b) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>         super(b);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>         this.name = b.name;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>         this.parser = b.parser;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>         this.schema = b.schema;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>         this.serializer = b.serializer;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>         this.value = b.value;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>         postConstruct();<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>      @Override /* Path */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      public String name() {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>         return name;<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>      @Override /* Path */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>         return parser;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>      @Override /* Path */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      public Schema schema() {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>         return schema;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>      @Override /* Path */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>         return serializer;<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>      @Override /* Path */<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      public String value() {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>         return value;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      }<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   // Appliers<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>   /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    * Applies targeted {@link Path} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   public static class Applier extends AnnotationApplier&lt;Path,BeanContext.Builder&gt; {<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>       * Constructor.<a name="line.280"></a>
-<span class="sourceLineNo">281</span>       *<a name="line.281"></a>
-<span class="sourceLineNo">282</span>       * @param vr The resolver for resolving values in annotations.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>       */<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      public Applier(VarResolverSession vr) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>         super(Path.class, BeanContext.Builder.class, vr);<a name="line.285"></a>
+<span class="sourceLineNo">124</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      String name="", value="", def="";<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>      /**<a name="line.129"></a>
+<span class="sourceLineNo">130</span>       * Constructor.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>       */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      protected Builder() {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>         super(Path.class);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      }<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>       * Instantiates a new {@link Path @Path} object initialized with this builder.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>       *<a name="line.138"></a>
+<span class="sourceLineNo">139</span>       * @return A new {@link Path @Path} object.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>       */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      public Path build() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>         return new Impl(this);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>      /**<a name="line.145"></a>
+<span class="sourceLineNo">146</span>       * Sets the {@link Path#name} property on this annotation.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>       *<a name="line.147"></a>
+<span class="sourceLineNo">148</span>       * @param value The new value for this property.<a name="line.148"></a>
+<span class="sourceLineNo">149</span>       * @return This object.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>       */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      public Builder name(String value) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>         this.name = value;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>         return this;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>      /**<a name="line.156"></a>
+<span class="sourceLineNo">157</span>       * Sets the {@link Path#name} property on this annotation.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>       *<a name="line.158"></a>
+<span class="sourceLineNo">159</span>       * @param value The new value for this property.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>       * @return This object.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>       */<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      public Builder def(String value) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>         this.def = value;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>         return this;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>      /**<a name="line.167"></a>
+<span class="sourceLineNo">168</span>       * Sets the {@link Path#parser} property on this annotation.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>       *<a name="line.169"></a>
+<span class="sourceLineNo">170</span>       * @param value The new value for this property.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>       * @return This object.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>       */<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>         this.parser = value;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>         return this;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>      /**<a name="line.178"></a>
+<span class="sourceLineNo">179</span>       * Sets the {@link Path#schema} property on this annotation.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>       *<a name="line.180"></a>
+<span class="sourceLineNo">181</span>       * @param value The new value for this property.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>       * @return This object.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>       */<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      public Builder schema(Schema value) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>         this.schema = value;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>         return this;<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>      /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>       * Sets the {@link Path#serializer} property on this annotation.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>       *<a name="line.191"></a>
+<span class="sourceLineNo">192</span>       * @param value The new value for this property.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>       * @return This object.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>       */<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>         this.serializer = value;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>         return this;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>      /**<a name="line.200"></a>
+<span class="sourceLineNo">201</span>       * Sets the {@link Path#value} property on this annotation.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>       *<a name="line.202"></a>
+<span class="sourceLineNo">203</span>       * @param value The new value for this property.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>       * @return This object.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>       */<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      public Builder value(String value) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>         this.value = value;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      public Builder on(String...values) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>         super.on(values);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>         return 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>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>         super.on(value);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>         super.onClass(value);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      public Builder on(Field...value) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>         super.on(value);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>         return this;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      }<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      public Builder on(Method...value) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>         super.on(value);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>         return this;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      }<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>      // &lt;/FluentSetters&gt;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   // Implementation<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>   private static class Impl extends TargetedAnnotationTImpl implements Path {<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      private final String  name, value, def;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      private final Schema schema;<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>      Impl(Builder b) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>         super(b);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>         this.def = b.def;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>         this.name = b.name;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>         this.parser = b.parser;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>         this.schema = b.schema;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>         this.serializer = b.serializer;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>         this.value = b.value;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>         postConstruct();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      }<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>      @Override /* Path */<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      public String name() {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>         return name;<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>      @Override /* Path */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      public String def() {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>         return def;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>      @Override /* Path */<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>         return parser;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>      @Override /* Path */<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      public Schema schema() {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>         return schema;<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>      @Override<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      public void apply(AnnotationInfo&lt;Path&gt; ai, BeanContext.Builder b) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>         Path a = ai.inner();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            return;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>         b.annotations(a);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   // Other<a name="line.298"></a>
+<span class="sourceLineNo">288</span>      @Override /* Path */<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>         return serializer;<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>      @Override /* Path */<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      public String value() {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>         return value;<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><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>    * A collection of {@link Path @Path annotations}.<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    */<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   @Documented<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   @Target({METHOD,TYPE})<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   @Retention(RUNTIME)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   @Inherited<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   public static @interface Array {<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>       * The child annotations.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>       *<a name="line.312"></a>
-<span class="sourceLineNo">313</span>       * @return The annotation value.<a name="line.313"></a>
-<span class="sourceLineNo">314</span>       */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      Path[] value();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>}<a name="line.317"></a>
+<span class="sourceLineNo">300</span>   // Appliers<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>   /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    * Applies targeted {@link Path} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   public static class Applier extends AnnotationApplier&lt;Path,BeanContext.Builder&gt; {<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>      /**<a name="line.308"></a>
+<span class="sourceLineNo">309</span>       * Constructor.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>       *<a name="line.310"></a>
+<span class="sourceLineNo">311</span>       * @param vr The resolver for resolving values in annotations.<a name="line.311"></a>
+<span class="sourceLineNo">312</span>       */<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      public Applier(VarResolverSession vr) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>         super(Path.class, BeanContext.Builder.class, vr);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>      @Override<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      public void apply(AnnotationInfo&lt;Path&gt; ai, BeanContext.Builder b) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>         Path a = ai.inner();<a name="line.319"></a>
+<span class="sourceLineNo">320</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.320"></a>
+<span class="sourceLineNo">321</span>            return;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>         b.annotations(a);<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><a name="line.325"></a>
+<span class="sourceLineNo">326</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   // Other<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   //-----------------------------------------------------------------------------------------------------------------<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 collection of {@link Path @Path annotations}.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   @Documented<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   @Target({METHOD,TYPE})<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   @Retention(RUNTIME)<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   @Inherited<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   public static @interface Array {<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>       * The child annotations.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>       *<a name="line.341"></a>
+<span class="sourceLineNo">342</span>       * @return The annotation value.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>       */<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      Path[] value();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>}<a name="line.346"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/PathAnnotation.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/PathAnnotation.html
index 0e0bd78..2766ba1 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/PathAnnotation.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/PathAnnotation.html
@@ -104,225 +104,254 @@
 <span class="sourceLineNo">096</span>      return n;<a name="line.96"></a>
 <span class="sourceLineNo">097</span>   }<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">100</span>   // Builder<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>   /**<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    * Builder class.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    *<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    * &lt;ul class='seealso'&gt;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    * &lt;/ul&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    */<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      String name="", value="";<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>      /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>       * Constructor.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>       */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      protected Builder() {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>         super(Path.class);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      }<a name="line.122"></a>
+<span class="sourceLineNo">099</span>   /**<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    * Finds the default value from the specified list of annotations.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    *<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    * @param pi The parameter.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    * @return The last matching default value, or {@link Value#empty()} if not found.<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    */<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   public static Value&lt;String&gt; findDef(ParamInfo pi) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      Value&lt;String&gt; n = Value.empty();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      pi.forEachAnnotation(Path.class, x -&gt; isNotEmpty(x.def()), x -&gt; n.set(x.def()));<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      return n;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   // Builder<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   //-----------------------------------------------------------------------------------------------------------------<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>    * Builder class.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    *<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    * &lt;ul class='seealso'&gt;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    * &lt;/ul&gt;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    */<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.122"></a>
 <span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>      /**<a name="line.124"></a>
-<span class="sourceLineNo">125</span>       * Instantiates a new {@link Path @Path} object initialized with this builder.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>       *<a name="line.126"></a>
-<span class="sourceLineNo">127</span>       * @return A new {@link Path @Path} object.<a name="line.127"></a>
-<span class="sourceLineNo">128</span>       */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      public Path build() {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>         return new Impl(this);<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>      /**<a name="line.133"></a>
-<span class="sourceLineNo">134</span>       * Sets the {@link Path#name} property on this annotation.<a name="line.134"></a>
-<span class="sourceLineNo">135</span>       *<a name="line.135"></a>
-<span class="sourceLineNo">136</span>       * @param value The new value for this property.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>       * @return This object.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>       */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      public Builder name(String value) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>         this.name = value;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>         return this;<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>      /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>       * Sets the {@link Path#parser} property on this annotation.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>       *<a name="line.146"></a>
-<span class="sourceLineNo">147</span>       * @param value The new value for this property.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>       * @return This object.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>       */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>         this.parser = value;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>         return this;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>      /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>       * Sets the {@link Path#schema} property on this annotation.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>       *<a name="line.157"></a>
-<span class="sourceLineNo">158</span>       * @param value The new value for this property.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>       * @return This object.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>       */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      public Builder schema(Schema value) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>         this.schema = value;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>         return this;<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>      /**<a name="line.166"></a>
-<span class="sourceLineNo">167</span>       * Sets the {@link Path#serializer} property on this annotation.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>       *<a name="line.168"></a>
-<span class="sourceLineNo">169</span>       * @param value The new value for this property.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>       * @return This object.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>       */<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>         this.serializer = value;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>         return this;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>      /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>       * Sets the {@link Path#value} property on this annotation.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>       *<a name="line.179"></a>
-<span class="sourceLineNo">180</span>       * @param value The new value for this property.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>       * @return This object.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>       */<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      public Builder value(String value) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>         this.value = value;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      public Builder on(String...values) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>         super.on(values);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>         return this;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>         super.on(value);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>         return this;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>         super.onClass(value);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>         return this;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      public Builder on(Field...value) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>         super.on(value);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>         return this;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      public Builder on(Method...value) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>         super.on(value);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>         return this;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // &lt;/FluentSetters&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   }<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>   // Implementation<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>   private static class Impl extends TargetedAnnotationTImpl implements Path {<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      private final String  name, value;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      private final Schema schema;<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>      Impl(Builder b) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>         super(b);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>         this.name = b.name;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>         this.parser = b.parser;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>         this.schema = b.schema;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>         this.serializer = b.serializer;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>         this.value = b.value;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>         postConstruct();<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>      @Override /* Path */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      public String name() {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>         return name;<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>      @Override /* Path */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>         return parser;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>      @Override /* Path */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      public Schema schema() {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>         return schema;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>      @Override /* Path */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>         return serializer;<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>      @Override /* Path */<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      public String value() {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>         return value;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      }<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   // Appliers<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>   /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    * Applies targeted {@link Path} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   public static class Applier extends AnnotationApplier&lt;Path,BeanContext.Builder&gt; {<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>       * Constructor.<a name="line.280"></a>
-<span class="sourceLineNo">281</span>       *<a name="line.281"></a>
-<span class="sourceLineNo">282</span>       * @param vr The resolver for resolving values in annotations.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>       */<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      public Applier(VarResolverSession vr) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>         super(Path.class, BeanContext.Builder.class, vr);<a name="line.285"></a>
+<span class="sourceLineNo">124</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      String name="", value="", def="";<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>      /**<a name="line.129"></a>
+<span class="sourceLineNo">130</span>       * Constructor.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>       */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      protected Builder() {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>         super(Path.class);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      }<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>       * Instantiates a new {@link Path @Path} object initialized with this builder.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>       *<a name="line.138"></a>
+<span class="sourceLineNo">139</span>       * @return A new {@link Path @Path} object.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>       */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      public Path build() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>         return new Impl(this);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>      /**<a name="line.145"></a>
+<span class="sourceLineNo">146</span>       * Sets the {@link Path#name} property on this annotation.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>       *<a name="line.147"></a>
+<span class="sourceLineNo">148</span>       * @param value The new value for this property.<a name="line.148"></a>
+<span class="sourceLineNo">149</span>       * @return This object.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>       */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      public Builder name(String value) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>         this.name = value;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>         return this;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>      /**<a name="line.156"></a>
+<span class="sourceLineNo">157</span>       * Sets the {@link Path#name} property on this annotation.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>       *<a name="line.158"></a>
+<span class="sourceLineNo">159</span>       * @param value The new value for this property.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>       * @return This object.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>       */<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      public Builder def(String value) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>         this.def = value;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>         return this;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>      /**<a name="line.167"></a>
+<span class="sourceLineNo">168</span>       * Sets the {@link Path#parser} property on this annotation.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>       *<a name="line.169"></a>
+<span class="sourceLineNo">170</span>       * @param value The new value for this property.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>       * @return This object.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>       */<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>         this.parser = value;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>         return this;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>      /**<a name="line.178"></a>
+<span class="sourceLineNo">179</span>       * Sets the {@link Path#schema} property on this annotation.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>       *<a name="line.180"></a>
+<span class="sourceLineNo">181</span>       * @param value The new value for this property.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>       * @return This object.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>       */<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      public Builder schema(Schema value) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>         this.schema = value;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>         return this;<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>      /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>       * Sets the {@link Path#serializer} property on this annotation.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>       *<a name="line.191"></a>
+<span class="sourceLineNo">192</span>       * @param value The new value for this property.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>       * @return This object.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>       */<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>         this.serializer = value;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>         return this;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>      /**<a name="line.200"></a>
+<span class="sourceLineNo">201</span>       * Sets the {@link Path#value} property on this annotation.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>       *<a name="line.202"></a>
+<span class="sourceLineNo">203</span>       * @param value The new value for this property.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>       * @return This object.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>       */<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      public Builder value(String value) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>         this.value = value;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      public Builder on(String...values) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>         super.on(values);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>         return 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>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>         super.on(value);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>         super.onClass(value);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      public Builder on(Field...value) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>         super.on(value);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>         return this;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      }<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      public Builder on(Method...value) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>         super.on(value);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>         return this;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      }<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>      // &lt;/FluentSetters&gt;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   // Implementation<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>   private static class Impl extends TargetedAnnotationTImpl implements Path {<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      private final String  name, value, def;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      private final Schema schema;<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>      Impl(Builder b) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>         super(b);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>         this.def = b.def;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>         this.name = b.name;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>         this.parser = b.parser;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>         this.schema = b.schema;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>         this.serializer = b.serializer;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>         this.value = b.value;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>         postConstruct();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      }<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>      @Override /* Path */<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      public String name() {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>         return name;<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>      @Override /* Path */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      public String def() {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>         return def;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>      @Override /* Path */<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>         return parser;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>      @Override /* Path */<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      public Schema schema() {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>         return schema;<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>      @Override<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      public void apply(AnnotationInfo&lt;Path&gt; ai, BeanContext.Builder b) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>         Path a = ai.inner();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            return;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>         b.annotations(a);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   // Other<a name="line.298"></a>
+<span class="sourceLineNo">288</span>      @Override /* Path */<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>         return serializer;<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>      @Override /* Path */<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      public String value() {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>         return value;<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><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>    * A collection of {@link Path @Path annotations}.<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    */<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   @Documented<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   @Target({METHOD,TYPE})<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   @Retention(RUNTIME)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   @Inherited<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   public static @interface Array {<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>       * The child annotations.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>       *<a name="line.312"></a>
-<span class="sourceLineNo">313</span>       * @return The annotation value.<a name="line.313"></a>
-<span class="sourceLineNo">314</span>       */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      Path[] value();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>}<a name="line.317"></a>
+<span class="sourceLineNo">300</span>   // Appliers<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>   /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    * Applies targeted {@link Path} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   public static class Applier extends AnnotationApplier&lt;Path,BeanContext.Builder&gt; {<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>      /**<a name="line.308"></a>
+<span class="sourceLineNo">309</span>       * Constructor.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>       *<a name="line.310"></a>
+<span class="sourceLineNo">311</span>       * @param vr The resolver for resolving values in annotations.<a name="line.311"></a>
+<span class="sourceLineNo">312</span>       */<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      public Applier(VarResolverSession vr) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>         super(Path.class, BeanContext.Builder.class, vr);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>      @Override<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      public void apply(AnnotationInfo&lt;Path&gt; ai, BeanContext.Builder b) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>         Path a = ai.inner();<a name="line.319"></a>
+<span class="sourceLineNo">320</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.320"></a>
+<span class="sourceLineNo">321</span>            return;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>         b.annotations(a);<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><a name="line.325"></a>
+<span class="sourceLineNo">326</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   // Other<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   //-----------------------------------------------------------------------------------------------------------------<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 collection of {@link Path @Path annotations}.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   @Documented<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   @Target({METHOD,TYPE})<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   @Retention(RUNTIME)<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   @Inherited<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   public static @interface Array {<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>       * The child annotations.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>       *<a name="line.341"></a>
+<span class="sourceLineNo">342</span>       * @return The annotation value.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>       */<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      Path[] value();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>}<a name="line.346"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/Query.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/Query.html
index afe16ac..135f3c4 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/Query.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/Query.html
@@ -105,158 +105,165 @@
 <span class="sourceLineNo">097</span>public @interface Query {<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">100</span>    * URL query parameter name.<a name="line.100"></a>
+<span class="sourceLineNo">100</span>    * Default value for this parameter.<a name="line.100"></a>
 <span class="sourceLineNo">101</span>    *<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    * Required. The name of the parameter. Parameter names are case sensitive.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    *<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    * &lt;p&gt;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    * The value should be either a valid query parameter name, or &lt;js&gt;"*"&lt;/js&gt; to represent multiple name/value pairs<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    *<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    * &lt;p&gt;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    * A blank value (the default) has the following behavior:<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    * &lt;ul class='spaced-list'&gt;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    *    &lt;li&gt;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    *       If the data type is &lt;c&gt;NameValuePairs&lt;/c&gt;, &lt;c&gt;Map&lt;/c&gt;, or a bean,<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    *       then it's the equivalent to &lt;js&gt;"*"&lt;/js&gt; which will cause the value to be serialized as name/value pairs.<a name="line.112"></a>
+<span class="sourceLineNo">102</span>    * @return The annotation value.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    */<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   String def() default "";<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>   /**<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    * URL query parameter name.<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    *<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    * Required. The name of the parameter. Parameter names are case sensitive.<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    *<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    * &lt;p&gt;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    * The value should be either a valid query parameter name, or &lt;js&gt;"*"&lt;/js&gt; to represent multiple name/value pairs<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    *<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    *       &lt;h5 class='figure'&gt;Examples:&lt;/h5&gt;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    *       &lt;p class='bjava'&gt;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    *    &lt;jc&gt;// When used on a REST method&lt;/jc&gt;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    *    &lt;ja&gt;@RestPost&lt;/ja&gt;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    *    &lt;jk&gt;public void&lt;/jk&gt; addPet(&lt;ja&gt;@Query&lt;/ja&gt; JsonMap &lt;jv&gt;allQueryParameters&lt;/jv&gt;) {...}<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    *       &lt;/p&gt;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    *       &lt;p class='bjava'&gt;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    *    &lt;jc&gt;// When used on a remote method parameter&lt;/jc&gt;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    *    &lt;ja&gt;@RemoteResource&lt;/ja&gt;(path=&lt;js&gt;"/myproxy"&lt;/js&gt;)<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyProxy {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    *<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    *       &lt;jc&gt;// Equivalent to @Query("*")&lt;/jc&gt;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    *       &lt;ja&gt;@RemoteGet&lt;/ja&gt;(&lt;js&gt;"/mymethod"&lt;/js&gt;)<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    *       String myProxyMethod1(&lt;ja&gt;@Query&lt;/ja&gt; Map&amp;lt;String,Object&amp;gt; &lt;jv&gt;allQueryParameters&lt;/jv&gt;);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    *    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    *       &lt;/p&gt;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    *       &lt;p class='bjava'&gt;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    *    &lt;jc&gt;// When used on a request bean method&lt;/jc&gt;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyRequest {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    *<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    *       &lt;jc&gt;// Equivalent to @Query("*")&lt;/jc&gt;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    *       &lt;ja&gt;@Query&lt;/ja&gt;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    *       Map&amp;lt;String,Object&amp;gt; getFoo();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    *    }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    *       &lt;/p&gt;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    *    &lt;/li&gt;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    *    &lt;li&gt;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    *       If used on a request bean method, uses the bean property name.<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    *<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    *       &lt;h5 class='figure'&gt;Example:&lt;/h5&gt;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    *       &lt;p class='bjava'&gt;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyRequest {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    *<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    *       &lt;jc&gt;// Equivalent to @Query("foo")&lt;/jc&gt;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    *       &lt;ja&gt;@Query&lt;/ja&gt;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    *       String getFoo();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    *    }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    *       &lt;/p&gt;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    *    &lt;/li&gt;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    * &lt;/ul&gt;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    * &lt;ul class='notes'&gt;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    *    &lt;li class='note'&gt;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    *       The format is plain-text.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    * &lt;/ul&gt;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    *<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    * @return The annotation value.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   String name() default "";<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>    * Dynamically apply this annotation to the specified classes.<a name="line.164"></a>
+<span class="sourceLineNo">114</span>    * &lt;p&gt;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    * A blank value (the default) has the following behavior:<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    * &lt;ul class='spaced-list'&gt;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    *    &lt;li&gt;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    *       If the data type is &lt;c&gt;NameValuePairs&lt;/c&gt;, &lt;c&gt;Map&lt;/c&gt;, or a bean,<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    *       then it's the equivalent to &lt;js&gt;"*"&lt;/js&gt; which will cause the value to be serialized as name/value pairs.<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    *<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    *       &lt;h5 class='figure'&gt;Examples:&lt;/h5&gt;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    *       &lt;p class='bjava'&gt;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    *    &lt;jc&gt;// When used on a REST method&lt;/jc&gt;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    *    &lt;ja&gt;@RestPost&lt;/ja&gt;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    *    &lt;jk&gt;public void&lt;/jk&gt; addPet(&lt;ja&gt;@Query&lt;/ja&gt; JsonMap &lt;jv&gt;allQueryParameters&lt;/jv&gt;) {...}<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    *       &lt;/p&gt;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    *       &lt;p class='bjava'&gt;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    *    &lt;jc&gt;// When used on a remote method parameter&lt;/jc&gt;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    *    &lt;ja&gt;@RemoteResource&lt;/ja&gt;(path=&lt;js&gt;"/myproxy"&lt;/js&gt;)<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyProxy {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    *<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    *       &lt;jc&gt;// Equivalent to @Query("*")&lt;/jc&gt;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    *       &lt;ja&gt;@RemoteGet&lt;/ja&gt;(&lt;js&gt;"/mymethod"&lt;/js&gt;)<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    *       String myProxyMethod1(&lt;ja&gt;@Query&lt;/ja&gt; Map&amp;lt;String,Object&amp;gt; &lt;jv&gt;allQueryParameters&lt;/jv&gt;);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    *    }<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    *       &lt;/p&gt;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    *       &lt;p class='bjava'&gt;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    *    &lt;jc&gt;// When used on a request bean method&lt;/jc&gt;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyRequest {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    *<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    *       &lt;jc&gt;// Equivalent to @Query("*")&lt;/jc&gt;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    *       &lt;ja&gt;@Query&lt;/ja&gt;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    *       Map&amp;lt;String,Object&amp;gt; getFoo();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    *    }<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    *       &lt;/p&gt;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    *    &lt;/li&gt;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    *    &lt;li&gt;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    *       If used on a request bean method, uses the bean property name.<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    *<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    *       &lt;h5 class='figure'&gt;Example:&lt;/h5&gt;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    *       &lt;p class='bjava'&gt;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    *    &lt;jk&gt;public interface&lt;/jk&gt; MyRequest {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    *<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    *       &lt;jc&gt;// Equivalent to @Query("foo")&lt;/jc&gt;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    *       &lt;ja&gt;@Query&lt;/ja&gt;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    *       String getFoo();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    *    }<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    *       &lt;/p&gt;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    *    &lt;/li&gt;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    * &lt;/ul&gt;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    * &lt;ul class='notes'&gt;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    *    &lt;li class='note'&gt;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    *       The format is plain-text.<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    * &lt;/ul&gt;<a name="line.164"></a>
 <span class="sourceLineNo">165</span>    *<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    * &lt;ul class='seealso'&gt;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    *    &lt;li class='link'&gt;{@doc jm.DynamicallyAppliedAnnotations}<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    * &lt;/ul&gt;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    *<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    * @return The annotation value.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    */<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   String[] on() default {};<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>   /**<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    * Dynamically apply this annotation to the specified classes.<a name="line.175"></a>
+<span class="sourceLineNo">166</span>    * @return The annotation value.<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    */<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   String name() default "";<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>   /**<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    * Dynamically apply this annotation to the specified classes.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    *<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    * &lt;ul class='seealso'&gt;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    *    &lt;li class='link'&gt;{@doc jm.DynamicallyAppliedAnnotations}<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    * &lt;/ul&gt;<a name="line.175"></a>
 <span class="sourceLineNo">176</span>    *<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    * &lt;p&gt;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    * Identical to {@link #on()} except allows you to specify class objects instead of a strings.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    *<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    * &lt;ul class='seealso'&gt;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    *    &lt;li class='link'&gt;{@doc jm.DynamicallyAppliedAnnotations}<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    * &lt;/ul&gt;<a name="line.182"></a>
+<span class="sourceLineNo">177</span>    * @return The annotation value.<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    */<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   String[] on() default {};<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>    * Dynamically apply this annotation to the specified classes.<a name="line.182"></a>
 <span class="sourceLineNo">183</span>    *<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    * @return The annotation value.<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    */<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   Class&lt;?&gt;[] onClass() default {};<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>    * Specifies the {@link HttpPartParser} class used for parsing strings to values.<a name="line.189"></a>
+<span class="sourceLineNo">184</span>    * &lt;p&gt;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    * Identical to {@link #on()} except allows you to specify class objects instead of a strings.<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    *<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    * &lt;ul class='seealso'&gt;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    *    &lt;li class='link'&gt;{@doc jm.DynamicallyAppliedAnnotations}<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    * &lt;/ul&gt;<a name="line.189"></a>
 <span class="sourceLineNo">190</span>    *<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    * &lt;p&gt;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    * Overrides for this part the part parser defined on the REST resource which by default is {@link OpenApiParser}.<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    *<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    * @return The annotation value.<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    */<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   Class&lt;? extends HttpPartParser&gt; parser() default HttpPartParser.Void.class;<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>   /**<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    * &lt;mk&gt;schema&lt;/mk&gt; field of the {@doc ext.SwaggerParameterObject}.<a name="line.199"></a>
+<span class="sourceLineNo">191</span>    * @return The annotation value.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   Class&lt;?&gt;[] onClass() default {};<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>   /**<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    * Specifies the {@link HttpPartParser} class used for parsing strings to values.<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    *<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    * &lt;p&gt;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    * Overrides for this part the part parser defined on the REST resource which by default is {@link OpenApiParser}.<a name="line.199"></a>
 <span class="sourceLineNo">200</span>    *<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    * &lt;p&gt;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    * The {@link Schema @Schema} annotation can also be used standalone on the parameter or type.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    * Values specified on this field override values specified on the type, and values specified on child types override values<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    * specified on parent types.<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    *<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    * &lt;p&gt;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    * The schema defining the type used for parameter.<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    *<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    * &lt;h5 class='section'&gt;Used for:&lt;/h5&gt;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    * &lt;ul class='spaced-list'&gt;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    *    &lt;li&gt;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    *       Server-side schema-based parsing and parsing validation.<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    *    &lt;li&gt;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    *       Server-side generated Swagger documentation.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    *    &lt;li&gt;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    *       Client-side schema-based serializing and serializing validation.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    * &lt;/ul&gt;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    *<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    * @return The annotation value.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    */<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   Schema schema() default @Schema;<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>    * Specifies the {@link HttpPartSerializer} class used for serializing values to strings.<a name="line.224"></a>
+<span class="sourceLineNo">201</span>    * @return The annotation value.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    */<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   Class&lt;? extends HttpPartParser&gt; parser() default HttpPartParser.Void.class;<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>   /**<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    * &lt;mk&gt;schema&lt;/mk&gt; field of the {@doc ext.SwaggerParameterObject}.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    *<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    * &lt;p&gt;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    * The {@link Schema @Schema} annotation can also be used standalone on the parameter or type.<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    * Values specified on this field override values specified on the type, and values specified on child types override values<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    * specified on parent types.<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    *<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    * &lt;p&gt;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    * The schema defining the type used for parameter.<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    *<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    * &lt;h5 class='section'&gt;Used for:&lt;/h5&gt;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    * &lt;ul class='spaced-list'&gt;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    *    &lt;li&gt;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    *       Server-side schema-based parsing and parsing validation.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    *    &lt;li&gt;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    *       Server-side generated Swagger documentation.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    *    &lt;li&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    *       Client-side schema-based serializing and serializing validation.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    * &lt;/ul&gt;<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    *<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    * &lt;p&gt;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    * Overrides for this part the part serializer defined on the REST client which by default is {@link OpenApiSerializer}.<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    *<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    * @return The annotation value.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   Class&lt;? extends HttpPartSerializer&gt; serializer() default HttpPartSerializer.Void.class;<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>    * A synonym for {@link #name()}.<a name="line.234"></a>
+<span class="sourceLineNo">226</span>    * @return The annotation value.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    */<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   Schema schema() default @Schema;<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>    * Specifies the {@link HttpPartSerializer} class used for serializing values to strings.<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    *<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    * &lt;p&gt;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    * Overrides for this part the part serializer defined on the REST client which by default is {@link OpenApiSerializer}.<a name="line.234"></a>
 <span class="sourceLineNo">235</span>    *<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    * &lt;p&gt;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    * Allows you to use shortened notation if you're only specifying the name.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    *<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    * &lt;p&gt;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    * The following are completely equivalent ways of defining the existence of a query entry:<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    * &lt;p class='bjava'&gt;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    *    &lt;jk&gt;public&lt;/jk&gt; Order placeOrder(&lt;ja&gt;@Query&lt;/ja&gt;(name=&lt;js&gt;"petId"&lt;/js&gt;) &lt;jk&gt;long&lt;/jk&gt; &lt;jv&gt;petId&lt;/jv&gt;) {...}<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    * &lt;/p&gt;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    * &lt;p class='bjava'&gt;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    *    &lt;jk&gt;public&lt;/jk&gt; Order placeOrder(&lt;ja&gt;@Query&lt;/ja&gt;(&lt;js&gt;"petId"&lt;/js&gt;) &lt;jk&gt;long&lt;/jk&gt; &lt;jv&gt;petId&lt;/jv&gt;) {...}<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    * &lt;/p&gt;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    *<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    * @return The annotation value.<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   String value() default "";<a name="line.250"></a>
-<span class="sourceLineNo">251</span>}<a name="line.251"></a>
+<span class="sourceLineNo">236</span>    * @return The annotation value.<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   Class&lt;? extends HttpPartSerializer&gt; serializer() default HttpPartSerializer.Void.class;<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>   /**<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    * A synonym for {@link #name()}.<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    *<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    * &lt;p&gt;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    * Allows you to use shortened notation if you're only specifying the name.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    *<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    * &lt;p&gt;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    * The following are completely equivalent ways of defining the existence of a query entry:<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    * &lt;p class='bjava'&gt;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    *    &lt;jk&gt;public&lt;/jk&gt; Order placeOrder(&lt;ja&gt;@Query&lt;/ja&gt;(name=&lt;js&gt;"petId"&lt;/js&gt;) &lt;jk&gt;long&lt;/jk&gt; &lt;jv&gt;petId&lt;/jv&gt;) {...}<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    * &lt;/p&gt;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    * &lt;p class='bjava'&gt;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    *    &lt;jk&gt;public&lt;/jk&gt; Order placeOrder(&lt;ja&gt;@Query&lt;/ja&gt;(&lt;js&gt;"petId"&lt;/js&gt;) &lt;jk&gt;long&lt;/jk&gt; &lt;jv&gt;petId&lt;/jv&gt;) {...}<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    * &lt;/p&gt;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    *<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    * @return The annotation value.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    */<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   String value() default "";<a name="line.257"></a>
+<span class="sourceLineNo">258</span>}<a name="line.258"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/QueryAnnotation.Applier.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/QueryAnnotation.Applier.html
index 227df51..7efc14c 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/QueryAnnotation.Applier.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/QueryAnnotation.Applier.html
@@ -89,240 +89,266 @@
 <span class="sourceLineNo">081</span>   }<a name="line.81"></a>
 <span class="sourceLineNo">082</span><a name="line.82"></a>
 <span class="sourceLineNo">083</span>   /**<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    * Finds the name from the specified lists of annotations.<a name="line.84"></a>
+<span class="sourceLineNo">084</span>    * Finds the name from the specified list of annotations.<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    *<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    * &lt;p&gt;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    * The last matching name found is returned.<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    *<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    * @param pi The parameter.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    * @return The last matching name, or {@link Value#empty()} if not found.<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    */<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   public static Value&lt;String&gt; findName(ParamInfo pi) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      Value&lt;String&gt; n = Value.empty();<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      pi.forEachAnnotation(Query.class, x -&gt; isNotEmpty(x.value()), x -&gt; n.set(x.value()));<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      pi.forEachAnnotation(Query.class, x -&gt; isNotEmpty(x.name()), x -&gt; n.set(x.name()));<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      return n;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   }<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">100</span>   // Builder<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>   /**<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    * Builder class.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    *<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    * &lt;ul class='seealso'&gt;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    * &lt;/ul&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    */<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.110"></a>
+<span class="sourceLineNo">086</span>    * @param pi The parameter.<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    * @return The last matching name, or {@link Value#empty()} if not found.<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    */<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   public static Value&lt;String&gt; findName(ParamInfo pi) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      Value&lt;String&gt; n = Value.empty();<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      pi.forEachAnnotation(Query.class, x -&gt; isNotEmpty(x.value()), x -&gt; n.set(x.value()));<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      pi.forEachAnnotation(Query.class, x -&gt; isNotEmpty(x.name()), x -&gt; n.set(x.name()));<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      return n;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   }<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>    * Finds the default value from the specified list of annotations.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    *<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    * @param pi The parameter.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    * @return The last matching default value, or {@link Value#empty()} if not found.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    */<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   public static Value&lt;String&gt; findDef(ParamInfo pi) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      Value&lt;String&gt; n = Value.empty();<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      pi.forEachAnnotation(Query.class, x -&gt; isNotEmpty(x.def()), x -&gt; n.set(x.def()));<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      return n;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   // Builder<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.110"></a>
 <span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      String name="", value="";<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>      /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>       * Constructor.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>       */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      protected Builder() {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>         super(Query.class);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      }<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>      /**<a name="line.124"></a>
-<span class="sourceLineNo">125</span>       * Instantiates a new {@link Query @Query} object initialized with this builder.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>       *<a name="line.126"></a>
-<span class="sourceLineNo">127</span>       * @return A new {@link Query @Query} object.<a name="line.127"></a>
+<span class="sourceLineNo">112</span>   /**<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    * Builder class.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    *<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    * &lt;ul class='seealso'&gt;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    * &lt;/ul&gt;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    */<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      String name="", value="", def="";<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>       * Constructor.<a name="line.127"></a>
 <span class="sourceLineNo">128</span>       */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      public Query build() {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>         return new Impl(this);<a name="line.130"></a>
+<span class="sourceLineNo">129</span>      protected Builder() {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>         super(Query.class);<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>      /**<a name="line.133"></a>
-<span class="sourceLineNo">134</span>       * Sets the {@link Query#name} property on this annotation.<a name="line.134"></a>
+<span class="sourceLineNo">134</span>       * Instantiates a new {@link Query @Query} object initialized with this builder.<a name="line.134"></a>
 <span class="sourceLineNo">135</span>       *<a name="line.135"></a>
-<span class="sourceLineNo">136</span>       * @param value The new value for this property.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>       * @return This object.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>       */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      public Builder name(String value) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>         this.name = value;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>         return this;<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>      /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>       * Sets the {@link Query#parser} property on this annotation.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>       *<a name="line.146"></a>
-<span class="sourceLineNo">147</span>       * @param value The new value for this property.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>       * @return This object.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>       */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>         this.parser = value;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>         return this;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>      /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>       * Sets the {@link Query#schema} property on this annotation.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>       *<a name="line.157"></a>
-<span class="sourceLineNo">158</span>       * @param value The new value for this property.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>       * @return This object.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>       */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      public Builder schema(Schema value) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>         this.schema = value;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>         return this;<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>      /**<a name="line.166"></a>
-<span class="sourceLineNo">167</span>       * Sets the {@link Query#serializer} property on this annotation.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>       *<a name="line.168"></a>
-<span class="sourceLineNo">169</span>       * @param value The new value for this property.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>       * @return This object.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>       */<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>         this.serializer = value;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>         return this;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>      /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>       * Sets the {@link Query#value} property on this annotation.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>       *<a name="line.179"></a>
-<span class="sourceLineNo">180</span>       * @param value The new value for this property.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>       * @return This object.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>       */<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      public Builder value(String value) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>         this.value = value;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      public Builder on(String...values) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>         super.on(values);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>         return this;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>         super.on(value);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>         return this;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>         super.onClass(value);<a name="line.204"></a>
+<span class="sourceLineNo">136</span>       * @return A new {@link Query @Query} object.<a name="line.136"></a>
+<span class="sourceLineNo">137</span>       */<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      public Query build() {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>         return new Impl(this);<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      }<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>       * Sets the {@link Query#def} property on this annotation.<a name="line.143"></a>
+<span class="sourceLineNo">144</span>       *<a name="line.144"></a>
+<span class="sourceLineNo">145</span>       * @param value The new value for this property.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>       * @return This object.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>       */<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      public Builder def(String value) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>         this.def = value;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>         return this;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      }<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>      /**<a name="line.153"></a>
+<span class="sourceLineNo">154</span>       * Sets the {@link Query#name} property on this annotation.<a name="line.154"></a>
+<span class="sourceLineNo">155</span>       *<a name="line.155"></a>
+<span class="sourceLineNo">156</span>       * @param value The new value for this property.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>       * @return This object.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>       */<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      public Builder name(String value) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>         this.name = value;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>         return this;<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>      /**<a name="line.164"></a>
+<span class="sourceLineNo">165</span>       * Sets the {@link Query#parser} property on this annotation.<a name="line.165"></a>
+<span class="sourceLineNo">166</span>       *<a name="line.166"></a>
+<span class="sourceLineNo">167</span>       * @param value The new value for this property.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>       * @return This object.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>       */<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>         this.parser = value;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>         return this;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>      /**<a name="line.175"></a>
+<span class="sourceLineNo">176</span>       * Sets the {@link Query#schema} property on this annotation.<a name="line.176"></a>
+<span class="sourceLineNo">177</span>       *<a name="line.177"></a>
+<span class="sourceLineNo">178</span>       * @param value The new value for this property.<a name="line.178"></a>
+<span class="sourceLineNo">179</span>       * @return This object.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>       */<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      public Builder schema(Schema value) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>         this.schema = value;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>         return this;<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>      /**<a name="line.186"></a>
+<span class="sourceLineNo">187</span>       * Sets the {@link Query#serializer} property on this annotation.<a name="line.187"></a>
+<span class="sourceLineNo">188</span>       *<a name="line.188"></a>
+<span class="sourceLineNo">189</span>       * @param value The new value for this property.<a name="line.189"></a>
+<span class="sourceLineNo">190</span>       * @return This object.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>       */<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>         this.serializer = value;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>         return this;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>      /**<a name="line.197"></a>
+<span class="sourceLineNo">198</span>       * Sets the {@link Query#value} property on this annotation.<a name="line.198"></a>
+<span class="sourceLineNo">199</span>       *<a name="line.199"></a>
+<span class="sourceLineNo">200</span>       * @param value The new value for this property.<a name="line.200"></a>
+<span class="sourceLineNo">201</span>       * @return This object.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>       */<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      public Builder value(String value) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>         this.value = value;<a name="line.204"></a>
 <span class="sourceLineNo">205</span>         return this;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>      }<a name="line.206"></a>
 <span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      public Builder on(Field...value) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>         super.on(value);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>         return this;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      public Builder on(Method...value) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>         super.on(value);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>         return this;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // &lt;/FluentSetters&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   }<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>   // Implementation<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>   private static class Impl extends TargetedAnnotationTImpl implements Query {<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      private final String name, value;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      private final Schema schema;<a name="line.232"></a>
+<span class="sourceLineNo">208</span>      // &lt;FluentSetters&gt;<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      public Builder on(String...values) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>         super.on(values);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>         return this;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      }<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>         super.on(value);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>         return this;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>         super.onClass(value);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      public Builder on(Field...value) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>         super.on(value);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>         return this;<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>      Impl(Builder b) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>         super(b);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>         this.name = b.name;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>         this.parser = b.parser;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>         this.schema = b.schema;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>         this.serializer = b.serializer;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>         this.value = b.value;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>         postConstruct();<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>      @Override /* Query */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      public String name() {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>         return name;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      }<a name="line.247"></a>
+<span class="sourceLineNo">234</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      public Builder on(Method...value) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>         super.on(value);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>         return this;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>      // &lt;/FluentSetters&gt;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   }<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>   // Implementation<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>   private static class Impl extends TargetedAnnotationTImpl implements Query {<a name="line.247"></a>
 <span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>      @Override /* Query */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>         return parser;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
+<span class="sourceLineNo">249</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      private final String name, value, def;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      private final Schema schema;<a name="line.252"></a>
 <span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>      @Override /* Query */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      public Schema schema() {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>         return schema;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>      @Override /* Query */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>         return serializer;<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>      @Override /* Query */<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      public String value() {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>         return value;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      }<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   }<a name="line.268"></a>
+<span class="sourceLineNo">254</span>      Impl(Builder b) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>         super(b);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>         this.name = b.name;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>         this.parser = b.parser;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>         this.schema = b.schema;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>         this.serializer = b.serializer;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>         this.value = b.value;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>         this.def = b.def;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>         postConstruct();<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>      @Override /* Query */<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      public String name() {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>         return name;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   // Appliers<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>   /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    * Applies targeted {@link Query} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   public static class Applier extends AnnotationApplier&lt;Query,BeanContext.Builder&gt; {<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>       * Constructor.<a name="line.280"></a>
-<span class="sourceLineNo">281</span>       *<a name="line.281"></a>
-<span class="sourceLineNo">282</span>       * @param vr The resolver for resolving values in annotations.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>       */<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      public Applier(VarResolverSession vr) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>         super(Query.class, BeanContext.Builder.class, vr);<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>      @Override<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      public void apply(AnnotationInfo&lt;Query&gt; ai, BeanContext.Builder b) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>         Query a = ai.inner();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            return;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>         b.annotations(a);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   // Other<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>    * A collection of {@link Query @Query annotations}.<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    */<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   @Documented<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   @Target({METHOD,TYPE})<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   @Retention(RUNTIME)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   @Inherited<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   public static @interface Array {<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>       * The child annotations.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>       *<a name="line.312"></a>
-<span class="sourceLineNo">313</span>       * @return The annotation value.<a name="line.313"></a>
-<span class="sourceLineNo">314</span>       */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      Query[] value();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>}<a name="line.317"></a>
+<span class="sourceLineNo">270</span>      @Override /* Query */<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>         return parser;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>      @Override /* Query */<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      public Schema schema() {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>         return schema;<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>      @Override /* Query */<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>         return serializer;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>      @Override /* Query */<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      public String value() {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>         return value;<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>      @Override /* Query */<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      public String def() {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>         return def;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      }<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>   // Appliers<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>   /**<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    * Applies targeted {@link Query} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    */<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   public static class Applier extends AnnotationApplier&lt;Query,BeanContext.Builder&gt; {<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      /**<a name="line.305"></a>
+<span class="sourceLineNo">306</span>       * Constructor.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>       *<a name="line.307"></a>
+<span class="sourceLineNo">308</span>       * @param vr The resolver for resolving values in annotations.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>       */<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      public Applier(VarResolverSession vr) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>         super(Query.class, BeanContext.Builder.class, vr);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      }<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>      @Override<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      public void apply(AnnotationInfo&lt;Query&gt; ai, BeanContext.Builder b) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>         Query a = ai.inner();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            return;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>         b.annotations(a);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   // Other<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>   /**<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    * A collection of {@link Query @Query annotations}.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    */<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   @Documented<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   @Target({METHOD,TYPE})<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   @Retention(RUNTIME)<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   @Inherited<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   public static @interface Array {<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>      /**<a name="line.336"></a>
+<span class="sourceLineNo">337</span>       * The child annotations.<a name="line.337"></a>
+<span class="sourceLineNo">338</span>       *<a name="line.338"></a>
+<span class="sourceLineNo">339</span>       * @return The annotation value.<a name="line.339"></a>
+<span class="sourceLineNo">340</span>       */<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      Query[] value();<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>}<a name="line.343"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/QueryAnnotation.Array.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/QueryAnnotation.Array.html
index 227df51..7efc14c 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/QueryAnnotation.Array.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/QueryAnnotation.Array.html
@@ -89,240 +89,266 @@
 <span class="sourceLineNo">081</span>   }<a name="line.81"></a>
 <span class="sourceLineNo">082</span><a name="line.82"></a>
 <span class="sourceLineNo">083</span>   /**<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    * Finds the name from the specified lists of annotations.<a name="line.84"></a>
+<span class="sourceLineNo">084</span>    * Finds the name from the specified list of annotations.<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    *<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    * &lt;p&gt;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    * The last matching name found is returned.<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    *<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    * @param pi The parameter.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    * @return The last matching name, or {@link Value#empty()} if not found.<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    */<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   public static Value&lt;String&gt; findName(ParamInfo pi) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      Value&lt;String&gt; n = Value.empty();<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      pi.forEachAnnotation(Query.class, x -&gt; isNotEmpty(x.value()), x -&gt; n.set(x.value()));<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      pi.forEachAnnotation(Query.class, x -&gt; isNotEmpty(x.name()), x -&gt; n.set(x.name()));<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      return n;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   }<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">100</span>   // Builder<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>   /**<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    * Builder class.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    *<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    * &lt;ul class='seealso'&gt;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    * &lt;/ul&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    */<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.110"></a>
+<span class="sourceLineNo">086</span>    * @param pi The parameter.<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    * @return The last matching name, or {@link Value#empty()} if not found.<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    */<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   public static Value&lt;String&gt; findName(ParamInfo pi) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      Value&lt;String&gt; n = Value.empty();<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      pi.forEachAnnotation(Query.class, x -&gt; isNotEmpty(x.value()), x -&gt; n.set(x.value()));<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      pi.forEachAnnotation(Query.class, x -&gt; isNotEmpty(x.name()), x -&gt; n.set(x.name()));<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      return n;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   }<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>    * Finds the default value from the specified list of annotations.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    *<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    * @param pi The parameter.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    * @return The last matching default value, or {@link Value#empty()} if not found.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    */<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   public static Value&lt;String&gt; findDef(ParamInfo pi) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      Value&lt;String&gt; n = Value.empty();<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      pi.forEachAnnotation(Query.class, x -&gt; isNotEmpty(x.def()), x -&gt; n.set(x.def()));<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      return n;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   // Builder<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.110"></a>
 <span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      String name="", value="";<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>      /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>       * Constructor.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>       */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      protected Builder() {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>         super(Query.class);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      }<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>      /**<a name="line.124"></a>
-<span class="sourceLineNo">125</span>       * Instantiates a new {@link Query @Query} object initialized with this builder.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>       *<a name="line.126"></a>
-<span class="sourceLineNo">127</span>       * @return A new {@link Query @Query} object.<a name="line.127"></a>
+<span class="sourceLineNo">112</span>   /**<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    * Builder class.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    *<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    * &lt;ul class='seealso'&gt;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    * &lt;/ul&gt;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    */<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      String name="", value="", def="";<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>       * Constructor.<a name="line.127"></a>
 <span class="sourceLineNo">128</span>       */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      public Query build() {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>         return new Impl(this);<a name="line.130"></a>
+<span class="sourceLineNo">129</span>      protected Builder() {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>         super(Query.class);<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>      /**<a name="line.133"></a>
-<span class="sourceLineNo">134</span>       * Sets the {@link Query#name} property on this annotation.<a name="line.134"></a>
+<span class="sourceLineNo">134</span>       * Instantiates a new {@link Query @Query} object initialized with this builder.<a name="line.134"></a>
 <span class="sourceLineNo">135</span>       *<a name="line.135"></a>
-<span class="sourceLineNo">136</span>       * @param value The new value for this property.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>       * @return This object.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>       */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      public Builder name(String value) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>         this.name = value;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>         return this;<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>      /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>       * Sets the {@link Query#parser} property on this annotation.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>       *<a name="line.146"></a>
-<span class="sourceLineNo">147</span>       * @param value The new value for this property.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>       * @return This object.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>       */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>         this.parser = value;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>         return this;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>      /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>       * Sets the {@link Query#schema} property on this annotation.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>       *<a name="line.157"></a>
-<span class="sourceLineNo">158</span>       * @param value The new value for this property.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>       * @return This object.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>       */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      public Builder schema(Schema value) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>         this.schema = value;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>         return this;<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>      /**<a name="line.166"></a>
-<span class="sourceLineNo">167</span>       * Sets the {@link Query#serializer} property on this annotation.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>       *<a name="line.168"></a>
-<span class="sourceLineNo">169</span>       * @param value The new value for this property.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>       * @return This object.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>       */<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>         this.serializer = value;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>         return this;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>      /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>       * Sets the {@link Query#value} property on this annotation.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>       *<a name="line.179"></a>
-<span class="sourceLineNo">180</span>       * @param value The new value for this property.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>       * @return This object.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>       */<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      public Builder value(String value) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>         this.value = value;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      public Builder on(String...values) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>         super.on(values);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>         return this;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>         super.on(value);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>         return this;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>         super.onClass(value);<a name="line.204"></a>
+<span class="sourceLineNo">136</span>       * @return A new {@link Query @Query} object.<a name="line.136"></a>
+<span class="sourceLineNo">137</span>       */<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      public Query build() {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>         return new Impl(this);<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      }<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>       * Sets the {@link Query#def} property on this annotation.<a name="line.143"></a>
+<span class="sourceLineNo">144</span>       *<a name="line.144"></a>
+<span class="sourceLineNo">145</span>       * @param value The new value for this property.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>       * @return This object.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>       */<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      public Builder def(String value) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>         this.def = value;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>         return this;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      }<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>      /**<a name="line.153"></a>
+<span class="sourceLineNo">154</span>       * Sets the {@link Query#name} property on this annotation.<a name="line.154"></a>
+<span class="sourceLineNo">155</span>       *<a name="line.155"></a>
+<span class="sourceLineNo">156</span>       * @param value The new value for this property.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>       * @return This object.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>       */<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      public Builder name(String value) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>         this.name = value;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>         return this;<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>      /**<a name="line.164"></a>
+<span class="sourceLineNo">165</span>       * Sets the {@link Query#parser} property on this annotation.<a name="line.165"></a>
+<span class="sourceLineNo">166</span>       *<a name="line.166"></a>
+<span class="sourceLineNo">167</span>       * @param value The new value for this property.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>       * @return This object.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>       */<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>         this.parser = value;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>         return this;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>      /**<a name="line.175"></a>
+<span class="sourceLineNo">176</span>       * Sets the {@link Query#schema} property on this annotation.<a name="line.176"></a>
+<span class="sourceLineNo">177</span>       *<a name="line.177"></a>
+<span class="sourceLineNo">178</span>       * @param value The new value for this property.<a name="line.178"></a>
+<span class="sourceLineNo">179</span>       * @return This object.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>       */<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      public Builder schema(Schema value) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>         this.schema = value;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>         return this;<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>      /**<a name="line.186"></a>
+<span class="sourceLineNo">187</span>       * Sets the {@link Query#serializer} property on this annotation.<a name="line.187"></a>
+<span class="sourceLineNo">188</span>       *<a name="line.188"></a>
+<span class="sourceLineNo">189</span>       * @param value The new value for this property.<a name="line.189"></a>
+<span class="sourceLineNo">190</span>       * @return This object.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>       */<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>         this.serializer = value;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>         return this;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>      /**<a name="line.197"></a>
+<span class="sourceLineNo">198</span>       * Sets the {@link Query#value} property on this annotation.<a name="line.198"></a>
+<span class="sourceLineNo">199</span>       *<a name="line.199"></a>
+<span class="sourceLineNo">200</span>       * @param value The new value for this property.<a name="line.200"></a>
+<span class="sourceLineNo">201</span>       * @return This object.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>       */<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      public Builder value(String value) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>         this.value = value;<a name="line.204"></a>
 <span class="sourceLineNo">205</span>         return this;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>      }<a name="line.206"></a>
 <span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      public Builder on(Field...value) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>         super.on(value);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>         return this;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      public Builder on(Method...value) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>         super.on(value);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>         return this;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // &lt;/FluentSetters&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   }<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>   // Implementation<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>   private static class Impl extends TargetedAnnotationTImpl implements Query {<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      private final String name, value;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      private final Schema schema;<a name="line.232"></a>
+<span class="sourceLineNo">208</span>      // &lt;FluentSetters&gt;<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      public Builder on(String...values) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>         super.on(values);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>         return this;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      }<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>         super.on(value);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>         return this;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>         super.onClass(value);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      public Builder on(Field...value) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>         super.on(value);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>         return this;<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>      Impl(Builder b) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>         super(b);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>         this.name = b.name;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>         this.parser = b.parser;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>         this.schema = b.schema;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>         this.serializer = b.serializer;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>         this.value = b.value;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>         postConstruct();<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>      @Override /* Query */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      public String name() {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>         return name;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      }<a name="line.247"></a>
+<span class="sourceLineNo">234</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      public Builder on(Method...value) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>         super.on(value);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>         return this;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>      // &lt;/FluentSetters&gt;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   }<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>   // Implementation<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>   private static class Impl extends TargetedAnnotationTImpl implements Query {<a name="line.247"></a>
 <span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>      @Override /* Query */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>         return parser;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
+<span class="sourceLineNo">249</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      private final String name, value, def;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      private final Schema schema;<a name="line.252"></a>
 <span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>      @Override /* Query */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      public Schema schema() {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>         return schema;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>      @Override /* Query */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>         return serializer;<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>      @Override /* Query */<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      public String value() {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>         return value;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      }<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   }<a name="line.268"></a>
+<span class="sourceLineNo">254</span>      Impl(Builder b) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>         super(b);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>         this.name = b.name;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>         this.parser = b.parser;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>         this.schema = b.schema;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>         this.serializer = b.serializer;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>         this.value = b.value;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>         this.def = b.def;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>         postConstruct();<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>      @Override /* Query */<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      public String name() {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>         return name;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   // Appliers<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>   /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    * Applies targeted {@link Query} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   public static class Applier extends AnnotationApplier&lt;Query,BeanContext.Builder&gt; {<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>       * Constructor.<a name="line.280"></a>
-<span class="sourceLineNo">281</span>       *<a name="line.281"></a>
-<span class="sourceLineNo">282</span>       * @param vr The resolver for resolving values in annotations.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>       */<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      public Applier(VarResolverSession vr) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>         super(Query.class, BeanContext.Builder.class, vr);<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>      @Override<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      public void apply(AnnotationInfo&lt;Query&gt; ai, BeanContext.Builder b) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>         Query a = ai.inner();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            return;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>         b.annotations(a);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   // Other<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>    * A collection of {@link Query @Query annotations}.<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    */<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   @Documented<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   @Target({METHOD,TYPE})<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   @Retention(RUNTIME)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   @Inherited<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   public static @interface Array {<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>       * The child annotations.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>       *<a name="line.312"></a>
-<span class="sourceLineNo">313</span>       * @return The annotation value.<a name="line.313"></a>
-<span class="sourceLineNo">314</span>       */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      Query[] value();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>}<a name="line.317"></a>
+<span class="sourceLineNo">270</span>      @Override /* Query */<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>         return parser;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>      @Override /* Query */<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      public Schema schema() {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>         return schema;<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>      @Override /* Query */<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>         return serializer;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>      @Override /* Query */<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      public String value() {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>         return value;<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>      @Override /* Query */<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      public String def() {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>         return def;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      }<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>   // Appliers<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>   /**<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    * Applies targeted {@link Query} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    */<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   public static class Applier extends AnnotationApplier&lt;Query,BeanContext.Builder&gt; {<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      /**<a name="line.305"></a>
+<span class="sourceLineNo">306</span>       * Constructor.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>       *<a name="line.307"></a>
+<span class="sourceLineNo">308</span>       * @param vr The resolver for resolving values in annotations.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>       */<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      public Applier(VarResolverSession vr) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>         super(Query.class, BeanContext.Builder.class, vr);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      }<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>      @Override<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      public void apply(AnnotationInfo&lt;Query&gt; ai, BeanContext.Builder b) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>         Query a = ai.inner();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            return;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>         b.annotations(a);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   // Other<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>   /**<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    * A collection of {@link Query @Query annotations}.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    */<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   @Documented<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   @Target({METHOD,TYPE})<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   @Retention(RUNTIME)<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   @Inherited<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   public static @interface Array {<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>      /**<a name="line.336"></a>
+<span class="sourceLineNo">337</span>       * The child annotations.<a name="line.337"></a>
+<span class="sourceLineNo">338</span>       *<a name="line.338"></a>
+<span class="sourceLineNo">339</span>       * @return The annotation value.<a name="line.339"></a>
+<span class="sourceLineNo">340</span>       */<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      Query[] value();<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>}<a name="line.343"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html
index 227df51..7efc14c 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html
@@ -89,240 +89,266 @@
 <span class="sourceLineNo">081</span>   }<a name="line.81"></a>
 <span class="sourceLineNo">082</span><a name="line.82"></a>
 <span class="sourceLineNo">083</span>   /**<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    * Finds the name from the specified lists of annotations.<a name="line.84"></a>
+<span class="sourceLineNo">084</span>    * Finds the name from the specified list of annotations.<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    *<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    * &lt;p&gt;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    * The last matching name found is returned.<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    *<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    * @param pi The parameter.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    * @return The last matching name, or {@link Value#empty()} if not found.<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    */<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   public static Value&lt;String&gt; findName(ParamInfo pi) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      Value&lt;String&gt; n = Value.empty();<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      pi.forEachAnnotation(Query.class, x -&gt; isNotEmpty(x.value()), x -&gt; n.set(x.value()));<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      pi.forEachAnnotation(Query.class, x -&gt; isNotEmpty(x.name()), x -&gt; n.set(x.name()));<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      return n;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   }<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">100</span>   // Builder<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>   /**<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    * Builder class.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    *<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    * &lt;ul class='seealso'&gt;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    * &lt;/ul&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    */<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.110"></a>
+<span class="sourceLineNo">086</span>    * @param pi The parameter.<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    * @return The last matching name, or {@link Value#empty()} if not found.<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    */<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   public static Value&lt;String&gt; findName(ParamInfo pi) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      Value&lt;String&gt; n = Value.empty();<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      pi.forEachAnnotation(Query.class, x -&gt; isNotEmpty(x.value()), x -&gt; n.set(x.value()));<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      pi.forEachAnnotation(Query.class, x -&gt; isNotEmpty(x.name()), x -&gt; n.set(x.name()));<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      return n;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   }<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>    * Finds the default value from the specified list of annotations.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    *<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    * @param pi The parameter.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    * @return The last matching default value, or {@link Value#empty()} if not found.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    */<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   public static Value&lt;String&gt; findDef(ParamInfo pi) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      Value&lt;String&gt; n = Value.empty();<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      pi.forEachAnnotation(Query.class, x -&gt; isNotEmpty(x.def()), x -&gt; n.set(x.def()));<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      return n;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   // Builder<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.110"></a>
 <span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      String name="", value="";<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>      /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>       * Constructor.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>       */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      protected Builder() {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>         super(Query.class);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      }<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>      /**<a name="line.124"></a>
-<span class="sourceLineNo">125</span>       * Instantiates a new {@link Query @Query} object initialized with this builder.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>       *<a name="line.126"></a>
-<span class="sourceLineNo">127</span>       * @return A new {@link Query @Query} object.<a name="line.127"></a>
+<span class="sourceLineNo">112</span>   /**<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    * Builder class.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    *<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    * &lt;ul class='seealso'&gt;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    * &lt;/ul&gt;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    */<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      String name="", value="", def="";<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>       * Constructor.<a name="line.127"></a>
 <span class="sourceLineNo">128</span>       */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      public Query build() {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>         return new Impl(this);<a name="line.130"></a>
+<span class="sourceLineNo">129</span>      protected Builder() {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>         super(Query.class);<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>      /**<a name="line.133"></a>
-<span class="sourceLineNo">134</span>       * Sets the {@link Query#name} property on this annotation.<a name="line.134"></a>
+<span class="sourceLineNo">134</span>       * Instantiates a new {@link Query @Query} object initialized with this builder.<a name="line.134"></a>
 <span class="sourceLineNo">135</span>       *<a name="line.135"></a>
-<span class="sourceLineNo">136</span>       * @param value The new value for this property.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>       * @return This object.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>       */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      public Builder name(String value) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>         this.name = value;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>         return this;<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>      /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>       * Sets the {@link Query#parser} property on this annotation.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>       *<a name="line.146"></a>
-<span class="sourceLineNo">147</span>       * @param value The new value for this property.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>       * @return This object.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>       */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>         this.parser = value;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>         return this;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>      /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>       * Sets the {@link Query#schema} property on this annotation.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>       *<a name="line.157"></a>
-<span class="sourceLineNo">158</span>       * @param value The new value for this property.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>       * @return This object.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>       */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      public Builder schema(Schema value) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>         this.schema = value;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>         return this;<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>      /**<a name="line.166"></a>
-<span class="sourceLineNo">167</span>       * Sets the {@link Query#serializer} property on this annotation.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>       *<a name="line.168"></a>
-<span class="sourceLineNo">169</span>       * @param value The new value for this property.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>       * @return This object.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>       */<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>         this.serializer = value;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>         return this;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>      /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>       * Sets the {@link Query#value} property on this annotation.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>       *<a name="line.179"></a>
-<span class="sourceLineNo">180</span>       * @param value The new value for this property.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>       * @return This object.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>       */<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      public Builder value(String value) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>         this.value = value;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      public Builder on(String...values) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>         super.on(values);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>         return this;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>         super.on(value);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>         return this;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>         super.onClass(value);<a name="line.204"></a>
+<span class="sourceLineNo">136</span>       * @return A new {@link Query @Query} object.<a name="line.136"></a>
+<span class="sourceLineNo">137</span>       */<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      public Query build() {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>         return new Impl(this);<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      }<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>       * Sets the {@link Query#def} property on this annotation.<a name="line.143"></a>
+<span class="sourceLineNo">144</span>       *<a name="line.144"></a>
+<span class="sourceLineNo">145</span>       * @param value The new value for this property.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>       * @return This object.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>       */<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      public Builder def(String value) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>         this.def = value;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>         return this;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      }<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>      /**<a name="line.153"></a>
+<span class="sourceLineNo">154</span>       * Sets the {@link Query#name} property on this annotation.<a name="line.154"></a>
+<span class="sourceLineNo">155</span>       *<a name="line.155"></a>
+<span class="sourceLineNo">156</span>       * @param value The new value for this property.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>       * @return This object.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>       */<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      public Builder name(String value) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>         this.name = value;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>         return this;<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>      /**<a name="line.164"></a>
+<span class="sourceLineNo">165</span>       * Sets the {@link Query#parser} property on this annotation.<a name="line.165"></a>
+<span class="sourceLineNo">166</span>       *<a name="line.166"></a>
+<span class="sourceLineNo">167</span>       * @param value The new value for this property.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>       * @return This object.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>       */<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>         this.parser = value;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>         return this;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>      /**<a name="line.175"></a>
+<span class="sourceLineNo">176</span>       * Sets the {@link Query#schema} property on this annotation.<a name="line.176"></a>
+<span class="sourceLineNo">177</span>       *<a name="line.177"></a>
+<span class="sourceLineNo">178</span>       * @param value The new value for this property.<a name="line.178"></a>
+<span class="sourceLineNo">179</span>       * @return This object.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>       */<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      public Builder schema(Schema value) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>         this.schema = value;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>         return this;<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>      /**<a name="line.186"></a>
+<span class="sourceLineNo">187</span>       * Sets the {@link Query#serializer} property on this annotation.<a name="line.187"></a>
+<span class="sourceLineNo">188</span>       *<a name="line.188"></a>
+<span class="sourceLineNo">189</span>       * @param value The new value for this property.<a name="line.189"></a>
+<span class="sourceLineNo">190</span>       * @return This object.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>       */<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>         this.serializer = value;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>         return this;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>      /**<a name="line.197"></a>
+<span class="sourceLineNo">198</span>       * Sets the {@link Query#value} property on this annotation.<a name="line.198"></a>
+<span class="sourceLineNo">199</span>       *<a name="line.199"></a>
+<span class="sourceLineNo">200</span>       * @param value The new value for this property.<a name="line.200"></a>
+<span class="sourceLineNo">201</span>       * @return This object.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>       */<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      public Builder value(String value) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>         this.value = value;<a name="line.204"></a>
 <span class="sourceLineNo">205</span>         return this;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>      }<a name="line.206"></a>
 <span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      public Builder on(Field...value) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>         super.on(value);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>         return this;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      public Builder on(Method...value) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>         super.on(value);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>         return this;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // &lt;/FluentSetters&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   }<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>   // Implementation<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>   private static class Impl extends TargetedAnnotationTImpl implements Query {<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      private final String name, value;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      private final Schema schema;<a name="line.232"></a>
+<span class="sourceLineNo">208</span>      // &lt;FluentSetters&gt;<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      public Builder on(String...values) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>         super.on(values);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>         return this;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      }<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>         super.on(value);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>         return this;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>         super.onClass(value);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      public Builder on(Field...value) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>         super.on(value);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>         return this;<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>      Impl(Builder b) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>         super(b);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>         this.name = b.name;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>         this.parser = b.parser;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>         this.schema = b.schema;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>         this.serializer = b.serializer;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>         this.value = b.value;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>         postConstruct();<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>      @Override /* Query */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      public String name() {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>         return name;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      }<a name="line.247"></a>
+<span class="sourceLineNo">234</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      public Builder on(Method...value) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>         super.on(value);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>         return this;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>      // &lt;/FluentSetters&gt;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   }<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>   // Implementation<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>   private static class Impl extends TargetedAnnotationTImpl implements Query {<a name="line.247"></a>
 <span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>      @Override /* Query */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>         return parser;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
+<span class="sourceLineNo">249</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      private final String name, value, def;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      private final Schema schema;<a name="line.252"></a>
 <span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>      @Override /* Query */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      public Schema schema() {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>         return schema;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>      @Override /* Query */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>         return serializer;<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>      @Override /* Query */<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      public String value() {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>         return value;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      }<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   }<a name="line.268"></a>
+<span class="sourceLineNo">254</span>      Impl(Builder b) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>         super(b);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>         this.name = b.name;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>         this.parser = b.parser;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>         this.schema = b.schema;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>         this.serializer = b.serializer;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>         this.value = b.value;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>         this.def = b.def;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>         postConstruct();<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>      @Override /* Query */<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      public String name() {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>         return name;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   // Appliers<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>   /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    * Applies targeted {@link Query} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   public static class Applier extends AnnotationApplier&lt;Query,BeanContext.Builder&gt; {<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>       * Constructor.<a name="line.280"></a>
-<span class="sourceLineNo">281</span>       *<a name="line.281"></a>
-<span class="sourceLineNo">282</span>       * @param vr The resolver for resolving values in annotations.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>       */<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      public Applier(VarResolverSession vr) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>         super(Query.class, BeanContext.Builder.class, vr);<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>      @Override<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      public void apply(AnnotationInfo&lt;Query&gt; ai, BeanContext.Builder b) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>         Query a = ai.inner();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            return;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>         b.annotations(a);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   // Other<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>    * A collection of {@link Query @Query annotations}.<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    */<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   @Documented<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   @Target({METHOD,TYPE})<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   @Retention(RUNTIME)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   @Inherited<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   public static @interface Array {<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>       * The child annotations.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>       *<a name="line.312"></a>
-<span class="sourceLineNo">313</span>       * @return The annotation value.<a name="line.313"></a>
-<span class="sourceLineNo">314</span>       */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      Query[] value();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>}<a name="line.317"></a>
+<span class="sourceLineNo">270</span>      @Override /* Query */<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>         return parser;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>      @Override /* Query */<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      public Schema schema() {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>         return schema;<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>      @Override /* Query */<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>         return serializer;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>      @Override /* Query */<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      public String value() {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>         return value;<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>      @Override /* Query */<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      public String def() {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>         return def;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      }<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>   // Appliers<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>   /**<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    * Applies targeted {@link Query} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    */<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   public static class Applier extends AnnotationApplier&lt;Query,BeanContext.Builder&gt; {<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      /**<a name="line.305"></a>
+<span class="sourceLineNo">306</span>       * Constructor.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>       *<a name="line.307"></a>
+<span class="sourceLineNo">308</span>       * @param vr The resolver for resolving values in annotations.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>       */<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      public Applier(VarResolverSession vr) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>         super(Query.class, BeanContext.Builder.class, vr);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      }<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>      @Override<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      public void apply(AnnotationInfo&lt;Query&gt; ai, BeanContext.Builder b) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>         Query a = ai.inner();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            return;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>         b.annotations(a);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   // Other<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>   /**<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    * A collection of {@link Query @Query annotations}.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    */<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   @Documented<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   @Target({METHOD,TYPE})<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   @Retention(RUNTIME)<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   @Inherited<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   public static @interface Array {<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>      /**<a name="line.336"></a>
+<span class="sourceLineNo">337</span>       * The child annotations.<a name="line.337"></a>
+<span class="sourceLineNo">338</span>       *<a name="line.338"></a>
+<span class="sourceLineNo">339</span>       * @return The annotation value.<a name="line.339"></a>
+<span class="sourceLineNo">340</span>       */<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      Query[] value();<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>}<a name="line.343"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/QueryAnnotation.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/QueryAnnotation.html
index 227df51..7efc14c 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/QueryAnnotation.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/http/annotation/QueryAnnotation.html
@@ -89,240 +89,266 @@
 <span class="sourceLineNo">081</span>   }<a name="line.81"></a>
 <span class="sourceLineNo">082</span><a name="line.82"></a>
 <span class="sourceLineNo">083</span>   /**<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    * Finds the name from the specified lists of annotations.<a name="line.84"></a>
+<span class="sourceLineNo">084</span>    * Finds the name from the specified list of annotations.<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    *<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    * &lt;p&gt;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    * The last matching name found is returned.<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    *<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    * @param pi The parameter.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    * @return The last matching name, or {@link Value#empty()} if not found.<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    */<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   public static Value&lt;String&gt; findName(ParamInfo pi) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      Value&lt;String&gt; n = Value.empty();<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      pi.forEachAnnotation(Query.class, x -&gt; isNotEmpty(x.value()), x -&gt; n.set(x.value()));<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      pi.forEachAnnotation(Query.class, x -&gt; isNotEmpty(x.name()), x -&gt; n.set(x.name()));<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      return n;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   }<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">100</span>   // Builder<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>   /**<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    * Builder class.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    *<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    * &lt;ul class='seealso'&gt;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    * &lt;/ul&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    */<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.110"></a>
+<span class="sourceLineNo">086</span>    * @param pi The parameter.<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    * @return The last matching name, or {@link Value#empty()} if not found.<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    */<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   public static Value&lt;String&gt; findName(ParamInfo pi) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      Value&lt;String&gt; n = Value.empty();<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      pi.forEachAnnotation(Query.class, x -&gt; isNotEmpty(x.value()), x -&gt; n.set(x.value()));<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      pi.forEachAnnotation(Query.class, x -&gt; isNotEmpty(x.name()), x -&gt; n.set(x.name()));<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      return n;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   }<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>    * Finds the default value from the specified list of annotations.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    *<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    * @param pi The parameter.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    * @return The last matching default value, or {@link Value#empty()} if not found.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    */<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   public static Value&lt;String&gt; findDef(ParamInfo pi) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      Value&lt;String&gt; n = Value.empty();<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      pi.forEachAnnotation(Query.class, x -&gt; isNotEmpty(x.def()), x -&gt; n.set(x.def()));<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      return n;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   // Builder<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.110"></a>
 <span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      String name="", value="";<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>      /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>       * Constructor.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>       */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      protected Builder() {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>         super(Query.class);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      }<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>      /**<a name="line.124"></a>
-<span class="sourceLineNo">125</span>       * Instantiates a new {@link Query @Query} object initialized with this builder.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>       *<a name="line.126"></a>
-<span class="sourceLineNo">127</span>       * @return A new {@link Query @Query} object.<a name="line.127"></a>
+<span class="sourceLineNo">112</span>   /**<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    * Builder class.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    *<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    * &lt;ul class='seealso'&gt;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    *    &lt;li class='jm'&gt;{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    * &lt;/ul&gt;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    */<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   public static class Builder extends TargetedAnnotationTMFBuilder {<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>      Class&lt;? extends HttpPartParser&gt; parser = HttpPartParser.Void.class;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      Class&lt;? extends HttpPartSerializer&gt; serializer = HttpPartSerializer.Void.class;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      Schema schema = SchemaAnnotation.DEFAULT;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      String name="", value="", def="";<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>       * Constructor.<a name="line.127"></a>
 <span class="sourceLineNo">128</span>       */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      public Query build() {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>         return new Impl(this);<a name="line.130"></a>
+<span class="sourceLineNo">129</span>      protected Builder() {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>         super(Query.class);<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>      /**<a name="line.133"></a>
-<span class="sourceLineNo">134</span>       * Sets the {@link Query#name} property on this annotation.<a name="line.134"></a>
+<span class="sourceLineNo">134</span>       * Instantiates a new {@link Query @Query} object initialized with this builder.<a name="line.134"></a>
 <span class="sourceLineNo">135</span>       *<a name="line.135"></a>
-<span class="sourceLineNo">136</span>       * @param value The new value for this property.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>       * @return This object.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>       */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      public Builder name(String value) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>         this.name = value;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>         return this;<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>      /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>       * Sets the {@link Query#parser} property on this annotation.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>       *<a name="line.146"></a>
-<span class="sourceLineNo">147</span>       * @param value The new value for this property.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>       * @return This object.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>       */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>         this.parser = value;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>         return this;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>      /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>       * Sets the {@link Query#schema} property on this annotation.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>       *<a name="line.157"></a>
-<span class="sourceLineNo">158</span>       * @param value The new value for this property.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>       * @return This object.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>       */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      public Builder schema(Schema value) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>         this.schema = value;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>         return this;<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>      /**<a name="line.166"></a>
-<span class="sourceLineNo">167</span>       * Sets the {@link Query#serializer} property on this annotation.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>       *<a name="line.168"></a>
-<span class="sourceLineNo">169</span>       * @param value The new value for this property.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>       * @return This object.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>       */<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>         this.serializer = value;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>         return this;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>      /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>       * Sets the {@link Query#value} property on this annotation.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>       *<a name="line.179"></a>
-<span class="sourceLineNo">180</span>       * @param value The new value for this property.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>       * @return This object.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>       */<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      public Builder value(String value) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>         this.value = value;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>         return this;<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>      // &lt;FluentSetters&gt;<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      public Builder on(String...values) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>         super.on(values);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>         return this;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>         super.on(value);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>         return this;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>         super.onClass(value);<a name="line.204"></a>
+<span class="sourceLineNo">136</span>       * @return A new {@link Query @Query} object.<a name="line.136"></a>
+<span class="sourceLineNo">137</span>       */<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      public Query build() {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>         return new Impl(this);<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      }<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>       * Sets the {@link Query#def} property on this annotation.<a name="line.143"></a>
+<span class="sourceLineNo">144</span>       *<a name="line.144"></a>
+<span class="sourceLineNo">145</span>       * @param value The new value for this property.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>       * @return This object.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>       */<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      public Builder def(String value) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>         this.def = value;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>         return this;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      }<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>      /**<a name="line.153"></a>
+<span class="sourceLineNo">154</span>       * Sets the {@link Query#name} property on this annotation.<a name="line.154"></a>
+<span class="sourceLineNo">155</span>       *<a name="line.155"></a>
+<span class="sourceLineNo">156</span>       * @param value The new value for this property.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>       * @return This object.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>       */<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      public Builder name(String value) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>         this.name = value;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>         return this;<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>      /**<a name="line.164"></a>
+<span class="sourceLineNo">165</span>       * Sets the {@link Query#parser} property on this annotation.<a name="line.165"></a>
+<span class="sourceLineNo">166</span>       *<a name="line.166"></a>
+<span class="sourceLineNo">167</span>       * @param value The new value for this property.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>       * @return This object.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>       */<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      public Builder parser(Class&lt;? extends HttpPartParser&gt; value) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>         this.parser = value;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>         return this;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>      /**<a name="line.175"></a>
+<span class="sourceLineNo">176</span>       * Sets the {@link Query#schema} property on this annotation.<a name="line.176"></a>
+<span class="sourceLineNo">177</span>       *<a name="line.177"></a>
+<span class="sourceLineNo">178</span>       * @param value The new value for this property.<a name="line.178"></a>
+<span class="sourceLineNo">179</span>       * @return This object.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>       */<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      public Builder schema(Schema value) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>         this.schema = value;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>         return this;<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>      /**<a name="line.186"></a>
+<span class="sourceLineNo">187</span>       * Sets the {@link Query#serializer} property on this annotation.<a name="line.187"></a>
+<span class="sourceLineNo">188</span>       *<a name="line.188"></a>
+<span class="sourceLineNo">189</span>       * @param value The new value for this property.<a name="line.189"></a>
+<span class="sourceLineNo">190</span>       * @return This object.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>       */<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      public Builder serializer(Class&lt;? extends HttpPartSerializer&gt; value) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>         this.serializer = value;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>         return this;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>      /**<a name="line.197"></a>
+<span class="sourceLineNo">198</span>       * Sets the {@link Query#value} property on this annotation.<a name="line.198"></a>
+<span class="sourceLineNo">199</span>       *<a name="line.199"></a>
+<span class="sourceLineNo">200</span>       * @param value The new value for this property.<a name="line.200"></a>
+<span class="sourceLineNo">201</span>       * @return This object.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>       */<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      public Builder value(String value) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>         this.value = value;<a name="line.204"></a>
 <span class="sourceLineNo">205</span>         return this;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>      }<a name="line.206"></a>
 <span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      public Builder on(Field...value) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>         super.on(value);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>         return this;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      public Builder on(Method...value) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>         super.on(value);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>         return this;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // &lt;/FluentSetters&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   }<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>   // Implementation<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>   private static class Impl extends TargetedAnnotationTImpl implements Query {<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      private final String name, value;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      private final Schema schema;<a name="line.232"></a>
+<span class="sourceLineNo">208</span>      // &lt;FluentSetters&gt;<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>      @Override /* GENERATED - TargetedAnnotationBuilder */<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      public Builder on(String...values) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>         super.on(values);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>         return this;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      }<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      public Builder on(java.lang.Class&lt;?&gt;...value) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>         super.on(value);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>         return this;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>      @Override /* GENERATED - TargetedAnnotationTBuilder */<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      public Builder onClass(java.lang.Class&lt;?&gt;...value) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>         super.onClass(value);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>         return this;<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>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      public Builder on(Field...value) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>         super.on(value);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>         return this;<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>      Impl(Builder b) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>         super(b);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>         this.name = b.name;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>         this.parser = b.parser;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>         this.schema = b.schema;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>         this.serializer = b.serializer;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>         this.value = b.value;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>         postConstruct();<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>      @Override /* Query */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      public String name() {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>         return name;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      }<a name="line.247"></a>
+<span class="sourceLineNo">234</span>      @Override /* GENERATED - TargetedAnnotationTMFBuilder */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      public Builder on(Method...value) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>         super.on(value);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>         return this;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>      // &lt;/FluentSetters&gt;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   }<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>   // Implementation<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>   private static class Impl extends TargetedAnnotationTImpl implements Query {<a name="line.247"></a>
 <span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>      @Override /* Query */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>         return parser;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
+<span class="sourceLineNo">249</span>      private final Class&lt;? extends HttpPartParser&gt; parser;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      private final Class&lt;? extends HttpPartSerializer&gt; serializer;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      private final String name, value, def;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      private final Schema schema;<a name="line.252"></a>
 <span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>      @Override /* Query */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      public Schema schema() {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>         return schema;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>      @Override /* Query */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>         return serializer;<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>      @Override /* Query */<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      public String value() {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>         return value;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      }<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   }<a name="line.268"></a>
+<span class="sourceLineNo">254</span>      Impl(Builder b) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>         super(b);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>         this.name = b.name;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>         this.parser = b.parser;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>         this.schema = b.schema;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>         this.serializer = b.serializer;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>         this.value = b.value;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>         this.def = b.def;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>         postConstruct();<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>      @Override /* Query */<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      public String name() {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>         return name;<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   // Appliers<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>   /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    * Applies targeted {@link Query} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   public static class Applier extends AnnotationApplier&lt;Query,BeanContext.Builder&gt; {<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>       * Constructor.<a name="line.280"></a>
-<span class="sourceLineNo">281</span>       *<a name="line.281"></a>
-<span class="sourceLineNo">282</span>       * @param vr The resolver for resolving values in annotations.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>       */<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      public Applier(VarResolverSession vr) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>         super(Query.class, BeanContext.Builder.class, vr);<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>      @Override<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      public void apply(AnnotationInfo&lt;Query&gt; ai, BeanContext.Builder b) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>         Query a = ai.inner();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            return;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>         b.annotations(a);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   // Other<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>    * A collection of {@link Query @Query annotations}.<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    */<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   @Documented<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   @Target({METHOD,TYPE})<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   @Retention(RUNTIME)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   @Inherited<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   public static @interface Array {<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>       * The child annotations.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>       *<a name="line.312"></a>
-<span class="sourceLineNo">313</span>       * @return The annotation value.<a name="line.313"></a>
-<span class="sourceLineNo">314</span>       */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      Query[] value();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>}<a name="line.317"></a>
+<span class="sourceLineNo">270</span>      @Override /* Query */<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      public Class&lt;? extends HttpPartParser&gt; parser() {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>         return parser;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>      @Override /* Query */<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      public Schema schema() {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>         return schema;<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>      @Override /* Query */<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      public Class&lt;? extends HttpPartSerializer&gt; serializer() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>         return serializer;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>      @Override /* Query */<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      public String value() {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>         return value;<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>      @Override /* Query */<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      public String def() {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>         return def;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      }<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>   // Appliers<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>   /**<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    * Applies targeted {@link Query} annotations to a {@link org.apache.juneau.BeanContext.Builder}.<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    */<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   public static class Applier extends AnnotationApplier&lt;Query,BeanContext.Builder&gt; {<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      /**<a name="line.305"></a>
+<span class="sourceLineNo">306</span>       * Constructor.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>       *<a name="line.307"></a>
+<span class="sourceLineNo">308</span>       * @param vr The resolver for resolving values in annotations.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>       */<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      public Applier(VarResolverSession vr) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>         super(Query.class, BeanContext.Builder.class, vr);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      }<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>      @Override<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      public void apply(AnnotationInfo&lt;Query&gt; ai, BeanContext.Builder b) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>         Query a = ai.inner();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>         if (isEmptyArray(a.on(), a.onClass()))<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            return;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>         b.annotations(a);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   // Other<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>   /**<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    * A collection of {@link Query @Query annotations}.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    */<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   @Documented<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   @Target({METHOD,TYPE})<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   @Retention(RUNTIME)<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   @Inherited<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   public static @interface Array {<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>      /**<a name="line.336"></a>
+<span class="sourceLineNo">337</span>       * The child annotations.<a name="line.337"></a>
+<span class="sourceLineNo">338</span>       *<a name="line.338"></a>
+<span class="sourceLineNo">339</span>       * @return The annotation value.<a name="line.339"></a>
+<span class="sourceLineNo">340</span>       */<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      Query[] value();<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>}<a name="line.343"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/internal/Cache.Builder.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/internal/Cache.Builder.html
index b86e821..3cd5633 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/internal/Cache.Builder.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/internal/Cache.Builder.html
@@ -76,7 +76,7 @@
 <span class="sourceLineNo">068</span>         this.type = type;<a name="line.68"></a>
 <span class="sourceLineNo">069</span>         disabled = env("juneau.cache.disable", false);<a name="line.69"></a>
 <span class="sourceLineNo">070</span>         maxSize = env("juneau.cache.maxSize", 1000);<a name="line.70"></a>
-<span class="sourceLineNo">071</span>         logOnExit = env("juneau.cache.logOnExit", true);<a name="line.71"></a>
+<span class="sourceLineNo">071</span>         logOnExit = env("juneau.cache.logOnExit", false);<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>      /**<a name="line.74"></a>
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/internal/Cache.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/internal/Cache.html
index b86e821..3cd5633 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/internal/Cache.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/internal/Cache.html
@@ -76,7 +76,7 @@
 <span class="sourceLineNo">068</span>         this.type = type;<a name="line.68"></a>
 <span class="sourceLineNo">069</span>         disabled = env("juneau.cache.disable", false);<a name="line.69"></a>
 <span class="sourceLineNo">070</span>         maxSize = env("juneau.cache.maxSize", 1000);<a name="line.70"></a>
-<span class="sourceLineNo">071</span>         logOnExit = env("juneau.cache.logOnExit", true);<a name="line.71"></a>
+<span class="sourceLineNo">071</span>         logOnExit = env("juneau.cache.logOnExit", false);<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>      /**<a name="line.74"></a>
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/LogConfig.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/LogConfig.html
new file mode 100644
index 0000000..3871f90
--- /dev/null
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/LogConfig.html
@@ -0,0 +1,276 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../javadoc.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>// ***************************************************************************************************************************<a name="line.1"></a>
+<span class="sourceLineNo">002</span>// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *<a name="line.2"></a>
+<span class="sourceLineNo">003</span>// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *<a name="line.3"></a>
+<span class="sourceLineNo">004</span>// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *<a name="line.4"></a>
+<span class="sourceLineNo">005</span>// * with the License.  You may obtain a copy of the License at                                                              *<a name="line.5"></a>
+<span class="sourceLineNo">006</span>// *                                                                                                                         *<a name="line.6"></a>
+<span class="sourceLineNo">007</span>// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *<a name="line.7"></a>
+<span class="sourceLineNo">008</span>// *                                                                                                                         *<a name="line.8"></a>
+<span class="sourceLineNo">009</span>// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *<a name="line.9"></a>
+<span class="sourceLineNo">010</span>// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *<a name="line.10"></a>
+<span class="sourceLineNo">011</span>// * specific language governing permissions and limitations under the License.                                              *<a name="line.11"></a>
+<span class="sourceLineNo">012</span>// ***************************************************************************************************************************<a name="line.12"></a>
+<span class="sourceLineNo">013</span>package org.apache.juneau.microservice;<a name="line.13"></a>
+<span class="sourceLineNo">014</span><a name="line.14"></a>
+<span class="sourceLineNo">015</span>import java.util.*;<a name="line.15"></a>
+<span class="sourceLineNo">016</span>import java.util.logging.*;<a name="line.16"></a>
+<span class="sourceLineNo">017</span>import java.util.logging.Formatter;<a name="line.17"></a>
+<span class="sourceLineNo">018</span><a name="line.18"></a>
+<span class="sourceLineNo">019</span>import org.apache.juneau.microservice.resources.*;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>/**<a name="line.21"></a>
+<span class="sourceLineNo">022</span> * Can be used for configuration of simple logging in the microservice.<a name="line.22"></a>
+<span class="sourceLineNo">023</span> *<a name="line.23"></a>
+<span class="sourceLineNo">024</span> * &lt;p&gt;<a name="line.24"></a>
+<span class="sourceLineNo">025</span> * Instances of this class can be created using {@link #create()} and passing the result to<a name="line.25"></a>
+<span class="sourceLineNo">026</span> * {@link Microservice.Builder#logConfig(LogConfig)}.<a name="line.26"></a>
+<span class="sourceLineNo">027</span> *<a name="line.27"></a>
+<span class="sourceLineNo">028</span> * &lt;p&gt;<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * These values override values specified in the &lt;js&gt;"Logging"&lt;/js&gt; configuration section.<a name="line.29"></a>
+<span class="sourceLineNo">030</span> */<a name="line.30"></a>
+<span class="sourceLineNo">031</span>public class LogConfig {<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span>   String logFile, logDir;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>   Boolean append;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>   Integer limit, count;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>   Level fileLevel, consoleLevel;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>   Map&lt;String,Level&gt; levels = new LinkedHashMap&lt;&gt;();<a name="line.37"></a>
+<span class="sourceLineNo">038</span>   Formatter formatter;<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>   LogConfig() {}<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>    * Copy constructor.<a name="line.43"></a>
+<span class="sourceLineNo">044</span>    *<a name="line.44"></a>
+<span class="sourceLineNo">045</span>    * @param copyFrom The log config to copy from.<a name="line.45"></a>
+<span class="sourceLineNo">046</span>    */<a name="line.46"></a>
+<span class="sourceLineNo">047</span>   protected LogConfig(LogConfig copyFrom) {<a name="line.47"></a>
+<span class="sourceLineNo">048</span>      this.logFile = copyFrom.logFile;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>      this.logDir = copyFrom.logDir;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>      this.append = copyFrom.append;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>      this.limit = copyFrom.limit;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>      this.count = copyFrom.count;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>      this.fileLevel = copyFrom.fileLevel;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>      this.consoleLevel = copyFrom.consoleLevel;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>      this.levels = new LinkedHashMap&lt;&gt;(copyFrom.levels);<a name="line.55"></a>
+<span class="sourceLineNo">056</span>      this.formatter = copyFrom.formatter;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   }<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>   /**<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    * Creates a copy of this log configuration.<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    *<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    * @return A new copy of this log configuration.<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    */<a name="line.63"></a>
+<span class="sourceLineNo">064</span>   public LogConfig copy() {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>      return new LogConfig(this);<a name="line.65"></a>
+<span class="sourceLineNo">066</span>   }<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>    * Creates a new instance of this config.<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    *<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    * @return A new instance of this config.<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    */<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   public static LogConfig create() {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      return new LogConfig();<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   }<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>   /**<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    * Returns the name of the log file on the file system to store the log file for this microservice.<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    *<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    * &lt;p&gt;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    * This overrides the configuration value &lt;js&gt;"Logging/logFile"&lt;/js&gt;.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    * If not specified, no file system logging will be used.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    *<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    * @param logFile The log file.<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    * @return This object (for method chaining).<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    */<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   public LogConfig logFile(String logFile) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      this.logFile = logFile;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      return this;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   }<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>   /**<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    * The location of the log directory to create the log file.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    *<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    * &lt;p&gt;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    * This overrides the configuration value &lt;js&gt;"Logging/logDir"&lt;/js&gt;.<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    * If not specified, uses the JVM working directory.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    *<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    * @param logDir The log directory location as a path relative to the working directory.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    * @return This object (for method chaining).<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    */<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   public LogConfig logDir(String logDir) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      this.logDir = logDir;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      return this;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   }<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>    * The log entry formatter.<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    *<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    * &lt;p&gt;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    * If not specified, uses the following values pulled from the configuration to construct a {@link LogEntryFormatter}:<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    * &lt;ul&gt;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    *    &lt;li&gt;&lt;js&gt;&lt;js&gt;"Logging/format"&lt;/js&gt; (default is &lt;js&gt;"[{date} {level}] {msg}%n"&lt;/js&gt;)<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    *    &lt;li&gt;&lt;js&gt;&lt;js&gt;"Logging/dateFormat"&lt;/js&gt; (default is &lt;js&gt;"yyyy.MM.dd hh:mm:ss"&lt;/js&gt;)<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    *    &lt;li&gt;&lt;js&gt;&lt;js&gt;"Logging/useStackTraceHashes"&lt;/js&gt; (default is &lt;jk&gt;false&lt;/jk&gt;)<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    * &lt;/ul&gt;<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>    * @param formatter The log entry formatter.<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    * @return This object (for method chaining).<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    * @see LogEntryFormatter<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   public LogConfig formatter(Formatter formatter) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      this.formatter = formatter;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      return this;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>   /**<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    * Specified append mode for the log file.<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    *<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    * @return This object (for method chaining).<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    */<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   public LogConfig append() {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      this.append = true;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      return this;<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>   /**<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    * The maximum number of bytes to write to any one log file.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    *<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    * @param limit The number of bytes.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    * @return This object (for method chaining).<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    */<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   public LogConfig limit(int limit) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      this.limit = limit;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      return this;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   }<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>    * The number of log files to use.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    *<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    * @param count The number of log files.<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    * @return This object (for method chaining).<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    */<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   public LogConfig count(int count) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      this.count = count;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      return this;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   }<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>   /**<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    * The default logging level for the log file.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    *<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    * @param fileLevel The logging level.<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    * @return This object (for method chaining).<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    */<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   public LogConfig fileLevel(Level fileLevel) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      this.fileLevel = fileLevel;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      return this;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   }<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>    * The default logging level for the console.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    *<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    * @param consoleLevel The logging level.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    * @return This object (for method chaining).<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    */<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   public LogConfig consoleLevel(Level consoleLevel) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      this.consoleLevel = consoleLevel;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      return this;<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>    * Default logging levels for loggers.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    *<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    * @param levels A map of logger names to logger levels.<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    * @return This object (for method chaining).<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    */<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   public LogConfig levels(Map&lt;String,Level&gt; levels) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      this.levels.putAll(levels);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      return this;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>   /**<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    * Default logging level for logger.<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    *<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    * @param logger Logger name.<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    * @param level Logger level.<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    * @return This object (for method chaining).<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    */<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   public LogConfig level(String logger, Level level) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      this.levels.put(logger, level);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      return this;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>}<a name="line.204"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/Microservice.Builder.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/Microservice.Builder.html
index a99dea8..715a51d 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/Microservice.Builder.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/Microservice.Builder.html
@@ -22,384 +22,384 @@
 <span class="sourceLineNo">014</span><a name="line.14"></a>
 <span class="sourceLineNo">015</span>import static org.apache.juneau.internal.ClassUtils.*;<a name="line.15"></a>
 <span class="sourceLineNo">016</span>import static org.apache.juneau.internal.CollectionUtils.*;<a name="line.16"></a>
-<span class="sourceLineNo">017</span>import static org.apache.juneau.internal.IOUtils.*;<a name="line.17"></a>
-<span class="sourceLineNo">018</span>import static org.apache.juneau.internal.StringUtils.*;<a name="line.18"></a>
-<span class="sourceLineNo">019</span>import java.io.*;<a name="line.19"></a>
-<span class="sourceLineNo">020</span>import java.io.Console;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.net.*;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.nio.file.*;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.text.*;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.*;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.concurrent.*;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.jar.*;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.logging.*;<a name="line.27"></a>
-<span class="sourceLineNo">028</span><a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.juneau.*;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.juneau.collections.*;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.juneau.config.*;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.juneau.config.event.*;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.juneau.config.store.*;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.juneau.config.store.FileStore;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.juneau.config.vars.*;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.juneau.cp.*;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.juneau.internal.*;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.juneau.microservice.console.*;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.juneau.parser.ParseException;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.juneau.svl.*;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.juneau.svl.vars.*;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.juneau.utils.*;<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> * Parent class for all microservices.<a name="line.45"></a>
-<span class="sourceLineNo">046</span> *<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * &lt;p&gt;<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * A microservice defines a simple API for starting and stopping simple Java services contained in executable jars.<a name="line.48"></a>
-<span class="sourceLineNo">049</span> *<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * &lt;p&gt;<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * The general command for creating and starting a microservice from a main method is as follows:<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * &lt;p class='bjava'&gt;<a name="line.52"></a>
-<span class="sourceLineNo">053</span> *    &lt;jk&gt;public static void&lt;/jk&gt; main(String[] &lt;jv&gt;args&lt;/jv&gt;) {<a name="line.53"></a>
-<span class="sourceLineNo">054</span> *       Microservice.&lt;jsm&gt;create&lt;/jsm&gt;().args(&lt;jv&gt;args&lt;/jv&gt;).build().start().join();<a name="line.54"></a>
-<span class="sourceLineNo">055</span> *  }<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * &lt;/p&gt;<a name="line.56"></a>
-<span class="sourceLineNo">057</span> *<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * &lt;p&gt;<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * Your microservice class must be specified as the &lt;jk&gt;Main-Class&lt;/jk&gt; entry in the manifest file of your microservice<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * jar file if it's an executable jar.<a name="line.60"></a>
-<span class="sourceLineNo">061</span> *<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * &lt;h5 class='topic'&gt;Microservice Configuration&lt;/h5&gt;<a name="line.62"></a>
-<span class="sourceLineNo">063</span> *<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * This class defines the following method for accessing configuration for your microservice:<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * &lt;ul class='spaced-list'&gt;<a name="line.65"></a>
-<span class="sourceLineNo">066</span> *    &lt;li&gt;<a name="line.66"></a>
-<span class="sourceLineNo">067</span> *       {@link #getArgs()} - The command-line arguments passed to the jar file.<a name="line.67"></a>
-<span class="sourceLineNo">068</span> *    &lt;li&gt;<a name="line.68"></a>
-<span class="sourceLineNo">069</span> *       {@link #getConfig()} - An external INI-style configuration file.<a name="line.69"></a>
-<span class="sourceLineNo">070</span> *    &lt;li&gt;<a name="line.70"></a>
-<span class="sourceLineNo">071</span> *       {@link #getManifest()} - The manifest file for the main jar file.<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * &lt;/ul&gt;<a name="line.72"></a>
-<span class="sourceLineNo">073</span> *<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * &lt;h5 class='topic'&gt;Lifecycle Methods&lt;/h5&gt;<a name="line.74"></a>
-<span class="sourceLineNo">075</span> *<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * Subclasses must implement the following lifecycle methods:<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * &lt;ul class='spaced-list'&gt;<a name="line.77"></a>
-<span class="sourceLineNo">078</span> *    &lt;li&gt;<a name="line.78"></a>
-<span class="sourceLineNo">079</span> *       {@link #init()} - Gets executed immediately following construction.<a name="line.79"></a>
-<span class="sourceLineNo">080</span> *    &lt;li&gt;<a name="line.80"></a>
-<span class="sourceLineNo">081</span> *       {@link #start()} - Gets executed during startup.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> *    &lt;li&gt;<a name="line.82"></a>
-<span class="sourceLineNo">083</span> *       {@link #stop()} - Gets executed when 'exit' is typed in the console or an external shutdown signal is received.<a name="line.83"></a>
-<span class="sourceLineNo">084</span> *    &lt;li&gt;<a name="line.84"></a>
-<span class="sourceLineNo">085</span> *       {@link #kill()} - Can be used to forcibly shut down the service.  Doesn't get called during normal operation.<a name="line.85"></a>
-<span class="sourceLineNo">086</span> * &lt;/ul&gt;<a name="line.86"></a>
-<span class="sourceLineNo">087</span> *<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * &lt;ul class='seealso'&gt;<a name="line.88"></a>
-<span class="sourceLineNo">089</span> *    &lt;li class='link'&gt;{@doc juneau-microservice-core}<a name="line.89"></a>
-<span class="sourceLineNo">090</span> *    &lt;li class='extlink'&gt;{@source}<a name="line.90"></a>
+<span class="sourceLineNo">017</span>import static org.apache.juneau.internal.FileUtils.*;<a name="line.17"></a>
+<span class="sourceLineNo">018</span>import static org.apache.juneau.internal.IOUtils.*;<a name="line.18"></a>
+<span class="sourceLineNo">019</span>import static org.apache.juneau.internal.ObjectUtils.*;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.apache.juneau.internal.StringUtils.*;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><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.io.Console;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.net.*;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.nio.file.*;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.text.*;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.*;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.concurrent.*;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.jar.*;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.logging.*;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.logging.Formatter;<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.juneau.*;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.juneau.collections.*;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.juneau.config.*;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.juneau.config.event.*;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.juneau.config.store.*;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.juneau.config.store.FileStore;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.juneau.config.vars.*;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.juneau.cp.*;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.juneau.internal.*;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.juneau.microservice.console.*;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.juneau.microservice.resources.*;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.juneau.parser.ParseException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.juneau.svl.*;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.juneau.svl.vars.*;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.juneau.utils.*;<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> * Parent class for all microservices.<a name="line.50"></a>
+<span class="sourceLineNo">051</span> *<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * &lt;p&gt;<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * A microservice defines a simple API for starting and stopping simple Java services contained in executable jars.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * &lt;p&gt;<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * The general command for creating and starting a microservice from a main method is as follows:<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * &lt;p class='bjava'&gt;<a name="line.57"></a>
+<span class="sourceLineNo">058</span> *    &lt;jk&gt;public static void&lt;/jk&gt; main(String[] &lt;jv&gt;args&lt;/jv&gt;) {<a name="line.58"></a>
+<span class="sourceLineNo">059</span> *       Microservice.&lt;jsm&gt;create&lt;/jsm&gt;().args(&lt;jv&gt;args&lt;/jv&gt;).build().start().join();<a name="line.59"></a>
+<span class="sourceLineNo">060</span> *  }<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * &lt;/p&gt;<a name="line.61"></a>
+<span class="sourceLineNo">062</span> *<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * &lt;p&gt;<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * Your microservice class must be specified as the &lt;jk&gt;Main-Class&lt;/jk&gt; entry in the manifest file of your microservice<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * jar file if it's an executable jar.<a name="line.65"></a>
+<span class="sourceLineNo">066</span> *<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * &lt;h5 class='topic'&gt;Microservice Configuration&lt;/h5&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span> *<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * This class defines the following method for accessing configuration for your microservice:<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * &lt;ul class='spaced-list'&gt;<a name="line.70"></a>
+<span class="sourceLineNo">071</span> *    &lt;li&gt;<a name="line.71"></a>
+<span class="sourceLineNo">072</span> *       {@link #getArgs()} - The command-line arguments passed to the jar file.<a name="line.72"></a>
+<span class="sourceLineNo">073</span> *    &lt;li&gt;<a name="line.73"></a>
+<span class="sourceLineNo">074</span> *       {@link #getConfig()} - An external INI-style configuration file.<a name="line.74"></a>
+<span class="sourceLineNo">075</span> *    &lt;li&gt;<a name="line.75"></a>
+<span class="sourceLineNo">076</span> *       {@link #getManifest()} - The manifest file for the main jar file.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * &lt;/ul&gt;<a name="line.77"></a>
+<span class="sourceLineNo">078</span> *<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * &lt;h5 class='topic'&gt;Lifecycle Methods&lt;/h5&gt;<a name="line.79"></a>
+<span class="sourceLineNo">080</span> *<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * Subclasses must implement the following lifecycle methods:<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * &lt;ul class='spaced-list'&gt;<a name="line.82"></a>
+<span class="sourceLineNo">083</span> *    &lt;li&gt;<a name="line.83"></a>
+<span class="sourceLineNo">084</span> *       {@link #init()} - Gets executed immediately following construction.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> *    &lt;li&gt;<a name="line.85"></a>
+<span class="sourceLineNo">086</span> *       {@link #start()} - Gets executed during startup.<a name="line.86"></a>
+<span class="sourceLineNo">087</span> *    &lt;li&gt;<a name="line.87"></a>
+<span class="sourceLineNo">088</span> *       {@link #stop()} - Gets executed when 'exit' is typed in the console or an external shutdown signal is received.<a name="line.88"></a>
+<span class="sourceLineNo">089</span> *    &lt;li&gt;<a name="line.89"></a>
+<span class="sourceLineNo">090</span> *       {@link #kill()} - Can be used to forcibly shut down the service.  Doesn't get called during normal operation.<a name="line.90"></a>
 <span class="sourceLineNo">091</span> * &lt;/ul&gt;<a name="line.91"></a>
-<span class="sourceLineNo">092</span> */<a name="line.92"></a>
-<span class="sourceLineNo">093</span>public class Microservice implements ConfigEventListener {<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   // Static<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span>   private static volatile Microservice INSTANCE;<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>   private static void setInstance(Microservice m) {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>      synchronized(Microservice.class) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>         INSTANCE = m;<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><a name="line.106"></a>
-<span class="sourceLineNo">107</span>   /**<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    * Returns the Microservice instance.<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    *<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    * &lt;p&gt;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    * This method only works if there's only one Microservice instance in a JVM.<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    * Otherwise, it's just overwritten by the last instantiated microservice.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    *<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    * @return The Microservice instance, or &lt;jk&gt;null&lt;/jk&gt; if there isn't one.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    */<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   public static Microservice getInstance() {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      synchronized(Microservice.class) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>         return INSTANCE;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      }<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   }<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>   /**<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    * Creates a new builder for this object.<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    *<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    * @return A new microservice builder.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    */<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   public static Builder create() {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      return new Builder();<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   // Builder<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>   /**<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    * Builder class.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    */<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   public static class Builder {<a name="line.138"></a>
+<span class="sourceLineNo">092</span> *<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * &lt;ul class='seealso'&gt;<a name="line.93"></a>
+<span class="sourceLineNo">094</span> *    &lt;li class='link'&gt;{@doc juneau-microservice-core}<a name="line.94"></a>
+<span class="sourceLineNo">095</span> *    &lt;li class='extlink'&gt;{@source}<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * &lt;/ul&gt;<a name="line.96"></a>
+<span class="sourceLineNo">097</span> */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>public class Microservice implements ConfigEventListener {<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   // Static<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>   private static volatile Microservice INSTANCE;<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>   private static void setInstance(Microservice m) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      synchronized(Microservice.class) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>         INSTANCE = m;<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><a name="line.111"></a>
+<span class="sourceLineNo">112</span>   /**<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    * Returns the Microservice instance.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    *<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    * &lt;p&gt;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    * This method only works if there's only one Microservice instance in a JVM.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    * Otherwise, it's just overwritten by the last instantiated microservice.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    *<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    * @return The Microservice instance, or &lt;jk&gt;null&lt;/jk&gt; if there isn't one.<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   public static Microservice getInstance() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      synchronized(Microservice.class) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>         return INSTANCE;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      }<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>   /**<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    * Creates a new builder for this object.<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    *<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    * @return A new microservice builder.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   public static Builder create() {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      return new Builder();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   }<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>   // Builder<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>      Args args;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      ManifestFile manifest;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      Logger logger;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      Config config;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      String configName;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      ConfigStore configStore;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      Config.Builder configBuilder = Config.create();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      Boolean consoleEnabled;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      List&lt;ConsoleCommand&gt; consoleCommands = list();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      VarResolver.Builder varResolver = VarResolver.create().defaultVars().vars(ConfigVar.class);<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      Scanner consoleReader;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      PrintWriter consoleWriter;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      MicroserviceListener listener;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      File workingDir = System.getProperty("juneau.workingDir") == null ? null : new File(System.getProperty("juneau.workingDir"));<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>      /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>       * Constructor.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>       */<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      protected Builder() {}<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>      /**<a name="line.160"></a>
-<span class="sourceLineNo">161</span>       * Copy constructor.<a name="line.161"></a>
-<span class="sourceLineNo">162</span>       *<a name="line.162"></a>
-<span class="sourceLineNo">163</span>       * @param copyFrom The builder to copy.<a name="line.163"></a>
-<span class="sourceLineNo">164</span>       */<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      protected Builder(Builder copyFrom) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>         this.args = copyFrom.args;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>         this.manifest = copyFrom.manifest;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>         this.logger = copyFrom.logger;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>         this.configName = copyFrom.configName;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>         this.consoleEnabled = copyFrom.consoleEnabled;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>         this.configBuilder = copyFrom.configBuilder;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>         this.varResolver = copyFrom.varResolver;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>         this.consoleReader = copyFrom.consoleReader;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>         this.consoleWriter = copyFrom.consoleWriter;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>         this.workingDir = copyFrom.workingDir;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>      /**<a name="line.178"></a>
-<span class="sourceLineNo">179</span>       * Creates a copy of this builder.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>       *<a name="line.180"></a>
-<span class="sourceLineNo">181</span>       * @return A new copy of this builder.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>       */<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      public Builder copy() {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>         return new Builder(this);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      }<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>       * Instantiate a new microservice using the settings defined on this builder.<a name="line.188"></a>
-<span class="sourceLineNo">189</span>       *<a name="line.189"></a>
-<span class="sourceLineNo">190</span>       * @return A new microservice.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>       * @throws Exception Error occurred.<a name="line.191"></a>
-<span class="sourceLineNo">192</span>       */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      public Microservice build() throws Exception {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>         return new Microservice(this);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>      /**<a name="line.197"></a>
-<span class="sourceLineNo">198</span>       * Specifies the command-line arguments passed into the Java command.<a name="line.198"></a>
-<span class="sourceLineNo">199</span>       *<a name="line.199"></a>
-<span class="sourceLineNo">200</span>       * &lt;p&gt;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>       * This is required if you use {@link Microservice#getArgs()} or &lt;c&gt;$A&lt;/c&gt; string variables.<a name="line.201"></a>
-<span class="sourceLineNo">202</span>       *<a name="line.202"></a>
-<span class="sourceLineNo">203</span>       * @param args<a name="line.203"></a>
-<span class="sourceLineNo">204</span>       *    The command-line arguments passed into the Java command as a pre-parsed {@link Args} object.<a name="line.204"></a>
-<span class="sourceLineNo">205</span>       * @return This object.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>       */<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      public Builder args(Args args) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>         this.args = args;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>         return this;<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>      /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span>       * Specifies the command-line arguments passed into the Java command.<a name="line.213"></a>
-<span class="sourceLineNo">214</span>       *<a name="line.214"></a>
-<span class="sourceLineNo">215</span>       * &lt;p&gt;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>       * This is required if you use {@link Microservice#getArgs()} or &lt;c&gt;$A&lt;/c&gt; string variables.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>       *<a name="line.217"></a>
-<span class="sourceLineNo">218</span>       * @param args<a name="line.218"></a>
-<span class="sourceLineNo">219</span>       *    The command-line arguments passed into the Java command as the raw command-line arguments.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>       * @return This object.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>       */<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      public Builder args(String...args) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>         this.args = new Args(args);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>         return this;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      }<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>       * Specifies the manifest file of the jar file this microservice is contained within.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>       *<a name="line.229"></a>
-<span class="sourceLineNo">230</span>       * &lt;p&gt;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>       * This is required if you use {@link Microservice#getManifest()}.<a name="line.231"></a>
-<span class="sourceLineNo">232</span>       * It's also used to locate initialization values such as &lt;c&gt;Main-Config&lt;/c&gt;.<a name="line.232"></a>
-<span class="sourceLineNo">233</span>       *<a name="line.233"></a>
-<span class="sourceLineNo">234</span>       * &lt;p&gt;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>       * If you do not specify the manifest file, we attempt to resolve it through the following methods:<a name="line.235"></a>
-<span class="sourceLineNo">236</span>       * &lt;ol class='spaced-list'&gt;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>       *    &lt;li&gt;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>       *       Looking on the file system for a file at &lt;js&gt;"META-INF/MANIFEST.MF"&lt;/js&gt;.<a name="line.238"></a>
-<span class="sourceLineNo">239</span>       *       This is primarily to allow for running microservices from within eclipse workspaces where the manifest file<a name="line.239"></a>
-<span class="sourceLineNo">240</span>       *       is located in the project root.<a name="line.240"></a>
-<span class="sourceLineNo">241</span>       *    &lt;li&gt;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>       *       Using the class loader for this class to find the file at the URL &lt;js&gt;"META-INF/MANIFEST.MF"&lt;/js&gt;.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>       * &lt;/ol&gt;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>       *<a name="line.244"></a>
-<span class="sourceLineNo">245</span>       * @param value<a name="line.245"></a>
-<span class="sourceLineNo">246</span>       *    The manifest file of this microservice.<a name="line.246"></a>
-<span class="sourceLineNo">247</span>       *    &lt;br&gt;Can be any of the following types:<a name="line.247"></a>
-<span class="sourceLineNo">248</span>       *    &lt;ul&gt;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>       *       &lt;li&gt;{@link ManifestFile}<a name="line.249"></a>
-<span class="sourceLineNo">250</span>       *       &lt;li&gt;{@link Manifest}<a name="line.250"></a>
-<span class="sourceLineNo">251</span>       *       &lt;li&gt;{@link Reader} - Containing the raw contents of the manifest.  Note that the input must end with a newline.<a name="line.251"></a>
-<span class="sourceLineNo">252</span>       *       &lt;li&gt;{@link InputStream} - Containing the raw contents of the manifest.  Note that the input must end with a newline.<a name="line.252"></a>
-<span class="sourceLineNo">253</span>       *       &lt;li&gt;{@link File} - File containing the raw contents of the manifest.<a name="line.253"></a>
-<span class="sourceLineNo">254</span>       *       &lt;li&gt;{@link String} - Path to file containing the raw contents of the manifest.<a name="line.254"></a>
-<span class="sourceLineNo">255</span>       *       &lt;li&gt;{@link Class} - Finds and loads the manifest file of the jar file that the specified class is contained within.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>       *    &lt;/ul&gt;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>       * @return This object.<a name="line.257"></a>
-<span class="sourceLineNo">258</span>       * @throws IOException Thrown by underlying stream.<a name="line.258"></a>
-<span class="sourceLineNo">259</span>       */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      public Builder manifest(Object value) throws IOException {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>         if (value == null)<a name="line.261"></a>
-<span class="sourceLineNo">262</span>            this.manifest = null;<a name="line.262"></a>
-<span class="sourceLineNo">263</span>         else if (value instanceof ManifestFile)<a name="line.263"></a>
-<span class="sourceLineNo">264</span>            this.manifest = (ManifestFile)value;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>         else if (value instanceof Manifest)<a name="line.265"></a>
-<span class="sourceLineNo">266</span>            this.manifest = new ManifestFile((Manifest)value);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>         else if (value instanceof Reader)<a name="line.267"></a>
-<span class="sourceLineNo">268</span>            this.manifest = new ManifestFile((Reader)value);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>         else if (value instanceof InputStream)<a name="line.269"></a>
-<span class="sourceLineNo">270</span>            this.manifest = new ManifestFile((InputStream)value);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>         else if (value instanceof File)<a name="line.271"></a>
-<span class="sourceLineNo">272</span>            this.manifest = new ManifestFile((File)value);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>         else if (value instanceof String)<a name="line.273"></a>
-<span class="sourceLineNo">274</span>            this.manifest = new ManifestFile(resolveFile((String)value));<a name="line.274"></a>
-<span class="sourceLineNo">275</span>         else if (value instanceof Class)<a name="line.275"></a>
-<span class="sourceLineNo">276</span>            this.manifest = new ManifestFile((Class&lt;?&gt;)value);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>         else<a name="line.277"></a>
-<span class="sourceLineNo">278</span>            throw new BasicRuntimeException("Invalid type passed to Builder.manifest(Object).  Type=[{0}]", className(value));<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>         return this;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>      /**<a name="line.283"></a>
-<span class="sourceLineNo">284</span>       * Specifies the logger used by the microservice and returned by the {@link Microservice#getLogger()} method.<a name="line.284"></a>
-<span class="sourceLineNo">285</span>       *<a name="line.285"></a>
-<span class="sourceLineNo">286</span>       * @param logger The logger to use for logging microservice messages.<a name="line.286"></a>
-<span class="sourceLineNo">287</span>       * @return This object.<a name="line.287"></a>
-<span class="sourceLineNo">288</span>       */<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      public Builder logger(Logger logger) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>         this.logger = logger;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>         return this;<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>      /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span>       * Specifies the config for initializing this microservice.<a name="line.295"></a>
-<span class="sourceLineNo">296</span>       *<a name="line.296"></a>
-<span class="sourceLineNo">297</span>       * &lt;p&gt;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>       * Calling this method overrides the default configuration controlled by the {@link #configName(String)} and {@link #configStore(ConfigStore)} methods.<a name="line.298"></a>
-<span class="sourceLineNo">299</span>       *<a name="line.299"></a>
-<span class="sourceLineNo">300</span>       * @param config The configuration.<a name="line.300"></a>
-<span class="sourceLineNo">301</span>       * @return This object.<a name="line.301"></a>
-<span class="sourceLineNo">302</span>       */<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      public Builder config(Config config) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>         this.config = config;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>         return this;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      }<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>      /**<a name="line.308"></a>
-<span class="sourceLineNo">309</span>       * Specifies the config name for initializing this microservice.<a name="line.309"></a>
-<span class="sourceLineNo">310</span>       *<a name="line.310"></a>
-<span class="sourceLineNo">311</span>       * &lt;p&gt;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>       * If you do not specify the config file location, we attempt to resolve it through the following methods:<a name="line.312"></a>
-<span class="sourceLineNo">313</span>       * &lt;ol class='spaced-list'&gt;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>       *    &lt;li&gt;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>       *       Resolve file first in working directory, then in classpath, using the following names:<a name="line.315"></a>
-<span class="sourceLineNo">316</span>       *       &lt;ul&gt;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>       *          &lt;li&gt;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>       *             The &lt;js&gt;"configFile"&lt;/js&gt; argument in the command line arguments passed in through the constructor.<a name="line.318"></a>
-<span class="sourceLineNo">319</span>       *          &lt;li&gt;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>       *             The value of the &lt;c&gt;Main-Config&lt;/c&gt; entry in the manifest file.<a name="line.320"></a>
-<span class="sourceLineNo">321</span>       *          &lt;li&gt;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>       *             A config file in the same location and with the same name as the executable jar file.<a name="line.322"></a>
-<span class="sourceLineNo">323</span>       *             (e.g. &lt;js&gt;"java -jar myjar.jar"&lt;/js&gt; will look for &lt;js&gt;"myjar.cfg"&lt;/js&gt;).<a name="line.323"></a>
-<span class="sourceLineNo">324</span>       *       &lt;/ul&gt;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>       *    &lt;li&gt;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>       *       Resolve any &lt;js&gt;"*.cfg"&lt;/js&gt; file that can be found in the working directory.<a name="line.326"></a>
-<span class="sourceLineNo">327</span>       *    &lt;li&gt;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>       *       Resolve any of the following files in the classpath:  &lt;js&gt;"juneau.cfg"&lt;/js&gt;, &lt;js&gt;"system.cfg"&lt;/js&gt;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>       * &lt;/ol&gt;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>       *<a name="line.330"></a>
-<span class="sourceLineNo">331</span>       * &lt;p&gt;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>       * If no configuration file is found, and empty in-memory configuration is used.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>       *<a name="line.333"></a>
-<span class="sourceLineNo">334</span>       * @param configName The configuration name.<a name="line.334"></a>
-<span class="sourceLineNo">335</span>       * @return This object.<a name="line.335"></a>
-<span class="sourceLineNo">336</span>       */<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      public Builder configName(String configName) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>         this.configName = configName;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>         return this;<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>       * Specifies the config store to use for storing and retrieving configurations.<a name="line.343"></a>
-<span class="sourceLineNo">344</span>       *<a name="line.344"></a>
-<span class="sourceLineNo">345</span>       * &lt;p&gt;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>       * By default, we use a {@link FileStore} store for configuration files.<a name="line.346"></a>
-<span class="sourceLineNo">347</span>       *<a name="line.347"></a>
-<span class="sourceLineNo">348</span>       * @param configStore The configuration name.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>       * @return This object.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>       */<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      public Builder configStore(ConfigStore configStore) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>         this.configStore = configStore;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>         return this;<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>       * Specifies that the Java console is enabled for this microservice.<a name="line.357"></a>
-<span class="sourceLineNo">358</span>       *<a name="line.358"></a>
-<span class="sourceLineNo">359</span>       * &lt;p&gt;<a name="line.359"></a>
-<span class="sourceLineNo">360</span>       * If not specified, this value is taken from the &lt;js&gt;"Console/enabled"&lt;/js&gt; configuration setting.<a name="line.360"></a>
-<span class="sourceLineNo">361</span>       * If not specified in the configuration, defaults to &lt;jk&gt;false&lt;/jk&gt;.<a name="line.361"></a>
-<span class="sourceLineNo">362</span>       *<a name="line.362"></a>
-<span class="sourceLineNo">363</span>       * @param consoleEnabled &lt;jk&gt;true&lt;/jk&gt; if the Java console is enabled for this microservice.<a name="line.363"></a>
-<span class="sourceLineNo">364</span>       * @return This object.<a name="line.364"></a>
-<span class="sourceLineNo">365</span>       */<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      public Builder consoleEnabled(boolean consoleEnabled) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>         this.consoleEnabled = consoleEnabled;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>         return this;<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>      /**<a name="line.371"></a>
-<span class="sourceLineNo">372</span>       * Specifies console commands to make available on the Java console.<a name="line.372"></a>
-<span class="sourceLineNo">373</span>       *<a name="line.373"></a>
-<span class="sourceLineNo">374</span>       * &lt;p&gt;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>       * Note that these are ignored if the console is not enabled via {@link #consoleEnabled(boolean)}.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>       *<a name="line.376"></a>
-<span class="sourceLineNo">377</span>       * &lt;p&gt;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>       * This list augments the commands defined via the &lt;js&gt;"Console/commands"&lt;/js&gt; configuration setting.<a name="line.378"></a>
-<span class="sourceLineNo">379</span>       *<a name="line.379"></a>
-<span class="sourceLineNo">380</span>       * &lt;p&gt;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>       * This method can only be used on console commands with no-arg constructors.<a name="line.381"></a>
-<span class="sourceLineNo">382</span>       *<a name="line.382"></a>
-<span class="sourceLineNo">383</span>       * @param consoleCommands The list of console commands to append to the list of available commands.<a name="line.383"></a>
-<span class="sourceLineNo">384</span>       * @return This object.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>       * @throws ExecutableException Exception occurred on invoked constructor/method/field.<a name="line.385"></a>
-<span class="sourceLineNo">386</span>       */<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      @SuppressWarnings("unchecked")<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      public Builder consoleCommands(Class&lt;? extends ConsoleCommand&gt;...consoleCommands) throws ExecutableException {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>         try {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>            for (Class&lt;? extends ConsoleCommand&gt; cc : consoleCommands)<a name="line.390"></a>
-<span class="sourceLineNo">391</span>               this.consoleCommands.add(cc.newInstance());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>         } catch (InstantiationException | IllegalAccessException e) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>            throw new ExecutableException(e);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>         }<a name="line.394"></a>
+<span class="sourceLineNo">140</span>   /**<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    * Builder class.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    */<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   public static class Builder {<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>      Args args;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      ManifestFile manifest;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      Logger logger;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      LogConfig logConfig;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      Config config;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      String configName;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      ConfigStore configStore;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      Config.Builder configBuilder = Config.create();<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      Boolean consoleEnabled;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      List&lt;ConsoleCommand&gt; consoleCommands = list();<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      VarResolver.Builder varResolver = VarResolver.create().defaultVars().vars(ConfigVar.class);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      Scanner consoleReader;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      PrintWriter consoleWriter;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      MicroserviceListener listener;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      File workingDir = System.getProperty("juneau.workingDir") == null ? null : new File(System.getProperty("juneau.workingDir"));<a name="line.159"></a>
+<span class="sourceLineNo">160</span><a name="line.160"></a>
+<span class="sourceLineNo">161</span>      /**<a name="line.161"></a>
+<span class="sourceLineNo">162</span>       * Constructor.<a name="line.162"></a>
+<span class="sourceLineNo">163</span>       */<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      protected Builder() {}<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>      /**<a name="line.166"></a>
+<span class="sourceLineNo">167</span>       * Copy constructor.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>       *<a name="line.168"></a>
+<span class="sourceLineNo">169</span>       * @param copyFrom The builder to copy.<a name="line.169"></a>
+<span class="sourceLineNo">170</span>       */<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      protected Builder(Builder copyFrom) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>         this.args = copyFrom.args;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>         this.manifest = copyFrom.manifest;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>         this.logger = copyFrom.logger;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>         this.configName = copyFrom.configName;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>         this.logConfig = copyFrom.logConfig == null ? null : copyFrom.logConfig.copy();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>         this.consoleEnabled = copyFrom.consoleEnabled;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>         this.configBuilder = copyFrom.configBuilder;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>         this.varResolver = copyFrom.varResolver;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>         this.consoleReader = copyFrom.consoleReader;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>         this.consoleWriter = copyFrom.consoleWriter;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>         this.workingDir = copyFrom.workingDir;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      }<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>       * Creates a copy of this builder.<a name="line.186"></a>
+<span class="sourceLineNo">187</span>       *<a name="line.187"></a>
+<span class="sourceLineNo">188</span>       * @return A new copy of this builder.<a name="line.188"></a>
+<span class="sourceLineNo">189</span>       */<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      public Builder copy() {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>         return new Builder(this);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>      /**<a name="line.194"></a>
+<span class="sourceLineNo">195</span>       * Instantiate a new microservice using the settings defined on this builder.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>       *<a name="line.196"></a>
+<span class="sourceLineNo">197</span>       * @return A new microservice.<a name="line.197"></a>
+<span class="sourceLineNo">198</span>       * @throws Exception Error occurred.<a name="line.198"></a>
+<span class="sourceLineNo">199</span>       */<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      public Microservice build() throws Exception {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>         return new Microservice(this);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>      /**<a name="line.204"></a>
+<span class="sourceLineNo">205</span>       * Specifies the command-line arguments passed into the Java command.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>       *<a name="line.206"></a>
+<span class="sourceLineNo">207</span>       * &lt;p&gt;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>       * This is required if you use {@link Microservice#getArgs()} or &lt;c&gt;$A&lt;/c&gt; string variables.<a name="line.208"></a>
+<span class="sourceLineNo">209</span>       *<a name="line.209"></a>
+<span class="sourceLineNo">210</span>       * @param args<a name="line.210"></a>
+<span class="sourceLineNo">211</span>       *    The command-line arguments passed into the Java command as a pre-parsed {@link Args} object.<a name="line.211"></a>
+<span class="sourceLineNo">212</span>       * @return This object.<a name="line.212"></a>
+<span class="sourceLineNo">213</span>       */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      public Builder args(Args args) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>         this.args = args;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>         return 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>      /**<a name="line.219"></a>
+<span class="sourceLineNo">220</span>       * Specifies the command-line arguments passed into the Java command.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>       *<a name="line.221"></a>
+<span class="sourceLineNo">222</span>       * &lt;p&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>       * This is required if you use {@link Microservice#getArgs()} or &lt;c&gt;$A&lt;/c&gt; string variables.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>       *<a name="line.224"></a>
+<span class="sourceLineNo">225</span>       * @param args<a name="line.225"></a>
+<span class="sourceLineNo">226</span>       *    The command-line arguments passed into the Java command as the raw command-line arguments.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>       * @return This object.<a name="line.227"></a>
+<span class="sourceLineNo">228</span>       */<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      public Builder args(String...args) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>         this.args = new Args(args);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>         return this;<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>      /**<a name="line.234"></a>
+<span class="sourceLineNo">235</span>       * Specifies the manifest file of the jar file this microservice is contained within.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>       *<a name="line.236"></a>
+<span class="sourceLineNo">237</span>       * &lt;p&gt;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>       * This is required if you use {@link Microservice#getManifest()}.<a name="line.238"></a>
+<span class="sourceLineNo">239</span>       * It's also used to locate initialization values such as &lt;c&gt;Main-Config&lt;/c&gt;.<a name="line.239"></a>
+<span class="sourceLineNo">240</span>       *<a name="line.240"></a>
+<span class="sourceLineNo">241</span>       * &lt;p&gt;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>       * If you do not specify the manifest file, we attempt to resolve it through the following methods:<a name="line.242"></a>
+<span class="sourceLineNo">243</span>       * &lt;ol class='spaced-list'&gt;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>       *    &lt;li&gt;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>       *       Looking on the file system for a file at &lt;js&gt;"META-INF/MANIFEST.MF"&lt;/js&gt;.<a name="line.245"></a>
+<span class="sourceLineNo">246</span>       *       This is primarily to allow for running microservices from within eclipse workspaces where the manifest file<a name="line.246"></a>
+<span class="sourceLineNo">247</span>       *       is located in the project root.<a name="line.247"></a>
+<span class="sourceLineNo">248</span>       *    &lt;li&gt;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>       *       Using the class loader for this class to find the file at the URL &lt;js&gt;"META-INF/MANIFEST.MF"&lt;/js&gt;.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>       * &lt;/ol&gt;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>       *<a name="line.251"></a>
+<span class="sourceLineNo">252</span>       * @param value<a name="line.252"></a>
+<span class="sourceLineNo">253</span>       *    The manifest file of this microservice.<a name="line.253"></a>
+<span class="sourceLineNo">254</span>       *    &lt;br&gt;Can be any of the following types:<a name="line.254"></a>
+<span class="sourceLineNo">255</span>       *    &lt;ul&gt;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>       *       &lt;li&gt;{@link ManifestFile}<a name="line.256"></a>
+<span class="sourceLineNo">257</span>       *       &lt;li&gt;{@link Manifest}<a name="line.257"></a>
+<span class="sourceLineNo">258</span>       *       &lt;li&gt;{@link Reader} - Containing the raw contents of the manifest.  Note that the input must end with a newline.<a name="line.258"></a>
+<span class="sourceLineNo">259</span>       *       &lt;li&gt;{@link InputStream} - Containing the raw contents of the manifest.  Note that the input must end with a newline.<a name="line.259"></a>
+<span class="sourceLineNo">260</span>       *       &lt;li&gt;{@link File} - File containing the raw contents of the manifest.<a name="line.260"></a>
+<span class="sourceLineNo">261</span>       *       &lt;li&gt;{@link String} - Path to file containing the raw contents of the manifest.<a name="line.261"></a>
+<span class="sourceLineNo">262</span>       *       &lt;li&gt;{@link Class} - Finds and loads the manifest file of the jar file that the specified class is contained within.<a name="line.262"></a>
+<span class="sourceLineNo">263</span>       *    &lt;/ul&gt;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>       * @return This object.<a name="line.264"></a>
+<span class="sourceLineNo">265</span>       * @throws IOException Thrown by underlying stream.<a name="line.265"></a>
+<span class="sourceLineNo">266</span>       */<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      public Builder manifest(Object value) throws IOException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>         if (value == null)<a name="line.268"></a>
+<span class="sourceLineNo">269</span>            this.manifest = null;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>         else if (value instanceof ManifestFile)<a name="line.270"></a>
+<span class="sourceLineNo">271</span>            this.manifest = (ManifestFile)value;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>         else if (value instanceof Manifest)<a name="line.272"></a>
+<span class="sourceLineNo">273</span>            this.manifest = new ManifestFile((Manifest)value);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>         else if (value instanceof Reader)<a name="line.274"></a>
+<span class="sourceLineNo">275</span>            this.manifest = new ManifestFile((Reader)value);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>         else if (value instanceof InputStream)<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            this.manifest = new ManifestFile((InputStream)value);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>         else if (value instanceof File)<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            this.manifest = new ManifestFile((File)value);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>         else if (value instanceof String)<a name="line.280"></a>
+<span class="sourceLineNo">281</span>            this.manifest = new ManifestFile(resolveFile((String)value));<a name="line.281"></a>
+<span class="sourceLineNo">282</span>         else if (value instanceof Class)<a name="line.282"></a>
+<span class="sourceLineNo">283</span>            this.manifest = new ManifestFile((Class&lt;?&gt;)value);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>         else<a name="line.284"></a>
+<span class="sourceLineNo">285</span>            throw new BasicRuntimeException("Invalid type passed to Builder.manifest(Object).  Type=[{0}]", className(value));<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span>         return this;<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>       * Specifies the logger used by the microservice and returned by the {@link Microservice#getLogger()} method.<a name="line.291"></a>
+<span class="sourceLineNo">292</span>       *<a name="line.292"></a>
+<span class="sourceLineNo">293</span>       * &lt;p&gt;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>       * Calling this method overrides the default logging mechanism controlled by the {@link #logConfig(LogConfig)} method.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>       *<a name="line.295"></a>
+<span class="sourceLineNo">296</span>       * @param logger The logger to use for logging microservice messages.<a name="line.296"></a>
+<span class="sourceLineNo">297</span>       * @return This object.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>       */<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      public Builder logger(Logger logger) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>         this.logger = logger;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>         return this;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>      /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span>       * Specifies logging instructions for the microservice.<a name="line.305"></a>
+<span class="sourceLineNo">306</span>       *<a name="line.306"></a>
+<span class="sourceLineNo">307</span>       * &lt;p&gt;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>       * If not specified, the values are taken from the &lt;js&gt;"Logging"&lt;/js&gt; section of the configuration.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>       *<a name="line.309"></a>
+<span class="sourceLineNo">310</span>       * &lt;p&gt;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>       * This method is ignored if {@link #logger(Logger)} is used to set the microservice logger.<a name="line.311"></a>
+<span class="sourceLineNo">312</span>       *<a name="line.312"></a>
+<span class="sourceLineNo">313</span>       * @param logConfig The log configuration.<a name="line.313"></a>
+<span class="sourceLineNo">314</span>       * @return This object.<a name="line.314"></a>
+<span class="sourceLineNo">315</span>       */<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      public Builder logConfig(LogConfig logConfig) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>         this.logConfig = logConfig;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>         return this;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      }<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>       * Specifies the config for initializing this microservice.<a name="line.322"></a>
+<span class="sourceLineNo">323</span>       *<a name="line.323"></a>
+<span class="sourceLineNo">324</span>       * &lt;p&gt;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>       * Calling this method overrides the default configuration controlled by the {@link #configName(String)} and {@link #configStore(ConfigStore)} methods.<a name="line.325"></a>
+<span class="sourceLineNo">326</span>       *<a name="line.326"></a>
+<span class="sourceLineNo">327</span>       * @param config The configuration.<a name="line.327"></a>
+<span class="sourceLineNo">328</span>       * @return This object.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>       */<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      public Builder config(Config config) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>         this.config = config;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>         return this;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      }<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>      /**<a name="line.335"></a>
+<span class="sourceLineNo">336</span>       * Specifies the config name for initializing this microservice.<a name="line.336"></a>
+<span class="sourceLineNo">337</span>       *<a name="line.337"></a>
+<span class="sourceLineNo">338</span>       * &lt;p&gt;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>       * If you do not specify the config file location, we attempt to resolve it through the following methods:<a name="line.339"></a>
+<span class="sourceLineNo">340</span>       * &lt;ol class='spaced-list'&gt;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>       *    &lt;li&gt;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>       *       Resolve file first in working directory, then in classpath, using the following names:<a name="line.342"></a>
+<span class="sourceLineNo">343</span>       *       &lt;ul&gt;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>       *          &lt;li&gt;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>       *             The &lt;js&gt;"configFile"&lt;/js&gt; argument in the command line arguments passed in through the constructor.<a name="line.345"></a>
+<span class="sourceLineNo">346</span>       *          &lt;li&gt;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>       *             The value of the &lt;c&gt;Main-Config&lt;/c&gt; entry in the manifest file.<a name="line.347"></a>
+<span class="sourceLineNo">348</span>       *          &lt;li&gt;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>       *             A config file in the same location and with the same name as the executable jar file.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>       *             (e.g. &lt;js&gt;"java -jar myjar.jar"&lt;/js&gt; will look for &lt;js&gt;"myjar.cfg"&lt;/js&gt;).<a name="line.350"></a>
+<span class="sourceLineNo">351</span>       *       &lt;/ul&gt;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>       *    &lt;li&gt;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>       *       Resolve any &lt;js&gt;"*.cfg"&lt;/js&gt; file that can be found in the working directory.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>       *    &lt;li&gt;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>       *       Resolve any of the following files in the classpath:  &lt;js&gt;"juneau.cfg"&lt;/js&gt;, &lt;js&gt;"system.cfg"&lt;/js&gt;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>       * &lt;/ol&gt;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>       *<a name="line.357"></a>
+<span class="sourceLineNo">358</span>       * &lt;p&gt;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>       * If no configuration file is found, and empty in-memory configuration is used.<a name="line.359"></a>
+<span class="sourceLineNo">360</span>       *<a name="line.360"></a>
+<span class="sourceLineNo">361</span>       * @param configName The configuration name.<a name="line.361"></a>
+<span class="sourceLineNo">362</span>       * @return This object.<a name="line.362"></a>
+<span class="sourceLineNo">363</span>       */<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      public Builder configName(String configName) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>         this.configName = configName;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>         return this;<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>      /**<a name="line.369"></a>
+<span class="sourceLineNo">370</span>       * Specifies the config store to use for storing and retrieving configurations.<a name="line.370"></a>
+<span class="sourceLineNo">371</span>       *<a name="line.371"></a>
+<span class="sourceLineNo">372</span>       * &lt;p&gt;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>       * By default, we use a {@link FileStore} store for configuration files.<a name="line.373"></a>
+<span class="sourceLineNo">374</span>       *<a name="line.374"></a>
+<span class="sourceLineNo">375</span>       * @param configStore The configuration name.<a name="line.375"></a>
+<span class="sourceLineNo">376</span>       * @return This object.<a name="line.376"></a>
+<span class="sourceLineNo">377</span>       */<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      public Builder configStore(ConfigStore configStore) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>         this.configStore = configStore;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>         return this;<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>      /**<a name="line.383"></a>
+<span class="sourceLineNo">384</span>       * Specifies that the Java console is enabled for this microservice.<a name="line.384"></a>
+<span class="sourceLineNo">385</span>       *<a name="line.385"></a>
+<span class="sourceLineNo">386</span>       * &lt;p&gt;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>       * If not specified, this value is taken from the &lt;js&gt;"Console/enabled"&lt;/js&gt; configuration setting.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>       * If not specified in the configuration, defaults to &lt;jk&gt;false&lt;/jk&gt;.<a name="line.388"></a>
+<span class="sourceLineNo">389</span>       *<a name="line.389"></a>
+<span class="sourceLineNo">390</span>       * @param consoleEnabled &lt;jk&gt;true&lt;/jk&gt; if the Java console is enabled for this microservice.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>       * @return This object.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>       */<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      public Builder consoleEnabled(boolean consoleEnabled) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>         this.consoleEnabled = consoleEnabled;<a name="line.394"></a>
 <span class="sourceLineNo">395</span>         return this;<a name="line.395"></a>
 <span class="sourceLineNo">396</span>      }<a name="line.396"></a>
 <span class="sourceLineNo">397</span><a name="line.397"></a>
@@ -412,749 +412,826 @@
 <span class="sourceLineNo">404</span>       * &lt;p&gt;<a name="line.404"></a>
 <span class="sourceLineNo">405</span>       * This list augments the commands defined via the &lt;js&gt;"Console/commands"&lt;/js&gt; configuration setting.<a name="line.405"></a>
 <span class="sourceLineNo">406</span>       *<a name="line.406"></a>
-<span class="sourceLineNo">407</span>       * @param consoleCommands The list of console commands to append to the list of available commands.<a name="line.407"></a>
-<span class="sourceLineNo">408</span>       * @return This object.<a name="line.408"></a>
-<span class="sourceLineNo">409</span>       */<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      public Builder consoleCommands(ConsoleCommand...consoleCommands) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>         addAll(this.consoleCommands, consoleCommands);<a name="line.411"></a>
-<span class="sourceLineNo">412</span>         return this;<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>      /**<a name="line.415"></a>
-<span class="sourceLineNo">416</span>       * Specifies the console input and output.<a name="line.416"></a>
-<span class="sourceLineNo">417</span>       *<a name="line.417"></a>
-<span class="sourceLineNo">418</span>       * &lt;p&gt;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>       * If not specified, uses the console returned by {@link System#console()}.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>       * If that is not available, uses {@link System#in} and {@link System#out}.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>       *<a name="line.421"></a>
-<span class="sourceLineNo">422</span>       * &lt;p&gt;<a name="line.422"></a>
-<span class="sourceLineNo">423</span>       * Note that these are ignored if the console is not enabled via {@link #consoleEnabled(boolean)}.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>       *<a name="line.424"></a>
-<span class="sourceLineNo">425</span>       * @param consoleReader The console input.<a name="line.425"></a>
-<span class="sourceLineNo">426</span>       * @param consoleWriter The console output.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>       * @return This object.<a name="line.427"></a>
-<span class="sourceLineNo">428</span>       */<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      public Builder console(Scanner consoleReader, PrintWriter consoleWriter) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>         this.consoleReader = consoleReader;<a name="line.430"></a>
-<span class="sourceLineNo">431</span>         this.consoleWriter = consoleWriter;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>         return this;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      }<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>       * Augments the set of variables defined in the configuration and var resolver.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>       *<a name="line.437"></a>
-<span class="sourceLineNo">438</span>       * &lt;p&gt;<a name="line.438"></a>
-<span class="sourceLineNo">439</span>       * This calls {@link org.apache.juneau.svl.VarResolver.Builder#vars(Class[])} on the var resolver used to construct the configuration<a name="line.439"></a>
-<span class="sourceLineNo">440</span>       * object returned by {@link Microservice#getConfig()} and the var resolver returned by {@link Microservice#getVarResolver()}.<a name="line.440"></a>
-<span class="sourceLineNo">441</span>       *<a name="line.441"></a>
-<span class="sourceLineNo">442</span>       * @param vars The set of variables to append to the var resolver builder.<a name="line.442"></a>
-<span class="sourceLineNo">443</span>       * @return This object.<a name="line.443"></a>
-<span class="sourceLineNo">444</span>       */<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      @SuppressWarnings("unchecked")<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      public Builder vars(Class&lt;? extends Var&gt;...vars) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>         varResolver.vars(vars);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>         return this;<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>      /**<a name="line.451"></a>
-<span class="sourceLineNo">452</span>       * Adds a bean for vars defined in the var resolver.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>       *<a name="line.453"></a>
-<span class="sourceLineNo">454</span>       * &lt;p&gt;<a name="line.454"></a>
-<span class="sourceLineNo">455</span>       * This calls {@link org.apache.juneau.svl.VarResolver.Builder#bean(Class,Object)} on the var resolver used to construct the configuration<a name="line.455"></a>
-<span class="sourceLineNo">456</span>       * object returned by {@link Microservice#getConfig()} and the var resolver returned by {@link Microservice#getVarResolver()}.<a name="line.456"></a>
-<span class="sourceLineNo">457</span>       *<a name="line.457"></a>
-<span class="sourceLineNo">458</span>       * @param c The bean type.<a name="line.458"></a>
-<span class="sourceLineNo">459</span>       * @param value The bean.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>       * @param &lt;T&gt; The bean type.<a name="line.460"></a>
-<span class="sourceLineNo">461</span>       * @return This object.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>       */<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      public &lt;T&gt; Builder varBean(Class&lt;T&gt; c, T value) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>         varResolver.bean(c, value);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>         return this;<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>      /**<a name="line.468"></a>
-<span class="sourceLineNo">469</span>       * Specifies the directory to use to resolve the config file and other paths defined with the config file.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>       *<a name="line.470"></a>
-<span class="sourceLineNo">471</span>       * @param workingDir The working directory, or &lt;jk&gt;null&lt;/jk&gt; to use the underlying working directory.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>       * @return This object.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>       */<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      public Builder workingDir(File workingDir) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>         this.workingDir = workingDir;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>         return this;<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>       * Specifies the directory to use to resolve the config file and other paths defined with the config file.<a name="line.480"></a>
-<span class="sourceLineNo">481</span>       *<a name="line.481"></a>
-<span class="sourceLineNo">482</span>       * @param workingDir The working directory, or &lt;jk&gt;null&lt;/jk&gt; to use the underlying working directory.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>       * @return This object.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>       */<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      public Builder workingDir(String workingDir) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>         this.workingDir = new File(workingDir);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>         return this;<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>       * Registers an event listener for this microservice.<a name="line.491"></a>
-<span class="sourceLineNo">492</span>       *<a name="line.492"></a>
-<span class="sourceLineNo">493</span>       * @param listener An event listener for this microservice.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>       * @return This object.<a name="line.494"></a>
-<span class="sourceLineNo">495</span>       */<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      public Builder listener(MicroserviceListener listener) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>         this.listener = listener;<a name="line.497"></a>
-<span class="sourceLineNo">498</span>         return this;<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>       * Resolves the specified path.<a name="line.502"></a>
-<span class="sourceLineNo">503</span>       *<a name="line.503"></a>
-<span class="sourceLineNo">504</span>       * &lt;p&gt;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>       * If the working directory has been explicitly specified, relative paths are resolved relative to that.<a name="line.505"></a>
-<span class="sourceLineNo">506</span>       *<a name="line.506"></a>
-<span class="sourceLineNo">507</span>       * @param path The path to resolve.<a name="line.507"></a>
-<span class="sourceLineNo">508</span>       * @return The resolved file.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>       */<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      protected File resolveFile(String path) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>         if (Paths.get(path).isAbsolute())<a name="line.511"></a>
-<span class="sourceLineNo">512</span>            return new File(path);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>         if (workingDir != null)<a name="line.513"></a>
-<span class="sourceLineNo">514</span>            return new File(workingDir, path);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>         return new File(path);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.519"></a>
-<span class="sourceLineNo">520</span>   // Instance<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>   final Messages messages = Messages.of(Microservice.class);<a name="line.523"></a>
-<span class="sourceLineNo">524</span><a name="line.524"></a>
-<span class="sourceLineNo">525</span>   private final Args args;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>   private final Config config;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   private final ManifestFile manifest;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   private final VarResolver varResolver;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   private final MicroserviceListener listener;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   private final Map&lt;String,ConsoleCommand&gt; consoleCommandMap = new ConcurrentHashMap&lt;&gt;();<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   private final boolean consoleEnabled;<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   private final Scanner consoleReader;<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   private final PrintWriter consoleWriter;<a name="line.533"></a>
-<span class="sourceLineNo">534</span>   private final Thread consoleThread;<a name="line.534"></a>
-<span class="sourceLineNo">535</span>   final File workingDir;<a name="line.535"></a>
-<span class="sourceLineNo">536</span>   private final String configName;<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>   private volatile Logger logger = Logger.getGlobal();<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>    * Constructor.<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    *<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    * @param builder The builder containing the settings for this microservice.<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    * @throws IOException Problem occurred reading file.<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    * @throws ParseException Malformed input encountered.<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    */<a name="line.546"></a>
-<span class="sourceLineNo">547</span>   protected Microservice(Builder builder) throws IOException, ParseException {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      setInstance(this);<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      this.workingDir = builder.workingDir;<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      this.configName = builder.configName;<a name="line.550"></a>
+<span class="sourceLineNo">407</span>       * &lt;p&gt;<a name="line.407"></a>
+<span class="sourceLineNo">408</span>       * This method can only be used on console commands with no-arg constructors.<a name="line.408"></a>
+<span class="sourceLineNo">409</span>       *<a name="line.409"></a>
+<span class="sourceLineNo">410</span>       * @param consoleCommands The list of console commands to append to the list of available commands.<a name="line.410"></a>
+<span class="sourceLineNo">411</span>       * @return This object.<a name="line.411"></a>
+<span class="sourceLineNo">412</span>       * @throws ExecutableException Exception occurred on invoked constructor/method/field.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>       */<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      @SuppressWarnings("unchecked")<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      public Builder consoleCommands(Class&lt;? extends ConsoleCommand&gt;...consoleCommands) throws ExecutableException {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>         try {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>            for (Class&lt;? extends ConsoleCommand&gt; cc : consoleCommands)<a name="line.417"></a>
+<span class="sourceLineNo">418</span>               this.consoleCommands.add(cc.newInstance());<a name="line.418"></a>
+<span class="sourceLineNo">419</span>         } catch (InstantiationException | IllegalAccessException e) {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>            throw new ExecutableException(e);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>         }<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>       * Specifies console commands to make available on the Java console.<a name="line.426"></a>
+<span class="sourceLineNo">427</span>       *<a name="line.427"></a>
+<span class="sourceLineNo">428</span>       * &lt;p&gt;<a name="line.428"></a>
+<span class="sourceLineNo">429</span>       * Note that these are ignored if the console is not enabled via {@link #consoleEnabled(boolean)}.<a name="line.429"></a>
+<span class="sourceLineNo">430</span>       *<a name="line.430"></a>
+<span class="sourceLineNo">431</span>       * &lt;p&gt;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>       * This list augments the commands defined via the &lt;js&gt;"Console/commands"&lt;/js&gt; configuration setting.<a name="line.432"></a>
+<span class="sourceLineNo">433</span>       *<a name="line.433"></a>
+<span class="sourceLineNo">434</span>       * @param consoleCommands The list of console commands to append to the list of available commands.<a name="line.434"></a>
+<span class="sourceLineNo">435</span>       * @return This object.<a name="line.435"></a>
+<span class="sourceLineNo">436</span>       */<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      public Builder consoleCommands(ConsoleCommand...consoleCommands) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>         addAll(this.consoleCommands, consoleCommands);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>         return this;<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>      /**<a name="line.442"></a>
+<span class="sourceLineNo">443</span>       * Specifies the console input and output.<a name="line.443"></a>
+<span class="sourceLineNo">444</span>       *<a name="line.444"></a>
+<span class="sourceLineNo">445</span>       * &lt;p&gt;<a name="line.445"></a>
+<span class="sourceLineNo">446</span>       * If not specified, uses the console returned by {@link System#console()}.<a name="line.446"></a>
+<span class="sourceLineNo">447</span>       * If that is not available, uses {@link System#in} and {@link System#out}.<a name="line.447"></a>
+<span class="sourceLineNo">448</span>       *<a name="line.448"></a>
+<span class="sourceLineNo">449</span>       * &lt;p&gt;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>       * Note that these are ignored if the console is not enabled via {@link #consoleEnabled(boolean)}.<a name="line.450"></a>
+<span class="sourceLineNo">451</span>       *<a name="line.451"></a>
+<span class="sourceLineNo">452</span>       * @param consoleReader The console input.<a name="line.452"></a>
+<span class="sourceLineNo">453</span>       * @param consoleWriter The console output.<a name="line.453"></a>
+<span class="sourceLineNo">454</span>       * @return This object.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>       */<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      public Builder console(Scanner consoleReader, PrintWriter consoleWriter) {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>         this.consoleReader = consoleReader;<a name="line.457"></a>
+<span class="sourceLineNo">458</span>         this.consoleWriter = consoleWriter;<a name="line.458"></a>
+<span class="sourceLineNo">459</span>         return this;<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span>      /**<a name="line.462"></a>
+<span class="sourceLineNo">463</span>       * Augments the set of variables defined in the configuration and var resolver.<a name="line.463"></a>
+<span class="sourceLineNo">464</span>       *<a name="line.464"></a>
+<span class="sourceLineNo">465</span>       * &lt;p&gt;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>       * This calls {@link org.apache.juneau.svl.VarResolver.Builder#vars(Class[])} on the var resolver used to construct the configuration<a name="line.466"></a>
+<span class="sourceLineNo">467</span>       * object returned by {@link Microservice#getConfig()} and the var resolver returned by {@link Microservice#getVarResolver()}.<a name="line.467"></a>
+<span class="sourceLineNo">468</span>       *<a name="line.468"></a>
+<span class="sourceLineNo">469</span>       * @param vars The set of variables to append to the var resolver builder.<a name="line.469"></a>
+<span class="sourceLineNo">470</span>       * @return This object.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>       */<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      @SuppressWarnings("unchecked")<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      public Builder vars(Class&lt;? extends Var&gt;...vars) {<a name="line.473"></a>
+<span class="sourceLineNo">474</span>         varResolver.vars(vars);<a name="line.474"></a>
+<span class="sourceLineNo">475</span>         return this;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      }<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>       * Adds a bean for vars defined in the var resolver.<a name="line.479"></a>
+<span class="sourceLineNo">480</span>       *<a name="line.480"></a>
+<span class="sourceLineNo">481</span>       * &lt;p&gt;<a name="line.481"></a>
+<span class="sourceLineNo">482</span>       * This calls {@link org.apache.juneau.svl.VarResolver.Builder#bean(Class,Object)} on the var resolver used to construct the configuration<a name="line.482"></a>
+<span class="sourceLineNo">483</span>       * object returned by {@link Microservice#getConfig()} and the var resolver returned by {@link Microservice#getVarResolver()}.<a name="line.483"></a>
+<span class="sourceLineNo">484</span>       *<a name="line.484"></a>
+<span class="sourceLineNo">485</span>       * @param c The bean type.<a name="line.485"></a>
+<span class="sourceLineNo">486</span>       * @param value The bean.<a name="line.486"></a>
+<span class="sourceLineNo">487</span>       * @param &lt;T&gt; The bean type.<a name="line.487"></a>
+<span class="sourceLineNo">488</span>       * @return This object.<a name="line.488"></a>
+<span class="sourceLineNo">489</span>       */<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      public &lt;T&gt; Builder varBean(Class&lt;T&gt; c, T value) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>         varResolver.bean(c, value);<a name="line.491"></a>
+<span class="sourceLineNo">492</span>         return this;<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
+<span class="sourceLineNo">494</span><a name="line.494"></a>
+<span class="sourceLineNo">495</span>      /**<a name="line.495"></a>
+<span class="sourceLineNo">496</span>       * Specifies the directory to use to resolve the config file and other paths defined with the config file.<a name="line.496"></a>
+<span class="sourceLineNo">497</span>       *<a name="line.497"></a>
+<span class="sourceLineNo">498</span>       * @param workingDir The working directory, or &lt;jk&gt;null&lt;/jk&gt; to use the underlying working directory.<a name="line.498"></a>
+<span class="sourceLineNo">499</span>       * @return This object.<a name="line.499"></a>
+<span class="sourceLineNo">500</span>       */<a name="line.500"></a>
+<span class="sourceLineNo">501</span>      public Builder workingDir(File workingDir) {<a name="line.501"></a>
+<span class="sourceLineNo">502</span>         this.workingDir = workingDir;<a name="line.502"></a>
+<span class="sourceLineNo">503</span>         return this;<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>      /**<a name="line.506"></a>
+<span class="sourceLineNo">507</span>       * Specifies the directory to use to resolve the config file and other paths defined with the config file.<a name="line.507"></a>
+<span class="sourceLineNo">508</span>       *<a name="line.508"></a>
+<span class="sourceLineNo">509</span>       * @param workingDir The working directory, or &lt;jk&gt;null&lt;/jk&gt; to use the underlying working directory.<a name="line.509"></a>
+<span class="sourceLineNo">510</span>       * @return This object.<a name="line.510"></a>
+<span class="sourceLineNo">511</span>       */<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      public Builder workingDir(String workingDir) {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>         this.workingDir = new File(workingDir);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>         return this;<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>      /**<a name="line.517"></a>
+<span class="sourceLineNo">518</span>       * Registers an event listener for this microservice.<a name="line.518"></a>
+<span class="sourceLineNo">519</span>       *<a name="line.519"></a>
+<span class="sourceLineNo">520</span>       * @param listener An event listener for this microservice.<a name="line.520"></a>
+<span class="sourceLineNo">521</span>       * @return This object.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>       */<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      public Builder listener(MicroserviceListener listener) {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>         this.listener = listener;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>         return this;<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>       * Resolves the specified path.<a name="line.529"></a>
+<span class="sourceLineNo">530</span>       *<a name="line.530"></a>
+<span class="sourceLineNo">531</span>       * &lt;p&gt;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>       * If the working directory has been explicitly specified, relative paths are resolved relative to that.<a name="line.532"></a>
+<span class="sourceLineNo">533</span>       *<a name="line.533"></a>
+<span class="sourceLineNo">534</span>       * @param path The path to resolve.<a name="line.534"></a>
+<span class="sourceLineNo">535</span>       * @return The resolved file.<a name="line.535"></a>
+<span class="sourceLineNo">536</span>       */<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      protected File resolveFile(String path) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>         if (Paths.get(path).isAbsolute())<a name="line.538"></a>
+<span class="sourceLineNo">539</span>            return new File(path);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>         if (workingDir != null)<a name="line.540"></a>
+<span class="sourceLineNo">541</span>            return new File(workingDir, path);<a name="line.541"></a>
+<span class="sourceLineNo">542</span>         return new File(path);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.546"></a>
+<span class="sourceLineNo">547</span>   // Instance<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>   final Messages messages = Messages.of(Microservice.class);<a name="line.550"></a>
 <span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>      this.args = builder.args != null ? builder.args : new Args(new String[0]);<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>      // --------------------------------------------------------------------------------<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      // Try to get the manifest file if it wasn't already set.<a name="line.555"></a>
-<span class="sourceLineNo">556</span>      // --------------------------------------------------------------------------------<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      ManifestFile manifest = builder.manifest;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      if (manifest == null) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>         Manifest m = new Manifest();<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span>         // If running within an eclipse workspace, need to get it from the file system.<a name="line.561"></a>
-<span class="sourceLineNo">562</span>         File f = resolveFile("META-INF/MANIFEST.MF");<a name="line.562"></a>
-<span class="sourceLineNo">563</span>         if (f.exists() &amp;&amp; f.canRead()) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>            try (FileInputStream fis = new FileInputStream(f)) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>               m.read(fis);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>            } catch (IOException e) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>               throw new IOException("Problem detected in MANIFEST.MF.  Contents below:\n"+read(f), e);<a name="line.567"></a>
-<span class="sourceLineNo">568</span>            }<a name="line.568"></a>
-<span class="sourceLineNo">569</span>         } else {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>            // Otherwise, read from manifest file in the jar file containing the main class.<a name="line.570"></a>
-<span class="sourceLineNo">571</span>            URL url = getClass().getResource("META-INF/MANIFEST.MF");<a name="line.571"></a>
-<span class="sourceLineNo">572</span>            if (url != null) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>               try {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>                  m.read(url.openStream());<a name="line.574"></a>
-<span class="sourceLineNo">575</span>               } catch (IOException e) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>                  throw new IOException("Problem detected in MANIFEST.MF.  Contents below:\n"+read(url.openStream()), e);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>               }<a name="line.577"></a>
-<span class="sourceLineNo">578</span>            }<a name="line.578"></a>
-<span class="sourceLineNo">579</span>         }<a name="line.579"></a>
-<span class="sourceLineNo">580</span>         manifest = new ManifestFile(m);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      }<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      ManifestFileVar.init(manifest);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>      this.manifest = manifest;<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>      // --------------------------------------------------------------------------------<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      // Try to resolve the configuration if not specified.<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      // --------------------------------------------------------------------------------<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      Config config = builder.config;<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      Config.Builder configBuilder = builder.configBuilder.varResolver(builder.varResolver.build()).store(MemoryStore.DEFAULT);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      if (config == null) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>         ConfigStore store = builder.configStore;<a name="line.591"></a>
-<span class="sourceLineNo">592</span>         FileStore cfs = workingDir == null ? FileStore.DEFAULT : FileStore.create().directory(workingDir).build();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>         for (String name : getCandidateConfigNames()) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>             if (store != null) {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>                if (store.exists(name)) {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>                   configBuilder.store(store).name(name);<a name="line.596"></a>
-<span class="sourceLineNo">597</span>                   break;<a name="line.597"></a>
-<span class="sourceLineNo">598</span>                }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>             } else {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>                if (cfs.exists(name)) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>                   configBuilder.store(cfs).name(name);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>                   break;<a name="line.602"></a>
-<span class="sourceLineNo">603</span>                }<a name="line.603"></a>
-<span class="sourceLineNo">604</span>                if (ClasspathStore.DEFAULT.exists(name)) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>                   configBuilder.store(ClasspathStore.DEFAULT).name(name);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>                   break;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>                }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>             }<a name="line.608"></a>
+<span class="sourceLineNo">552</span>   private final Builder builder;<a name="line.552"></a>
+<span class="sourceLineNo">553</span>   private final Args args;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>   private final Config config;<a name="line.554"></a>
+<span class="sourceLineNo">555</span>   private final ManifestFile manifest;<a name="line.555"></a>
+<span class="sourceLineNo">556</span>   private final VarResolver varResolver;<a name="line.556"></a>
+<span class="sourceLineNo">557</span>   private final MicroserviceListener listener;<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   private final Map&lt;String,ConsoleCommand&gt; consoleCommandMap = new ConcurrentHashMap&lt;&gt;();<a name="line.558"></a>
+<span class="sourceLineNo">559</span>   private final boolean consoleEnabled;<a name="line.559"></a>
+<span class="sourceLineNo">560</span>   private final Scanner consoleReader;<a name="line.560"></a>
+<span class="sourceLineNo">561</span>   private final PrintWriter consoleWriter;<a name="line.561"></a>
+<span class="sourceLineNo">562</span>   private final Thread consoleThread;<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   final File workingDir;<a name="line.563"></a>
+<span class="sourceLineNo">564</span>   private final String configName;<a name="line.564"></a>
+<span class="sourceLineNo">565</span><a name="line.565"></a>
+<span class="sourceLineNo">566</span>   private volatile Logger logger;<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>    * Constructor.<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    *<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    * @param builder The builder containing the settings for this microservice.<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    * @throws IOException Problem occurred reading file.<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    * @throws ParseException Malformed input encountered.<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    */<a name="line.574"></a>
+<span class="sourceLineNo">575</span>   @SuppressWarnings("resource")<a name="line.575"></a>
+<span class="sourceLineNo">576</span>   protected Microservice(Builder builder) throws IOException, ParseException {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>      setInstance(this);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>      this.builder = builder.copy();<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      this.workingDir = builder.workingDir;<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      this.configName = builder.configName;<a name="line.580"></a>
+<span class="sourceLineNo">581</span><a name="line.581"></a>
+<span class="sourceLineNo">582</span>      this.args = builder.args != null ? builder.args : new Args(new String[0]);<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>      // Try to get the manifest file if it wasn't already set.<a name="line.585"></a>
+<span class="sourceLineNo">586</span>      // --------------------------------------------------------------------------------<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      ManifestFile manifest = builder.manifest;<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      if (manifest == null) {<a name="line.588"></a>
+<span class="sourceLineNo">589</span>         Manifest m = new Manifest();<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>         // If running within an eclipse workspace, need to get it from the file system.<a name="line.591"></a>
+<span class="sourceLineNo">592</span>         File f = resolveFile("META-INF/MANIFEST.MF");<a name="line.592"></a>
+<span class="sourceLineNo">593</span>         if (f.exists() &amp;&amp; f.canRead()) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>            try (FileInputStream fis = new FileInputStream(f)) {<a name="line.594"></a>
+<span class="sourceLineNo">595</span>               m.read(fis);<a name="line.595"></a>
+<span class="sourceLineNo">596</span>            } catch (IOException e) {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>               throw new IOException("Problem detected in MANIFEST.MF.  Contents below:\n"+read(f), e);<a name="line.597"></a>
+<span class="sourceLineNo">598</span>            }<a name="line.598"></a>
+<span class="sourceLineNo">599</span>         } else {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>            // Otherwise, read from manifest file in the jar file containing the main class.<a name="line.600"></a>
+<span class="sourceLineNo">601</span>            URL url = getClass().getResource("META-INF/MANIFEST.MF");<a name="line.601"></a>
+<span class="sourceLineNo">602</span>            if (url != null) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span>               try {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>                  m.read(url.openStream());<a name="line.604"></a>
+<span class="sourceLineNo">605</span>               } catch (IOException e) {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>                  throw new IOException("Problem detected in MANIFEST.MF.  Contents below:\n"+read(url.openStream()), e);<a name="line.606"></a>
+<span class="sourceLineNo">607</span>               }<a name="line.607"></a>
+<span class="sourceLineNo">608</span>            }<a name="line.608"></a>
 <span class="sourceLineNo">609</span>         }<a name="line.609"></a>
-<span class="sourceLineNo">610</span>         config = configBuilder.build();<a name="line.610"></a>
+<span class="sourceLineNo">610</span>         manifest = new ManifestFile(m);<a name="line.610"></a>
 <span class="sourceLineNo">611</span>      }<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      this.config = config;<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      Config.setSystemDefault(this.config);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      this.config.addListener(this);<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>      //-------------------------------------------------------------------------------------------------------------<a name="line.616"></a>
-<span class="sourceLineNo">617</span>      // Var resolver.<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      //-------------------------------------------------------------------------------------------------------------<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      this.varResolver = builder.varResolver.bean(Config.class, config).build();<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>      // --------------------------------------------------------------------------------<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      // Initialize console commands.<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      // --------------------------------------------------------------------------------<a name="line.623"></a>
-<span class="sourceLineNo">624</span>      this.consoleEnabled = ObjectUtils.firstNonNull(builder.consoleEnabled, config.get("Console/enabled").asBoolean().orElse(false));<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      if (consoleEnabled) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>         Console c = System.console();<a name="line.626"></a>
-<span class="sourceLineNo">627</span>         this.consoleReader = ObjectUtils.firstNonNull(builder.consoleReader, new Scanner(c == null ? new InputStreamReader(System.in) : c.reader()));<a name="line.627"></a>
-<span class="sourceLineNo">628</span>         this.consoleWriter = ObjectUtils.firstNonNull(builder.consoleWriter, c == null ? new PrintWriter(System.out, true) : c.writer());<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>         for (ConsoleCommand cc : builder.consoleCommands) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>            consoleCommandMap.put(cc.getName(), cc);<a name="line.631"></a>
-<span class="sourceLineNo">632</span>         }<a name="line.632"></a>
-<span class="sourceLineNo">633</span>         for (String s : config.get("Console/commands").asStringArray().orElse(new String[0])) {<a name="line.633"></a>
-<span class="sourceLineNo">634</span>            ConsoleCommand cc;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>            try {<a name="line.635"></a>
-<span class="sourceLineNo">636</span>               cc = (ConsoleCommand)Class.forName(s).newInstance();<a name="line.636"></a>
-<span class="sourceLineNo">637</span>               consoleCommandMap.put(cc.getName(), cc);<a name="line.637"></a>
-<span class="sourceLineNo">638</span>            } catch (Exception e) {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>               getConsoleWriter().println("Could not create console command '"+s+"', " + e.getLocalizedMessage());<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>         consoleThread = new Thread("ConsoleThread") {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>            @Override /* Thread */<a name="line.643"></a>
-<span class="sourceLineNo">644</span>            public void run() {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>               Scanner in = getConsoleReader();<a name="line.645"></a>
-<span class="sourceLineNo">646</span>               PrintWriter out = getConsoleWriter();<a name="line.646"></a>
-<span class="sourceLineNo">647</span><a name="line.647"></a>
-<span class="sourceLineNo">648</span>               out.println(messages.getString("ListOfAvailableCommands"));<a name="line.648"></a>
-<span class="sourceLineNo">649</span>               for (ConsoleCommand cc : new TreeMap&lt;&gt;(getConsoleCommands()).values())<a name="line.649"></a>
-<span class="sourceLineNo">650</span>                  out.append("\t").append(cc.getName()).append(" -- ").append(cc.getInfo()).println();<a name="line.650"></a>
-<span class="sourceLineNo">651</span>               out.println();<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>               while (true) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>                  String line = null;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>                  out.append("&gt; ").flush();<a name="line.655"></a>
-<span class="sourceLineNo">656</span>                  line = in.nextLine();<a name="line.656"></a>
-<span class="sourceLineNo">657</span>                  Args args = new Args(line);<a name="line.657"></a>
-<span class="sourceLineNo">658</span>                  if (! args.isEmpty())<a name="line.658"></a>
-<span class="sourceLineNo">659</span>                     executeCommand(args, in, out);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>               }<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>         consoleThread.setDaemon(true);<a name="line.663"></a>
-<span class="sourceLineNo">664</span>      } else {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>         this.consoleReader = null;<a name="line.665"></a>
-<span class="sourceLineNo">666</span>         this.consoleWriter = null;<a name="line.666"></a>
-<span class="sourceLineNo">667</span>         this.consoleThread = null;<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>      //-------------------------------------------------------------------------------------------------------------<a name="line.670"></a>
-<span class="sourceLineNo">671</span>      // Other<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      //-------------------------------------------------------------------------------------------------------------<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      this.listener = builder.listener != null ? builder.listener : new BasicMicroserviceListener();<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span>      init();<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   }<a name="line.676"></a>
+<span class="sourceLineNo">612</span>      ManifestFileVar.init(manifest);<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      this.manifest = manifest;<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>      // Try to resolve the configuration if not specified.<a name="line.616"></a>
+<span class="sourceLineNo">617</span>      // --------------------------------------------------------------------------------<a name="line.617"></a>
+<span class="sourceLineNo">618</span>      Config config = builder.config;<a name="line.618"></a>
+<span class="sourceLineNo">619</span>      Config.Builder configBuilder = builder.configBuilder.varResolver(builder.varResolver.build()).store(MemoryStore.DEFAULT);<a name="line.619"></a>
+<span class="sourceLineNo">620</span>      if (config == null) {<a name="line.620"></a>
+<span class="sourceLineNo">621</span>         ConfigStore store = builder.configStore;<a name="line.621"></a>
+<span class="sourceLineNo">622</span>         FileStore cfs = workingDir == null ? FileStore.DEFAULT : FileStore.create().directory(workingDir).build();<a name="line.622"></a>
+<span class="sourceLineNo">623</span>         for (String name : getCandidateConfigNames()) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>             if (store != null) {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>                if (store.exists(name)) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>                   configBuilder.store(store).name(name);<a name="line.626"></a>
+<span class="sourceLineNo">627</span>                   break;<a name="line.627"></a>
+<span class="sourceLineNo">628</span>                }<a name="line.628"></a>
+<span class="sourceLineNo">629</span>             } else {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>                if (cfs.exists(name)) {<a name="line.630"></a>
+<span class="sourceLineNo">631</span>                   configBuilder.store(cfs).name(name);<a name="line.631"></a>
+<span class="sourceLineNo">632</span>                   break;<a name="line.632"></a>
+<span class="sourceLineNo">633</span>                }<a name="line.633"></a>
+<span class="sourceLineNo">634</span>                if (ClasspathStore.DEFAULT.exists(name)) {<a name="line.634"></a>
+<span class="sourceLineNo">635</span>                   configBuilder.store(ClasspathStore.DEFAULT).name(name);<a name="line.635"></a>
+<span class="sourceLineNo">636</span>                   break;<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>         config = configBuilder.build();<a name="line.640"></a>
+<span class="sourceLineNo">641</span>      }<a name="line.641"></a>
+<span class="sourceLineNo">642</span>      this.config = config;<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      Config.setSystemDefault(this.config);<a name="line.643"></a>
+<span class="sourceLineNo">644</span>      this.config.addListener(this);<a name="line.644"></a>
+<span class="sourceLineNo">645</span><a name="line.645"></a>
+<span class="sourceLineNo">646</span>      //-------------------------------------------------------------------------------------------------------------<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      // Var resolver.<a name="line.647"></a>
+<span class="sourceLineNo">648</span>      //-------------------------------------------------------------------------------------------------------------<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      this.varResolver = builder.varResolver.bean(Config.class, config).build();<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>      // Initialize console commands.<a name="line.652"></a>
+<span class="sourceLineNo">653</span>      // --------------------------------------------------------------------------------<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      this.consoleEnabled = ObjectUtils.firstNonNull(builder.consoleEnabled, config.get("Console/enabled").asBoolean().orElse(false));<a name="line.654"></a>
+<span class="sourceLineNo">655</span>      if (consoleEnabled) {<a name="line.655"></a>
+<span class="sourceLineNo">656</span>         Console c = System.console();<a name="line.656"></a>
+<span class="sourceLineNo">657</span>         this.consoleReader = ObjectUtils.firstNonNull(builder.consoleReader, new Scanner(c == null ? new InputStreamReader(System.in) : c.reader()));<a name="line.657"></a>
+<span class="sourceLineNo">658</span>         this.consoleWriter = ObjectUtils.firstNonNull(builder.consoleWriter, c == null ? new PrintWriter(System.out, true) : c.writer());<a name="line.658"></a>
+<span class="sourceLineNo">659</span><a name="line.659"></a>
+<span class="sourceLineNo">660</span>         for (ConsoleCommand cc : builder.consoleCommands) {<a name="line.660"></a>
+<span class="sourceLineNo">661</span>            consoleCommandMap.put(cc.getName(), cc);<a name="line.661"></a>
+<span class="sourceLineNo">662</span>         }<a name="line.662"></a>
+<span class="sourceLineNo">663</span>         for (String s : config.get("Console/commands").asStringArray().orElse(new String[0])) {<a name="line.663"></a>
+<span class="sourceLineNo">664</span>            ConsoleCommand cc;<a name="line.664"></a>
+<span class="sourceLineNo">665</span>            try {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>               cc = (ConsoleCommand)Class.forName(s).newInstance();<a name="line.666"></a>
+<span class="sourceLineNo">667</span>               consoleCommandMap.put(cc.getName(), cc);<a name="line.667"></a>
+<span class="sourceLineNo">668</span>            } catch (Exception e) {<a name="line.668"></a>
+<span class="sourceLineNo">669</span>               getConsoleWriter().println("Could not create console command '"+s+"', " + e.getLocalizedMessage());<a name="line.669"></a>
+<span class="sourceLineNo">670</span>            }<a name="line.670"></a>
+<span class="sourceLineNo">671</span>         }<a name="line.671"></a>
+<span class="sourceLineNo">672</span>         consoleThread = new Thread("ConsoleThread") {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>            @Override /* Thread */<a name="line.673"></a>
+<span class="sourceLineNo">674</span>            public void run() {<a name="line.674"></a>
+<span class="sourceLineNo">675</span>               Scanner in = getConsoleReader();<a name="line.675"></a>
+<span class="sourceLineNo">676</span>               PrintWriter out = getConsoleWriter();<a name="line.676"></a>
 <span class="sourceLineNo">677</span><a name="line.677"></a>
-<span class="sourceLineNo">678</span>   private List&lt;String&gt; getCandidateConfigNames() {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      if (configName != null)<a name="line.679"></a>
-<span class="sourceLineNo">680</span>         return Collections.singletonList(configName);<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span>      Args args = getArgs();<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      if (getArgs().hasArg("configFile"))<a name="line.683"></a>
-<span class="sourceLineNo">684</span>         return Collections.singletonList(args.getArg("configFile"));<a name="line.684"></a>
-<span class="sourceLineNo">685</span><a name="line.685"></a>
-<span class="sourceLineNo">686</span>      ManifestFile manifest = getManifest();<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      if (manifest.containsKey("Main-Config"))<a name="line.687"></a>
-<span class="sourceLineNo">688</span>         return Collections.singletonList(manifest.getString("Main-Config"));<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>      return Config.getCandidateSystemDefaultConfigNames();<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>    * Resolves the specified path.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    *<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    * &lt;p&gt;<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    * If the working directory has been explicitly specified, relative paths are resolved relative to that.<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    *<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    * @param path The path to resolve.<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    * @return The resolved path.<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    */<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   protected File resolveFile(String path) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      if (Paths.get(path).isAbsolute())<a name="line.703"></a>
-<span class="sourceLineNo">704</span>         return new File(path);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      if (workingDir != null)<a name="line.705"></a>
-<span class="sourceLineNo">706</span>         return new File(workingDir, path);<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      return new File(path);<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   }<a name="line.708"></a>
-<span class="sourceLineNo">709</span><a name="line.709"></a>
-<span class="sourceLineNo">710</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   // Abstract lifecycle methods.<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>    * Initializes this microservice.<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    *<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    * &lt;p&gt;<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    * This method can be called whenever the microservice is not started.<a name="line.718"></a>
-<span class="sourceLineNo">719</span>    *<a name="line.719"></a>
-<span class="sourceLineNo">720</span>    * &lt;p&gt;<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    * It will initialize (or reinitialize) the console commands, system properties, and logger.<a name="line.721"></a>
-<span class="sourceLineNo">722</span>    *<a name="line.722"></a>
-<span class="sourceLineNo">723</span>    * @return This object.<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    * @throws ParseException Malformed input encountered.<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    * @throws IOException Couldn't read a file.<a name="line.725"></a>
-<span class="sourceLineNo">726</span>    */<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   public synchronized Microservice init() throws IOException, ParseException {<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>      // Set system properties.<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      // --------------------------------------------------------------------------------<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      Set&lt;String&gt; spKeys = config.getKeys("SystemProperties");<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      if (spKeys != null)<a name="line.733"></a>
-<span class="sourceLineNo">734</span>         for (String key : spKeys)<a name="line.734"></a>
-<span class="sourceLineNo">735</span>            System.setProperty(key, config.get("SystemProperties/"+key).orElse(null));<a name="line.735"></a>
-<span class="sourceLineNo">736</span><a name="line.736"></a>
-<span class="sourceLineNo">737</span>      return this;<a name="line.737"></a>
+<span class="sourceLineNo">678</span>               out.println(messages.getString("ListOfAvailableCommands"));<a name="line.678"></a>
+<span class="sourceLineNo">679</span>               for (ConsoleCommand cc : new TreeMap&lt;&gt;(getConsoleCommands()).values())<a name="line.679"></a>
+<span class="sourceLineNo">680</span>                  out.append("\t").append(cc.getName()).append(" -- ").append(cc.getInfo()).println();<a name="line.680"></a>
+<span class="sourceLineNo">681</span>               out.println();<a name="line.681"></a>
+<span class="sourceLineNo">682</span><a name="line.682"></a>
+<span class="sourceLineNo">683</span>               while (true) {<a name="line.683"></a>
+<span class="sourceLineNo">684</span>                  String line = null;<a name="line.684"></a>
+<span class="sourceLineNo">685</span>                  out.append("&gt; ").flush();<a name="line.685"></a>
+<span class="sourceLineNo">686</span>                  line = in.nextLine();<a name="line.686"></a>
+<span class="sourceLineNo">687</span>                  Args args = new Args(line);<a name="line.687"></a>
+<span class="sourceLineNo">688</span>                  if (! args.isEmpty())<a name="line.688"></a>
+<span class="sourceLineNo">689</span>                     executeCommand(args, in, out);<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>         consoleThread.setDaemon(true);<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      } else {<a name="line.694"></a>
+<span class="sourceLineNo">695</span>         this.consoleReader = null;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>         this.consoleWriter = null;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>         this.consoleThread = null;<a name="line.697"></a>
+<span class="sourceLineNo">698</span>      }<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>      // Other<a name="line.701"></a>
+<span class="sourceLineNo">702</span>      //-------------------------------------------------------------------------------------------------------------<a name="line.702"></a>
+<span class="sourceLineNo">703</span>      this.listener = builder.listener != null ? builder.listener : new BasicMicroserviceListener();<a name="line.703"></a>
+<span class="sourceLineNo">704</span><a name="line.704"></a>
+<span class="sourceLineNo">705</span>      init();<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>   private List&lt;String&gt; getCandidateConfigNames() {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      if (configName != null)<a name="line.709"></a>
+<span class="sourceLineNo">710</span>         return Collections.singletonList(configName);<a name="line.710"></a>
+<span class="sourceLineNo">711</span><a name="line.711"></a>
+<span class="sourceLineNo">712</span>      Args args = getArgs();<a name="line.712"></a>
+<span class="sourceLineNo">713</span>      if (getArgs().hasArg("configFile"))<a name="line.713"></a>
+<span class="sourceLineNo">714</span>         return Collections.singletonList(args.getArg("configFile"));<a name="line.714"></a>
+<span class="sourceLineNo">715</span><a name="line.715"></a>
+<span class="sourceLineNo">716</span>      ManifestFile manifest = getManifest();<a name="line.716"></a>
+<span class="sourceLineNo">717</span>      if (manifest.containsKey("Main-Config"))<a name="line.717"></a>
+<span class="sourceLineNo">718</span>         return Collections.singletonList(manifest.getString("Main-Config"));<a name="line.718"></a>
+<span class="sourceLineNo">719</span><a name="line.719"></a>
+<span class="sourceLineNo">720</span>      return Config.getCandidateSystemDefaultConfigNames();<a name="line.720"></a>
+<span class="sourceLineNo">721</span>   }<a name="line.721"></a>
+<span class="sourceLineNo">722</span><a name="line.722"></a>
+<span class="sourceLineNo">723</span>   /**<a name="line.723"></a>
+<span class="sourceLineNo">724</span>    * Resolves the specified path.<a name="line.724"></a>
+<span class="sourceLineNo">725</span>    *<a name="line.725"></a>
+<span class="sourceLineNo">726</span>    * &lt;p&gt;<a name="line.726"></a>
+<span class="sourceLineNo">727</span>    * If the working directory has been explicitly specified, relative paths are resolved relative to that.<a name="line.727"></a>
+<span class="sourceLineNo">728</span>    *<a name="line.728"></a>
+<span class="sourceLineNo">729</span>    * @param path The path to resolve.<a name="line.729"></a>
+<span class="sourceLineNo">730</span>    * @return The resolved path.<a name="line.730"></a>
+<span class="sourceLineNo">731</span>    */<a name="line.731"></a>
+<span class="sourceLineNo">732</span>   protected File resolveFile(String path) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>      if (Paths.get(path).isAbsolute())<a name="line.733"></a>
+<span class="sourceLineNo">734</span>         return new File(path);<a name="line.734"></a>
+<span class="sourceLineNo">735</span>      if (workingDir != null)<a name="line.735"></a>
+<span class="sourceLineNo">736</span>         return new File(workingDir, path);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>      return new File(path);<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>    * Start this application.<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    *<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    * &lt;p&gt;<a name="line.743"></a>
-<span class="sourceLineNo">744</span>    * Overridden methods MUST call this method FIRST so that the {@link MicroserviceListener#onStart(Microservice)} method is called.<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    *<a name="line.745"></a>
-<span class="sourceLineNo">746</span>    * @return This object.<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    * @throws Exception Error occurred.<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    */<a name="line.748"></a>
-<span class="sourceLineNo">749</span>   public synchronized Microservice start() throws Exception {<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>      if (config.getName() == null)<a name="line.751"></a>
-<span class="sourceLineNo">752</span>         err(messages, "RunningClassWithoutConfig", getClass().getSimpleName());<a name="line.752"></a>
-<span class="sourceLineNo">753</span>      else<a name="line.753"></a>
-<span class="sourceLineNo">754</span>         out(messages, "RunningClassWithConfig", getClass().getSimpleName(), config.getName());<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>      Runtime.getRuntime().addShutdownHook(<a name="line.756"></a>
-<span class="sourceLineNo">757</span>         new Thread("ShutdownHookThread") {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>            @Override /* Thread */<a name="line.758"></a>
-<span class="sourceLineNo">759</span>            public void run() {<a name="line.759"></a>
-<span class="sourceLineNo">760</span>               try {<a name="line.760"></a>
-<span class="sourceLineNo">761</span>                  Microservice.this.stop();<a name="line.761"></a>
-<span class="sourceLineNo">762</span>                  Microservice.this.stopConsole();<a name="line.762"></a>
-<span class="sourceLineNo">763</span>               } catch (Exception e) {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>                  e.printStackTrace();<a name="line.764"></a>
-<span class="sourceLineNo">765</span>               }<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><a name="line.769"></a>
-<span class="sourceLineNo">770</span>      listener.onStart(this);<a name="line.770"></a>
-<span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>      return this;<a name="line.772"></a>
-<span class="sourceLineNo">773</span>   }<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>
-<span class="sourceLineNo">776</span>    * Starts the console thread for this microservice.<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    *<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    * @return This object.<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    * @throws Exception Error occurred<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    */<a name="line.780"></a>
-<span class="sourceLineNo">781</span>   public synchronized Microservice startConsole() throws Exception {<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      if (consoleThread != null &amp;&amp; ! consoleThread.isAlive())<a name="line.782"></a>
-<span class="sourceLineNo">783</span>         consoleThread.start();<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      return this;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   }<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>   /**<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    * Stops the console thread for this microservice.<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    *<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    * @return This object.<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    * @throws Exception Error occurred<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    */<a name="line.792"></a>
-<span class="sourceLineNo">793</span>   public synchronized Microservice stopConsole() throws Exception {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      if (consoleThread != null &amp;&amp; consoleThread.isAlive())<a name="line.794"></a>
-<span class="sourceLineNo">795</span>         consoleThread.interrupt();<a name="line.795"></a>
-<span class="sourceLineNo">796</span>      return this;<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   }<a name="line.797"></a>
-<span class="sourceLineNo">798</span><a name="line.798"></a>
-<span class="sourceLineNo">799</span>   /**<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    * Returns the command-line arguments passed into the application.<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    *<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    * &lt;p&gt;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    * This method can be called from the class constructor.<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    *<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    * &lt;p&gt;<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    * See {@link Args} for details on using this method.<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    *<a name="line.807"></a>
-<span class="sourceLineNo">808</span>    * @return The command-line arguments passed into the application.<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    */<a name="line.809"></a>
-<span class="sourceLineNo">810</span>   public Args getArgs() {<a name="line.810"></a>
-<span class="sourceLineNo">811</span>      return args;<a name="line.811"></a>
-<span class="sourceLineNo">812</span>   }<a name="line.812"></a>
+<span class="sourceLineNo">740</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.740"></a>
+<span class="sourceLineNo">741</span>   // Abstract lifecycle methods.<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>   /**<a name="line.744"></a>
+<span class="sourceLineNo">745</span>    * Initializes this microservice.<a name="line.745"></a>
+<span class="sourceLineNo">746</span>    *<a name="line.746"></a>
+<span class="sourceLineNo">747</span>    * &lt;p&gt;<a name="line.747"></a>
+<span class="sourceLineNo">748</span>    * This method can be called whenever the microservice is not started.<a name="line.748"></a>
+<span class="sourceLineNo">749</span>    *<a name="line.749"></a>
+<span class="sourceLineNo">750</span>    * &lt;p&gt;<a name="line.750"></a>
+<span class="sourceLineNo">751</span>    * It will initialize (or reinitialize) the console commands, system properties, and logger.<a name="line.751"></a>
+<span class="sourceLineNo">752</span>    *<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    * @return This object.<a name="line.753"></a>
+<span class="sourceLineNo">754</span>    * @throws ParseException Malformed input encountered.<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    * @throws IOException Couldn't read a file.<a name="line.755"></a>
+<span class="sourceLineNo">756</span>    */<a name="line.756"></a>
+<span class="sourceLineNo">757</span>   public synchronized Microservice init() throws IOException, ParseException {<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>      // Set system properties.<a name="line.760"></a>
+<span class="sourceLineNo">761</span>      // --------------------------------------------------------------------------------<a name="line.761"></a>
+<span class="sourceLineNo">762</span>      Set&lt;String&gt; spKeys = config.getKeys("SystemProperties");<a name="line.762"></a>
+<span class="sourceLineNo">763</span>      if (spKeys != null)<a name="line.763"></a>
+<span class="sourceLineNo">764</span>         for (String key : spKeys)<a name="line.764"></a>
+<span class="sourceLineNo">765</span>            System.setProperty(key, config.get("SystemProperties/"+key).orElse(null));<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>      // Initialize logging.<a name="line.768"></a>
+<span class="sourceLineNo">769</span>      // --------------------------------------------------------------------------------<a name="line.769"></a>
+<span class="sourceLineNo">770</span>      this.logger = builder.logger;<a name="line.770"></a>
+<span class="sourceLineNo">771</span>      LogConfig logConfig = builder.logConfig != null ? builder.logConfig : new LogConfig();<a name="line.771"></a>
+<span class="sourceLineNo">772</span>      if (this.logger == null) {<a name="line.772"></a>
+<span class="sourceLineNo">773</span>         LogManager.getLogManager().reset();<a name="line.773"></a>
+<span class="sourceLineNo">774</span>         this.logger = Logger.getLogger("");<a name="line.774"></a>
+<span class="sourceLineNo">775</span>         String logFile = firstNonNull(logConfig.logFile, config.get("Logging/logFile").orElse(null));<a name="line.775"></a>
+<span class="sourceLineNo">776</span><a name="line.776"></a>
+<span class="sourceLineNo">777</span>         if (isNotEmpty(logFile)) {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>            String logDir = firstNonNull(logConfig.logDir, config.get("Logging/logDir").orElse("."));<a name="line.778"></a>
+<span class="sourceLineNo">779</span>            File logDirFile = resolveFile(logDir);<a name="line.779"></a>
+<span class="sourceLineNo">780</span>            mkdirs(logDirFile, false);<a name="line.780"></a>
+<span class="sourceLineNo">781</span>            logDir = logDirFile.getAbsolutePath();<a name="line.781"></a>
+<span class="sourceLineNo">782</span>            System.setProperty("juneau.logDir", logDir);<a name="line.782"></a>
+<span class="sourceLineNo">783</span><a name="line.783"></a>
+<span class="sourceLineNo">784</span>            boolean append = firstNonNull(logConfig.append, config.get("Logging/append").asBoolean().orElse(false));<a name="line.784"></a>
+<span class="sourceLineNo">785</span>            int limit = firstNonNull(logConfig.limit, config.get("Logging/limit").asInteger().orElse(1024*1024));<a name="line.785"></a>
+<span class="sourceLineNo">786</span>            int count = firstNonNull(logConfig.count, config.get("Logging/count").asInteger().orElse(1));<a name="line.786"></a>
+<span class="sourceLineNo">787</span><a name="line.787"></a>
+<span class="sourceLineNo">788</span>            FileHandler fh = new FileHandler(logDir + '/' + logFile, limit, count, append);<a name="line.788"></a>
+<span class="sourceLineNo">789</span><a name="line.789"></a>
+<span class="sourceLineNo">790</span>            Formatter f = logConfig.formatter;<a name="line.790"></a>
+<span class="sourceLineNo">791</span>            if (f == null) {<a name="line.791"></a>
+<span class="sourceLineNo">792</span>               String format = config.get("Logging/format").orElse("[{date} {level}] {msg}%n");<a name="line.792"></a>
+<span class="sourceLineNo">793</span>               String dateFormat = config.get("Logging/dateFormat").orElse("yyyy.MM.dd hh:mm:ss");<a name="line.793"></a>
+<span class="sourceLineNo">794</span>               boolean useStackTraceHashes = config.get("Logging/useStackTraceHashes").asBoolean().orElse(false);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>               f = new LogEntryFormatter(format, dateFormat, useStackTraceHashes);<a name="line.795"></a>
+<span class="sourceLineNo">796</span>            }<a name="line.796"></a>
+<span class="sourceLineNo">797</span>            fh.setFormatter(f);<a name="line.797"></a>
+<span class="sourceLineNo">798</span>            fh.setLevel(firstNonNull(logConfig.fileLevel, config.get("Logging/fileLevel").as(Level.class).orElse(Level.INFO)));<a name="line.798"></a>
+<span class="sourceLineNo">799</span>            logger.addHandler(fh);<a name="line.799"></a>
+<span class="sourceLineNo">800</span><a name="line.800"></a>
+<span class="sourceLineNo">801</span>            ConsoleHandler ch = new ConsoleHandler();<a name="line.801"></a>
+<span class="sourceLineNo">802</span>            ch.setLevel(firstNonNull(logConfig.consoleLevel, config.get("Logging/consoleLevel").as(Level.class).orElse(Level.WARNING)));<a name="line.802"></a>
+<span class="sourceLineNo">803</span>            ch.setFormatter(f);<a name="line.803"></a>
+<span class="sourceLineNo">804</span>            logger.addHandler(ch);<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><a name="line.807"></a>
+<span class="sourceLineNo">808</span>      JsonMap loggerLevels = config.get("Logging/levels").as(JsonMap.class).orElseGet(JsonMap::new);<a name="line.808"></a>
+<span class="sourceLineNo">809</span>      for (String l : loggerLevels.keySet())<a name="line.809"></a>
+<span class="sourceLineNo">810</span>         Logger.getLogger(l).setLevel(loggerLevels.get(l, Level.class));<a name="line.810"></a>
+<span class="sourceLineNo">811</span>      for (String l : logConfig.levels.keySet())<a name="line.811"></a>
+<span class="sourceLineNo">812</span>         Logger.getLogger(l).setLevel(logConfig.levels.get(l));<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>    * Returns the external INI-style configuration file that can be used to configure your microservice.<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    *<a name="line.816"></a>
-<span class="sourceLineNo">817</span>    * &lt;p&gt;<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    * The config location is determined in the following order:<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    * &lt;ol class='spaced-list'&gt;<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    *    &lt;li&gt;<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    *       The first argument passed to the microservice jar.<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    *    &lt;li&gt;<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    *       The &lt;c&gt;Main-Config&lt;/c&gt; entry in the microservice jar manifest file.<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    *    &lt;li&gt;<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    *       The name of the microservice jar with a &lt;js&gt;".cfg"&lt;/js&gt; suffix (e.g.<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    *       &lt;js&gt;"mymicroservice.jar"&lt;/js&gt;-&amp;gt;&lt;js&gt;"mymicroservice.cfg"&lt;/js&gt;).<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    * &lt;/ol&gt;<a name="line.827"></a>
-<span class="sourceLineNo">828</span>    *<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    * &lt;p&gt;<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    * If all methods for locating the config fail, then this method returns an empty config.<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    *<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    * &lt;p&gt;<a name="line.832"></a>
-<span class="sourceLineNo">833</span>    * Subclasses can set their own config file by using the following methods:<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    * &lt;ul class='javatree'&gt;<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    *    &lt;li class='jm'&gt;{@link Builder#configStore(ConfigStore)}<a name="line.835"></a>
-<span class="sourceLineNo">836</span>    *    &lt;li class='jm'&gt;{@link Builder#configName(String)}<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    * &lt;/ul&gt;<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    *<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    * &lt;p&gt;<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    * String variables are automatically resolved using the variable resolver returned by {@link #getVarResolver()}.<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    *<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    * &lt;p&gt;<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    * This method can be called from the class constructor.<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    *<a name="line.844"></a>
-<span class="sourceLineNo">845</span>    * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;<a name="line.845"></a>
-<span class="sourceLineNo">846</span>    * &lt;p class='bini'&gt;<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    *    &lt;cc&gt;#--------------------------&lt;/cc&gt;<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    *    &lt;cc&gt;# My section&lt;/cc&gt;<a name="line.848"></a>
-<span class="sourceLineNo">849</span>    *    &lt;cc&gt;#--------------------------&lt;/cc&gt;<a name="line.849"></a>
-<span class="sourceLineNo">850</span>    *    &lt;cs&gt;[MySection]&lt;/cs&gt;<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    *<a name="line.851"></a>
-<span class="sourceLineNo">852</span>    *    &lt;cc&gt;# An integer&lt;/cc&gt;<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    *    &lt;ck&gt;anInt&lt;/ck&gt; = 1<a name="line.853"></a>
+<span class="sourceLineNo">814</span>      return this;<a name="line.814"></a>
+<span class="sourceLineNo">815</span>   }<a name="line.815"></a>
+<span class="sourceLineNo">816</span><a name="line.816"></a>
+<span class="sourceLineNo">817</span>   /**<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    * Start this application.<a name="line.818"></a>
+<span class="sourceLineNo">819</span>    *<a name="line.819"></a>
+<span class="sourceLineNo">820</span>    * &lt;p&gt;<a name="line.820"></a>
+<span class="sourceLineNo">821</span>    * Overridden methods MUST call this method FIRST so that the {@link MicroserviceListener#onStart(Microservice)} method is called.<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    *<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    * @return This object.<a name="line.823"></a>
+<span class="sourceLineNo">824</span>    * @throws Exception Error occurred.<a name="line.824"></a>
+<span class="sourceLineNo">825</span>    */<a name="line.825"></a>
+<span class="sourceLineNo">826</span>   public synchronized Microservice start() throws Exception {<a name="line.826"></a>
+<span class="sourceLineNo">827</span><a name="line.827"></a>
+<span class="sourceLineNo">828</span>      if (config.getName() == null)<a name="line.828"></a>
+<span class="sourceLineNo">829</span>         err(messages, "RunningClassWithoutConfig", getClass().getSimpleName());<a name="line.829"></a>
+<span class="sourceLineNo">830</span>      else<a name="line.830"></a>
+<span class="sourceLineNo">831</span>         out(messages, "RunningClassWithConfig", getClass().getSimpleName(), config.getName());<a name="line.831"></a>
+<span class="sourceLineNo">832</span><a name="line.832"></a>
+<span class="sourceLineNo">833</span>      Runtime.getRuntime().addShutdownHook(<a name="line.833"></a>
+<span class="sourceLineNo">834</span>         new Thread("ShutdownHookThread") {<a name="line.834"></a>
+<span class="sourceLineNo">835</span>            @Override /* Thread */<a name="line.835"></a>
+<span class="sourceLineNo">836</span>            public void run() {<a name="line.836"></a>
+<span class="sourceLineNo">837</span>               try {<a name="line.837"></a>
+<span class="sourceLineNo">838</span>                  Microservice.this.stop();<a name="line.838"></a>
+<span class="sourceLineNo">839</span>                  Microservice.this.stopConsole();<a name="line.839"></a>
+<span class="sourceLineNo">840</span>               } catch (Exception e) {<a name="line.840"></a>
+<span class="sourceLineNo">841</span>                  e.printStackTrace();<a name="line.841"></a>
+<span class="sourceLineNo">842</span>               }<a name="line.842"></a>
+<span class="sourceLineNo">843</span>            }<a name="line.843"></a>
+<span class="sourceLineNo">844</span>         }<a name="line.844"></a>
+<span class="sourceLineNo">845</span>      );<a name="line.845"></a>
+<span class="sourceLineNo">846</span><a name="line.846"></a>
+<span class="sourceLineNo">847</span>      listener.onStart(this);<a name="line.847"></a>
+<span class="sourceLineNo">848</span><a name="line.848"></a>
+<span class="sourceLineNo">849</span>      return this;<a name="line.849"></a>
+<span class="sourceLineNo">850</span>   }<a name="line.850"></a>
+<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">852</span>   /**<a name="line.852"></a>
+<span class="sourceLineNo">853</span>    * Starts the console thread for this microservice.<a name="line.853"></a>
 <span class="sourceLineNo">854</span>    *<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    *    &lt;cc&gt;# A boolean&lt;/cc&gt;<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    *    &lt;ck&gt;aBoolean&lt;/ck&gt; = true<a name="line.856"></a>
-<span class="sourceLineNo">857</span>    *<a name="line.857"></a>
-<span class="sourceLineNo">858</span>    *    &lt;cc&gt;# An int array&lt;/cc&gt;<a name="line.858"></a>
-<span class="sourceLineNo">859</span>    *    &lt;ck&gt;anIntArray&lt;/ck&gt; = 1,2,3<a name="line.859"></a>
-<span class="sourceLineNo">860</span>    *<a name="line.860"></a>
-<span class="sourceLineNo">861</span>    *    &lt;cc&gt;# A POJO that can be converted from a String&lt;/cc&gt;<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    *    &lt;ck&gt;aURL&lt;/ck&gt; = http://foo<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    *<a name="line.863"></a>
-<span class="sourceLineNo">864</span>    *    &lt;cc&gt;# A POJO that can be converted from JSON&lt;/cc&gt;<a name="line.864"></a>
-<span class="sourceLineNo">865</span>    *    &lt;ck&gt;aBean&lt;/ck&gt; = {foo:'bar',baz:123}<a name="line.865"></a>
+<span class="sourceLineNo">855</span>    * @return This object.<a name="line.855"></a>
+<span class="sourceLineNo">856</span>    * @throws Exception Error occurred<a name="line.856"></a>
+<span class="sourceLineNo">857</span>    */<a name="line.857"></a>
+<span class="sourceLineNo">858</span>   public synchronized Microservice startConsole() throws Exception {<a name="line.858"></a>
+<span class="sourceLineNo">859</span>      if (consoleThread != null &amp;&amp; ! consoleThread.isAlive())<a name="line.859"></a>
+<span class="sourceLineNo">860</span>         consoleThread.start();<a name="line.860"></a>
+<span class="sourceLineNo">861</span>      return this;<a name="line.861"></a>
+<span class="sourceLineNo">862</span>   }<a name="line.862"></a>
+<span class="sourceLineNo">863</span><a name="line.863"></a>
+<span class="sourceLineNo">864</span>   /**<a name="line.864"></a>
+<span class="sourceLineNo">865</span>    * Stops the console thread for this microservice.<a name="line.865"></a>
 <span class="sourceLineNo">866</span>    *<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    *    &lt;cc&gt;# A system property&lt;/cc&gt;<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    *    &lt;ck&gt;locale&lt;/ck&gt; = $S{java.locale, en_US}<a name="line.868"></a>
-<span class="sourceLineNo">869</span>    *<a name="line.869"></a>
-<span class="sourceLineNo">870</span>    *    &lt;cc&gt;# An environment variable&lt;/cc&gt;<a name="line.870"></a>
-<span class="sourceLineNo">871</span>    *    &lt;ck&gt;path&lt;/ck&gt; = $E{PATH, unknown}<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    *<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    *    &lt;cc&gt;# A manifest file entry&lt;/cc&gt;<a name="line.873"></a>
-<span class="sourceLineNo">874</span>    *    &lt;ck&gt;mainClass&lt;/ck&gt; = $MF{Main-Class}<a name="line.874"></a>
-<span class="sourceLineNo">875</span>    *<a name="line.875"></a>
-<span class="sourceLineNo">876</span>    *    &lt;cc&gt;# Another value in this config file&lt;/cc&gt;<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    *    &lt;ck&gt;sameAsAnInt&lt;/ck&gt; = $C{MySection/anInt}<a name="line.877"></a>
+<span class="sourceLineNo">867</span>    * @return This object.<a name="line.867"></a>
+<span class="sourceLineNo">868</span>    * @throws Exception Error occurred<a name="line.868"></a>
+<span class="sourceLineNo">869</span>    */<a name="line.869"></a>
+<span class="sourceLineNo">870</span>   public synchronized Microservice stopConsole() throws Exception {<a name="line.870"></a>
+<span class="sourceLineNo">871</span>      if (consoleThread != null &amp;&amp; consoleThread.isAlive())<a name="line.871"></a>
+<span class="sourceLineNo">872</span>         consoleThread.interrupt();<a name="line.872"></a>
+<span class="sourceLineNo">873</span>      return this;<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>   /**<a name="line.876"></a>
+<span class="sourceLineNo">877</span>    * Returns the command-line arguments passed into the application.<a name="line.877"></a>
 <span class="sourceLineNo">878</span>    *<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    *    &lt;cc&gt;# A command-line argument in the form "myarg=foo"&lt;/cc&gt;<a name="line.879"></a>
-<span class="sourceLineNo">880</span>    *    &lt;ck&gt;myArg&lt;/ck&gt; = $A{myarg}<a name="line.880"></a>
+<span class="sourceLineNo">879</span>    * &lt;p&gt;<a name="line.879"></a>
+<span class="sourceLineNo">880</span>    * This method can be called from the class constructor.<a name="line.880"></a>
 <span class="sourceLineNo">881</span>    *<a name="line.881"></a>
-<span class="sourceLineNo">882</span>    *    &lt;cc&gt;# The first command-line argument&lt;/cc&gt;<a name="line.882"></a>
-<span class="sourceLineNo">883</span>    *    &lt;ck&gt;firstArg&lt;/ck&gt; = $A{0}<a name="line.883"></a>
+<span class="sourceLineNo">882</span>    * &lt;p&gt;<a name="line.882"></a>
+<span class="sourceLineNo">883</span>    * See {@link Args} for details on using this method.<a name="line.883"></a>
 <span class="sourceLineNo">884</span>    *<a name="line.884"></a>
-<span class="sourceLineNo">885</span>    *    &lt;cc&gt;# Look for system property, or env var if that doesn't exist, or command-line arg if that doesn't exist.&lt;/cc&gt;<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    *    &lt;ck&gt;nested&lt;/ck&gt; = $S{mySystemProperty,$E{MY_ENV_VAR,$A{0}}}<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    *<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    *    &lt;cc&gt;# A POJO with embedded variables&lt;/cc&gt;<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    *    &lt;ck&gt;aBean2&lt;/ck&gt; = {foo:'$A{0}',baz:$C{MySection/anInt}}<a name="line.889"></a>
-<span class="sourceLineNo">890</span>    * &lt;/p&gt;<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    *<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    * &lt;p class='bjava'&gt;<a name="line.892"></a>
-<span class="sourceLineNo">893</span>    *    &lt;jc&gt;// Java code for accessing config entries above.&lt;/jc&gt;<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    *    Config &lt;jv&gt;config&lt;/jv&gt; = getConfig();<a name="line.894"></a>
-<span class="sourceLineNo">895</span>    *<a name="line.895"></a>
-<span class="sourceLineNo">896</span>    *    &lt;jk&gt;int&lt;/jk&gt; &lt;jv&gt;anInt&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/anInt"&lt;/js&gt;).asInteger().orElse(-1);<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    *    &lt;jk&gt;boolean&lt;/jk&gt; &lt;jv&gt;aBoolean&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/aBoolean"&lt;/js&gt;).asBoolean().orElse(&lt;jk&gt;false&lt;/jk&gt;);<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    *    &lt;jk&gt;int&lt;/jk&gt;[] &lt;jv&gt;anIntArray&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/anIntArray"&lt;/js&gt;).as(&lt;jk&gt;int&lt;/jk&gt;[].&lt;jk&gt;class&lt;/jk&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.898"></a>
-<span class="sourceLineNo">899</span>    *    URL &lt;jv&gt;aURL&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/aURL"&lt;/js&gt;).as(URL.&lt;jk&gt;class&lt;/jk&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.899"></a>
-<span class="sourceLineNo">900</span>    *    MyBean &lt;jv&gt;aBean&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/aBean"&lt;/js&gt;).as(MyBean.&lt;jk&gt;class&lt;/jk&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.900"></a>
-<span class="sourceLineNo">901</span>    *    Locale &lt;jv&gt;locale&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/locale"&lt;/js&gt;).as(Locale.&lt;jk&gt;class&lt;/jk&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>    *    String &lt;jv&gt;path&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/path"&lt;/js&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.902"></a>
-<span class="sourceLineNo">903</span>    *    String &lt;jv&gt;mainClass&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/mainClass"&lt;/js&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.903"></a>
-<span class="sourceLineNo">904</span>    *    &lt;jk&gt;int&lt;/jk&gt; &lt;jv&gt;sameAsAnInt&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/sameAsAnInt"&lt;/js&gt;).asInteger().orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>    *    String &lt;jv&gt;myArg&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.getString(&lt;js&gt;"MySection/myArg"&lt;/js&gt;);<a name="line.905"></a>
-<span class="sourceLineNo">906</span>    *    String &lt;jv&gt;firstArg&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.getString(&lt;js&gt;"MySection/firstArg"&lt;/js&gt;);<a name="line.906"></a>
-<span class="sourceLineNo">907</span>    * &lt;/p&gt;<a name="line.907"></a>
+<span class="sourceLineNo">885</span>    * @return The command-line arguments passed into the application.<a name="line.885"></a>
+<span class="sourceLineNo">886</span>    */<a name="line.886"></a>
+<span class="sourceLineNo">887</span>   public Args getArgs() {<a name="line.887"></a>
+<span class="sourceLineNo">888</span>      return args;<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>   /**<a name="line.891"></a>
+<span class="sourceLineNo">892</span>    * Returns the external INI-style configuration file that can be used to configure your microservice.<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    *<a name="line.893"></a>
+<span class="sourceLineNo">894</span>    * &lt;p&gt;<a name="line.894"></a>
+<span class="sourceLineNo">895</span>    * The config location is determined in the following order:<a name="line.895"></a>
+<span class="sourceLineNo">896</span>    * &lt;ol class='spaced-list'&gt;<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    *    &lt;li&gt;<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    *       The first argument passed to the microservice jar.<a name="line.898"></a>
+<span class="sourceLineNo">899</span>    *    &lt;li&gt;<a name="line.899"></a>
+<span class="sourceLineNo">900</span>    *       The &lt;c&gt;Main-Config&lt;/c&gt; entry in the microservice jar manifest file.<a name="line.900"></a>
+<span class="sourceLineNo">901</span>    *    &lt;li&gt;<a name="line.901"></a>
+<span class="sourceLineNo">902</span>    *       The name of the microservice jar with a &lt;js&gt;".cfg"&lt;/js&gt; suffix (e.g.<a name="line.902"></a>
+<span class="sourceLineNo">903</span>    *       &lt;js&gt;"mymicroservice.jar"&lt;/js&gt;-&amp;gt;&lt;js&gt;"mymicroservice.cfg"&lt;/js&gt;).<a name="line.903"></a>
+<span class="sourceLineNo">904</span>    * &lt;/ol&gt;<a name="line.904"></a>
+<span class="sourceLineNo">905</span>    *<a name="line.905"></a>
+<span class="sourceLineNo">906</span>    * &lt;p&gt;<a name="line.906"></a>
+<span class="sourceLineNo">907</span>    * If all methods for locating the config fail, then this method returns an empty config.<a name="line.907"></a>
 <span class="sourceLineNo">908</span>    *<a name="line.908"></a>
-<span class="sourceLineNo">909</span>    * @return The config file for this application, or &lt;jk&gt;null&lt;/jk&gt; if no config file is configured.<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    */<a name="line.910"></a>
-<span class="sourceLineNo">911</span>   public Config getConfig() {<a name="line.911"></a>
-<span class="sourceLineNo">912</span>      return config;<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>   /**<a name="line.915"></a>
-<span class="sourceLineNo">916</span>    * Returns the main jar manifest file contents as a simple {@link JsonMap}.<a name="line.916"></a>
-<span class="sourceLineNo">917</span>    *<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    * &lt;p&gt;<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    * This map consists of the contents of {@link Manifest#getMainAttributes()} with the keys and entries converted to<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    * simple strings.<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    * &lt;p&gt;<a name="line.921"></a>
-<span class="sourceLineNo">922</span>    * This method can be called from the class constructor.<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    *<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;<a name="line.924"></a>
-<span class="sourceLineNo">925</span>    * &lt;p class='bjava'&gt;<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    *    &lt;jc&gt;// Get Main-Class from manifest file.&lt;/jc&gt;<a name="line.926"></a>
-<span class="sourceLineNo">927</span>    *    String &lt;jv&gt;mainClass&lt;/jv&gt; = Microservice.&lt;jsm&gt;getManifest&lt;/jsm&gt;().getString(&lt;js&gt;"Main-Class"&lt;/js&gt;, &lt;js&gt;"unknown"&lt;/js&gt;);<a name="line.927"></a>
+<span class="sourceLineNo">909</span>    * &lt;p&gt;<a name="line.909"></a>
+<span class="sourceLineNo">910</span>    * Subclasses can set their own config file by using the following methods:<a name="line.910"></a>
+<span class="sourceLineNo">911</span>    * &lt;ul class='javatree'&gt;<a name="line.911"></a>
+<span class="sourceLineNo">912</span>    *    &lt;li class='jm'&gt;{@link Builder#configStore(ConfigStore)}<a name="line.912"></a>
+<span class="sourceLineNo">913</span>    *    &lt;li class='jm'&gt;{@link Builder#configName(String)}<a name="line.913"></a>
+<span class="sourceLineNo">914</span>    * &lt;/ul&gt;<a name="line.914"></a>
+<span class="sourceLineNo">915</span>    *<a name="line.915"></a>
+<span class="sourceLineNo">916</span>    * &lt;p&gt;<a name="line.916"></a>
+<span class="sourceLineNo">917</span>    * String variables are automatically resolved using the variable resolver returned by {@link #getVarResolver()}.<a name="line.917"></a>
+<span class="sourceLineNo">918</span>    *<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    * &lt;p&gt;<a name="line.919"></a>
+<span class="sourceLineNo">920</span>    * This method can be called from the class constructor.<a name="line.920"></a>
+<span class="sourceLineNo">921</span>    *<a name="line.921"></a>
+<span class="sourceLineNo">922</span>    * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;<a name="line.922"></a>
+<span class="sourceLineNo">923</span>    * &lt;p class='bini'&gt;<a name="line.923"></a>
+<span class="sourceLineNo">924</span>    *    &lt;cc&gt;#--------------------------&lt;/cc&gt;<a name="line.924"></a>
+<span class="sourceLineNo">925</span>    *    &lt;cc&gt;# My section&lt;/cc&gt;<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    *    &lt;cc&gt;#--------------------------&lt;/cc&gt;<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    *    &lt;cs&gt;[MySection]&lt;/cs&gt;<a name="line.927"></a>
 <span class="sourceLineNo">928</span>    *<a name="line.928"></a>
-<span class="sourceLineNo">929</span>    *    &lt;jc&gt;// Get Rest-Resources from manifest file.&lt;/jc&gt;<a name="line.929"></a>
-<span class="sourceLineNo">930</span>    *    String[] &lt;jv&gt;restResources&lt;/jv&gt; = Microservice.&lt;jsm&gt;getManifest&lt;/jsm&gt;().getStringArray(&lt;js&gt;"Rest-Resources"&lt;/js&gt;);<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    * &lt;/p&gt;<a name="line.931"></a>
-<span class="sourceLineNo">932</span>    *<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    * @return The manifest file from the main jar, or &lt;jk&gt;null&lt;/jk&gt; if the manifest file could not be retrieved.<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    */<a name="line.934"></a>
-<span class="sourceLineNo">935</span>   public ManifestFile getManifest() {<a name="line.935"></a>
-<span class="sourceLineNo">936</span>      return manifest;<a name="line.936"></a>
-<span class="sourceLineNo">937</span>   }<a name="line.937"></a>
-<span class="sourceLineNo">938</span><a name="line.938"></a>
-<span class="sourceLineNo">939</span>   /**<a name="line.939"></a>
-<span class="sourceLineNo">940</span>    * Returns the variable resolver for resolving variables in strings and files.<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    *<a name="line.941"></a>
-<span class="sourceLineNo">942</span>    * &lt;p&gt;<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    * Variables can be controlled by the following methods:<a name="line.943"></a>
-<span class="sourceLineNo">944</span>    * &lt;ul class='javatree'&gt;<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    *    &lt;li class='jm'&gt;{@link Builder#vars(Class...)}<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    *    &lt;li class='jm'&gt;{@link Builder#varBean(Class,Object)}<a name="line.946"></a>
-<span class="sourceLineNo">947</span>    * &lt;/ul&gt;<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    *<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    * @return The VarResolver used by this Microservice, or &lt;jk&gt;null&lt;/jk&gt; if it was never created.<a name="line.949"></a>
-<span class="sourceLineNo">950</span>    */<a name="line.950"></a>
-<span class="sourceLineNo">951</span>   public VarResolver getVarResolver() {<a name="line.951"></a>
-<span class="sourceLineNo">952</span>      return varResolver;<a name="line.952"></a>
-<span class="sourceLineNo">953</span>   }<a name="line.953"></a>
-<span class="sourceLineNo">954</span><a name="line.954"></a>
-<span class="sourceLineNo">955</span>   /**<a name="line.955"></a>
-<span class="sourceLineNo">956</span>    * Returns the logger for this microservice.<a name="line.956"></a>
-<span class="sourceLineNo">957</span>    *<a name="line.957"></a>
-<span class="sourceLineNo">958</span>    * @return The logger for this microservice.<a name="line.958"></a>
-<span class="sourceLineNo">959</span>    */<a name="line.959"></a>
-<span class="sourceLineNo">960</span>   public Logger getLogger() {<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      return logger;<a name="line.961"></a>
-<span class="sourceLineNo">962</span>   }<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>    * Executes a console command.<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    *<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    * @param args<a name="line.967"></a>
-<span class="sourceLineNo">968</span>    *    The command arguments.<a name="line.968"></a>
-<span class="sourceLineNo">969</span>    *    &lt;br&gt;The first entry in the arguments is always the command name.<a name="line.969"></a>
-<span class="sourceLineNo">970</span>    * @param in Console input.<a name="line.970"></a>
-<span class="sourceLineNo">971</span>    * @param out Console output.<a name="line.971"></a>
-<span class="sourceLineNo">972</span>    * @return &lt;jk&gt;true&lt;/jk&gt; if the command returned &lt;jk&gt;true&lt;/jk&gt; meaning the console thread should exit.<a name="line.972"></a>
-<span class="sourceLineNo">973</span>    */<a name="line.973"></a>
-<span class="sourceLineNo">974</span>   public boolean executeCommand(Args args, Scanner in, PrintWriter out) {<a name="line.974"></a>
-<span class="sourceLineNo">975</span>      ConsoleCommand cc = consoleCommandMap.get(args.getArg(0));<a name="line.975"></a>
-<span class="sourceLineNo">976</span>      if (cc == null) {<a name="line.976"></a>
-<span class="sourceLineNo">977</span>         out.println(messages.getString("UnknownCommand"));<a name="line.977"></a>
-<span class="sourceLineNo">978</span>      } else {<a name="line.978"></a>
-<span class="sourceLineNo">979</span>         try {<a name="line.979"></a>
-<span class="sourceLineNo">980</span>            return cc.execute(in, out, args);<a name="line.980"></a>
-<span class="sourceLineNo">981</span>         } catch (Exception e) {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>            e.printStackTrace(out);<a name="line.982"></a>
-<span class="sourceLineNo">983</span>         }<a name="line.983"></a>
-<span class="sourceLineNo">984</span>      }<a name="line.984"></a>
-<span class="sourceLineNo">985</span>      return false;<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>    * Convenience method for executing a console command directly.<a name="line.989"></a>
-<span class="sourceLineNo">990</span>    *<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    * &lt;p&gt;<a name="line.991"></a>
-<span class="sourceLineNo">992</span>    * Allows you to execute a console command outside the console by simulating input and output.<a name="line.992"></a>
-<span class="sourceLineNo">993</span>    *<a name="line.993"></a>
-<span class="sourceLineNo">994</span>    * @param command The command name to execute.<a name="line.994"></a>
-<span class="sourceLineNo">995</span>    * @param input Optional input to the command.  Can be &lt;jk&gt;null&lt;/jk&gt;.<a name="line.995"></a>
-<span class="sourceLineNo">996</span>    * @param args Optional command arguments to pass to the command.<a name="line.996"></a>
-<span class="sourceLineNo">997</span>    * @return The command output.<a name="line.997"></a>
-<span class="sourceLineNo">998</span>    */<a name="line.998"></a>
-<span class="sourceLineNo">999</span>   public String executeCommand(String command, String input, Object...args) {<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>      StringWriter sw = new StringWriter();<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>      List&lt;String&gt; l = list();<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>      l.add(command);<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>      for (Object a : args)<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>         l.add(stringify(a));<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>      Args args2 = new Args(l.toArray(new String[l.size()]));<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>      try (Scanner in = new Scanner(input); PrintWriter out = new PrintWriter(sw)) {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>         executeCommand(args2, in, out);<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>      }<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>      return sw.toString();<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>   }<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span><a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>   /**<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>    * Joins the application with the current thread.<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>    *<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>    * &lt;p&gt;<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>    * Default implementation is a no-op.<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>    *<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>    * @return This object.<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>    * @throws Exception Error occurred<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    */<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>   public Microservice join() throws Exception {<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>      return this;<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>   }<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span><a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>   /**<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    * Stop this application.<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>    *<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    * &lt;p&gt;<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>    * Overridden methods MUST call this method LAST so that the {@link MicroserviceListener#onStop(Microservice)} method is called.<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    *<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>    * @return This object.<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>    * @throws Exception Error occurred<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>    */<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>   public Microservice stop() throws Exception {<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>      listener.onStop(this);<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      return this;<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>   }<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span><a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>   /**<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    * Stops the console (if it's started) and calls {@link System#exit(int)}.<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    *<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>    * @throws Exception Error occurred<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>    */<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>   public void exit() throws Exception {<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      try {<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>         stopConsole();<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>      } catch (Exception e) {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>         e.printStackTrace();<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>      }<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>      System.exit(0);<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>   }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span><a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>   /**<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>    * Kill the JVM by calling &lt;c&gt;System.exit(2);&lt;/c&gt;.<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    */<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>   public void kill() {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>      // This triggers the shutdown hook.<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>      System.exit(2);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>   }<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span><a name="line.1060"></a>
-<span class="sourceLineNo">1061</span><a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>   // Other methods<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span><a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>   /**<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    * Returns the console commands associated with this microservice.<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    *<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>    * @return The console commands associated with this microservice as an unmodifiable map.<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    */<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>   public final Map&lt;String,ConsoleCommand&gt; getConsoleCommands() {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      return consoleCommandMap;<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>   }<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span><a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>   /**<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    * Returns the console reader.<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    *<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    * &lt;p&gt;<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    * Subclasses can override this method to provide their own console input.<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    *<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    * @return The console reader.  Never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    */<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>   protected Scanner getConsoleReader() {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>      return consoleReader;<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>   }<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span><a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>   /**<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    * Returns the console writer.<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    *<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    * &lt;p&gt;<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>    * Subclasses can override this method to provide their own console output.<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>    *<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    * @return The console writer.  Never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    */<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>   protected PrintWriter getConsoleWriter() {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      return consoleWriter;<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>   }<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span><a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>   /**<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>    * Prints a localized message to the console writer.<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    *<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    * &lt;p&gt;<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    * Ignored if &lt;js&gt;"Console/enabled"&lt;/js&gt; is &lt;jk&gt;false&lt;/jk&gt;.<a name="line.1103"></a>
+<span class="sourceLineNo">929</span>    *    &lt;cc&gt;# An integer&lt;/cc&gt;<a name="line.929"></a>
+<span class="sourceLineNo">930</span>    *    &lt;ck&gt;anInt&lt;/ck&gt; = 1<a name="line.930"></a>
+<span class="sourceLineNo">931</span>    *<a name="line.931"></a>
+<span class="sourceLineNo">932</span>    *    &lt;cc&gt;# A boolean&lt;/cc&gt;<a name="line.932"></a>
+<span class="sourceLineNo">933</span>    *    &lt;ck&gt;aBoolean&lt;/ck&gt; = true<a name="line.933"></a>
+<span class="sourceLineNo">934</span>    *<a name="line.934"></a>
+<span class="sourceLineNo">935</span>    *    &lt;cc&gt;# An int array&lt;/cc&gt;<a name="line.935"></a>
+<span class="sourceLineNo">936</span>    *    &lt;ck&gt;anIntArray&lt;/ck&gt; = 1,2,3<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    *<a name="line.937"></a>
+<span class="sourceLineNo">938</span>    *    &lt;cc&gt;# A POJO that can be converted from a String&lt;/cc&gt;<a name="line.938"></a>
+<span class="sourceLineNo">939</span>    *    &lt;ck&gt;aURL&lt;/ck&gt; = http://foo<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    *<a name="line.940"></a>
+<span class="sourceLineNo">941</span>    *    &lt;cc&gt;# A POJO that can be converted from JSON&lt;/cc&gt;<a name="line.941"></a>
+<span class="sourceLineNo">942</span>    *    &lt;ck&gt;aBean&lt;/ck&gt; = {foo:'bar',baz:123}<a name="line.942"></a>
+<span class="sourceLineNo">943</span>    *<a name="line.943"></a>
+<span class="sourceLineNo">944</span>    *    &lt;cc&gt;# A system property&lt;/cc&gt;<a name="line.944"></a>
+<span class="sourceLineNo">945</span>    *    &lt;ck&gt;locale&lt;/ck&gt; = $S{java.locale, en_US}<a name="line.945"></a>
+<span class="sourceLineNo">946</span>    *<a name="line.946"></a>
+<span class="sourceLineNo">947</span>    *    &lt;cc&gt;# An environment variable&lt;/cc&gt;<a name="line.947"></a>
+<span class="sourceLineNo">948</span>    *    &lt;ck&gt;path&lt;/ck&gt; = $E{PATH, unknown}<a name="line.948"></a>
+<span class="sourceLineNo">949</span>    *<a name="line.949"></a>
+<span class="sourceLineNo">950</span>    *    &lt;cc&gt;# A manifest file entry&lt;/cc&gt;<a name="line.950"></a>
+<span class="sourceLineNo">951</span>    *    &lt;ck&gt;mainClass&lt;/ck&gt; = $MF{Main-Class}<a name="line.951"></a>
+<span class="sourceLineNo">952</span>    *<a name="line.952"></a>
+<span class="sourceLineNo">953</span>    *    &lt;cc&gt;# Another value in this config file&lt;/cc&gt;<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    *    &lt;ck&gt;sameAsAnInt&lt;/ck&gt; = $C{MySection/anInt}<a name="line.954"></a>
+<span class="sourceLineNo">955</span>    *<a name="line.955"></a>
+<span class="sourceLineNo">956</span>    *    &lt;cc&gt;# A command-line argument in the form "myarg=foo"&lt;/cc&gt;<a name="line.956"></a>
+<span class="sourceLineNo">957</span>    *    &lt;ck&gt;myArg&lt;/ck&gt; = $A{myarg}<a name="line.957"></a>
+<span class="sourceLineNo">958</span>    *<a name="line.958"></a>
+<span class="sourceLineNo">959</span>    *    &lt;cc&gt;# The first command-line argument&lt;/cc&gt;<a name="line.959"></a>
+<span class="sourceLineNo">960</span>    *    &lt;ck&gt;firstArg&lt;/ck&gt; = $A{0}<a name="line.960"></a>
+<span class="sourceLineNo">961</span>    *<a name="line.961"></a>
+<span class="sourceLineNo">962</span>    *    &lt;cc&gt;# Look for system property, or env var if that doesn't exist, or command-line arg if that doesn't exist.&lt;/cc&gt;<a name="line.962"></a>
+<span class="sourceLineNo">963</span>    *    &lt;ck&gt;nested&lt;/ck&gt; = $S{mySystemProperty,$E{MY_ENV_VAR,$A{0}}}<a name="line.963"></a>
+<span class="sourceLineNo">964</span>    *<a name="line.964"></a>
+<span class="sourceLineNo">965</span>    *    &lt;cc&gt;# A POJO with embedded variables&lt;/cc&gt;<a name="line.965"></a>
+<span class="sourceLineNo">966</span>    *    &lt;ck&gt;aBean2&lt;/ck&gt; = {foo:'$A{0}',baz:$C{MySection/anInt}}<a name="line.966"></a>
+<span class="sourceLineNo">967</span>    * &lt;/p&gt;<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    *<a name="line.968"></a>
+<span class="sourceLineNo">969</span>    * &lt;p class='bjava'&gt;<a name="line.969"></a>
+<span class="sourceLineNo">970</span>    *    &lt;jc&gt;// Java code for accessing config entries above.&lt;/jc&gt;<a name="line.970"></a>
+<span class="sourceLineNo">971</span>    *    Config &lt;jv&gt;config&lt;/jv&gt; = getConfig();<a name="line.971"></a>
+<span class="sourceLineNo">972</span>    *<a name="line.972"></a>
+<span class="sourceLineNo">973</span>    *    &lt;jk&gt;int&lt;/jk&gt; &lt;jv&gt;anInt&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/anInt"&lt;/js&gt;).asInteger().orElse(-1);<a name="line.973"></a>
+<span class="sourceLineNo">974</span>    *    &lt;jk&gt;boolean&lt;/jk&gt; &lt;jv&gt;aBoolean&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/aBoolean"&lt;/js&gt;).asBoolean().orElse(&lt;jk&gt;false&lt;/jk&gt;);<a name="line.974"></a>
+<span class="sourceLineNo">975</span>    *    &lt;jk&gt;int&lt;/jk&gt;[] &lt;jv&gt;anIntArray&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/anIntArray"&lt;/js&gt;).as(&lt;jk&gt;int&lt;/jk&gt;[].&lt;jk&gt;class&lt;/jk&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.975"></a>
+<span class="sourceLineNo">976</span>    *    URL &lt;jv&gt;aURL&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/aURL"&lt;/js&gt;).as(URL.&lt;jk&gt;class&lt;/jk&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.976"></a>
+<span class="sourceLineNo">977</span>    *    MyBean &lt;jv&gt;aBean&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/aBean"&lt;/js&gt;).as(MyBean.&lt;jk&gt;class&lt;/jk&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.977"></a>
+<span class="sourceLineNo">978</span>    *    Locale &lt;jv&gt;locale&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/locale"&lt;/js&gt;).as(Locale.&lt;jk&gt;class&lt;/jk&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.978"></a>
+<span class="sourceLineNo">979</span>    *    String &lt;jv&gt;path&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/path"&lt;/js&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.979"></a>
+<span class="sourceLineNo">980</span>    *    String &lt;jv&gt;mainClass&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/mainClass"&lt;/js&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.980"></a>
+<span class="sourceLineNo">981</span>    *    &lt;jk&gt;int&lt;/jk&gt; &lt;jv&gt;sameAsAnInt&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/sameAsAnInt"&lt;/js&gt;).asInteger().orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.981"></a>
+<span class="sourceLineNo">982</span>    *    String &lt;jv&gt;myArg&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.getString(&lt;js&gt;"MySection/myArg"&lt;/js&gt;);<a name="line.982"></a>
+<span class="sourceLineNo">983</span>    *    String &lt;jv&gt;firstArg&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.getString(&lt;js&gt;"MySection/firstArg"&lt;/js&gt;);<a name="line.983"></a>
+<span class="sourceLineNo">984</span>    * &lt;/p&gt;<a name="line.984"></a>
+<span class="sourceLineNo">985</span>    *<a name="line.985"></a>
+<span class="sourceLineNo">986</span>    * @return The config file for this application, or &lt;jk&gt;null&lt;/jk&gt; if no config file is configured.<a name="line.986"></a>
+<span class="sourceLineNo">987</span>    */<a name="line.987"></a>
+<span class="sourceLineNo">988</span>   public Config getConfig() {<a name="line.988"></a>
+<span class="sourceLineNo">989</span>      return config;<a name="line.989"></a>
+<span class="sourceLineNo">990</span>   }<a name="line.990"></a>
+<span class="sourceLineNo">991</span><a name="line.991"></a>
+<span class="sourceLineNo">992</span>   /**<a name="line.992"></a>
+<span class="sourceLineNo">993</span>    * Returns the main jar manifest file contents as a simple {@link JsonMap}.<a name="line.993"></a>
+<span class="sourceLineNo">994</span>    *<a name="line.994"></a>
+<span class="sourceLineNo">995</span>    * &lt;p&gt;<a name="line.995"></a>
+<span class="sourceLineNo">996</span>    * This map consists of the contents of {@link Manifest#getMainAttributes()} with the keys and entries converted to<a name="line.996"></a>
+<span class="sourceLineNo">997</span>    * simple strings.<a name="line.997"></a>
+<span class="sourceLineNo">998</span>    * &lt;p&gt;<a name="line.998"></a>
+<span class="sourceLineNo">999</span>    * This method can be called from the class constructor.<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>    *<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>    * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>    * &lt;p class='bjava'&gt;<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>    *    &lt;jc&gt;// Get Main-Class from manifest file.&lt;/jc&gt;<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>    *    String &lt;jv&gt;mainClass&lt;/jv&gt; = Microservice.&lt;jsm&gt;getManifest&lt;/jsm&gt;().getString(&lt;js&gt;"Main-Class"&lt;/js&gt;, &lt;js&gt;"unknown"&lt;/js&gt;);<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>    *<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>    *    &lt;jc&gt;// Get Rest-Resources from manifest file.&lt;/jc&gt;<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>    *    String[] &lt;jv&gt;restResources&lt;/jv&gt; = Microservice.&lt;jsm&gt;getManifest&lt;/jsm&gt;().getStringArray(&lt;js&gt;"Rest-Resources"&lt;/js&gt;);<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>    * &lt;/p&gt;<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    *<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>    * @return The manifest file from the main jar, or &lt;jk&gt;null&lt;/jk&gt; if the manifest file could not be retrieved.<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>    */<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>   public ManifestFile getManifest() {<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>      return manifest;<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>   }<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span><a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>   /**<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>    * Returns the variable resolver for resolving variables in strings and files.<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>    *<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>    * &lt;p&gt;<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>    * Variables can be controlled by the following methods:<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>    * &lt;ul class='javatree'&gt;<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>    *    &lt;li class='jm'&gt;{@link Builder#vars(Class...)}<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>    *    &lt;li class='jm'&gt;{@link Builder#varBean(Class,Object)}<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    * &lt;/ul&gt;<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>    *<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>    * @return The VarResolver used by this Microservice, or &lt;jk&gt;null&lt;/jk&gt; if it was never created.<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>    */<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>   public VarResolver getVarResolver() {<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>      return varResolver;<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>   }<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span><a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>   /**<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>    * Returns the logger for this microservice.<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>    *<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>    * @return The logger for this microservice.<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>    */<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>   public Logger getLogger() {<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      return logger;<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>   }<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span><a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>   /**<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>    * Executes a console command.<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>    *<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>    * @param args<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>    *    The command arguments.<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>    *    &lt;br&gt;The first entry in the arguments is always the command name.<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>    * @param in Console input.<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>    * @param out Console output.<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>    * @return &lt;jk&gt;true&lt;/jk&gt; if the command returned &lt;jk&gt;true&lt;/jk&gt; meaning the console thread should exit.<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>    */<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>   public boolean executeCommand(Args args, Scanner in, PrintWriter out) {<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>      ConsoleCommand cc = consoleCommandMap.get(args.getArg(0));<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>      if (cc == null) {<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>         out.println(messages.getString("UnknownCommand"));<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>      } else {<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>         try {<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>            return cc.execute(in, out, args);<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>         } catch (Exception e) {<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>            e.printStackTrace(out);<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>         }<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>      }<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>      return false;<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>   }<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span><a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>   /**<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    * Convenience method for executing a console command directly.<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>    *<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>    * &lt;p&gt;<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    * Allows you to execute a console command outside the console by simulating input and output.<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>    *<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    * @param command The command name to execute.<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>    * @param input Optional input to the command.  Can be &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    * @param args Optional command arguments to pass to the command.<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    * @return The command output.<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    */<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>   public String executeCommand(String command, String input, Object...args) {<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>      StringWriter sw = new StringWriter();<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>      List&lt;String&gt; l = list();<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      l.add(command);<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>      for (Object a : args)<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>         l.add(stringify(a));<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      Args args2 = new Args(l.toArray(new String[l.size()]));<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>      try (Scanner in = new Scanner(input); PrintWriter out = new PrintWriter(sw)) {<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>         executeCommand(args2, in, out);<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>      }<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      return sw.toString();<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>   }<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span><a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>   /**<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>    * Joins the application with the current thread.<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>    *<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>    * &lt;p&gt;<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    * Default implementation is a no-op.<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>    *<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>    * @return This object.<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>    * @throws Exception Error occurred<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>    */<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>   public Microservice join() throws Exception {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      return this;<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>   }<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span><a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>   /**<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    * Stop this application.<a name="line.1103"></a>
 <span class="sourceLineNo">1104</span>    *<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    * @param mb The message bundle containing the message.<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    * @param messageKey The message key.<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    * @param args Optional {@link MessageFormat}-style arguments.<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    */<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>   public void out(Messages mb, String messageKey, Object...args) {<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>      String msg = mb.getString(messageKey, args);<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>      if (consoleEnabled)<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>         getConsoleWriter().println(msg);<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>      log(Level.INFO, msg);<a name="line.1113"></a>
+<span class="sourceLineNo">1105</span>    * &lt;p&gt;<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>    * Overridden methods MUST call this method LAST so that the {@link MicroserviceListener#onStop(Microservice)} method is called.<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>    *<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    * @return This object.<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    * @throws Exception Error occurred<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>    */<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>   public Microservice stop() throws Exception {<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>      listener.onStop(this);<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>      return this;<a name="line.1113"></a>
 <span class="sourceLineNo">1114</span>   }<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>    * Prints a localized message to STDERR.<a name="line.1117"></a>
+<span class="sourceLineNo">1117</span>    * Stops the console (if it's started) and calls {@link System#exit(int)}.<a name="line.1117"></a>
 <span class="sourceLineNo">1118</span>    *<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>    * &lt;p&gt;<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>    * Ignored if &lt;js&gt;"Console/enabled"&lt;/js&gt; is &lt;jk&gt;false&lt;/jk&gt;.<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>    *<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    * @param mb The message bundle containing the message.<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    * @param messageKey The message key.<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    * @param args Optional {@link MessageFormat}-style arguments.<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    */<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>   public void err(Messages mb, String messageKey, Object...args) {<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>      String msg = mb.getString(messageKey, args);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>      if (consoleEnabled)<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>         System.err.println(mb.getString(messageKey, args));  // NOT DEBUG<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>      log(Level.SEVERE, msg);<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>   }<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span><a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>   /**<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>    * Logs a message to the log file.<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>    *<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>    * @param level The log level.<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    * @param message The message text.<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>    * @param args Optional {@link MessageFormat}-style arguments.<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    */<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>   protected void log(Level level, String message, Object...args) {<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>      String msg = args.length == 0 ? message : MessageFormat.format(message, args);<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>      getLogger().log(level, msg);<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>   }<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span><a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>   @Override /* ConfigChangeListener */<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>   public void onConfigChange(ConfigEvents events) {<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      listener.onConfigChange(this, events);<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>   }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>}<a name="line.1149"></a>
+<span class="sourceLineNo">1119</span>    * @throws Exception Error occurred<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>    */<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>   public void exit() throws Exception {<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>      try {<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>         stopConsole();<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>      } catch (Exception e) {<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>         e.printStackTrace();<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>      }<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>      System.exit(0);<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>    * Kill the JVM by calling &lt;c&gt;System.exit(2);&lt;/c&gt;.<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    */<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>   public void kill() {<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>      // This triggers the shutdown hook.<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>      System.exit(2);<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>   }<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span><a name="line.1137"></a>
+<span class="sourceLineNo">1138</span><a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>   // Other methods<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span><a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>   /**<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>    * Returns the console commands associated with this microservice.<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>    *<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>    * @return The console commands associated with this microservice as an unmodifiable map.<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>    */<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>   public final Map&lt;String,ConsoleCommand&gt; getConsoleCommands() {<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>      return consoleCommandMap;<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>    * Returns the console reader.<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>    *<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>    * &lt;p&gt;<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>    * Subclasses can override this method to provide their own console input.<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>    *<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>    * @return The console reader.  Never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>    */<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>   protected Scanner getConsoleReader() {<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>      return consoleReader;<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>   }<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>    * Returns the console writer.<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>    *<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>    * &lt;p&gt;<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>    * Subclasses can override this method to provide their own console output.<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>    *<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>    * @return The console writer.  Never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>    */<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>   protected PrintWriter getConsoleWriter() {<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>      return consoleWriter;<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>   }<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span><a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>   /**<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>    * Prints a localized message to the console writer.<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>    *<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    * &lt;p&gt;<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>    * Ignored if &lt;js&gt;"Console/enabled"&lt;/js&gt; is &lt;jk&gt;false&lt;/jk&gt;.<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>    *<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>    * @param mb The message bundle containing the message.<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>    * @param messageKey The message key.<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>    * @param args Optional {@link MessageFormat}-style arguments.<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>    */<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>   public void out(Messages mb, String messageKey, Object...args) {<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>      String msg = mb.getString(messageKey, args);<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>      if (consoleEnabled)<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>         getConsoleWriter().println(msg);<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>      log(Level.INFO, msg);<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>    * Prints a localized message to STDERR.<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>    *<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    * &lt;p&gt;<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    * Ignored if &lt;js&gt;"Console/enabled"&lt;/js&gt; is &lt;jk&gt;false&lt;/jk&gt;.<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>    *<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>    * @param mb The message bundle containing the message.<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>    * @param messageKey The message key.<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>    * @param args Optional {@link MessageFormat}-style arguments.<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    */<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>   public void err(Messages mb, String messageKey, Object...args) {<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>      String msg = mb.getString(messageKey, args);<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>      if (consoleEnabled)<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>         System.err.println(mb.getString(messageKey, args));  // NOT DEBUG<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>      log(Level.SEVERE, msg);<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>   }<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span><a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>   /**<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    * Logs a message to the log file.<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>    *<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>    * @param level The log level.<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    * @param message The message text.<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    * @param args Optional {@link MessageFormat}-style arguments.<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>    */<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>   protected void log(Level level, String message, Object...args) {<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>      String msg = args.length == 0 ? message : MessageFormat.format(message, args);<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      getLogger().log(level, msg);<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>   }<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span><a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>   @Override /* ConfigChangeListener */<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>   public void onConfigChange(ConfigEvents events) {<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>      listener.onConfigChange(this, events);<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>   }<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>}<a name="line.1226"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/Microservice.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/Microservice.html
index a99dea8..715a51d 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/Microservice.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/Microservice.html
@@ -22,384 +22,384 @@
 <span class="sourceLineNo">014</span><a name="line.14"></a>
 <span class="sourceLineNo">015</span>import static org.apache.juneau.internal.ClassUtils.*;<a name="line.15"></a>
 <span class="sourceLineNo">016</span>import static org.apache.juneau.internal.CollectionUtils.*;<a name="line.16"></a>
-<span class="sourceLineNo">017</span>import static org.apache.juneau.internal.IOUtils.*;<a name="line.17"></a>
-<span class="sourceLineNo">018</span>import static org.apache.juneau.internal.StringUtils.*;<a name="line.18"></a>
-<span class="sourceLineNo">019</span>import java.io.*;<a name="line.19"></a>
-<span class="sourceLineNo">020</span>import java.io.Console;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.net.*;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.nio.file.*;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.text.*;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.*;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.concurrent.*;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.jar.*;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.logging.*;<a name="line.27"></a>
-<span class="sourceLineNo">028</span><a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.juneau.*;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.juneau.collections.*;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.juneau.config.*;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.juneau.config.event.*;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.juneau.config.store.*;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.juneau.config.store.FileStore;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.juneau.config.vars.*;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.juneau.cp.*;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.juneau.internal.*;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.juneau.microservice.console.*;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.juneau.parser.ParseException;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.juneau.svl.*;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.juneau.svl.vars.*;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.juneau.utils.*;<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> * Parent class for all microservices.<a name="line.45"></a>
-<span class="sourceLineNo">046</span> *<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * &lt;p&gt;<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * A microservice defines a simple API for starting and stopping simple Java services contained in executable jars.<a name="line.48"></a>
-<span class="sourceLineNo">049</span> *<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * &lt;p&gt;<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * The general command for creating and starting a microservice from a main method is as follows:<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * &lt;p class='bjava'&gt;<a name="line.52"></a>
-<span class="sourceLineNo">053</span> *    &lt;jk&gt;public static void&lt;/jk&gt; main(String[] &lt;jv&gt;args&lt;/jv&gt;) {<a name="line.53"></a>
-<span class="sourceLineNo">054</span> *       Microservice.&lt;jsm&gt;create&lt;/jsm&gt;().args(&lt;jv&gt;args&lt;/jv&gt;).build().start().join();<a name="line.54"></a>
-<span class="sourceLineNo">055</span> *  }<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * &lt;/p&gt;<a name="line.56"></a>
-<span class="sourceLineNo">057</span> *<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * &lt;p&gt;<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * Your microservice class must be specified as the &lt;jk&gt;Main-Class&lt;/jk&gt; entry in the manifest file of your microservice<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * jar file if it's an executable jar.<a name="line.60"></a>
-<span class="sourceLineNo">061</span> *<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * &lt;h5 class='topic'&gt;Microservice Configuration&lt;/h5&gt;<a name="line.62"></a>
-<span class="sourceLineNo">063</span> *<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * This class defines the following method for accessing configuration for your microservice:<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * &lt;ul class='spaced-list'&gt;<a name="line.65"></a>
-<span class="sourceLineNo">066</span> *    &lt;li&gt;<a name="line.66"></a>
-<span class="sourceLineNo">067</span> *       {@link #getArgs()} - The command-line arguments passed to the jar file.<a name="line.67"></a>
-<span class="sourceLineNo">068</span> *    &lt;li&gt;<a name="line.68"></a>
-<span class="sourceLineNo">069</span> *       {@link #getConfig()} - An external INI-style configuration file.<a name="line.69"></a>
-<span class="sourceLineNo">070</span> *    &lt;li&gt;<a name="line.70"></a>
-<span class="sourceLineNo">071</span> *       {@link #getManifest()} - The manifest file for the main jar file.<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * &lt;/ul&gt;<a name="line.72"></a>
-<span class="sourceLineNo">073</span> *<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * &lt;h5 class='topic'&gt;Lifecycle Methods&lt;/h5&gt;<a name="line.74"></a>
-<span class="sourceLineNo">075</span> *<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * Subclasses must implement the following lifecycle methods:<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * &lt;ul class='spaced-list'&gt;<a name="line.77"></a>
-<span class="sourceLineNo">078</span> *    &lt;li&gt;<a name="line.78"></a>
-<span class="sourceLineNo">079</span> *       {@link #init()} - Gets executed immediately following construction.<a name="line.79"></a>
-<span class="sourceLineNo">080</span> *    &lt;li&gt;<a name="line.80"></a>
-<span class="sourceLineNo">081</span> *       {@link #start()} - Gets executed during startup.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> *    &lt;li&gt;<a name="line.82"></a>
-<span class="sourceLineNo">083</span> *       {@link #stop()} - Gets executed when 'exit' is typed in the console or an external shutdown signal is received.<a name="line.83"></a>
-<span class="sourceLineNo">084</span> *    &lt;li&gt;<a name="line.84"></a>
-<span class="sourceLineNo">085</span> *       {@link #kill()} - Can be used to forcibly shut down the service.  Doesn't get called during normal operation.<a name="line.85"></a>
-<span class="sourceLineNo">086</span> * &lt;/ul&gt;<a name="line.86"></a>
-<span class="sourceLineNo">087</span> *<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * &lt;ul class='seealso'&gt;<a name="line.88"></a>
-<span class="sourceLineNo">089</span> *    &lt;li class='link'&gt;{@doc juneau-microservice-core}<a name="line.89"></a>
-<span class="sourceLineNo">090</span> *    &lt;li class='extlink'&gt;{@source}<a name="line.90"></a>
+<span class="sourceLineNo">017</span>import static org.apache.juneau.internal.FileUtils.*;<a name="line.17"></a>
+<span class="sourceLineNo">018</span>import static org.apache.juneau.internal.IOUtils.*;<a name="line.18"></a>
+<span class="sourceLineNo">019</span>import static org.apache.juneau.internal.ObjectUtils.*;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.apache.juneau.internal.StringUtils.*;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><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.io.Console;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.net.*;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.nio.file.*;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.text.*;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.*;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.concurrent.*;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.jar.*;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.logging.*;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.logging.Formatter;<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.juneau.*;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.juneau.collections.*;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.juneau.config.*;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.juneau.config.event.*;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.juneau.config.store.*;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.juneau.config.store.FileStore;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.juneau.config.vars.*;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.juneau.cp.*;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.juneau.internal.*;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.juneau.microservice.console.*;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.juneau.microservice.resources.*;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.juneau.parser.ParseException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.juneau.svl.*;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.juneau.svl.vars.*;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.juneau.utils.*;<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> * Parent class for all microservices.<a name="line.50"></a>
+<span class="sourceLineNo">051</span> *<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * &lt;p&gt;<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * A microservice defines a simple API for starting and stopping simple Java services contained in executable jars.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * &lt;p&gt;<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * The general command for creating and starting a microservice from a main method is as follows:<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * &lt;p class='bjava'&gt;<a name="line.57"></a>
+<span class="sourceLineNo">058</span> *    &lt;jk&gt;public static void&lt;/jk&gt; main(String[] &lt;jv&gt;args&lt;/jv&gt;) {<a name="line.58"></a>
+<span class="sourceLineNo">059</span> *       Microservice.&lt;jsm&gt;create&lt;/jsm&gt;().args(&lt;jv&gt;args&lt;/jv&gt;).build().start().join();<a name="line.59"></a>
+<span class="sourceLineNo">060</span> *  }<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * &lt;/p&gt;<a name="line.61"></a>
+<span class="sourceLineNo">062</span> *<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * &lt;p&gt;<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * Your microservice class must be specified as the &lt;jk&gt;Main-Class&lt;/jk&gt; entry in the manifest file of your microservice<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * jar file if it's an executable jar.<a name="line.65"></a>
+<span class="sourceLineNo">066</span> *<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * &lt;h5 class='topic'&gt;Microservice Configuration&lt;/h5&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span> *<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * This class defines the following method for accessing configuration for your microservice:<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * &lt;ul class='spaced-list'&gt;<a name="line.70"></a>
+<span class="sourceLineNo">071</span> *    &lt;li&gt;<a name="line.71"></a>
+<span class="sourceLineNo">072</span> *       {@link #getArgs()} - The command-line arguments passed to the jar file.<a name="line.72"></a>
+<span class="sourceLineNo">073</span> *    &lt;li&gt;<a name="line.73"></a>
+<span class="sourceLineNo">074</span> *       {@link #getConfig()} - An external INI-style configuration file.<a name="line.74"></a>
+<span class="sourceLineNo">075</span> *    &lt;li&gt;<a name="line.75"></a>
+<span class="sourceLineNo">076</span> *       {@link #getManifest()} - The manifest file for the main jar file.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * &lt;/ul&gt;<a name="line.77"></a>
+<span class="sourceLineNo">078</span> *<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * &lt;h5 class='topic'&gt;Lifecycle Methods&lt;/h5&gt;<a name="line.79"></a>
+<span class="sourceLineNo">080</span> *<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * Subclasses must implement the following lifecycle methods:<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * &lt;ul class='spaced-list'&gt;<a name="line.82"></a>
+<span class="sourceLineNo">083</span> *    &lt;li&gt;<a name="line.83"></a>
+<span class="sourceLineNo">084</span> *       {@link #init()} - Gets executed immediately following construction.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> *    &lt;li&gt;<a name="line.85"></a>
+<span class="sourceLineNo">086</span> *       {@link #start()} - Gets executed during startup.<a name="line.86"></a>
+<span class="sourceLineNo">087</span> *    &lt;li&gt;<a name="line.87"></a>
+<span class="sourceLineNo">088</span> *       {@link #stop()} - Gets executed when 'exit' is typed in the console or an external shutdown signal is received.<a name="line.88"></a>
+<span class="sourceLineNo">089</span> *    &lt;li&gt;<a name="line.89"></a>
+<span class="sourceLineNo">090</span> *       {@link #kill()} - Can be used to forcibly shut down the service.  Doesn't get called during normal operation.<a name="line.90"></a>
 <span class="sourceLineNo">091</span> * &lt;/ul&gt;<a name="line.91"></a>
-<span class="sourceLineNo">092</span> */<a name="line.92"></a>
-<span class="sourceLineNo">093</span>public class Microservice implements ConfigEventListener {<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   // Static<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span>   private static volatile Microservice INSTANCE;<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>   private static void setInstance(Microservice m) {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>      synchronized(Microservice.class) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>         INSTANCE = m;<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><a name="line.106"></a>
-<span class="sourceLineNo">107</span>   /**<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    * Returns the Microservice instance.<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    *<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    * &lt;p&gt;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    * This method only works if there's only one Microservice instance in a JVM.<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    * Otherwise, it's just overwritten by the last instantiated microservice.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    *<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    * @return The Microservice instance, or &lt;jk&gt;null&lt;/jk&gt; if there isn't one.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    */<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   public static Microservice getInstance() {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      synchronized(Microservice.class) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>         return INSTANCE;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      }<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   }<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>   /**<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    * Creates a new builder for this object.<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    *<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    * @return A new microservice builder.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    */<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   public static Builder create() {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      return new Builder();<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   // Builder<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>   /**<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    * Builder class.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    */<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   public static class Builder {<a name="line.138"></a>
+<span class="sourceLineNo">092</span> *<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * &lt;ul class='seealso'&gt;<a name="line.93"></a>
+<span class="sourceLineNo">094</span> *    &lt;li class='link'&gt;{@doc juneau-microservice-core}<a name="line.94"></a>
+<span class="sourceLineNo">095</span> *    &lt;li class='extlink'&gt;{@source}<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * &lt;/ul&gt;<a name="line.96"></a>
+<span class="sourceLineNo">097</span> */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>public class Microservice implements ConfigEventListener {<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   // Static<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>   private static volatile Microservice INSTANCE;<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>   private static void setInstance(Microservice m) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      synchronized(Microservice.class) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>         INSTANCE = m;<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><a name="line.111"></a>
+<span class="sourceLineNo">112</span>   /**<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    * Returns the Microservice instance.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    *<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    * &lt;p&gt;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    * This method only works if there's only one Microservice instance in a JVM.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    * Otherwise, it's just overwritten by the last instantiated microservice.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    *<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    * @return The Microservice instance, or &lt;jk&gt;null&lt;/jk&gt; if there isn't one.<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   public static Microservice getInstance() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      synchronized(Microservice.class) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>         return INSTANCE;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      }<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>   /**<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    * Creates a new builder for this object.<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    *<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    * @return A new microservice builder.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   public static Builder create() {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      return new Builder();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   }<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>   // Builder<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>      Args args;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      ManifestFile manifest;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      Logger logger;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      Config config;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      String configName;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      ConfigStore configStore;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      Config.Builder configBuilder = Config.create();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      Boolean consoleEnabled;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      List&lt;ConsoleCommand&gt; consoleCommands = list();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      VarResolver.Builder varResolver = VarResolver.create().defaultVars().vars(ConfigVar.class);<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      Scanner consoleReader;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      PrintWriter consoleWriter;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      MicroserviceListener listener;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      File workingDir = System.getProperty("juneau.workingDir") == null ? null : new File(System.getProperty("juneau.workingDir"));<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>      /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>       * Constructor.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>       */<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      protected Builder() {}<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>      /**<a name="line.160"></a>
-<span class="sourceLineNo">161</span>       * Copy constructor.<a name="line.161"></a>
-<span class="sourceLineNo">162</span>       *<a name="line.162"></a>
-<span class="sourceLineNo">163</span>       * @param copyFrom The builder to copy.<a name="line.163"></a>
-<span class="sourceLineNo">164</span>       */<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      protected Builder(Builder copyFrom) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>         this.args = copyFrom.args;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>         this.manifest = copyFrom.manifest;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>         this.logger = copyFrom.logger;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>         this.configName = copyFrom.configName;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>         this.consoleEnabled = copyFrom.consoleEnabled;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>         this.configBuilder = copyFrom.configBuilder;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>         this.varResolver = copyFrom.varResolver;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>         this.consoleReader = copyFrom.consoleReader;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>         this.consoleWriter = copyFrom.consoleWriter;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>         this.workingDir = copyFrom.workingDir;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>      /**<a name="line.178"></a>
-<span class="sourceLineNo">179</span>       * Creates a copy of this builder.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>       *<a name="line.180"></a>
-<span class="sourceLineNo">181</span>       * @return A new copy of this builder.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>       */<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      public Builder copy() {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>         return new Builder(this);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      }<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>       * Instantiate a new microservice using the settings defined on this builder.<a name="line.188"></a>
-<span class="sourceLineNo">189</span>       *<a name="line.189"></a>
-<span class="sourceLineNo">190</span>       * @return A new microservice.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>       * @throws Exception Error occurred.<a name="line.191"></a>
-<span class="sourceLineNo">192</span>       */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      public Microservice build() throws Exception {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>         return new Microservice(this);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>      /**<a name="line.197"></a>
-<span class="sourceLineNo">198</span>       * Specifies the command-line arguments passed into the Java command.<a name="line.198"></a>
-<span class="sourceLineNo">199</span>       *<a name="line.199"></a>
-<span class="sourceLineNo">200</span>       * &lt;p&gt;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>       * This is required if you use {@link Microservice#getArgs()} or &lt;c&gt;$A&lt;/c&gt; string variables.<a name="line.201"></a>
-<span class="sourceLineNo">202</span>       *<a name="line.202"></a>
-<span class="sourceLineNo">203</span>       * @param args<a name="line.203"></a>
-<span class="sourceLineNo">204</span>       *    The command-line arguments passed into the Java command as a pre-parsed {@link Args} object.<a name="line.204"></a>
-<span class="sourceLineNo">205</span>       * @return This object.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>       */<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      public Builder args(Args args) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>         this.args = args;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>         return this;<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>      /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span>       * Specifies the command-line arguments passed into the Java command.<a name="line.213"></a>
-<span class="sourceLineNo">214</span>       *<a name="line.214"></a>
-<span class="sourceLineNo">215</span>       * &lt;p&gt;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>       * This is required if you use {@link Microservice#getArgs()} or &lt;c&gt;$A&lt;/c&gt; string variables.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>       *<a name="line.217"></a>
-<span class="sourceLineNo">218</span>       * @param args<a name="line.218"></a>
-<span class="sourceLineNo">219</span>       *    The command-line arguments passed into the Java command as the raw command-line arguments.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>       * @return This object.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>       */<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      public Builder args(String...args) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>         this.args = new Args(args);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>         return this;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      }<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>       * Specifies the manifest file of the jar file this microservice is contained within.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>       *<a name="line.229"></a>
-<span class="sourceLineNo">230</span>       * &lt;p&gt;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>       * This is required if you use {@link Microservice#getManifest()}.<a name="line.231"></a>
-<span class="sourceLineNo">232</span>       * It's also used to locate initialization values such as &lt;c&gt;Main-Config&lt;/c&gt;.<a name="line.232"></a>
-<span class="sourceLineNo">233</span>       *<a name="line.233"></a>
-<span class="sourceLineNo">234</span>       * &lt;p&gt;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>       * If you do not specify the manifest file, we attempt to resolve it through the following methods:<a name="line.235"></a>
-<span class="sourceLineNo">236</span>       * &lt;ol class='spaced-list'&gt;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>       *    &lt;li&gt;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>       *       Looking on the file system for a file at &lt;js&gt;"META-INF/MANIFEST.MF"&lt;/js&gt;.<a name="line.238"></a>
-<span class="sourceLineNo">239</span>       *       This is primarily to allow for running microservices from within eclipse workspaces where the manifest file<a name="line.239"></a>
-<span class="sourceLineNo">240</span>       *       is located in the project root.<a name="line.240"></a>
-<span class="sourceLineNo">241</span>       *    &lt;li&gt;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>       *       Using the class loader for this class to find the file at the URL &lt;js&gt;"META-INF/MANIFEST.MF"&lt;/js&gt;.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>       * &lt;/ol&gt;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>       *<a name="line.244"></a>
-<span class="sourceLineNo">245</span>       * @param value<a name="line.245"></a>
-<span class="sourceLineNo">246</span>       *    The manifest file of this microservice.<a name="line.246"></a>
-<span class="sourceLineNo">247</span>       *    &lt;br&gt;Can be any of the following types:<a name="line.247"></a>
-<span class="sourceLineNo">248</span>       *    &lt;ul&gt;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>       *       &lt;li&gt;{@link ManifestFile}<a name="line.249"></a>
-<span class="sourceLineNo">250</span>       *       &lt;li&gt;{@link Manifest}<a name="line.250"></a>
-<span class="sourceLineNo">251</span>       *       &lt;li&gt;{@link Reader} - Containing the raw contents of the manifest.  Note that the input must end with a newline.<a name="line.251"></a>
-<span class="sourceLineNo">252</span>       *       &lt;li&gt;{@link InputStream} - Containing the raw contents of the manifest.  Note that the input must end with a newline.<a name="line.252"></a>
-<span class="sourceLineNo">253</span>       *       &lt;li&gt;{@link File} - File containing the raw contents of the manifest.<a name="line.253"></a>
-<span class="sourceLineNo">254</span>       *       &lt;li&gt;{@link String} - Path to file containing the raw contents of the manifest.<a name="line.254"></a>
-<span class="sourceLineNo">255</span>       *       &lt;li&gt;{@link Class} - Finds and loads the manifest file of the jar file that the specified class is contained within.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>       *    &lt;/ul&gt;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>       * @return This object.<a name="line.257"></a>
-<span class="sourceLineNo">258</span>       * @throws IOException Thrown by underlying stream.<a name="line.258"></a>
-<span class="sourceLineNo">259</span>       */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      public Builder manifest(Object value) throws IOException {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>         if (value == null)<a name="line.261"></a>
-<span class="sourceLineNo">262</span>            this.manifest = null;<a name="line.262"></a>
-<span class="sourceLineNo">263</span>         else if (value instanceof ManifestFile)<a name="line.263"></a>
-<span class="sourceLineNo">264</span>            this.manifest = (ManifestFile)value;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>         else if (value instanceof Manifest)<a name="line.265"></a>
-<span class="sourceLineNo">266</span>            this.manifest = new ManifestFile((Manifest)value);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>         else if (value instanceof Reader)<a name="line.267"></a>
-<span class="sourceLineNo">268</span>            this.manifest = new ManifestFile((Reader)value);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>         else if (value instanceof InputStream)<a name="line.269"></a>
-<span class="sourceLineNo">270</span>            this.manifest = new ManifestFile((InputStream)value);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>         else if (value instanceof File)<a name="line.271"></a>
-<span class="sourceLineNo">272</span>            this.manifest = new ManifestFile((File)value);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>         else if (value instanceof String)<a name="line.273"></a>
-<span class="sourceLineNo">274</span>            this.manifest = new ManifestFile(resolveFile((String)value));<a name="line.274"></a>
-<span class="sourceLineNo">275</span>         else if (value instanceof Class)<a name="line.275"></a>
-<span class="sourceLineNo">276</span>            this.manifest = new ManifestFile((Class&lt;?&gt;)value);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>         else<a name="line.277"></a>
-<span class="sourceLineNo">278</span>            throw new BasicRuntimeException("Invalid type passed to Builder.manifest(Object).  Type=[{0}]", className(value));<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>         return this;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>      /**<a name="line.283"></a>
-<span class="sourceLineNo">284</span>       * Specifies the logger used by the microservice and returned by the {@link Microservice#getLogger()} method.<a name="line.284"></a>
-<span class="sourceLineNo">285</span>       *<a name="line.285"></a>
-<span class="sourceLineNo">286</span>       * @param logger The logger to use for logging microservice messages.<a name="line.286"></a>
-<span class="sourceLineNo">287</span>       * @return This object.<a name="line.287"></a>
-<span class="sourceLineNo">288</span>       */<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      public Builder logger(Logger logger) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>         this.logger = logger;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>         return this;<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>      /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span>       * Specifies the config for initializing this microservice.<a name="line.295"></a>
-<span class="sourceLineNo">296</span>       *<a name="line.296"></a>
-<span class="sourceLineNo">297</span>       * &lt;p&gt;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>       * Calling this method overrides the default configuration controlled by the {@link #configName(String)} and {@link #configStore(ConfigStore)} methods.<a name="line.298"></a>
-<span class="sourceLineNo">299</span>       *<a name="line.299"></a>
-<span class="sourceLineNo">300</span>       * @param config The configuration.<a name="line.300"></a>
-<span class="sourceLineNo">301</span>       * @return This object.<a name="line.301"></a>
-<span class="sourceLineNo">302</span>       */<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      public Builder config(Config config) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>         this.config = config;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>         return this;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      }<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>      /**<a name="line.308"></a>
-<span class="sourceLineNo">309</span>       * Specifies the config name for initializing this microservice.<a name="line.309"></a>
-<span class="sourceLineNo">310</span>       *<a name="line.310"></a>
-<span class="sourceLineNo">311</span>       * &lt;p&gt;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>       * If you do not specify the config file location, we attempt to resolve it through the following methods:<a name="line.312"></a>
-<span class="sourceLineNo">313</span>       * &lt;ol class='spaced-list'&gt;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>       *    &lt;li&gt;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>       *       Resolve file first in working directory, then in classpath, using the following names:<a name="line.315"></a>
-<span class="sourceLineNo">316</span>       *       &lt;ul&gt;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>       *          &lt;li&gt;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>       *             The &lt;js&gt;"configFile"&lt;/js&gt; argument in the command line arguments passed in through the constructor.<a name="line.318"></a>
-<span class="sourceLineNo">319</span>       *          &lt;li&gt;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>       *             The value of the &lt;c&gt;Main-Config&lt;/c&gt; entry in the manifest file.<a name="line.320"></a>
-<span class="sourceLineNo">321</span>       *          &lt;li&gt;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>       *             A config file in the same location and with the same name as the executable jar file.<a name="line.322"></a>
-<span class="sourceLineNo">323</span>       *             (e.g. &lt;js&gt;"java -jar myjar.jar"&lt;/js&gt; will look for &lt;js&gt;"myjar.cfg"&lt;/js&gt;).<a name="line.323"></a>
-<span class="sourceLineNo">324</span>       *       &lt;/ul&gt;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>       *    &lt;li&gt;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>       *       Resolve any &lt;js&gt;"*.cfg"&lt;/js&gt; file that can be found in the working directory.<a name="line.326"></a>
-<span class="sourceLineNo">327</span>       *    &lt;li&gt;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>       *       Resolve any of the following files in the classpath:  &lt;js&gt;"juneau.cfg"&lt;/js&gt;, &lt;js&gt;"system.cfg"&lt;/js&gt;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>       * &lt;/ol&gt;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>       *<a name="line.330"></a>
-<span class="sourceLineNo">331</span>       * &lt;p&gt;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>       * If no configuration file is found, and empty in-memory configuration is used.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>       *<a name="line.333"></a>
-<span class="sourceLineNo">334</span>       * @param configName The configuration name.<a name="line.334"></a>
-<span class="sourceLineNo">335</span>       * @return This object.<a name="line.335"></a>
-<span class="sourceLineNo">336</span>       */<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      public Builder configName(String configName) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>         this.configName = configName;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>         return this;<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>       * Specifies the config store to use for storing and retrieving configurations.<a name="line.343"></a>
-<span class="sourceLineNo">344</span>       *<a name="line.344"></a>
-<span class="sourceLineNo">345</span>       * &lt;p&gt;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>       * By default, we use a {@link FileStore} store for configuration files.<a name="line.346"></a>
-<span class="sourceLineNo">347</span>       *<a name="line.347"></a>
-<span class="sourceLineNo">348</span>       * @param configStore The configuration name.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>       * @return This object.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>       */<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      public Builder configStore(ConfigStore configStore) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>         this.configStore = configStore;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>         return this;<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>       * Specifies that the Java console is enabled for this microservice.<a name="line.357"></a>
-<span class="sourceLineNo">358</span>       *<a name="line.358"></a>
-<span class="sourceLineNo">359</span>       * &lt;p&gt;<a name="line.359"></a>
-<span class="sourceLineNo">360</span>       * If not specified, this value is taken from the &lt;js&gt;"Console/enabled"&lt;/js&gt; configuration setting.<a name="line.360"></a>
-<span class="sourceLineNo">361</span>       * If not specified in the configuration, defaults to &lt;jk&gt;false&lt;/jk&gt;.<a name="line.361"></a>
-<span class="sourceLineNo">362</span>       *<a name="line.362"></a>
-<span class="sourceLineNo">363</span>       * @param consoleEnabled &lt;jk&gt;true&lt;/jk&gt; if the Java console is enabled for this microservice.<a name="line.363"></a>
-<span class="sourceLineNo">364</span>       * @return This object.<a name="line.364"></a>
-<span class="sourceLineNo">365</span>       */<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      public Builder consoleEnabled(boolean consoleEnabled) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>         this.consoleEnabled = consoleEnabled;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>         return this;<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>      /**<a name="line.371"></a>
-<span class="sourceLineNo">372</span>       * Specifies console commands to make available on the Java console.<a name="line.372"></a>
-<span class="sourceLineNo">373</span>       *<a name="line.373"></a>
-<span class="sourceLineNo">374</span>       * &lt;p&gt;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>       * Note that these are ignored if the console is not enabled via {@link #consoleEnabled(boolean)}.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>       *<a name="line.376"></a>
-<span class="sourceLineNo">377</span>       * &lt;p&gt;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>       * This list augments the commands defined via the &lt;js&gt;"Console/commands"&lt;/js&gt; configuration setting.<a name="line.378"></a>
-<span class="sourceLineNo">379</span>       *<a name="line.379"></a>
-<span class="sourceLineNo">380</span>       * &lt;p&gt;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>       * This method can only be used on console commands with no-arg constructors.<a name="line.381"></a>
-<span class="sourceLineNo">382</span>       *<a name="line.382"></a>
-<span class="sourceLineNo">383</span>       * @param consoleCommands The list of console commands to append to the list of available commands.<a name="line.383"></a>
-<span class="sourceLineNo">384</span>       * @return This object.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>       * @throws ExecutableException Exception occurred on invoked constructor/method/field.<a name="line.385"></a>
-<span class="sourceLineNo">386</span>       */<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      @SuppressWarnings("unchecked")<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      public Builder consoleCommands(Class&lt;? extends ConsoleCommand&gt;...consoleCommands) throws ExecutableException {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>         try {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>            for (Class&lt;? extends ConsoleCommand&gt; cc : consoleCommands)<a name="line.390"></a>
-<span class="sourceLineNo">391</span>               this.consoleCommands.add(cc.newInstance());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>         } catch (InstantiationException | IllegalAccessException e) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>            throw new ExecutableException(e);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>         }<a name="line.394"></a>
+<span class="sourceLineNo">140</span>   /**<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    * Builder class.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    */<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   public static class Builder {<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>      Args args;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      ManifestFile manifest;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      Logger logger;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      LogConfig logConfig;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      Config config;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      String configName;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      ConfigStore configStore;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      Config.Builder configBuilder = Config.create();<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      Boolean consoleEnabled;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      List&lt;ConsoleCommand&gt; consoleCommands = list();<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      VarResolver.Builder varResolver = VarResolver.create().defaultVars().vars(ConfigVar.class);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      Scanner consoleReader;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      PrintWriter consoleWriter;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      MicroserviceListener listener;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      File workingDir = System.getProperty("juneau.workingDir") == null ? null : new File(System.getProperty("juneau.workingDir"));<a name="line.159"></a>
+<span class="sourceLineNo">160</span><a name="line.160"></a>
+<span class="sourceLineNo">161</span>      /**<a name="line.161"></a>
+<span class="sourceLineNo">162</span>       * Constructor.<a name="line.162"></a>
+<span class="sourceLineNo">163</span>       */<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      protected Builder() {}<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>      /**<a name="line.166"></a>
+<span class="sourceLineNo">167</span>       * Copy constructor.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>       *<a name="line.168"></a>
+<span class="sourceLineNo">169</span>       * @param copyFrom The builder to copy.<a name="line.169"></a>
+<span class="sourceLineNo">170</span>       */<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      protected Builder(Builder copyFrom) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>         this.args = copyFrom.args;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>         this.manifest = copyFrom.manifest;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>         this.logger = copyFrom.logger;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>         this.configName = copyFrom.configName;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>         this.logConfig = copyFrom.logConfig == null ? null : copyFrom.logConfig.copy();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>         this.consoleEnabled = copyFrom.consoleEnabled;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>         this.configBuilder = copyFrom.configBuilder;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>         this.varResolver = copyFrom.varResolver;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>         this.consoleReader = copyFrom.consoleReader;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>         this.consoleWriter = copyFrom.consoleWriter;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>         this.workingDir = copyFrom.workingDir;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      }<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>       * Creates a copy of this builder.<a name="line.186"></a>
+<span class="sourceLineNo">187</span>       *<a name="line.187"></a>
+<span class="sourceLineNo">188</span>       * @return A new copy of this builder.<a name="line.188"></a>
+<span class="sourceLineNo">189</span>       */<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      public Builder copy() {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>         return new Builder(this);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>      /**<a name="line.194"></a>
+<span class="sourceLineNo">195</span>       * Instantiate a new microservice using the settings defined on this builder.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>       *<a name="line.196"></a>
+<span class="sourceLineNo">197</span>       * @return A new microservice.<a name="line.197"></a>
+<span class="sourceLineNo">198</span>       * @throws Exception Error occurred.<a name="line.198"></a>
+<span class="sourceLineNo">199</span>       */<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      public Microservice build() throws Exception {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>         return new Microservice(this);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>      /**<a name="line.204"></a>
+<span class="sourceLineNo">205</span>       * Specifies the command-line arguments passed into the Java command.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>       *<a name="line.206"></a>
+<span class="sourceLineNo">207</span>       * &lt;p&gt;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>       * This is required if you use {@link Microservice#getArgs()} or &lt;c&gt;$A&lt;/c&gt; string variables.<a name="line.208"></a>
+<span class="sourceLineNo">209</span>       *<a name="line.209"></a>
+<span class="sourceLineNo">210</span>       * @param args<a name="line.210"></a>
+<span class="sourceLineNo">211</span>       *    The command-line arguments passed into the Java command as a pre-parsed {@link Args} object.<a name="line.211"></a>
+<span class="sourceLineNo">212</span>       * @return This object.<a name="line.212"></a>
+<span class="sourceLineNo">213</span>       */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      public Builder args(Args args) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>         this.args = args;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>         return 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>      /**<a name="line.219"></a>
+<span class="sourceLineNo">220</span>       * Specifies the command-line arguments passed into the Java command.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>       *<a name="line.221"></a>
+<span class="sourceLineNo">222</span>       * &lt;p&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>       * This is required if you use {@link Microservice#getArgs()} or &lt;c&gt;$A&lt;/c&gt; string variables.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>       *<a name="line.224"></a>
+<span class="sourceLineNo">225</span>       * @param args<a name="line.225"></a>
+<span class="sourceLineNo">226</span>       *    The command-line arguments passed into the Java command as the raw command-line arguments.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>       * @return This object.<a name="line.227"></a>
+<span class="sourceLineNo">228</span>       */<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      public Builder args(String...args) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>         this.args = new Args(args);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>         return this;<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>      /**<a name="line.234"></a>
+<span class="sourceLineNo">235</span>       * Specifies the manifest file of the jar file this microservice is contained within.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>       *<a name="line.236"></a>
+<span class="sourceLineNo">237</span>       * &lt;p&gt;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>       * This is required if you use {@link Microservice#getManifest()}.<a name="line.238"></a>
+<span class="sourceLineNo">239</span>       * It's also used to locate initialization values such as &lt;c&gt;Main-Config&lt;/c&gt;.<a name="line.239"></a>
+<span class="sourceLineNo">240</span>       *<a name="line.240"></a>
+<span class="sourceLineNo">241</span>       * &lt;p&gt;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>       * If you do not specify the manifest file, we attempt to resolve it through the following methods:<a name="line.242"></a>
+<span class="sourceLineNo">243</span>       * &lt;ol class='spaced-list'&gt;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>       *    &lt;li&gt;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>       *       Looking on the file system for a file at &lt;js&gt;"META-INF/MANIFEST.MF"&lt;/js&gt;.<a name="line.245"></a>
+<span class="sourceLineNo">246</span>       *       This is primarily to allow for running microservices from within eclipse workspaces where the manifest file<a name="line.246"></a>
+<span class="sourceLineNo">247</span>       *       is located in the project root.<a name="line.247"></a>
+<span class="sourceLineNo">248</span>       *    &lt;li&gt;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>       *       Using the class loader for this class to find the file at the URL &lt;js&gt;"META-INF/MANIFEST.MF"&lt;/js&gt;.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>       * &lt;/ol&gt;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>       *<a name="line.251"></a>
+<span class="sourceLineNo">252</span>       * @param value<a name="line.252"></a>
+<span class="sourceLineNo">253</span>       *    The manifest file of this microservice.<a name="line.253"></a>
+<span class="sourceLineNo">254</span>       *    &lt;br&gt;Can be any of the following types:<a name="line.254"></a>
+<span class="sourceLineNo">255</span>       *    &lt;ul&gt;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>       *       &lt;li&gt;{@link ManifestFile}<a name="line.256"></a>
+<span class="sourceLineNo">257</span>       *       &lt;li&gt;{@link Manifest}<a name="line.257"></a>
+<span class="sourceLineNo">258</span>       *       &lt;li&gt;{@link Reader} - Containing the raw contents of the manifest.  Note that the input must end with a newline.<a name="line.258"></a>
+<span class="sourceLineNo">259</span>       *       &lt;li&gt;{@link InputStream} - Containing the raw contents of the manifest.  Note that the input must end with a newline.<a name="line.259"></a>
+<span class="sourceLineNo">260</span>       *       &lt;li&gt;{@link File} - File containing the raw contents of the manifest.<a name="line.260"></a>
+<span class="sourceLineNo">261</span>       *       &lt;li&gt;{@link String} - Path to file containing the raw contents of the manifest.<a name="line.261"></a>
+<span class="sourceLineNo">262</span>       *       &lt;li&gt;{@link Class} - Finds and loads the manifest file of the jar file that the specified class is contained within.<a name="line.262"></a>
+<span class="sourceLineNo">263</span>       *    &lt;/ul&gt;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>       * @return This object.<a name="line.264"></a>
+<span class="sourceLineNo">265</span>       * @throws IOException Thrown by underlying stream.<a name="line.265"></a>
+<span class="sourceLineNo">266</span>       */<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      public Builder manifest(Object value) throws IOException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>         if (value == null)<a name="line.268"></a>
+<span class="sourceLineNo">269</span>            this.manifest = null;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>         else if (value instanceof ManifestFile)<a name="line.270"></a>
+<span class="sourceLineNo">271</span>            this.manifest = (ManifestFile)value;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>         else if (value instanceof Manifest)<a name="line.272"></a>
+<span class="sourceLineNo">273</span>            this.manifest = new ManifestFile((Manifest)value);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>         else if (value instanceof Reader)<a name="line.274"></a>
+<span class="sourceLineNo">275</span>            this.manifest = new ManifestFile((Reader)value);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>         else if (value instanceof InputStream)<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            this.manifest = new ManifestFile((InputStream)value);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>         else if (value instanceof File)<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            this.manifest = new ManifestFile((File)value);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>         else if (value instanceof String)<a name="line.280"></a>
+<span class="sourceLineNo">281</span>            this.manifest = new ManifestFile(resolveFile((String)value));<a name="line.281"></a>
+<span class="sourceLineNo">282</span>         else if (value instanceof Class)<a name="line.282"></a>
+<span class="sourceLineNo">283</span>            this.manifest = new ManifestFile((Class&lt;?&gt;)value);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>         else<a name="line.284"></a>
+<span class="sourceLineNo">285</span>            throw new BasicRuntimeException("Invalid type passed to Builder.manifest(Object).  Type=[{0}]", className(value));<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span>         return this;<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>       * Specifies the logger used by the microservice and returned by the {@link Microservice#getLogger()} method.<a name="line.291"></a>
+<span class="sourceLineNo">292</span>       *<a name="line.292"></a>
+<span class="sourceLineNo">293</span>       * &lt;p&gt;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>       * Calling this method overrides the default logging mechanism controlled by the {@link #logConfig(LogConfig)} method.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>       *<a name="line.295"></a>
+<span class="sourceLineNo">296</span>       * @param logger The logger to use for logging microservice messages.<a name="line.296"></a>
+<span class="sourceLineNo">297</span>       * @return This object.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>       */<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      public Builder logger(Logger logger) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>         this.logger = logger;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>         return this;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>      /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span>       * Specifies logging instructions for the microservice.<a name="line.305"></a>
+<span class="sourceLineNo">306</span>       *<a name="line.306"></a>
+<span class="sourceLineNo">307</span>       * &lt;p&gt;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>       * If not specified, the values are taken from the &lt;js&gt;"Logging"&lt;/js&gt; section of the configuration.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>       *<a name="line.309"></a>
+<span class="sourceLineNo">310</span>       * &lt;p&gt;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>       * This method is ignored if {@link #logger(Logger)} is used to set the microservice logger.<a name="line.311"></a>
+<span class="sourceLineNo">312</span>       *<a name="line.312"></a>
+<span class="sourceLineNo">313</span>       * @param logConfig The log configuration.<a name="line.313"></a>
+<span class="sourceLineNo">314</span>       * @return This object.<a name="line.314"></a>
+<span class="sourceLineNo">315</span>       */<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      public Builder logConfig(LogConfig logConfig) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>         this.logConfig = logConfig;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>         return this;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      }<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>       * Specifies the config for initializing this microservice.<a name="line.322"></a>
+<span class="sourceLineNo">323</span>       *<a name="line.323"></a>
+<span class="sourceLineNo">324</span>       * &lt;p&gt;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>       * Calling this method overrides the default configuration controlled by the {@link #configName(String)} and {@link #configStore(ConfigStore)} methods.<a name="line.325"></a>
+<span class="sourceLineNo">326</span>       *<a name="line.326"></a>
+<span class="sourceLineNo">327</span>       * @param config The configuration.<a name="line.327"></a>
+<span class="sourceLineNo">328</span>       * @return This object.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>       */<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      public Builder config(Config config) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>         this.config = config;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>         return this;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      }<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>      /**<a name="line.335"></a>
+<span class="sourceLineNo">336</span>       * Specifies the config name for initializing this microservice.<a name="line.336"></a>
+<span class="sourceLineNo">337</span>       *<a name="line.337"></a>
+<span class="sourceLineNo">338</span>       * &lt;p&gt;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>       * If you do not specify the config file location, we attempt to resolve it through the following methods:<a name="line.339"></a>
+<span class="sourceLineNo">340</span>       * &lt;ol class='spaced-list'&gt;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>       *    &lt;li&gt;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>       *       Resolve file first in working directory, then in classpath, using the following names:<a name="line.342"></a>
+<span class="sourceLineNo">343</span>       *       &lt;ul&gt;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>       *          &lt;li&gt;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>       *             The &lt;js&gt;"configFile"&lt;/js&gt; argument in the command line arguments passed in through the constructor.<a name="line.345"></a>
+<span class="sourceLineNo">346</span>       *          &lt;li&gt;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>       *             The value of the &lt;c&gt;Main-Config&lt;/c&gt; entry in the manifest file.<a name="line.347"></a>
+<span class="sourceLineNo">348</span>       *          &lt;li&gt;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>       *             A config file in the same location and with the same name as the executable jar file.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>       *             (e.g. &lt;js&gt;"java -jar myjar.jar"&lt;/js&gt; will look for &lt;js&gt;"myjar.cfg"&lt;/js&gt;).<a name="line.350"></a>
+<span class="sourceLineNo">351</span>       *       &lt;/ul&gt;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>       *    &lt;li&gt;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>       *       Resolve any &lt;js&gt;"*.cfg"&lt;/js&gt; file that can be found in the working directory.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>       *    &lt;li&gt;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>       *       Resolve any of the following files in the classpath:  &lt;js&gt;"juneau.cfg"&lt;/js&gt;, &lt;js&gt;"system.cfg"&lt;/js&gt;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>       * &lt;/ol&gt;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>       *<a name="line.357"></a>
+<span class="sourceLineNo">358</span>       * &lt;p&gt;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>       * If no configuration file is found, and empty in-memory configuration is used.<a name="line.359"></a>
+<span class="sourceLineNo">360</span>       *<a name="line.360"></a>
+<span class="sourceLineNo">361</span>       * @param configName The configuration name.<a name="line.361"></a>
+<span class="sourceLineNo">362</span>       * @return This object.<a name="line.362"></a>
+<span class="sourceLineNo">363</span>       */<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      public Builder configName(String configName) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>         this.configName = configName;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>         return this;<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>      /**<a name="line.369"></a>
+<span class="sourceLineNo">370</span>       * Specifies the config store to use for storing and retrieving configurations.<a name="line.370"></a>
+<span class="sourceLineNo">371</span>       *<a name="line.371"></a>
+<span class="sourceLineNo">372</span>       * &lt;p&gt;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>       * By default, we use a {@link FileStore} store for configuration files.<a name="line.373"></a>
+<span class="sourceLineNo">374</span>       *<a name="line.374"></a>
+<span class="sourceLineNo">375</span>       * @param configStore The configuration name.<a name="line.375"></a>
+<span class="sourceLineNo">376</span>       * @return This object.<a name="line.376"></a>
+<span class="sourceLineNo">377</span>       */<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      public Builder configStore(ConfigStore configStore) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>         this.configStore = configStore;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>         return this;<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>      /**<a name="line.383"></a>
+<span class="sourceLineNo">384</span>       * Specifies that the Java console is enabled for this microservice.<a name="line.384"></a>
+<span class="sourceLineNo">385</span>       *<a name="line.385"></a>
+<span class="sourceLineNo">386</span>       * &lt;p&gt;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>       * If not specified, this value is taken from the &lt;js&gt;"Console/enabled"&lt;/js&gt; configuration setting.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>       * If not specified in the configuration, defaults to &lt;jk&gt;false&lt;/jk&gt;.<a name="line.388"></a>
+<span class="sourceLineNo">389</span>       *<a name="line.389"></a>
+<span class="sourceLineNo">390</span>       * @param consoleEnabled &lt;jk&gt;true&lt;/jk&gt; if the Java console is enabled for this microservice.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>       * @return This object.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>       */<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      public Builder consoleEnabled(boolean consoleEnabled) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>         this.consoleEnabled = consoleEnabled;<a name="line.394"></a>
 <span class="sourceLineNo">395</span>         return this;<a name="line.395"></a>
 <span class="sourceLineNo">396</span>      }<a name="line.396"></a>
 <span class="sourceLineNo">397</span><a name="line.397"></a>
@@ -412,749 +412,826 @@
 <span class="sourceLineNo">404</span>       * &lt;p&gt;<a name="line.404"></a>
 <span class="sourceLineNo">405</span>       * This list augments the commands defined via the &lt;js&gt;"Console/commands"&lt;/js&gt; configuration setting.<a name="line.405"></a>
 <span class="sourceLineNo">406</span>       *<a name="line.406"></a>
-<span class="sourceLineNo">407</span>       * @param consoleCommands The list of console commands to append to the list of available commands.<a name="line.407"></a>
-<span class="sourceLineNo">408</span>       * @return This object.<a name="line.408"></a>
-<span class="sourceLineNo">409</span>       */<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      public Builder consoleCommands(ConsoleCommand...consoleCommands) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>         addAll(this.consoleCommands, consoleCommands);<a name="line.411"></a>
-<span class="sourceLineNo">412</span>         return this;<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>      /**<a name="line.415"></a>
-<span class="sourceLineNo">416</span>       * Specifies the console input and output.<a name="line.416"></a>
-<span class="sourceLineNo">417</span>       *<a name="line.417"></a>
-<span class="sourceLineNo">418</span>       * &lt;p&gt;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>       * If not specified, uses the console returned by {@link System#console()}.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>       * If that is not available, uses {@link System#in} and {@link System#out}.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>       *<a name="line.421"></a>
-<span class="sourceLineNo">422</span>       * &lt;p&gt;<a name="line.422"></a>
-<span class="sourceLineNo">423</span>       * Note that these are ignored if the console is not enabled via {@link #consoleEnabled(boolean)}.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>       *<a name="line.424"></a>
-<span class="sourceLineNo">425</span>       * @param consoleReader The console input.<a name="line.425"></a>
-<span class="sourceLineNo">426</span>       * @param consoleWriter The console output.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>       * @return This object.<a name="line.427"></a>
-<span class="sourceLineNo">428</span>       */<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      public Builder console(Scanner consoleReader, PrintWriter consoleWriter) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>         this.consoleReader = consoleReader;<a name="line.430"></a>
-<span class="sourceLineNo">431</span>         this.consoleWriter = consoleWriter;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>         return this;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      }<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>       * Augments the set of variables defined in the configuration and var resolver.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>       *<a name="line.437"></a>
-<span class="sourceLineNo">438</span>       * &lt;p&gt;<a name="line.438"></a>
-<span class="sourceLineNo">439</span>       * This calls {@link org.apache.juneau.svl.VarResolver.Builder#vars(Class[])} on the var resolver used to construct the configuration<a name="line.439"></a>
-<span class="sourceLineNo">440</span>       * object returned by {@link Microservice#getConfig()} and the var resolver returned by {@link Microservice#getVarResolver()}.<a name="line.440"></a>
-<span class="sourceLineNo">441</span>       *<a name="line.441"></a>
-<span class="sourceLineNo">442</span>       * @param vars The set of variables to append to the var resolver builder.<a name="line.442"></a>
-<span class="sourceLineNo">443</span>       * @return This object.<a name="line.443"></a>
-<span class="sourceLineNo">444</span>       */<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      @SuppressWarnings("unchecked")<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      public Builder vars(Class&lt;? extends Var&gt;...vars) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>         varResolver.vars(vars);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>         return this;<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>      /**<a name="line.451"></a>
-<span class="sourceLineNo">452</span>       * Adds a bean for vars defined in the var resolver.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>       *<a name="line.453"></a>
-<span class="sourceLineNo">454</span>       * &lt;p&gt;<a name="line.454"></a>
-<span class="sourceLineNo">455</span>       * This calls {@link org.apache.juneau.svl.VarResolver.Builder#bean(Class,Object)} on the var resolver used to construct the configuration<a name="line.455"></a>
-<span class="sourceLineNo">456</span>       * object returned by {@link Microservice#getConfig()} and the var resolver returned by {@link Microservice#getVarResolver()}.<a name="line.456"></a>
-<span class="sourceLineNo">457</span>       *<a name="line.457"></a>
-<span class="sourceLineNo">458</span>       * @param c The bean type.<a name="line.458"></a>
-<span class="sourceLineNo">459</span>       * @param value The bean.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>       * @param &lt;T&gt; The bean type.<a name="line.460"></a>
-<span class="sourceLineNo">461</span>       * @return This object.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>       */<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      public &lt;T&gt; Builder varBean(Class&lt;T&gt; c, T value) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>         varResolver.bean(c, value);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>         return this;<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>      /**<a name="line.468"></a>
-<span class="sourceLineNo">469</span>       * Specifies the directory to use to resolve the config file and other paths defined with the config file.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>       *<a name="line.470"></a>
-<span class="sourceLineNo">471</span>       * @param workingDir The working directory, or &lt;jk&gt;null&lt;/jk&gt; to use the underlying working directory.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>       * @return This object.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>       */<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      public Builder workingDir(File workingDir) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>         this.workingDir = workingDir;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>         return this;<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>       * Specifies the directory to use to resolve the config file and other paths defined with the config file.<a name="line.480"></a>
-<span class="sourceLineNo">481</span>       *<a name="line.481"></a>
-<span class="sourceLineNo">482</span>       * @param workingDir The working directory, or &lt;jk&gt;null&lt;/jk&gt; to use the underlying working directory.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>       * @return This object.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>       */<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      public Builder workingDir(String workingDir) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>         this.workingDir = new File(workingDir);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>         return this;<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>       * Registers an event listener for this microservice.<a name="line.491"></a>
-<span class="sourceLineNo">492</span>       *<a name="line.492"></a>
-<span class="sourceLineNo">493</span>       * @param listener An event listener for this microservice.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>       * @return This object.<a name="line.494"></a>
-<span class="sourceLineNo">495</span>       */<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      public Builder listener(MicroserviceListener listener) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>         this.listener = listener;<a name="line.497"></a>
-<span class="sourceLineNo">498</span>         return this;<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>       * Resolves the specified path.<a name="line.502"></a>
-<span class="sourceLineNo">503</span>       *<a name="line.503"></a>
-<span class="sourceLineNo">504</span>       * &lt;p&gt;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>       * If the working directory has been explicitly specified, relative paths are resolved relative to that.<a name="line.505"></a>
-<span class="sourceLineNo">506</span>       *<a name="line.506"></a>
-<span class="sourceLineNo">507</span>       * @param path The path to resolve.<a name="line.507"></a>
-<span class="sourceLineNo">508</span>       * @return The resolved file.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>       */<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      protected File resolveFile(String path) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>         if (Paths.get(path).isAbsolute())<a name="line.511"></a>
-<span class="sourceLineNo">512</span>            return new File(path);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>         if (workingDir != null)<a name="line.513"></a>
-<span class="sourceLineNo">514</span>            return new File(workingDir, path);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>         return new File(path);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.519"></a>
-<span class="sourceLineNo">520</span>   // Instance<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>   final Messages messages = Messages.of(Microservice.class);<a name="line.523"></a>
-<span class="sourceLineNo">524</span><a name="line.524"></a>
-<span class="sourceLineNo">525</span>   private final Args args;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>   private final Config config;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   private final ManifestFile manifest;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   private final VarResolver varResolver;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   private final MicroserviceListener listener;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   private final Map&lt;String,ConsoleCommand&gt; consoleCommandMap = new ConcurrentHashMap&lt;&gt;();<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   private final boolean consoleEnabled;<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   private final Scanner consoleReader;<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   private final PrintWriter consoleWriter;<a name="line.533"></a>
-<span class="sourceLineNo">534</span>   private final Thread consoleThread;<a name="line.534"></a>
-<span class="sourceLineNo">535</span>   final File workingDir;<a name="line.535"></a>
-<span class="sourceLineNo">536</span>   private final String configName;<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>   private volatile Logger logger = Logger.getGlobal();<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>    * Constructor.<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    *<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    * @param builder The builder containing the settings for this microservice.<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    * @throws IOException Problem occurred reading file.<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    * @throws ParseException Malformed input encountered.<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    */<a name="line.546"></a>
-<span class="sourceLineNo">547</span>   protected Microservice(Builder builder) throws IOException, ParseException {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      setInstance(this);<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      this.workingDir = builder.workingDir;<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      this.configName = builder.configName;<a name="line.550"></a>
+<span class="sourceLineNo">407</span>       * &lt;p&gt;<a name="line.407"></a>
+<span class="sourceLineNo">408</span>       * This method can only be used on console commands with no-arg constructors.<a name="line.408"></a>
+<span class="sourceLineNo">409</span>       *<a name="line.409"></a>
+<span class="sourceLineNo">410</span>       * @param consoleCommands The list of console commands to append to the list of available commands.<a name="line.410"></a>
+<span class="sourceLineNo">411</span>       * @return This object.<a name="line.411"></a>
+<span class="sourceLineNo">412</span>       * @throws ExecutableException Exception occurred on invoked constructor/method/field.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>       */<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      @SuppressWarnings("unchecked")<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      public Builder consoleCommands(Class&lt;? extends ConsoleCommand&gt;...consoleCommands) throws ExecutableException {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>         try {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>            for (Class&lt;? extends ConsoleCommand&gt; cc : consoleCommands)<a name="line.417"></a>
+<span class="sourceLineNo">418</span>               this.consoleCommands.add(cc.newInstance());<a name="line.418"></a>
+<span class="sourceLineNo">419</span>         } catch (InstantiationException | IllegalAccessException e) {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>            throw new ExecutableException(e);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>         }<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>       * Specifies console commands to make available on the Java console.<a name="line.426"></a>
+<span class="sourceLineNo">427</span>       *<a name="line.427"></a>
+<span class="sourceLineNo">428</span>       * &lt;p&gt;<a name="line.428"></a>
+<span class="sourceLineNo">429</span>       * Note that these are ignored if the console is not enabled via {@link #consoleEnabled(boolean)}.<a name="line.429"></a>
+<span class="sourceLineNo">430</span>       *<a name="line.430"></a>
+<span class="sourceLineNo">431</span>       * &lt;p&gt;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>       * This list augments the commands defined via the &lt;js&gt;"Console/commands"&lt;/js&gt; configuration setting.<a name="line.432"></a>
+<span class="sourceLineNo">433</span>       *<a name="line.433"></a>
+<span class="sourceLineNo">434</span>       * @param consoleCommands The list of console commands to append to the list of available commands.<a name="line.434"></a>
+<span class="sourceLineNo">435</span>       * @return This object.<a name="line.435"></a>
+<span class="sourceLineNo">436</span>       */<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      public Builder consoleCommands(ConsoleCommand...consoleCommands) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>         addAll(this.consoleCommands, consoleCommands);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>         return this;<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>      /**<a name="line.442"></a>
+<span class="sourceLineNo">443</span>       * Specifies the console input and output.<a name="line.443"></a>
+<span class="sourceLineNo">444</span>       *<a name="line.444"></a>
+<span class="sourceLineNo">445</span>       * &lt;p&gt;<a name="line.445"></a>
+<span class="sourceLineNo">446</span>       * If not specified, uses the console returned by {@link System#console()}.<a name="line.446"></a>
+<span class="sourceLineNo">447</span>       * If that is not available, uses {@link System#in} and {@link System#out}.<a name="line.447"></a>
+<span class="sourceLineNo">448</span>       *<a name="line.448"></a>
+<span class="sourceLineNo">449</span>       * &lt;p&gt;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>       * Note that these are ignored if the console is not enabled via {@link #consoleEnabled(boolean)}.<a name="line.450"></a>
+<span class="sourceLineNo">451</span>       *<a name="line.451"></a>
+<span class="sourceLineNo">452</span>       * @param consoleReader The console input.<a name="line.452"></a>
+<span class="sourceLineNo">453</span>       * @param consoleWriter The console output.<a name="line.453"></a>
+<span class="sourceLineNo">454</span>       * @return This object.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>       */<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      public Builder console(Scanner consoleReader, PrintWriter consoleWriter) {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>         this.consoleReader = consoleReader;<a name="line.457"></a>
+<span class="sourceLineNo">458</span>         this.consoleWriter = consoleWriter;<a name="line.458"></a>
+<span class="sourceLineNo">459</span>         return this;<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span>      /**<a name="line.462"></a>
+<span class="sourceLineNo">463</span>       * Augments the set of variables defined in the configuration and var resolver.<a name="line.463"></a>
+<span class="sourceLineNo">464</span>       *<a name="line.464"></a>
+<span class="sourceLineNo">465</span>       * &lt;p&gt;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>       * This calls {@link org.apache.juneau.svl.VarResolver.Builder#vars(Class[])} on the var resolver used to construct the configuration<a name="line.466"></a>
+<span class="sourceLineNo">467</span>       * object returned by {@link Microservice#getConfig()} and the var resolver returned by {@link Microservice#getVarResolver()}.<a name="line.467"></a>
+<span class="sourceLineNo">468</span>       *<a name="line.468"></a>
+<span class="sourceLineNo">469</span>       * @param vars The set of variables to append to the var resolver builder.<a name="line.469"></a>
+<span class="sourceLineNo">470</span>       * @return This object.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>       */<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      @SuppressWarnings("unchecked")<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      public Builder vars(Class&lt;? extends Var&gt;...vars) {<a name="line.473"></a>
+<span class="sourceLineNo">474</span>         varResolver.vars(vars);<a name="line.474"></a>
+<span class="sourceLineNo">475</span>         return this;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      }<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>       * Adds a bean for vars defined in the var resolver.<a name="line.479"></a>
+<span class="sourceLineNo">480</span>       *<a name="line.480"></a>
+<span class="sourceLineNo">481</span>       * &lt;p&gt;<a name="line.481"></a>
+<span class="sourceLineNo">482</span>       * This calls {@link org.apache.juneau.svl.VarResolver.Builder#bean(Class,Object)} on the var resolver used to construct the configuration<a name="line.482"></a>
+<span class="sourceLineNo">483</span>       * object returned by {@link Microservice#getConfig()} and the var resolver returned by {@link Microservice#getVarResolver()}.<a name="line.483"></a>
+<span class="sourceLineNo">484</span>       *<a name="line.484"></a>
+<span class="sourceLineNo">485</span>       * @param c The bean type.<a name="line.485"></a>
+<span class="sourceLineNo">486</span>       * @param value The bean.<a name="line.486"></a>
+<span class="sourceLineNo">487</span>       * @param &lt;T&gt; The bean type.<a name="line.487"></a>
+<span class="sourceLineNo">488</span>       * @return This object.<a name="line.488"></a>
+<span class="sourceLineNo">489</span>       */<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      public &lt;T&gt; Builder varBean(Class&lt;T&gt; c, T value) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>         varResolver.bean(c, value);<a name="line.491"></a>
+<span class="sourceLineNo">492</span>         return this;<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
+<span class="sourceLineNo">494</span><a name="line.494"></a>
+<span class="sourceLineNo">495</span>      /**<a name="line.495"></a>
+<span class="sourceLineNo">496</span>       * Specifies the directory to use to resolve the config file and other paths defined with the config file.<a name="line.496"></a>
+<span class="sourceLineNo">497</span>       *<a name="line.497"></a>
+<span class="sourceLineNo">498</span>       * @param workingDir The working directory, or &lt;jk&gt;null&lt;/jk&gt; to use the underlying working directory.<a name="line.498"></a>
+<span class="sourceLineNo">499</span>       * @return This object.<a name="line.499"></a>
+<span class="sourceLineNo">500</span>       */<a name="line.500"></a>
+<span class="sourceLineNo">501</span>      public Builder workingDir(File workingDir) {<a name="line.501"></a>
+<span class="sourceLineNo">502</span>         this.workingDir = workingDir;<a name="line.502"></a>
+<span class="sourceLineNo">503</span>         return this;<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>      /**<a name="line.506"></a>
+<span class="sourceLineNo">507</span>       * Specifies the directory to use to resolve the config file and other paths defined with the config file.<a name="line.507"></a>
+<span class="sourceLineNo">508</span>       *<a name="line.508"></a>
+<span class="sourceLineNo">509</span>       * @param workingDir The working directory, or &lt;jk&gt;null&lt;/jk&gt; to use the underlying working directory.<a name="line.509"></a>
+<span class="sourceLineNo">510</span>       * @return This object.<a name="line.510"></a>
+<span class="sourceLineNo">511</span>       */<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      public Builder workingDir(String workingDir) {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>         this.workingDir = new File(workingDir);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>         return this;<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>      /**<a name="line.517"></a>
+<span class="sourceLineNo">518</span>       * Registers an event listener for this microservice.<a name="line.518"></a>
+<span class="sourceLineNo">519</span>       *<a name="line.519"></a>
+<span class="sourceLineNo">520</span>       * @param listener An event listener for this microservice.<a name="line.520"></a>
+<span class="sourceLineNo">521</span>       * @return This object.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>       */<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      public Builder listener(MicroserviceListener listener) {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>         this.listener = listener;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>         return this;<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>       * Resolves the specified path.<a name="line.529"></a>
+<span class="sourceLineNo">530</span>       *<a name="line.530"></a>
+<span class="sourceLineNo">531</span>       * &lt;p&gt;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>       * If the working directory has been explicitly specified, relative paths are resolved relative to that.<a name="line.532"></a>
+<span class="sourceLineNo">533</span>       *<a name="line.533"></a>
+<span class="sourceLineNo">534</span>       * @param path The path to resolve.<a name="line.534"></a>
+<span class="sourceLineNo">535</span>       * @return The resolved file.<a name="line.535"></a>
+<span class="sourceLineNo">536</span>       */<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      protected File resolveFile(String path) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>         if (Paths.get(path).isAbsolute())<a name="line.538"></a>
+<span class="sourceLineNo">539</span>            return new File(path);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>         if (workingDir != null)<a name="line.540"></a>
+<span class="sourceLineNo">541</span>            return new File(workingDir, path);<a name="line.541"></a>
+<span class="sourceLineNo">542</span>         return new File(path);<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>   //-----------------------------------------------------------------------------------------------------------------<a name="line.546"></a>
+<span class="sourceLineNo">547</span>   // Instance<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>   final Messages messages = Messages.of(Microservice.class);<a name="line.550"></a>
 <span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>      this.args = builder.args != null ? builder.args : new Args(new String[0]);<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>      // --------------------------------------------------------------------------------<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      // Try to get the manifest file if it wasn't already set.<a name="line.555"></a>
-<span class="sourceLineNo">556</span>      // --------------------------------------------------------------------------------<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      ManifestFile manifest = builder.manifest;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      if (manifest == null) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>         Manifest m = new Manifest();<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span>         // If running within an eclipse workspace, need to get it from the file system.<a name="line.561"></a>
-<span class="sourceLineNo">562</span>         File f = resolveFile("META-INF/MANIFEST.MF");<a name="line.562"></a>
-<span class="sourceLineNo">563</span>         if (f.exists() &amp;&amp; f.canRead()) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>            try (FileInputStream fis = new FileInputStream(f)) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>               m.read(fis);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>            } catch (IOException e) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>               throw new IOException("Problem detected in MANIFEST.MF.  Contents below:\n"+read(f), e);<a name="line.567"></a>
-<span class="sourceLineNo">568</span>            }<a name="line.568"></a>
-<span class="sourceLineNo">569</span>         } else {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>            // Otherwise, read from manifest file in the jar file containing the main class.<a name="line.570"></a>
-<span class="sourceLineNo">571</span>            URL url = getClass().getResource("META-INF/MANIFEST.MF");<a name="line.571"></a>
-<span class="sourceLineNo">572</span>            if (url != null) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>               try {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>                  m.read(url.openStream());<a name="line.574"></a>
-<span class="sourceLineNo">575</span>               } catch (IOException e) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>                  throw new IOException("Problem detected in MANIFEST.MF.  Contents below:\n"+read(url.openStream()), e);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>               }<a name="line.577"></a>
-<span class="sourceLineNo">578</span>            }<a name="line.578"></a>
-<span class="sourceLineNo">579</span>         }<a name="line.579"></a>
-<span class="sourceLineNo">580</span>         manifest = new ManifestFile(m);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      }<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      ManifestFileVar.init(manifest);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>      this.manifest = manifest;<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>      // --------------------------------------------------------------------------------<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      // Try to resolve the configuration if not specified.<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      // --------------------------------------------------------------------------------<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      Config config = builder.config;<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      Config.Builder configBuilder = builder.configBuilder.varResolver(builder.varResolver.build()).store(MemoryStore.DEFAULT);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      if (config == null) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>         ConfigStore store = builder.configStore;<a name="line.591"></a>
-<span class="sourceLineNo">592</span>         FileStore cfs = workingDir == null ? FileStore.DEFAULT : FileStore.create().directory(workingDir).build();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>         for (String name : getCandidateConfigNames()) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>             if (store != null) {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>                if (store.exists(name)) {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>                   configBuilder.store(store).name(name);<a name="line.596"></a>
-<span class="sourceLineNo">597</span>                   break;<a name="line.597"></a>
-<span class="sourceLineNo">598</span>                }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>             } else {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>                if (cfs.exists(name)) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>                   configBuilder.store(cfs).name(name);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>                   break;<a name="line.602"></a>
-<span class="sourceLineNo">603</span>                }<a name="line.603"></a>
-<span class="sourceLineNo">604</span>                if (ClasspathStore.DEFAULT.exists(name)) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>                   configBuilder.store(ClasspathStore.DEFAULT).name(name);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>                   break;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>                }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>             }<a name="line.608"></a>
+<span class="sourceLineNo">552</span>   private final Builder builder;<a name="line.552"></a>
+<span class="sourceLineNo">553</span>   private final Args args;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>   private final Config config;<a name="line.554"></a>
+<span class="sourceLineNo">555</span>   private final ManifestFile manifest;<a name="line.555"></a>
+<span class="sourceLineNo">556</span>   private final VarResolver varResolver;<a name="line.556"></a>
+<span class="sourceLineNo">557</span>   private final MicroserviceListener listener;<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   private final Map&lt;String,ConsoleCommand&gt; consoleCommandMap = new ConcurrentHashMap&lt;&gt;();<a name="line.558"></a>
+<span class="sourceLineNo">559</span>   private final boolean consoleEnabled;<a name="line.559"></a>
+<span class="sourceLineNo">560</span>   private final Scanner consoleReader;<a name="line.560"></a>
+<span class="sourceLineNo">561</span>   private final PrintWriter consoleWriter;<a name="line.561"></a>
+<span class="sourceLineNo">562</span>   private final Thread consoleThread;<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   final File workingDir;<a name="line.563"></a>
+<span class="sourceLineNo">564</span>   private final String configName;<a name="line.564"></a>
+<span class="sourceLineNo">565</span><a name="line.565"></a>
+<span class="sourceLineNo">566</span>   private volatile Logger logger;<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>    * Constructor.<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    *<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    * @param builder The builder containing the settings for this microservice.<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    * @throws IOException Problem occurred reading file.<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    * @throws ParseException Malformed input encountered.<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    */<a name="line.574"></a>
+<span class="sourceLineNo">575</span>   @SuppressWarnings("resource")<a name="line.575"></a>
+<span class="sourceLineNo">576</span>   protected Microservice(Builder builder) throws IOException, ParseException {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>      setInstance(this);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>      this.builder = builder.copy();<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      this.workingDir = builder.workingDir;<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      this.configName = builder.configName;<a name="line.580"></a>
+<span class="sourceLineNo">581</span><a name="line.581"></a>
+<span class="sourceLineNo">582</span>      this.args = builder.args != null ? builder.args : new Args(new String[0]);<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>      // Try to get the manifest file if it wasn't already set.<a name="line.585"></a>
+<span class="sourceLineNo">586</span>      // --------------------------------------------------------------------------------<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      ManifestFile manifest = builder.manifest;<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      if (manifest == null) {<a name="line.588"></a>
+<span class="sourceLineNo">589</span>         Manifest m = new Manifest();<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>         // If running within an eclipse workspace, need to get it from the file system.<a name="line.591"></a>
+<span class="sourceLineNo">592</span>         File f = resolveFile("META-INF/MANIFEST.MF");<a name="line.592"></a>
+<span class="sourceLineNo">593</span>         if (f.exists() &amp;&amp; f.canRead()) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>            try (FileInputStream fis = new FileInputStream(f)) {<a name="line.594"></a>
+<span class="sourceLineNo">595</span>               m.read(fis);<a name="line.595"></a>
+<span class="sourceLineNo">596</span>            } catch (IOException e) {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>               throw new IOException("Problem detected in MANIFEST.MF.  Contents below:\n"+read(f), e);<a name="line.597"></a>
+<span class="sourceLineNo">598</span>            }<a name="line.598"></a>
+<span class="sourceLineNo">599</span>         } else {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>            // Otherwise, read from manifest file in the jar file containing the main class.<a name="line.600"></a>
+<span class="sourceLineNo">601</span>            URL url = getClass().getResource("META-INF/MANIFEST.MF");<a name="line.601"></a>
+<span class="sourceLineNo">602</span>            if (url != null) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span>               try {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>                  m.read(url.openStream());<a name="line.604"></a>
+<span class="sourceLineNo">605</span>               } catch (IOException e) {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>                  throw new IOException("Problem detected in MANIFEST.MF.  Contents below:\n"+read(url.openStream()), e);<a name="line.606"></a>
+<span class="sourceLineNo">607</span>               }<a name="line.607"></a>
+<span class="sourceLineNo">608</span>            }<a name="line.608"></a>
 <span class="sourceLineNo">609</span>         }<a name="line.609"></a>
-<span class="sourceLineNo">610</span>         config = configBuilder.build();<a name="line.610"></a>
+<span class="sourceLineNo">610</span>         manifest = new ManifestFile(m);<a name="line.610"></a>
 <span class="sourceLineNo">611</span>      }<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      this.config = config;<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      Config.setSystemDefault(this.config);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      this.config.addListener(this);<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>      //-------------------------------------------------------------------------------------------------------------<a name="line.616"></a>
-<span class="sourceLineNo">617</span>      // Var resolver.<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      //-------------------------------------------------------------------------------------------------------------<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      this.varResolver = builder.varResolver.bean(Config.class, config).build();<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>      // --------------------------------------------------------------------------------<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      // Initialize console commands.<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      // --------------------------------------------------------------------------------<a name="line.623"></a>
-<span class="sourceLineNo">624</span>      this.consoleEnabled = ObjectUtils.firstNonNull(builder.consoleEnabled, config.get("Console/enabled").asBoolean().orElse(false));<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      if (consoleEnabled) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>         Console c = System.console();<a name="line.626"></a>
-<span class="sourceLineNo">627</span>         this.consoleReader = ObjectUtils.firstNonNull(builder.consoleReader, new Scanner(c == null ? new InputStreamReader(System.in) : c.reader()));<a name="line.627"></a>
-<span class="sourceLineNo">628</span>         this.consoleWriter = ObjectUtils.firstNonNull(builder.consoleWriter, c == null ? new PrintWriter(System.out, true) : c.writer());<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>         for (ConsoleCommand cc : builder.consoleCommands) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>            consoleCommandMap.put(cc.getName(), cc);<a name="line.631"></a>
-<span class="sourceLineNo">632</span>         }<a name="line.632"></a>
-<span class="sourceLineNo">633</span>         for (String s : config.get("Console/commands").asStringArray().orElse(new String[0])) {<a name="line.633"></a>
-<span class="sourceLineNo">634</span>            ConsoleCommand cc;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>            try {<a name="line.635"></a>
-<span class="sourceLineNo">636</span>               cc = (ConsoleCommand)Class.forName(s).newInstance();<a name="line.636"></a>
-<span class="sourceLineNo">637</span>               consoleCommandMap.put(cc.getName(), cc);<a name="line.637"></a>
-<span class="sourceLineNo">638</span>            } catch (Exception e) {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>               getConsoleWriter().println("Could not create console command '"+s+"', " + e.getLocalizedMessage());<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>         consoleThread = new Thread("ConsoleThread") {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>            @Override /* Thread */<a name="line.643"></a>
-<span class="sourceLineNo">644</span>            public void run() {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>               Scanner in = getConsoleReader();<a name="line.645"></a>
-<span class="sourceLineNo">646</span>               PrintWriter out = getConsoleWriter();<a name="line.646"></a>
-<span class="sourceLineNo">647</span><a name="line.647"></a>
-<span class="sourceLineNo">648</span>               out.println(messages.getString("ListOfAvailableCommands"));<a name="line.648"></a>
-<span class="sourceLineNo">649</span>               for (ConsoleCommand cc : new TreeMap&lt;&gt;(getConsoleCommands()).values())<a name="line.649"></a>
-<span class="sourceLineNo">650</span>                  out.append("\t").append(cc.getName()).append(" -- ").append(cc.getInfo()).println();<a name="line.650"></a>
-<span class="sourceLineNo">651</span>               out.println();<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>               while (true) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>                  String line = null;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>                  out.append("&gt; ").flush();<a name="line.655"></a>
-<span class="sourceLineNo">656</span>                  line = in.nextLine();<a name="line.656"></a>
-<span class="sourceLineNo">657</span>                  Args args = new Args(line);<a name="line.657"></a>
-<span class="sourceLineNo">658</span>                  if (! args.isEmpty())<a name="line.658"></a>
-<span class="sourceLineNo">659</span>                     executeCommand(args, in, out);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>               }<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>         consoleThread.setDaemon(true);<a name="line.663"></a>
-<span class="sourceLineNo">664</span>      } else {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>         this.consoleReader = null;<a name="line.665"></a>
-<span class="sourceLineNo">666</span>         this.consoleWriter = null;<a name="line.666"></a>
-<span class="sourceLineNo">667</span>         this.consoleThread = null;<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>      //-------------------------------------------------------------------------------------------------------------<a name="line.670"></a>
-<span class="sourceLineNo">671</span>      // Other<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      //-------------------------------------------------------------------------------------------------------------<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      this.listener = builder.listener != null ? builder.listener : new BasicMicroserviceListener();<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span>      init();<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   }<a name="line.676"></a>
+<span class="sourceLineNo">612</span>      ManifestFileVar.init(manifest);<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      this.manifest = manifest;<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>      // Try to resolve the configuration if not specified.<a name="line.616"></a>
+<span class="sourceLineNo">617</span>      // --------------------------------------------------------------------------------<a name="line.617"></a>
+<span class="sourceLineNo">618</span>      Config config = builder.config;<a name="line.618"></a>
+<span class="sourceLineNo">619</span>      Config.Builder configBuilder = builder.configBuilder.varResolver(builder.varResolver.build()).store(MemoryStore.DEFAULT);<a name="line.619"></a>
+<span class="sourceLineNo">620</span>      if (config == null) {<a name="line.620"></a>
+<span class="sourceLineNo">621</span>         ConfigStore store = builder.configStore;<a name="line.621"></a>
+<span class="sourceLineNo">622</span>         FileStore cfs = workingDir == null ? FileStore.DEFAULT : FileStore.create().directory(workingDir).build();<a name="line.622"></a>
+<span class="sourceLineNo">623</span>         for (String name : getCandidateConfigNames()) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>             if (store != null) {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>                if (store.exists(name)) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>                   configBuilder.store(store).name(name);<a name="line.626"></a>
+<span class="sourceLineNo">627</span>                   break;<a name="line.627"></a>
+<span class="sourceLineNo">628</span>                }<a name="line.628"></a>
+<span class="sourceLineNo">629</span>             } else {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>                if (cfs.exists(name)) {<a name="line.630"></a>
+<span class="sourceLineNo">631</span>                   configBuilder.store(cfs).name(name);<a name="line.631"></a>
+<span class="sourceLineNo">632</span>                   break;<a name="line.632"></a>
+<span class="sourceLineNo">633</span>                }<a name="line.633"></a>
+<span class="sourceLineNo">634</span>                if (ClasspathStore.DEFAULT.exists(name)) {<a name="line.634"></a>
+<span class="sourceLineNo">635</span>                   configBuilder.store(ClasspathStore.DEFAULT).name(name);<a name="line.635"></a>
+<span class="sourceLineNo">636</span>                   break;<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>         config = configBuilder.build();<a name="line.640"></a>
+<span class="sourceLineNo">641</span>      }<a name="line.641"></a>
+<span class="sourceLineNo">642</span>      this.config = config;<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      Config.setSystemDefault(this.config);<a name="line.643"></a>
+<span class="sourceLineNo">644</span>      this.config.addListener(this);<a name="line.644"></a>
+<span class="sourceLineNo">645</span><a name="line.645"></a>
+<span class="sourceLineNo">646</span>      //-------------------------------------------------------------------------------------------------------------<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      // Var resolver.<a name="line.647"></a>
+<span class="sourceLineNo">648</span>      //-------------------------------------------------------------------------------------------------------------<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      this.varResolver = builder.varResolver.bean(Config.class, config).build();<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>      // Initialize console commands.<a name="line.652"></a>
+<span class="sourceLineNo">653</span>      // --------------------------------------------------------------------------------<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      this.consoleEnabled = ObjectUtils.firstNonNull(builder.consoleEnabled, config.get("Console/enabled").asBoolean().orElse(false));<a name="line.654"></a>
+<span class="sourceLineNo">655</span>      if (consoleEnabled) {<a name="line.655"></a>
+<span class="sourceLineNo">656</span>         Console c = System.console();<a name="line.656"></a>
+<span class="sourceLineNo">657</span>         this.consoleReader = ObjectUtils.firstNonNull(builder.consoleReader, new Scanner(c == null ? new InputStreamReader(System.in) : c.reader()));<a name="line.657"></a>
+<span class="sourceLineNo">658</span>         this.consoleWriter = ObjectUtils.firstNonNull(builder.consoleWriter, c == null ? new PrintWriter(System.out, true) : c.writer());<a name="line.658"></a>
+<span class="sourceLineNo">659</span><a name="line.659"></a>
+<span class="sourceLineNo">660</span>         for (ConsoleCommand cc : builder.consoleCommands) {<a name="line.660"></a>
+<span class="sourceLineNo">661</span>            consoleCommandMap.put(cc.getName(), cc);<a name="line.661"></a>
+<span class="sourceLineNo">662</span>         }<a name="line.662"></a>
+<span class="sourceLineNo">663</span>         for (String s : config.get("Console/commands").asStringArray().orElse(new String[0])) {<a name="line.663"></a>
+<span class="sourceLineNo">664</span>            ConsoleCommand cc;<a name="line.664"></a>
+<span class="sourceLineNo">665</span>            try {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>               cc = (ConsoleCommand)Class.forName(s).newInstance();<a name="line.666"></a>
+<span class="sourceLineNo">667</span>               consoleCommandMap.put(cc.getName(), cc);<a name="line.667"></a>
+<span class="sourceLineNo">668</span>            } catch (Exception e) {<a name="line.668"></a>
+<span class="sourceLineNo">669</span>               getConsoleWriter().println("Could not create console command '"+s+"', " + e.getLocalizedMessage());<a name="line.669"></a>
+<span class="sourceLineNo">670</span>            }<a name="line.670"></a>
+<span class="sourceLineNo">671</span>         }<a name="line.671"></a>
+<span class="sourceLineNo">672</span>         consoleThread = new Thread("ConsoleThread") {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>            @Override /* Thread */<a name="line.673"></a>
+<span class="sourceLineNo">674</span>            public void run() {<a name="line.674"></a>
+<span class="sourceLineNo">675</span>               Scanner in = getConsoleReader();<a name="line.675"></a>
+<span class="sourceLineNo">676</span>               PrintWriter out = getConsoleWriter();<a name="line.676"></a>
 <span class="sourceLineNo">677</span><a name="line.677"></a>
-<span class="sourceLineNo">678</span>   private List&lt;String&gt; getCandidateConfigNames() {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      if (configName != null)<a name="line.679"></a>
-<span class="sourceLineNo">680</span>         return Collections.singletonList(configName);<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span>      Args args = getArgs();<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      if (getArgs().hasArg("configFile"))<a name="line.683"></a>
-<span class="sourceLineNo">684</span>         return Collections.singletonList(args.getArg("configFile"));<a name="line.684"></a>
-<span class="sourceLineNo">685</span><a name="line.685"></a>
-<span class="sourceLineNo">686</span>      ManifestFile manifest = getManifest();<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      if (manifest.containsKey("Main-Config"))<a name="line.687"></a>
-<span class="sourceLineNo">688</span>         return Collections.singletonList(manifest.getString("Main-Config"));<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>      return Config.getCandidateSystemDefaultConfigNames();<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>    * Resolves the specified path.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    *<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    * &lt;p&gt;<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    * If the working directory has been explicitly specified, relative paths are resolved relative to that.<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    *<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    * @param path The path to resolve.<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    * @return The resolved path.<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    */<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   protected File resolveFile(String path) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      if (Paths.get(path).isAbsolute())<a name="line.703"></a>
-<span class="sourceLineNo">704</span>         return new File(path);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      if (workingDir != null)<a name="line.705"></a>
-<span class="sourceLineNo">706</span>         return new File(workingDir, path);<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      return new File(path);<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   }<a name="line.708"></a>
-<span class="sourceLineNo">709</span><a name="line.709"></a>
-<span class="sourceLineNo">710</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   // Abstract lifecycle methods.<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>    * Initializes this microservice.<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    *<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    * &lt;p&gt;<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    * This method can be called whenever the microservice is not started.<a name="line.718"></a>
-<span class="sourceLineNo">719</span>    *<a name="line.719"></a>
-<span class="sourceLineNo">720</span>    * &lt;p&gt;<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    * It will initialize (or reinitialize) the console commands, system properties, and logger.<a name="line.721"></a>
-<span class="sourceLineNo">722</span>    *<a name="line.722"></a>
-<span class="sourceLineNo">723</span>    * @return This object.<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    * @throws ParseException Malformed input encountered.<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    * @throws IOException Couldn't read a file.<a name="line.725"></a>
-<span class="sourceLineNo">726</span>    */<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   public synchronized Microservice init() throws IOException, ParseException {<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>      // Set system properties.<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      // --------------------------------------------------------------------------------<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      Set&lt;String&gt; spKeys = config.getKeys("SystemProperties");<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      if (spKeys != null)<a name="line.733"></a>
-<span class="sourceLineNo">734</span>         for (String key : spKeys)<a name="line.734"></a>
-<span class="sourceLineNo">735</span>            System.setProperty(key, config.get("SystemProperties/"+key).orElse(null));<a name="line.735"></a>
-<span class="sourceLineNo">736</span><a name="line.736"></a>
-<span class="sourceLineNo">737</span>      return this;<a name="line.737"></a>
+<span class="sourceLineNo">678</span>               out.println(messages.getString("ListOfAvailableCommands"));<a name="line.678"></a>
+<span class="sourceLineNo">679</span>               for (ConsoleCommand cc : new TreeMap&lt;&gt;(getConsoleCommands()).values())<a name="line.679"></a>
+<span class="sourceLineNo">680</span>                  out.append("\t").append(cc.getName()).append(" -- ").append(cc.getInfo()).println();<a name="line.680"></a>
+<span class="sourceLineNo">681</span>               out.println();<a name="line.681"></a>
+<span class="sourceLineNo">682</span><a name="line.682"></a>
+<span class="sourceLineNo">683</span>               while (true) {<a name="line.683"></a>
+<span class="sourceLineNo">684</span>                  String line = null;<a name="line.684"></a>
+<span class="sourceLineNo">685</span>                  out.append("&gt; ").flush();<a name="line.685"></a>
+<span class="sourceLineNo">686</span>                  line = in.nextLine();<a name="line.686"></a>
+<span class="sourceLineNo">687</span>                  Args args = new Args(line);<a name="line.687"></a>
+<span class="sourceLineNo">688</span>                  if (! args.isEmpty())<a name="line.688"></a>
+<span class="sourceLineNo">689</span>                     executeCommand(args, in, out);<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>         consoleThread.setDaemon(true);<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      } else {<a name="line.694"></a>
+<span class="sourceLineNo">695</span>         this.consoleReader = null;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>         this.consoleWriter = null;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>         this.consoleThread = null;<a name="line.697"></a>
+<span class="sourceLineNo">698</span>      }<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>      // Other<a name="line.701"></a>
+<span class="sourceLineNo">702</span>      //-------------------------------------------------------------------------------------------------------------<a name="line.702"></a>
+<span class="sourceLineNo">703</span>      this.listener = builder.listener != null ? builder.listener : new BasicMicroserviceListener();<a name="line.703"></a>
+<span class="sourceLineNo">704</span><a name="line.704"></a>
+<span class="sourceLineNo">705</span>      init();<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>   private List&lt;String&gt; getCandidateConfigNames() {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      if (configName != null)<a name="line.709"></a>
+<span class="sourceLineNo">710</span>         return Collections.singletonList(configName);<a name="line.710"></a>
+<span class="sourceLineNo">711</span><a name="line.711"></a>
+<span class="sourceLineNo">712</span>      Args args = getArgs();<a name="line.712"></a>
+<span class="sourceLineNo">713</span>      if (getArgs().hasArg("configFile"))<a name="line.713"></a>
+<span class="sourceLineNo">714</span>         return Collections.singletonList(args.getArg("configFile"));<a name="line.714"></a>
+<span class="sourceLineNo">715</span><a name="line.715"></a>
+<span class="sourceLineNo">716</span>      ManifestFile manifest = getManifest();<a name="line.716"></a>
+<span class="sourceLineNo">717</span>      if (manifest.containsKey("Main-Config"))<a name="line.717"></a>
+<span class="sourceLineNo">718</span>         return Collections.singletonList(manifest.getString("Main-Config"));<a name="line.718"></a>
+<span class="sourceLineNo">719</span><a name="line.719"></a>
+<span class="sourceLineNo">720</span>      return Config.getCandidateSystemDefaultConfigNames();<a name="line.720"></a>
+<span class="sourceLineNo">721</span>   }<a name="line.721"></a>
+<span class="sourceLineNo">722</span><a name="line.722"></a>
+<span class="sourceLineNo">723</span>   /**<a name="line.723"></a>
+<span class="sourceLineNo">724</span>    * Resolves the specified path.<a name="line.724"></a>
+<span class="sourceLineNo">725</span>    *<a name="line.725"></a>
+<span class="sourceLineNo">726</span>    * &lt;p&gt;<a name="line.726"></a>
+<span class="sourceLineNo">727</span>    * If the working directory has been explicitly specified, relative paths are resolved relative to that.<a name="line.727"></a>
+<span class="sourceLineNo">728</span>    *<a name="line.728"></a>
+<span class="sourceLineNo">729</span>    * @param path The path to resolve.<a name="line.729"></a>
+<span class="sourceLineNo">730</span>    * @return The resolved path.<a name="line.730"></a>
+<span class="sourceLineNo">731</span>    */<a name="line.731"></a>
+<span class="sourceLineNo">732</span>   protected File resolveFile(String path) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>      if (Paths.get(path).isAbsolute())<a name="line.733"></a>
+<span class="sourceLineNo">734</span>         return new File(path);<a name="line.734"></a>
+<span class="sourceLineNo">735</span>      if (workingDir != null)<a name="line.735"></a>
+<span class="sourceLineNo">736</span>         return new File(workingDir, path);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>      return new File(path);<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>    * Start this application.<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    *<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    * &lt;p&gt;<a name="line.743"></a>
-<span class="sourceLineNo">744</span>    * Overridden methods MUST call this method FIRST so that the {@link MicroserviceListener#onStart(Microservice)} method is called.<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    *<a name="line.745"></a>
-<span class="sourceLineNo">746</span>    * @return This object.<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    * @throws Exception Error occurred.<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    */<a name="line.748"></a>
-<span class="sourceLineNo">749</span>   public synchronized Microservice start() throws Exception {<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>      if (config.getName() == null)<a name="line.751"></a>
-<span class="sourceLineNo">752</span>         err(messages, "RunningClassWithoutConfig", getClass().getSimpleName());<a name="line.752"></a>
-<span class="sourceLineNo">753</span>      else<a name="line.753"></a>
-<span class="sourceLineNo">754</span>         out(messages, "RunningClassWithConfig", getClass().getSimpleName(), config.getName());<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>      Runtime.getRuntime().addShutdownHook(<a name="line.756"></a>
-<span class="sourceLineNo">757</span>         new Thread("ShutdownHookThread") {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>            @Override /* Thread */<a name="line.758"></a>
-<span class="sourceLineNo">759</span>            public void run() {<a name="line.759"></a>
-<span class="sourceLineNo">760</span>               try {<a name="line.760"></a>
-<span class="sourceLineNo">761</span>                  Microservice.this.stop();<a name="line.761"></a>
-<span class="sourceLineNo">762</span>                  Microservice.this.stopConsole();<a name="line.762"></a>
-<span class="sourceLineNo">763</span>               } catch (Exception e) {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>                  e.printStackTrace();<a name="line.764"></a>
-<span class="sourceLineNo">765</span>               }<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><a name="line.769"></a>
-<span class="sourceLineNo">770</span>      listener.onStart(this);<a name="line.770"></a>
-<span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>      return this;<a name="line.772"></a>
-<span class="sourceLineNo">773</span>   }<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>
-<span class="sourceLineNo">776</span>    * Starts the console thread for this microservice.<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    *<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    * @return This object.<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    * @throws Exception Error occurred<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    */<a name="line.780"></a>
-<span class="sourceLineNo">781</span>   public synchronized Microservice startConsole() throws Exception {<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      if (consoleThread != null &amp;&amp; ! consoleThread.isAlive())<a name="line.782"></a>
-<span class="sourceLineNo">783</span>         consoleThread.start();<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      return this;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   }<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>   /**<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    * Stops the console thread for this microservice.<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    *<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    * @return This object.<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    * @throws Exception Error occurred<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    */<a name="line.792"></a>
-<span class="sourceLineNo">793</span>   public synchronized Microservice stopConsole() throws Exception {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      if (consoleThread != null &amp;&amp; consoleThread.isAlive())<a name="line.794"></a>
-<span class="sourceLineNo">795</span>         consoleThread.interrupt();<a name="line.795"></a>
-<span class="sourceLineNo">796</span>      return this;<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   }<a name="line.797"></a>
-<span class="sourceLineNo">798</span><a name="line.798"></a>
-<span class="sourceLineNo">799</span>   /**<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    * Returns the command-line arguments passed into the application.<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    *<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    * &lt;p&gt;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    * This method can be called from the class constructor.<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    *<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    * &lt;p&gt;<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    * See {@link Args} for details on using this method.<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    *<a name="line.807"></a>
-<span class="sourceLineNo">808</span>    * @return The command-line arguments passed into the application.<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    */<a name="line.809"></a>
-<span class="sourceLineNo">810</span>   public Args getArgs() {<a name="line.810"></a>
-<span class="sourceLineNo">811</span>      return args;<a name="line.811"></a>
-<span class="sourceLineNo">812</span>   }<a name="line.812"></a>
+<span class="sourceLineNo">740</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.740"></a>
+<span class="sourceLineNo">741</span>   // Abstract lifecycle methods.<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>   /**<a name="line.744"></a>
+<span class="sourceLineNo">745</span>    * Initializes this microservice.<a name="line.745"></a>
+<span class="sourceLineNo">746</span>    *<a name="line.746"></a>
+<span class="sourceLineNo">747</span>    * &lt;p&gt;<a name="line.747"></a>
+<span class="sourceLineNo">748</span>    * This method can be called whenever the microservice is not started.<a name="line.748"></a>
+<span class="sourceLineNo">749</span>    *<a name="line.749"></a>
+<span class="sourceLineNo">750</span>    * &lt;p&gt;<a name="line.750"></a>
+<span class="sourceLineNo">751</span>    * It will initialize (or reinitialize) the console commands, system properties, and logger.<a name="line.751"></a>
+<span class="sourceLineNo">752</span>    *<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    * @return This object.<a name="line.753"></a>
+<span class="sourceLineNo">754</span>    * @throws ParseException Malformed input encountered.<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    * @throws IOException Couldn't read a file.<a name="line.755"></a>
+<span class="sourceLineNo">756</span>    */<a name="line.756"></a>
+<span class="sourceLineNo">757</span>   public synchronized Microservice init() throws IOException, ParseException {<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>      // Set system properties.<a name="line.760"></a>
+<span class="sourceLineNo">761</span>      // --------------------------------------------------------------------------------<a name="line.761"></a>
+<span class="sourceLineNo">762</span>      Set&lt;String&gt; spKeys = config.getKeys("SystemProperties");<a name="line.762"></a>
+<span class="sourceLineNo">763</span>      if (spKeys != null)<a name="line.763"></a>
+<span class="sourceLineNo">764</span>         for (String key : spKeys)<a name="line.764"></a>
+<span class="sourceLineNo">765</span>            System.setProperty(key, config.get("SystemProperties/"+key).orElse(null));<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>      // Initialize logging.<a name="line.768"></a>
+<span class="sourceLineNo">769</span>      // --------------------------------------------------------------------------------<a name="line.769"></a>
+<span class="sourceLineNo">770</span>      this.logger = builder.logger;<a name="line.770"></a>
+<span class="sourceLineNo">771</span>      LogConfig logConfig = builder.logConfig != null ? builder.logConfig : new LogConfig();<a name="line.771"></a>
+<span class="sourceLineNo">772</span>      if (this.logger == null) {<a name="line.772"></a>
+<span class="sourceLineNo">773</span>         LogManager.getLogManager().reset();<a name="line.773"></a>
+<span class="sourceLineNo">774</span>         this.logger = Logger.getLogger("");<a name="line.774"></a>
+<span class="sourceLineNo">775</span>         String logFile = firstNonNull(logConfig.logFile, config.get("Logging/logFile").orElse(null));<a name="line.775"></a>
+<span class="sourceLineNo">776</span><a name="line.776"></a>
+<span class="sourceLineNo">777</span>         if (isNotEmpty(logFile)) {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>            String logDir = firstNonNull(logConfig.logDir, config.get("Logging/logDir").orElse("."));<a name="line.778"></a>
+<span class="sourceLineNo">779</span>            File logDirFile = resolveFile(logDir);<a name="line.779"></a>
+<span class="sourceLineNo">780</span>            mkdirs(logDirFile, false);<a name="line.780"></a>
+<span class="sourceLineNo">781</span>            logDir = logDirFile.getAbsolutePath();<a name="line.781"></a>
+<span class="sourceLineNo">782</span>            System.setProperty("juneau.logDir", logDir);<a name="line.782"></a>
+<span class="sourceLineNo">783</span><a name="line.783"></a>
+<span class="sourceLineNo">784</span>            boolean append = firstNonNull(logConfig.append, config.get("Logging/append").asBoolean().orElse(false));<a name="line.784"></a>
+<span class="sourceLineNo">785</span>            int limit = firstNonNull(logConfig.limit, config.get("Logging/limit").asInteger().orElse(1024*1024));<a name="line.785"></a>
+<span class="sourceLineNo">786</span>            int count = firstNonNull(logConfig.count, config.get("Logging/count").asInteger().orElse(1));<a name="line.786"></a>
+<span class="sourceLineNo">787</span><a name="line.787"></a>
+<span class="sourceLineNo">788</span>            FileHandler fh = new FileHandler(logDir + '/' + logFile, limit, count, append);<a name="line.788"></a>
+<span class="sourceLineNo">789</span><a name="line.789"></a>
+<span class="sourceLineNo">790</span>            Formatter f = logConfig.formatter;<a name="line.790"></a>
+<span class="sourceLineNo">791</span>            if (f == null) {<a name="line.791"></a>
+<span class="sourceLineNo">792</span>               String format = config.get("Logging/format").orElse("[{date} {level}] {msg}%n");<a name="line.792"></a>
+<span class="sourceLineNo">793</span>               String dateFormat = config.get("Logging/dateFormat").orElse("yyyy.MM.dd hh:mm:ss");<a name="line.793"></a>
+<span class="sourceLineNo">794</span>               boolean useStackTraceHashes = config.get("Logging/useStackTraceHashes").asBoolean().orElse(false);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>               f = new LogEntryFormatter(format, dateFormat, useStackTraceHashes);<a name="line.795"></a>
+<span class="sourceLineNo">796</span>            }<a name="line.796"></a>
+<span class="sourceLineNo">797</span>            fh.setFormatter(f);<a name="line.797"></a>
+<span class="sourceLineNo">798</span>            fh.setLevel(firstNonNull(logConfig.fileLevel, config.get("Logging/fileLevel").as(Level.class).orElse(Level.INFO)));<a name="line.798"></a>
+<span class="sourceLineNo">799</span>            logger.addHandler(fh);<a name="line.799"></a>
+<span class="sourceLineNo">800</span><a name="line.800"></a>
+<span class="sourceLineNo">801</span>            ConsoleHandler ch = new ConsoleHandler();<a name="line.801"></a>
+<span class="sourceLineNo">802</span>            ch.setLevel(firstNonNull(logConfig.consoleLevel, config.get("Logging/consoleLevel").as(Level.class).orElse(Level.WARNING)));<a name="line.802"></a>
+<span class="sourceLineNo">803</span>            ch.setFormatter(f);<a name="line.803"></a>
+<span class="sourceLineNo">804</span>            logger.addHandler(ch);<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><a name="line.807"></a>
+<span class="sourceLineNo">808</span>      JsonMap loggerLevels = config.get("Logging/levels").as(JsonMap.class).orElseGet(JsonMap::new);<a name="line.808"></a>
+<span class="sourceLineNo">809</span>      for (String l : loggerLevels.keySet())<a name="line.809"></a>
+<span class="sourceLineNo">810</span>         Logger.getLogger(l).setLevel(loggerLevels.get(l, Level.class));<a name="line.810"></a>
+<span class="sourceLineNo">811</span>      for (String l : logConfig.levels.keySet())<a name="line.811"></a>
+<span class="sourceLineNo">812</span>         Logger.getLogger(l).setLevel(logConfig.levels.get(l));<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>    * Returns the external INI-style configuration file that can be used to configure your microservice.<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    *<a name="line.816"></a>
-<span class="sourceLineNo">817</span>    * &lt;p&gt;<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    * The config location is determined in the following order:<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    * &lt;ol class='spaced-list'&gt;<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    *    &lt;li&gt;<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    *       The first argument passed to the microservice jar.<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    *    &lt;li&gt;<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    *       The &lt;c&gt;Main-Config&lt;/c&gt; entry in the microservice jar manifest file.<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    *    &lt;li&gt;<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    *       The name of the microservice jar with a &lt;js&gt;".cfg"&lt;/js&gt; suffix (e.g.<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    *       &lt;js&gt;"mymicroservice.jar"&lt;/js&gt;-&amp;gt;&lt;js&gt;"mymicroservice.cfg"&lt;/js&gt;).<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    * &lt;/ol&gt;<a name="line.827"></a>
-<span class="sourceLineNo">828</span>    *<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    * &lt;p&gt;<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    * If all methods for locating the config fail, then this method returns an empty config.<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    *<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    * &lt;p&gt;<a name="line.832"></a>
-<span class="sourceLineNo">833</span>    * Subclasses can set their own config file by using the following methods:<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    * &lt;ul class='javatree'&gt;<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    *    &lt;li class='jm'&gt;{@link Builder#configStore(ConfigStore)}<a name="line.835"></a>
-<span class="sourceLineNo">836</span>    *    &lt;li class='jm'&gt;{@link Builder#configName(String)}<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    * &lt;/ul&gt;<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    *<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    * &lt;p&gt;<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    * String variables are automatically resolved using the variable resolver returned by {@link #getVarResolver()}.<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    *<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    * &lt;p&gt;<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    * This method can be called from the class constructor.<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    *<a name="line.844"></a>
-<span class="sourceLineNo">845</span>    * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;<a name="line.845"></a>
-<span class="sourceLineNo">846</span>    * &lt;p class='bini'&gt;<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    *    &lt;cc&gt;#--------------------------&lt;/cc&gt;<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    *    &lt;cc&gt;# My section&lt;/cc&gt;<a name="line.848"></a>
-<span class="sourceLineNo">849</span>    *    &lt;cc&gt;#--------------------------&lt;/cc&gt;<a name="line.849"></a>
-<span class="sourceLineNo">850</span>    *    &lt;cs&gt;[MySection]&lt;/cs&gt;<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    *<a name="line.851"></a>
-<span class="sourceLineNo">852</span>    *    &lt;cc&gt;# An integer&lt;/cc&gt;<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    *    &lt;ck&gt;anInt&lt;/ck&gt; = 1<a name="line.853"></a>
+<span class="sourceLineNo">814</span>      return this;<a name="line.814"></a>
+<span class="sourceLineNo">815</span>   }<a name="line.815"></a>
+<span class="sourceLineNo">816</span><a name="line.816"></a>
+<span class="sourceLineNo">817</span>   /**<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    * Start this application.<a name="line.818"></a>
+<span class="sourceLineNo">819</span>    *<a name="line.819"></a>
+<span class="sourceLineNo">820</span>    * &lt;p&gt;<a name="line.820"></a>
+<span class="sourceLineNo">821</span>    * Overridden methods MUST call this method FIRST so that the {@link MicroserviceListener#onStart(Microservice)} method is called.<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    *<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    * @return This object.<a name="line.823"></a>
+<span class="sourceLineNo">824</span>    * @throws Exception Error occurred.<a name="line.824"></a>
+<span class="sourceLineNo">825</span>    */<a name="line.825"></a>
+<span class="sourceLineNo">826</span>   public synchronized Microservice start() throws Exception {<a name="line.826"></a>
+<span class="sourceLineNo">827</span><a name="line.827"></a>
+<span class="sourceLineNo">828</span>      if (config.getName() == null)<a name="line.828"></a>
+<span class="sourceLineNo">829</span>         err(messages, "RunningClassWithoutConfig", getClass().getSimpleName());<a name="line.829"></a>
+<span class="sourceLineNo">830</span>      else<a name="line.830"></a>
+<span class="sourceLineNo">831</span>         out(messages, "RunningClassWithConfig", getClass().getSimpleName(), config.getName());<a name="line.831"></a>
+<span class="sourceLineNo">832</span><a name="line.832"></a>
+<span class="sourceLineNo">833</span>      Runtime.getRuntime().addShutdownHook(<a name="line.833"></a>
+<span class="sourceLineNo">834</span>         new Thread("ShutdownHookThread") {<a name="line.834"></a>
+<span class="sourceLineNo">835</span>            @Override /* Thread */<a name="line.835"></a>
+<span class="sourceLineNo">836</span>            public void run() {<a name="line.836"></a>
+<span class="sourceLineNo">837</span>               try {<a name="line.837"></a>
+<span class="sourceLineNo">838</span>                  Microservice.this.stop();<a name="line.838"></a>
+<span class="sourceLineNo">839</span>                  Microservice.this.stopConsole();<a name="line.839"></a>
+<span class="sourceLineNo">840</span>               } catch (Exception e) {<a name="line.840"></a>
+<span class="sourceLineNo">841</span>                  e.printStackTrace();<a name="line.841"></a>
+<span class="sourceLineNo">842</span>               }<a name="line.842"></a>
+<span class="sourceLineNo">843</span>            }<a name="line.843"></a>
+<span class="sourceLineNo">844</span>         }<a name="line.844"></a>
+<span class="sourceLineNo">845</span>      );<a name="line.845"></a>
+<span class="sourceLineNo">846</span><a name="line.846"></a>
+<span class="sourceLineNo">847</span>      listener.onStart(this);<a name="line.847"></a>
+<span class="sourceLineNo">848</span><a name="line.848"></a>
+<span class="sourceLineNo">849</span>      return this;<a name="line.849"></a>
+<span class="sourceLineNo">850</span>   }<a name="line.850"></a>
+<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">852</span>   /**<a name="line.852"></a>
+<span class="sourceLineNo">853</span>    * Starts the console thread for this microservice.<a name="line.853"></a>
 <span class="sourceLineNo">854</span>    *<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    *    &lt;cc&gt;# A boolean&lt;/cc&gt;<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    *    &lt;ck&gt;aBoolean&lt;/ck&gt; = true<a name="line.856"></a>
-<span class="sourceLineNo">857</span>    *<a name="line.857"></a>
-<span class="sourceLineNo">858</span>    *    &lt;cc&gt;# An int array&lt;/cc&gt;<a name="line.858"></a>
-<span class="sourceLineNo">859</span>    *    &lt;ck&gt;anIntArray&lt;/ck&gt; = 1,2,3<a name="line.859"></a>
-<span class="sourceLineNo">860</span>    *<a name="line.860"></a>
-<span class="sourceLineNo">861</span>    *    &lt;cc&gt;# A POJO that can be converted from a String&lt;/cc&gt;<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    *    &lt;ck&gt;aURL&lt;/ck&gt; = http://foo<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    *<a name="line.863"></a>
-<span class="sourceLineNo">864</span>    *    &lt;cc&gt;# A POJO that can be converted from JSON&lt;/cc&gt;<a name="line.864"></a>
-<span class="sourceLineNo">865</span>    *    &lt;ck&gt;aBean&lt;/ck&gt; = {foo:'bar',baz:123}<a name="line.865"></a>
+<span class="sourceLineNo">855</span>    * @return This object.<a name="line.855"></a>
+<span class="sourceLineNo">856</span>    * @throws Exception Error occurred<a name="line.856"></a>
+<span class="sourceLineNo">857</span>    */<a name="line.857"></a>
+<span class="sourceLineNo">858</span>   public synchronized Microservice startConsole() throws Exception {<a name="line.858"></a>
+<span class="sourceLineNo">859</span>      if (consoleThread != null &amp;&amp; ! consoleThread.isAlive())<a name="line.859"></a>
+<span class="sourceLineNo">860</span>         consoleThread.start();<a name="line.860"></a>
+<span class="sourceLineNo">861</span>      return this;<a name="line.861"></a>
+<span class="sourceLineNo">862</span>   }<a name="line.862"></a>
+<span class="sourceLineNo">863</span><a name="line.863"></a>
+<span class="sourceLineNo">864</span>   /**<a name="line.864"></a>
+<span class="sourceLineNo">865</span>    * Stops the console thread for this microservice.<a name="line.865"></a>
 <span class="sourceLineNo">866</span>    *<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    *    &lt;cc&gt;# A system property&lt;/cc&gt;<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    *    &lt;ck&gt;locale&lt;/ck&gt; = $S{java.locale, en_US}<a name="line.868"></a>
-<span class="sourceLineNo">869</span>    *<a name="line.869"></a>
-<span class="sourceLineNo">870</span>    *    &lt;cc&gt;# An environment variable&lt;/cc&gt;<a name="line.870"></a>
-<span class="sourceLineNo">871</span>    *    &lt;ck&gt;path&lt;/ck&gt; = $E{PATH, unknown}<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    *<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    *    &lt;cc&gt;# A manifest file entry&lt;/cc&gt;<a name="line.873"></a>
-<span class="sourceLineNo">874</span>    *    &lt;ck&gt;mainClass&lt;/ck&gt; = $MF{Main-Class}<a name="line.874"></a>
-<span class="sourceLineNo">875</span>    *<a name="line.875"></a>
-<span class="sourceLineNo">876</span>    *    &lt;cc&gt;# Another value in this config file&lt;/cc&gt;<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    *    &lt;ck&gt;sameAsAnInt&lt;/ck&gt; = $C{MySection/anInt}<a name="line.877"></a>
+<span class="sourceLineNo">867</span>    * @return This object.<a name="line.867"></a>
+<span class="sourceLineNo">868</span>    * @throws Exception Error occurred<a name="line.868"></a>
+<span class="sourceLineNo">869</span>    */<a name="line.869"></a>
+<span class="sourceLineNo">870</span>   public synchronized Microservice stopConsole() throws Exception {<a name="line.870"></a>
+<span class="sourceLineNo">871</span>      if (consoleThread != null &amp;&amp; consoleThread.isAlive())<a name="line.871"></a>
+<span class="sourceLineNo">872</span>         consoleThread.interrupt();<a name="line.872"></a>
+<span class="sourceLineNo">873</span>      return this;<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>   /**<a name="line.876"></a>
+<span class="sourceLineNo">877</span>    * Returns the command-line arguments passed into the application.<a name="line.877"></a>
 <span class="sourceLineNo">878</span>    *<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    *    &lt;cc&gt;# A command-line argument in the form "myarg=foo"&lt;/cc&gt;<a name="line.879"></a>
-<span class="sourceLineNo">880</span>    *    &lt;ck&gt;myArg&lt;/ck&gt; = $A{myarg}<a name="line.880"></a>
+<span class="sourceLineNo">879</span>    * &lt;p&gt;<a name="line.879"></a>
+<span class="sourceLineNo">880</span>    * This method can be called from the class constructor.<a name="line.880"></a>
 <span class="sourceLineNo">881</span>    *<a name="line.881"></a>
-<span class="sourceLineNo">882</span>    *    &lt;cc&gt;# The first command-line argument&lt;/cc&gt;<a name="line.882"></a>
-<span class="sourceLineNo">883</span>    *    &lt;ck&gt;firstArg&lt;/ck&gt; = $A{0}<a name="line.883"></a>
+<span class="sourceLineNo">882</span>    * &lt;p&gt;<a name="line.882"></a>
+<span class="sourceLineNo">883</span>    * See {@link Args} for details on using this method.<a name="line.883"></a>
 <span class="sourceLineNo">884</span>    *<a name="line.884"></a>
-<span class="sourceLineNo">885</span>    *    &lt;cc&gt;# Look for system property, or env var if that doesn't exist, or command-line arg if that doesn't exist.&lt;/cc&gt;<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    *    &lt;ck&gt;nested&lt;/ck&gt; = $S{mySystemProperty,$E{MY_ENV_VAR,$A{0}}}<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    *<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    *    &lt;cc&gt;# A POJO with embedded variables&lt;/cc&gt;<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    *    &lt;ck&gt;aBean2&lt;/ck&gt; = {foo:'$A{0}',baz:$C{MySection/anInt}}<a name="line.889"></a>
-<span class="sourceLineNo">890</span>    * &lt;/p&gt;<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    *<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    * &lt;p class='bjava'&gt;<a name="line.892"></a>
-<span class="sourceLineNo">893</span>    *    &lt;jc&gt;// Java code for accessing config entries above.&lt;/jc&gt;<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    *    Config &lt;jv&gt;config&lt;/jv&gt; = getConfig();<a name="line.894"></a>
-<span class="sourceLineNo">895</span>    *<a name="line.895"></a>
-<span class="sourceLineNo">896</span>    *    &lt;jk&gt;int&lt;/jk&gt; &lt;jv&gt;anInt&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/anInt"&lt;/js&gt;).asInteger().orElse(-1);<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    *    &lt;jk&gt;boolean&lt;/jk&gt; &lt;jv&gt;aBoolean&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/aBoolean"&lt;/js&gt;).asBoolean().orElse(&lt;jk&gt;false&lt;/jk&gt;);<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    *    &lt;jk&gt;int&lt;/jk&gt;[] &lt;jv&gt;anIntArray&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/anIntArray"&lt;/js&gt;).as(&lt;jk&gt;int&lt;/jk&gt;[].&lt;jk&gt;class&lt;/jk&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.898"></a>
-<span class="sourceLineNo">899</span>    *    URL &lt;jv&gt;aURL&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/aURL"&lt;/js&gt;).as(URL.&lt;jk&gt;class&lt;/jk&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.899"></a>
-<span class="sourceLineNo">900</span>    *    MyBean &lt;jv&gt;aBean&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/aBean"&lt;/js&gt;).as(MyBean.&lt;jk&gt;class&lt;/jk&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.900"></a>
-<span class="sourceLineNo">901</span>    *    Locale &lt;jv&gt;locale&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/locale"&lt;/js&gt;).as(Locale.&lt;jk&gt;class&lt;/jk&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>    *    String &lt;jv&gt;path&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/path"&lt;/js&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.902"></a>
-<span class="sourceLineNo">903</span>    *    String &lt;jv&gt;mainClass&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/mainClass"&lt;/js&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.903"></a>
-<span class="sourceLineNo">904</span>    *    &lt;jk&gt;int&lt;/jk&gt; &lt;jv&gt;sameAsAnInt&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/sameAsAnInt"&lt;/js&gt;).asInteger().orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>    *    String &lt;jv&gt;myArg&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.getString(&lt;js&gt;"MySection/myArg"&lt;/js&gt;);<a name="line.905"></a>
-<span class="sourceLineNo">906</span>    *    String &lt;jv&gt;firstArg&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.getString(&lt;js&gt;"MySection/firstArg"&lt;/js&gt;);<a name="line.906"></a>
-<span class="sourceLineNo">907</span>    * &lt;/p&gt;<a name="line.907"></a>
+<span class="sourceLineNo">885</span>    * @return The command-line arguments passed into the application.<a name="line.885"></a>
+<span class="sourceLineNo">886</span>    */<a name="line.886"></a>
+<span class="sourceLineNo">887</span>   public Args getArgs() {<a name="line.887"></a>
+<span class="sourceLineNo">888</span>      return args;<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>   /**<a name="line.891"></a>
+<span class="sourceLineNo">892</span>    * Returns the external INI-style configuration file that can be used to configure your microservice.<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    *<a name="line.893"></a>
+<span class="sourceLineNo">894</span>    * &lt;p&gt;<a name="line.894"></a>
+<span class="sourceLineNo">895</span>    * The config location is determined in the following order:<a name="line.895"></a>
+<span class="sourceLineNo">896</span>    * &lt;ol class='spaced-list'&gt;<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    *    &lt;li&gt;<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    *       The first argument passed to the microservice jar.<a name="line.898"></a>
+<span class="sourceLineNo">899</span>    *    &lt;li&gt;<a name="line.899"></a>
+<span class="sourceLineNo">900</span>    *       The &lt;c&gt;Main-Config&lt;/c&gt; entry in the microservice jar manifest file.<a name="line.900"></a>
+<span class="sourceLineNo">901</span>    *    &lt;li&gt;<a name="line.901"></a>
+<span class="sourceLineNo">902</span>    *       The name of the microservice jar with a &lt;js&gt;".cfg"&lt;/js&gt; suffix (e.g.<a name="line.902"></a>
+<span class="sourceLineNo">903</span>    *       &lt;js&gt;"mymicroservice.jar"&lt;/js&gt;-&amp;gt;&lt;js&gt;"mymicroservice.cfg"&lt;/js&gt;).<a name="line.903"></a>
+<span class="sourceLineNo">904</span>    * &lt;/ol&gt;<a name="line.904"></a>
+<span class="sourceLineNo">905</span>    *<a name="line.905"></a>
+<span class="sourceLineNo">906</span>    * &lt;p&gt;<a name="line.906"></a>
+<span class="sourceLineNo">907</span>    * If all methods for locating the config fail, then this method returns an empty config.<a name="line.907"></a>
 <span class="sourceLineNo">908</span>    *<a name="line.908"></a>
-<span class="sourceLineNo">909</span>    * @return The config file for this application, or &lt;jk&gt;null&lt;/jk&gt; if no config file is configured.<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    */<a name="line.910"></a>
-<span class="sourceLineNo">911</span>   public Config getConfig() {<a name="line.911"></a>
-<span class="sourceLineNo">912</span>      return config;<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>   /**<a name="line.915"></a>
-<span class="sourceLineNo">916</span>    * Returns the main jar manifest file contents as a simple {@link JsonMap}.<a name="line.916"></a>
-<span class="sourceLineNo">917</span>    *<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    * &lt;p&gt;<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    * This map consists of the contents of {@link Manifest#getMainAttributes()} with the keys and entries converted to<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    * simple strings.<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    * &lt;p&gt;<a name="line.921"></a>
-<span class="sourceLineNo">922</span>    * This method can be called from the class constructor.<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    *<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;<a name="line.924"></a>
-<span class="sourceLineNo">925</span>    * &lt;p class='bjava'&gt;<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    *    &lt;jc&gt;// Get Main-Class from manifest file.&lt;/jc&gt;<a name="line.926"></a>
-<span class="sourceLineNo">927</span>    *    String &lt;jv&gt;mainClass&lt;/jv&gt; = Microservice.&lt;jsm&gt;getManifest&lt;/jsm&gt;().getString(&lt;js&gt;"Main-Class"&lt;/js&gt;, &lt;js&gt;"unknown"&lt;/js&gt;);<a name="line.927"></a>
+<span class="sourceLineNo">909</span>    * &lt;p&gt;<a name="line.909"></a>
+<span class="sourceLineNo">910</span>    * Subclasses can set their own config file by using the following methods:<a name="line.910"></a>
+<span class="sourceLineNo">911</span>    * &lt;ul class='javatree'&gt;<a name="line.911"></a>
+<span class="sourceLineNo">912</span>    *    &lt;li class='jm'&gt;{@link Builder#configStore(ConfigStore)}<a name="line.912"></a>
+<span class="sourceLineNo">913</span>    *    &lt;li class='jm'&gt;{@link Builder#configName(String)}<a name="line.913"></a>
+<span class="sourceLineNo">914</span>    * &lt;/ul&gt;<a name="line.914"></a>
+<span class="sourceLineNo">915</span>    *<a name="line.915"></a>
+<span class="sourceLineNo">916</span>    * &lt;p&gt;<a name="line.916"></a>
+<span class="sourceLineNo">917</span>    * String variables are automatically resolved using the variable resolver returned by {@link #getVarResolver()}.<a name="line.917"></a>
+<span class="sourceLineNo">918</span>    *<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    * &lt;p&gt;<a name="line.919"></a>
+<span class="sourceLineNo">920</span>    * This method can be called from the class constructor.<a name="line.920"></a>
+<span class="sourceLineNo">921</span>    *<a name="line.921"></a>
+<span class="sourceLineNo">922</span>    * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;<a name="line.922"></a>
+<span class="sourceLineNo">923</span>    * &lt;p class='bini'&gt;<a name="line.923"></a>
+<span class="sourceLineNo">924</span>    *    &lt;cc&gt;#--------------------------&lt;/cc&gt;<a name="line.924"></a>
+<span class="sourceLineNo">925</span>    *    &lt;cc&gt;# My section&lt;/cc&gt;<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    *    &lt;cc&gt;#--------------------------&lt;/cc&gt;<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    *    &lt;cs&gt;[MySection]&lt;/cs&gt;<a name="line.927"></a>
 <span class="sourceLineNo">928</span>    *<a name="line.928"></a>
-<span class="sourceLineNo">929</span>    *    &lt;jc&gt;// Get Rest-Resources from manifest file.&lt;/jc&gt;<a name="line.929"></a>
-<span class="sourceLineNo">930</span>    *    String[] &lt;jv&gt;restResources&lt;/jv&gt; = Microservice.&lt;jsm&gt;getManifest&lt;/jsm&gt;().getStringArray(&lt;js&gt;"Rest-Resources"&lt;/js&gt;);<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    * &lt;/p&gt;<a name="line.931"></a>
-<span class="sourceLineNo">932</span>    *<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    * @return The manifest file from the main jar, or &lt;jk&gt;null&lt;/jk&gt; if the manifest file could not be retrieved.<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    */<a name="line.934"></a>
-<span class="sourceLineNo">935</span>   public ManifestFile getManifest() {<a name="line.935"></a>
-<span class="sourceLineNo">936</span>      return manifest;<a name="line.936"></a>
-<span class="sourceLineNo">937</span>   }<a name="line.937"></a>
-<span class="sourceLineNo">938</span><a name="line.938"></a>
-<span class="sourceLineNo">939</span>   /**<a name="line.939"></a>
-<span class="sourceLineNo">940</span>    * Returns the variable resolver for resolving variables in strings and files.<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    *<a name="line.941"></a>
-<span class="sourceLineNo">942</span>    * &lt;p&gt;<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    * Variables can be controlled by the following methods:<a name="line.943"></a>
-<span class="sourceLineNo">944</span>    * &lt;ul class='javatree'&gt;<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    *    &lt;li class='jm'&gt;{@link Builder#vars(Class...)}<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    *    &lt;li class='jm'&gt;{@link Builder#varBean(Class,Object)}<a name="line.946"></a>
-<span class="sourceLineNo">947</span>    * &lt;/ul&gt;<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    *<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    * @return The VarResolver used by this Microservice, or &lt;jk&gt;null&lt;/jk&gt; if it was never created.<a name="line.949"></a>
-<span class="sourceLineNo">950</span>    */<a name="line.950"></a>
-<span class="sourceLineNo">951</span>   public VarResolver getVarResolver() {<a name="line.951"></a>
-<span class="sourceLineNo">952</span>      return varResolver;<a name="line.952"></a>
-<span class="sourceLineNo">953</span>   }<a name="line.953"></a>
-<span class="sourceLineNo">954</span><a name="line.954"></a>
-<span class="sourceLineNo">955</span>   /**<a name="line.955"></a>
-<span class="sourceLineNo">956</span>    * Returns the logger for this microservice.<a name="line.956"></a>
-<span class="sourceLineNo">957</span>    *<a name="line.957"></a>
-<span class="sourceLineNo">958</span>    * @return The logger for this microservice.<a name="line.958"></a>
-<span class="sourceLineNo">959</span>    */<a name="line.959"></a>
-<span class="sourceLineNo">960</span>   public Logger getLogger() {<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      return logger;<a name="line.961"></a>
-<span class="sourceLineNo">962</span>   }<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>    * Executes a console command.<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    *<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    * @param args<a name="line.967"></a>
-<span class="sourceLineNo">968</span>    *    The command arguments.<a name="line.968"></a>
-<span class="sourceLineNo">969</span>    *    &lt;br&gt;The first entry in the arguments is always the command name.<a name="line.969"></a>
-<span class="sourceLineNo">970</span>    * @param in Console input.<a name="line.970"></a>
-<span class="sourceLineNo">971</span>    * @param out Console output.<a name="line.971"></a>
-<span class="sourceLineNo">972</span>    * @return &lt;jk&gt;true&lt;/jk&gt; if the command returned &lt;jk&gt;true&lt;/jk&gt; meaning the console thread should exit.<a name="line.972"></a>
-<span class="sourceLineNo">973</span>    */<a name="line.973"></a>
-<span class="sourceLineNo">974</span>   public boolean executeCommand(Args args, Scanner in, PrintWriter out) {<a name="line.974"></a>
-<span class="sourceLineNo">975</span>      ConsoleCommand cc = consoleCommandMap.get(args.getArg(0));<a name="line.975"></a>
-<span class="sourceLineNo">976</span>      if (cc == null) {<a name="line.976"></a>
-<span class="sourceLineNo">977</span>         out.println(messages.getString("UnknownCommand"));<a name="line.977"></a>
-<span class="sourceLineNo">978</span>      } else {<a name="line.978"></a>
-<span class="sourceLineNo">979</span>         try {<a name="line.979"></a>
-<span class="sourceLineNo">980</span>            return cc.execute(in, out, args);<a name="line.980"></a>
-<span class="sourceLineNo">981</span>         } catch (Exception e) {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>            e.printStackTrace(out);<a name="line.982"></a>
-<span class="sourceLineNo">983</span>         }<a name="line.983"></a>
-<span class="sourceLineNo">984</span>      }<a name="line.984"></a>
-<span class="sourceLineNo">985</span>      return false;<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>    * Convenience method for executing a console command directly.<a name="line.989"></a>
-<span class="sourceLineNo">990</span>    *<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    * &lt;p&gt;<a name="line.991"></a>
-<span class="sourceLineNo">992</span>    * Allows you to execute a console command outside the console by simulating input and output.<a name="line.992"></a>
-<span class="sourceLineNo">993</span>    *<a name="line.993"></a>
-<span class="sourceLineNo">994</span>    * @param command The command name to execute.<a name="line.994"></a>
-<span class="sourceLineNo">995</span>    * @param input Optional input to the command.  Can be &lt;jk&gt;null&lt;/jk&gt;.<a name="line.995"></a>
-<span class="sourceLineNo">996</span>    * @param args Optional command arguments to pass to the command.<a name="line.996"></a>
-<span class="sourceLineNo">997</span>    * @return The command output.<a name="line.997"></a>
-<span class="sourceLineNo">998</span>    */<a name="line.998"></a>
-<span class="sourceLineNo">999</span>   public String executeCommand(String command, String input, Object...args) {<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>      StringWriter sw = new StringWriter();<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>      List&lt;String&gt; l = list();<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>      l.add(command);<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>      for (Object a : args)<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>         l.add(stringify(a));<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>      Args args2 = new Args(l.toArray(new String[l.size()]));<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>      try (Scanner in = new Scanner(input); PrintWriter out = new PrintWriter(sw)) {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>         executeCommand(args2, in, out);<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>      }<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>      return sw.toString();<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>   }<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span><a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>   /**<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>    * Joins the application with the current thread.<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>    *<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>    * &lt;p&gt;<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>    * Default implementation is a no-op.<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>    *<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>    * @return This object.<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>    * @throws Exception Error occurred<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    */<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>   public Microservice join() throws Exception {<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>      return this;<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>   }<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span><a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>   /**<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    * Stop this application.<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>    *<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    * &lt;p&gt;<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>    * Overridden methods MUST call this method LAST so that the {@link MicroserviceListener#onStop(Microservice)} method is called.<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    *<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>    * @return This object.<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>    * @throws Exception Error occurred<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>    */<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>   public Microservice stop() throws Exception {<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>      listener.onStop(this);<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      return this;<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>   }<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span><a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>   /**<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    * Stops the console (if it's started) and calls {@link System#exit(int)}.<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    *<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>    * @throws Exception Error occurred<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>    */<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>   public void exit() throws Exception {<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      try {<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>         stopConsole();<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>      } catch (Exception e) {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>         e.printStackTrace();<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>      }<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>      System.exit(0);<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>   }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span><a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>   /**<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>    * Kill the JVM by calling &lt;c&gt;System.exit(2);&lt;/c&gt;.<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    */<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>   public void kill() {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>      // This triggers the shutdown hook.<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>      System.exit(2);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>   }<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span><a name="line.1060"></a>
-<span class="sourceLineNo">1061</span><a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>   // Other methods<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span><a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>   /**<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    * Returns the console commands associated with this microservice.<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    *<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>    * @return The console commands associated with this microservice as an unmodifiable map.<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    */<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>   public final Map&lt;String,ConsoleCommand&gt; getConsoleCommands() {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      return consoleCommandMap;<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>   }<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span><a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>   /**<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    * Returns the console reader.<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    *<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    * &lt;p&gt;<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    * Subclasses can override this method to provide their own console input.<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    *<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    * @return The console reader.  Never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    */<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>   protected Scanner getConsoleReader() {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>      return consoleReader;<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>   }<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span><a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>   /**<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    * Returns the console writer.<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    *<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    * &lt;p&gt;<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>    * Subclasses can override this method to provide their own console output.<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>    *<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    * @return The console writer.  Never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    */<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>   protected PrintWriter getConsoleWriter() {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      return consoleWriter;<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>   }<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span><a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>   /**<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>    * Prints a localized message to the console writer.<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    *<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    * &lt;p&gt;<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    * Ignored if &lt;js&gt;"Console/enabled"&lt;/js&gt; is &lt;jk&gt;false&lt;/jk&gt;.<a name="line.1103"></a>
+<span class="sourceLineNo">929</span>    *    &lt;cc&gt;# An integer&lt;/cc&gt;<a name="line.929"></a>
+<span class="sourceLineNo">930</span>    *    &lt;ck&gt;anInt&lt;/ck&gt; = 1<a name="line.930"></a>
+<span class="sourceLineNo">931</span>    *<a name="line.931"></a>
+<span class="sourceLineNo">932</span>    *    &lt;cc&gt;# A boolean&lt;/cc&gt;<a name="line.932"></a>
+<span class="sourceLineNo">933</span>    *    &lt;ck&gt;aBoolean&lt;/ck&gt; = true<a name="line.933"></a>
+<span class="sourceLineNo">934</span>    *<a name="line.934"></a>
+<span class="sourceLineNo">935</span>    *    &lt;cc&gt;# An int array&lt;/cc&gt;<a name="line.935"></a>
+<span class="sourceLineNo">936</span>    *    &lt;ck&gt;anIntArray&lt;/ck&gt; = 1,2,3<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    *<a name="line.937"></a>
+<span class="sourceLineNo">938</span>    *    &lt;cc&gt;# A POJO that can be converted from a String&lt;/cc&gt;<a name="line.938"></a>
+<span class="sourceLineNo">939</span>    *    &lt;ck&gt;aURL&lt;/ck&gt; = http://foo<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    *<a name="line.940"></a>
+<span class="sourceLineNo">941</span>    *    &lt;cc&gt;# A POJO that can be converted from JSON&lt;/cc&gt;<a name="line.941"></a>
+<span class="sourceLineNo">942</span>    *    &lt;ck&gt;aBean&lt;/ck&gt; = {foo:'bar',baz:123}<a name="line.942"></a>
+<span class="sourceLineNo">943</span>    *<a name="line.943"></a>
+<span class="sourceLineNo">944</span>    *    &lt;cc&gt;# A system property&lt;/cc&gt;<a name="line.944"></a>
+<span class="sourceLineNo">945</span>    *    &lt;ck&gt;locale&lt;/ck&gt; = $S{java.locale, en_US}<a name="line.945"></a>
+<span class="sourceLineNo">946</span>    *<a name="line.946"></a>
+<span class="sourceLineNo">947</span>    *    &lt;cc&gt;# An environment variable&lt;/cc&gt;<a name="line.947"></a>
+<span class="sourceLineNo">948</span>    *    &lt;ck&gt;path&lt;/ck&gt; = $E{PATH, unknown}<a name="line.948"></a>
+<span class="sourceLineNo">949</span>    *<a name="line.949"></a>
+<span class="sourceLineNo">950</span>    *    &lt;cc&gt;# A manifest file entry&lt;/cc&gt;<a name="line.950"></a>
+<span class="sourceLineNo">951</span>    *    &lt;ck&gt;mainClass&lt;/ck&gt; = $MF{Main-Class}<a name="line.951"></a>
+<span class="sourceLineNo">952</span>    *<a name="line.952"></a>
+<span class="sourceLineNo">953</span>    *    &lt;cc&gt;# Another value in this config file&lt;/cc&gt;<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    *    &lt;ck&gt;sameAsAnInt&lt;/ck&gt; = $C{MySection/anInt}<a name="line.954"></a>
+<span class="sourceLineNo">955</span>    *<a name="line.955"></a>
+<span class="sourceLineNo">956</span>    *    &lt;cc&gt;# A command-line argument in the form "myarg=foo"&lt;/cc&gt;<a name="line.956"></a>
+<span class="sourceLineNo">957</span>    *    &lt;ck&gt;myArg&lt;/ck&gt; = $A{myarg}<a name="line.957"></a>
+<span class="sourceLineNo">958</span>    *<a name="line.958"></a>
+<span class="sourceLineNo">959</span>    *    &lt;cc&gt;# The first command-line argument&lt;/cc&gt;<a name="line.959"></a>
+<span class="sourceLineNo">960</span>    *    &lt;ck&gt;firstArg&lt;/ck&gt; = $A{0}<a name="line.960"></a>
+<span class="sourceLineNo">961</span>    *<a name="line.961"></a>
+<span class="sourceLineNo">962</span>    *    &lt;cc&gt;# Look for system property, or env var if that doesn't exist, or command-line arg if that doesn't exist.&lt;/cc&gt;<a name="line.962"></a>
+<span class="sourceLineNo">963</span>    *    &lt;ck&gt;nested&lt;/ck&gt; = $S{mySystemProperty,$E{MY_ENV_VAR,$A{0}}}<a name="line.963"></a>
+<span class="sourceLineNo">964</span>    *<a name="line.964"></a>
+<span class="sourceLineNo">965</span>    *    &lt;cc&gt;# A POJO with embedded variables&lt;/cc&gt;<a name="line.965"></a>
+<span class="sourceLineNo">966</span>    *    &lt;ck&gt;aBean2&lt;/ck&gt; = {foo:'$A{0}',baz:$C{MySection/anInt}}<a name="line.966"></a>
+<span class="sourceLineNo">967</span>    * &lt;/p&gt;<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    *<a name="line.968"></a>
+<span class="sourceLineNo">969</span>    * &lt;p class='bjava'&gt;<a name="line.969"></a>
+<span class="sourceLineNo">970</span>    *    &lt;jc&gt;// Java code for accessing config entries above.&lt;/jc&gt;<a name="line.970"></a>
+<span class="sourceLineNo">971</span>    *    Config &lt;jv&gt;config&lt;/jv&gt; = getConfig();<a name="line.971"></a>
+<span class="sourceLineNo">972</span>    *<a name="line.972"></a>
+<span class="sourceLineNo">973</span>    *    &lt;jk&gt;int&lt;/jk&gt; &lt;jv&gt;anInt&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/anInt"&lt;/js&gt;).asInteger().orElse(-1);<a name="line.973"></a>
+<span class="sourceLineNo">974</span>    *    &lt;jk&gt;boolean&lt;/jk&gt; &lt;jv&gt;aBoolean&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/aBoolean"&lt;/js&gt;).asBoolean().orElse(&lt;jk&gt;false&lt;/jk&gt;);<a name="line.974"></a>
+<span class="sourceLineNo">975</span>    *    &lt;jk&gt;int&lt;/jk&gt;[] &lt;jv&gt;anIntArray&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/anIntArray"&lt;/js&gt;).as(&lt;jk&gt;int&lt;/jk&gt;[].&lt;jk&gt;class&lt;/jk&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.975"></a>
+<span class="sourceLineNo">976</span>    *    URL &lt;jv&gt;aURL&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/aURL"&lt;/js&gt;).as(URL.&lt;jk&gt;class&lt;/jk&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.976"></a>
+<span class="sourceLineNo">977</span>    *    MyBean &lt;jv&gt;aBean&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/aBean"&lt;/js&gt;).as(MyBean.&lt;jk&gt;class&lt;/jk&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.977"></a>
+<span class="sourceLineNo">978</span>    *    Locale &lt;jv&gt;locale&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/locale"&lt;/js&gt;).as(Locale.&lt;jk&gt;class&lt;/jk&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.978"></a>
+<span class="sourceLineNo">979</span>    *    String &lt;jv&gt;path&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/path"&lt;/js&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.979"></a>
+<span class="sourceLineNo">980</span>    *    String &lt;jv&gt;mainClass&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/mainClass"&lt;/js&gt;).orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.980"></a>
+<span class="sourceLineNo">981</span>    *    &lt;jk&gt;int&lt;/jk&gt; &lt;jv&gt;sameAsAnInt&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.get(&lt;js&gt;"MySection/sameAsAnInt"&lt;/js&gt;).asInteger().orElse(&lt;jk&gt;null&lt;/jk&gt;);<a name="line.981"></a>
+<span class="sourceLineNo">982</span>    *    String &lt;jv&gt;myArg&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.getString(&lt;js&gt;"MySection/myArg"&lt;/js&gt;);<a name="line.982"></a>
+<span class="sourceLineNo">983</span>    *    String &lt;jv&gt;firstArg&lt;/jv&gt; = &lt;jv&gt;config&lt;/jv&gt;.getString(&lt;js&gt;"MySection/firstArg"&lt;/js&gt;);<a name="line.983"></a>
+<span class="sourceLineNo">984</span>    * &lt;/p&gt;<a name="line.984"></a>
+<span class="sourceLineNo">985</span>    *<a name="line.985"></a>
+<span class="sourceLineNo">986</span>    * @return The config file for this application, or &lt;jk&gt;null&lt;/jk&gt; if no config file is configured.<a name="line.986"></a>
+<span class="sourceLineNo">987</span>    */<a name="line.987"></a>
+<span class="sourceLineNo">988</span>   public Config getConfig() {<a name="line.988"></a>
+<span class="sourceLineNo">989</span>      return config;<a name="line.989"></a>
+<span class="sourceLineNo">990</span>   }<a name="line.990"></a>
+<span class="sourceLineNo">991</span><a name="line.991"></a>
+<span class="sourceLineNo">992</span>   /**<a name="line.992"></a>
+<span class="sourceLineNo">993</span>    * Returns the main jar manifest file contents as a simple {@link JsonMap}.<a name="line.993"></a>
+<span class="sourceLineNo">994</span>    *<a name="line.994"></a>
+<span class="sourceLineNo">995</span>    * &lt;p&gt;<a name="line.995"></a>
+<span class="sourceLineNo">996</span>    * This map consists of the contents of {@link Manifest#getMainAttributes()} with the keys and entries converted to<a name="line.996"></a>
+<span class="sourceLineNo">997</span>    * simple strings.<a name="line.997"></a>
+<span class="sourceLineNo">998</span>    * &lt;p&gt;<a name="line.998"></a>
+<span class="sourceLineNo">999</span>    * This method can be called from the class constructor.<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>    *<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>    * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>    * &lt;p class='bjava'&gt;<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>    *    &lt;jc&gt;// Get Main-Class from manifest file.&lt;/jc&gt;<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>    *    String &lt;jv&gt;mainClass&lt;/jv&gt; = Microservice.&lt;jsm&gt;getManifest&lt;/jsm&gt;().getString(&lt;js&gt;"Main-Class"&lt;/js&gt;, &lt;js&gt;"unknown"&lt;/js&gt;);<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>    *<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>    *    &lt;jc&gt;// Get Rest-Resources from manifest file.&lt;/jc&gt;<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>    *    String[] &lt;jv&gt;restResources&lt;/jv&gt; = Microservice.&lt;jsm&gt;getManifest&lt;/jsm&gt;().getStringArray(&lt;js&gt;"Rest-Resources"&lt;/js&gt;);<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>    * &lt;/p&gt;<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    *<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>    * @return The manifest file from the main jar, or &lt;jk&gt;null&lt;/jk&gt; if the manifest file could not be retrieved.<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>    */<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>   public ManifestFile getManifest() {<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>      return manifest;<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>   }<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span><a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>   /**<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>    * Returns the variable resolver for resolving variables in strings and files.<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>    *<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>    * &lt;p&gt;<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>    * Variables can be controlled by the following methods:<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>    * &lt;ul class='javatree'&gt;<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>    *    &lt;li class='jm'&gt;{@link Builder#vars(Class...)}<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>    *    &lt;li class='jm'&gt;{@link Builder#varBean(Class,Object)}<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    * &lt;/ul&gt;<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>    *<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>    * @return The VarResolver used by this Microservice, or &lt;jk&gt;null&lt;/jk&gt; if it was never created.<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>    */<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>   public VarResolver getVarResolver() {<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>      return varResolver;<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>   }<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span><a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>   /**<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>    * Returns the logger for this microservice.<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>    *<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>    * @return The logger for this microservice.<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>    */<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>   public Logger getLogger() {<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      return logger;<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>   }<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span><a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>   /**<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>    * Executes a console command.<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>    *<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>    * @param args<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>    *    The command arguments.<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>    *    &lt;br&gt;The first entry in the arguments is always the command name.<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>    * @param in Console input.<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>    * @param out Console output.<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>    * @return &lt;jk&gt;true&lt;/jk&gt; if the command returned &lt;jk&gt;true&lt;/jk&gt; meaning the console thread should exit.<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>    */<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>   public boolean executeCommand(Args args, Scanner in, PrintWriter out) {<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>      ConsoleCommand cc = consoleCommandMap.get(args.getArg(0));<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>      if (cc == null) {<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>         out.println(messages.getString("UnknownCommand"));<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>      } else {<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>         try {<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>            return cc.execute(in, out, args);<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>         } catch (Exception e) {<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>            e.printStackTrace(out);<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>         }<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>      }<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>      return false;<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>   }<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span><a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>   /**<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    * Convenience method for executing a console command directly.<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>    *<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>    * &lt;p&gt;<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    * Allows you to execute a console command outside the console by simulating input and output.<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>    *<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    * @param command The command name to execute.<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>    * @param input Optional input to the command.  Can be &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    * @param args Optional command arguments to pass to the command.<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    * @return The command output.<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    */<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>   public String executeCommand(String command, String input, Object...args) {<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>      StringWriter sw = new StringWriter();<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>      List&lt;String&gt; l = list();<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      l.add(command);<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>      for (Object a : args)<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>         l.add(stringify(a));<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      Args args2 = new Args(l.toArray(new String[l.size()]));<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>      try (Scanner in = new Scanner(input); PrintWriter out = new PrintWriter(sw)) {<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>         executeCommand(args2, in, out);<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>      }<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      return sw.toString();<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>   }<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span><a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>   /**<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>    * Joins the application with the current thread.<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>    *<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>    * &lt;p&gt;<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    * Default implementation is a no-op.<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>    *<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>    * @return This object.<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>    * @throws Exception Error occurred<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>    */<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>   public Microservice join() throws Exception {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      return this;<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>   }<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span><a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>   /**<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    * Stop this application.<a name="line.1103"></a>
 <span class="sourceLineNo">1104</span>    *<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    * @param mb The message bundle containing the message.<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    * @param messageKey The message key.<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    * @param args Optional {@link MessageFormat}-style arguments.<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    */<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>   public void out(Messages mb, String messageKey, Object...args) {<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>      String msg = mb.getString(messageKey, args);<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>      if (consoleEnabled)<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>         getConsoleWriter().println(msg);<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>      log(Level.INFO, msg);<a name="line.1113"></a>
+<span class="sourceLineNo">1105</span>    * &lt;p&gt;<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>    * Overridden methods MUST call this method LAST so that the {@link MicroserviceListener#onStop(Microservice)} method is called.<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>    *<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    * @return This object.<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    * @throws Exception Error occurred<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>    */<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>   public Microservice stop() throws Exception {<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>      listener.onStop(this);<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>      return this;<a name="line.1113"></a>
 <span class="sourceLineNo">1114</span>   }<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>    * Prints a localized message to STDERR.<a name="line.1117"></a>
+<span class="sourceLineNo">1117</span>    * Stops the console (if it's started) and calls {@link System#exit(int)}.<a name="line.1117"></a>
 <span class="sourceLineNo">1118</span>    *<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>    * &lt;p&gt;<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>    * Ignored if &lt;js&gt;"Console/enabled"&lt;/js&gt; is &lt;jk&gt;false&lt;/jk&gt;.<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>    *<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    * @param mb The message bundle containing the message.<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    * @param messageKey The message key.<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    * @param args Optional {@link MessageFormat}-style arguments.<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    */<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>   public void err(Messages mb, String messageKey, Object...args) {<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>      String msg = mb.getString(messageKey, args);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>      if (consoleEnabled)<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>         System.err.println(mb.getString(messageKey, args));  // NOT DEBUG<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>      log(Level.SEVERE, msg);<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>   }<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span><a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>   /**<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>    * Logs a message to the log file.<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>    *<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>    * @param level The log level.<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    * @param message The message text.<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>    * @param args Optional {@link MessageFormat}-style arguments.<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    */<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>   protected void log(Level level, String message, Object...args) {<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>      String msg = args.length == 0 ? message : MessageFormat.format(message, args);<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>      getLogger().log(level, msg);<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>   }<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span><a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>   @Override /* ConfigChangeListener */<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>   public void onConfigChange(ConfigEvents events) {<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      listener.onConfigChange(this, events);<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>   }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>}<a name="line.1149"></a>
+<span class="sourceLineNo">1119</span>    * @throws Exception Error occurred<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>    */<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>   public void exit() throws Exception {<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>      try {<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>         stopConsole();<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>      } catch (Exception e) {<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>         e.printStackTrace();<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>      }<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>      System.exit(0);<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>    * Kill the JVM by calling &lt;c&gt;System.exit(2);&lt;/c&gt;.<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    */<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>   public void kill() {<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>      // This triggers the shutdown hook.<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>      System.exit(2);<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>   }<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span><a name="line.1137"></a>
+<span class="sourceLineNo">1138</span><a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>   // Other methods<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span><a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>   /**<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>    * Returns the console commands associated with this microservice.<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>    *<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>    * @return The console commands associated with this microservice as an unmodifiable map.<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>    */<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>   public final Map&lt;String,ConsoleCommand&gt; getConsoleCommands() {<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>      return consoleCommandMap;<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>    * Returns the console reader.<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>    *<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>    * &lt;p&gt;<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>    * Subclasses can override this method to provide their own console input.<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>    *<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>    * @return The console reader.  Never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>    */<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>   protected Scanner getConsoleReader() {<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>      return consoleReader;<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>   }<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>    * Returns the console writer.<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>    *<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>    * &lt;p&gt;<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>    * Subclasses can override this method to provide their own console output.<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>    *<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>    * @return The console writer.  Never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>    */<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>   protected PrintWriter getConsoleWriter() {<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>      return consoleWriter;<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>   }<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span><a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>   /**<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>    * Prints a localized message to the console writer.<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>    *<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    * &lt;p&gt;<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>    * Ignored if &lt;js&gt;"Console/enabled"&lt;/js&gt; is &lt;jk&gt;false&lt;/jk&gt;.<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>    *<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>    * @param mb The message bundle containing the message.<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>    * @param messageKey The message key.<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>    * @param args Optional {@link MessageFormat}-style arguments.<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>    */<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>   public void out(Messages mb, String messageKey, Object...args) {<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>      String msg = mb.getString(messageKey, args);<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>      if (consoleEnabled)<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>         getConsoleWriter().println(msg);<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>      log(Level.INFO, msg);<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>    * Prints a localized message to STDERR.<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>    *<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    * &lt;p&gt;<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    * Ignored if &lt;js&gt;"Console/enabled"&lt;/js&gt; is &lt;jk&gt;false&lt;/jk&gt;.<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>    *<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>    * @param mb The message bundle containing the message.<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>    * @param messageKey The message key.<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>    * @param args Optional {@link MessageFormat}-style arguments.<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    */<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>   public void err(Messages mb, String messageKey, Object...args) {<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>      String msg = mb.getString(messageKey, args);<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>      if (consoleEnabled)<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>         System.err.println(mb.getString(messageKey, args));  // NOT DEBUG<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>      log(Level.SEVERE, msg);<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>   }<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span><a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>   /**<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    * Logs a message to the log file.<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>    *<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>    * @param level The log level.<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    * @param message The message text.<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    * @param args Optional {@link MessageFormat}-style arguments.<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>    */<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>   protected void log(Level level, String message, Object...args) {<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>      String msg = args.length == 0 ? message : MessageFormat.format(message, args);<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      getLogger().log(level, msg);<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>   }<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span><a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>   @Override /* ConfigChangeListener */<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>   public void onConfigChange(ConfigEvents events) {<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>      listener.onConfigChange(this, events);<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>   }<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>}<a name="line.1226"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/resources/LogEntryFormatter.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/resources/LogEntryFormatter.html
new file mode 100644
index 0000000..2c68ce3
--- /dev/null
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/resources/LogEntryFormatter.html
@@ -0,0 +1,340 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../javadoc.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>// ***************************************************************************************************************************<a name="line.1"></a>
+<span class="sourceLineNo">002</span>// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *<a name="line.2"></a>
+<span class="sourceLineNo">003</span>// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *<a name="line.3"></a>
+<span class="sourceLineNo">004</span>// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *<a name="line.4"></a>
+<span class="sourceLineNo">005</span>// * with the License.  You may obtain a copy of the License at                                                              *<a name="line.5"></a>
+<span class="sourceLineNo">006</span>// *                                                                                                                         *<a name="line.6"></a>
+<span class="sourceLineNo">007</span>// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *<a name="line.7"></a>
+<span class="sourceLineNo">008</span>// *                                                                                                                         *<a name="line.8"></a>
+<span class="sourceLineNo">009</span>// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *<a name="line.9"></a>
+<span class="sourceLineNo">010</span>// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *<a name="line.10"></a>
+<span class="sourceLineNo">011</span>// * specific language governing permissions and limitations under the License.                                              *<a name="line.11"></a>
+<span class="sourceLineNo">012</span>// ***************************************************************************************************************************<a name="line.12"></a>
+<span class="sourceLineNo">013</span>package org.apache.juneau.microservice.resources;<a name="line.13"></a>
+<span class="sourceLineNo">014</span><a name="line.14"></a>
+<span class="sourceLineNo">015</span>import static org.apache.juneau.internal.CollectionUtils.*;<a name="line.15"></a>
+<span class="sourceLineNo">016</span><a name="line.16"></a>
+<span class="sourceLineNo">017</span>import java.text.*;<a name="line.17"></a>
+<span class="sourceLineNo">018</span>import java.util.*;<a name="line.18"></a>
+<span class="sourceLineNo">019</span>import java.util.concurrent.*;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.util.concurrent.atomic.*;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.util.logging.*;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.logging.Formatter;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.regex.*;<a name="line.23"></a>
+<span class="sourceLineNo">024</span><a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.juneau.internal.*;<a name="line.25"></a>
+<span class="sourceLineNo">026</span><a name="line.26"></a>
+<span class="sourceLineNo">027</span>/**<a name="line.27"></a>
+<span class="sourceLineNo">028</span> * Log entry formatter.<a name="line.28"></a>
+<span class="sourceLineNo">029</span> *<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * &lt;p&gt;<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * Uses three simple parameter for configuring log entry formats:<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * &lt;ul class='spaced-list'&gt;<a name="line.32"></a>
+<span class="sourceLineNo">033</span> *    &lt;li&gt;<a name="line.33"></a>
+<span class="sourceLineNo">034</span> *       &lt;c&gt;dateFormat&lt;/c&gt; - A {@link SimpleDateFormat} string describing the format for dates.<a name="line.34"></a>
+<span class="sourceLineNo">035</span> *    &lt;li&gt;<a name="line.35"></a>
+<span class="sourceLineNo">036</span> *       &lt;c&gt;format&lt;/c&gt; - A string with &lt;c&gt;{...}&lt;/c&gt; replacement variables representing predefined fields.<a name="line.36"></a>
+<span class="sourceLineNo">037</span> *    &lt;li&gt;<a name="line.37"></a>
+<span class="sourceLineNo">038</span> *       &lt;c&gt;useStackTraceHashes&lt;/c&gt; - A setting that causes duplicate stack traces to be replaced with 8-character<a name="line.38"></a>
+<span class="sourceLineNo">039</span> *        hash strings.<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * &lt;/ul&gt;<a name="line.40"></a>
+<span class="sourceLineNo">041</span> *<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * &lt;p&gt;<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * This class converts the format strings into a regular expression that can be used to parse the resulting log file.<a name="line.43"></a>
+<span class="sourceLineNo">044</span> */<a name="line.44"></a>
+<span class="sourceLineNo">045</span>public class LogEntryFormatter extends Formatter {<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>   private ConcurrentHashMap&lt;String,AtomicInteger&gt; hashes;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>   private DateFormat df;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>   private String format;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>   private Pattern rePattern;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>   private Map&lt;String,Integer&gt; fieldIndexes;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>   /**<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    * Create a new formatter.<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    *<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    * @param format<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    *    The log entry format.  e.g. &lt;js&gt;"[{date} {level}] {msg}%n"&lt;/js&gt;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    *    The string can contain any of the following variables:<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    *    &lt;ol&gt;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    *       &lt;li&gt;&lt;js&gt;"{date}"&lt;/js&gt; - The date, formatted per &lt;js&gt;"Logging/dateFormat"&lt;/js&gt;.<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    *       &lt;li&gt;&lt;js&gt;"{class}"&lt;/js&gt; - The class name.<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    *       &lt;li&gt;&lt;js&gt;"{method}"&lt;/js&gt; - The method name.<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    *       &lt;li&gt;&lt;js&gt;"{logger}"&lt;/js&gt; - The logger name.<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    *       &lt;li&gt;&lt;js&gt;"{level}"&lt;/js&gt; - The log level name.<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    *       &lt;li&gt;&lt;js&gt;"{msg}"&lt;/js&gt; - The log message.<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    *       &lt;li&gt;&lt;js&gt;"{threadid}"&lt;/js&gt; - The thread ID.<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    *       &lt;li&gt;&lt;js&gt;"{exception}"&lt;/js&gt; - The localized exception message.<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    *    &lt;/ol&gt;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    * @param dateFormat<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    *    The {@link SimpleDateFormat} format to use for dates.  e.g. &lt;js&gt;"yyyy.MM.dd hh:mm:ss"&lt;/js&gt;.<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    * @param useStackTraceHashes<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    *    If &lt;jk&gt;true&lt;/jk&gt;, only print unique stack traces once and then refer to them by a simple 8 character hash<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    *    identifier.<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    */<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   public LogEntryFormatter(String format, String dateFormat, boolean useStackTraceHashes) {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      this.df = new SimpleDateFormat(dateFormat);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      if (useStackTraceHashes)<a name="line.77"></a>
+<span class="sourceLineNo">078</span>         hashes = new ConcurrentHashMap&lt;&gt;();<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>      fieldIndexes = new HashMap&lt;&gt;();<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>      format = format<a name="line.82"></a>
+<span class="sourceLineNo">083</span>         .replaceAll("\\{date\\}", "%1\\$s")<a name="line.83"></a>
+<span class="sourceLineNo">084</span>         .replaceAll("\\{class\\}", "%2\\$s")<a name="line.84"></a>
+<span class="sourceLineNo">085</span>         .replaceAll("\\{method\\}", "%3\\$s")<a name="line.85"></a>
+<span class="sourceLineNo">086</span>         .replaceAll("\\{logger\\}", "%4\\$s")<a name="line.86"></a>
+<span class="sourceLineNo">087</span>         .replaceAll("\\{level\\}", "%5\\$s")<a name="line.87"></a>
+<span class="sourceLineNo">088</span>         .replaceAll("\\{msg\\}", "%6\\$s")<a name="line.88"></a>
+<span class="sourceLineNo">089</span>         .replaceAll("\\{threadid\\}", "%7\\$s")<a name="line.89"></a>
+<span class="sourceLineNo">090</span>         .replaceAll("\\{exception\\}", "%8\\$s");<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>      this.format = format;<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>      // Construct a regular expression to match this log entry.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      int index = 1;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      StringBuilder re = new StringBuilder();<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      int S1 = 1; // Looking for %<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      int S2 = 2; // Found %, looking for number.<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      int S3 = 3; // Found number, looking for $.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      int S4 = 4; // Found $, looking for s.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      int state = 1;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      int i1 = 0;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      for (int i = 0; i &lt; format.length(); i++) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>         char c = format.charAt(i);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>         if (state == S1) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>            if (c == '%')<a name="line.106"></a>
+<span class="sourceLineNo">107</span>               state = S2;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>            else {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>               if (! (Character.isLetterOrDigit(c) || Character.isWhitespace(c)))<a name="line.109"></a>
+<span class="sourceLineNo">110</span>                  re.append('\\');<a name="line.110"></a>
+<span class="sourceLineNo">111</span>               re.append(c);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>            }<a name="line.112"></a>
+<span class="sourceLineNo">113</span>         } else if (state == S2) {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>            if (Character.isDigit(c)) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>               i1 = i;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>               state = S3;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>            } else {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>               re.append("\\%").append(c);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>               state = S1;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>            }<a name="line.120"></a>
+<span class="sourceLineNo">121</span>         } else if (state == S3) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>            if (c == '$') {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>               state = S4;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>            } else {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>               re.append("\\%").append(format.substring(i1, i));<a name="line.125"></a>
+<span class="sourceLineNo">126</span>               state = S1;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>            }<a name="line.127"></a>
+<span class="sourceLineNo">128</span>         } else if (state == S4) {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>            if (c == 's') {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>               int group = Integer.parseInt(format.substring(i1, i-1));<a name="line.130"></a>
+<span class="sourceLineNo">131</span>               switch (group) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>                  case 1:<a name="line.132"></a>
+<span class="sourceLineNo">133</span>                     fieldIndexes.put("date", index++);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>                     re.append("(" + dateFormat.replaceAll("[mHhsSdMy]", "\\\\d").replaceAll("\\.", "\\\\.") + ")");<a name="line.134"></a>
+<span class="sourceLineNo">135</span>                     break;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>                  case 2:<a name="line.136"></a>
+<span class="sourceLineNo">137</span>                     fieldIndexes.put("class", index++);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>                     re.append("([\\p{javaJavaIdentifierPart}\\.]+)");<a name="line.138"></a>
+<span class="sourceLineNo">139</span>                     break;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>                  case 3:<a name="line.140"></a>
+<span class="sourceLineNo">141</span>                     fieldIndexes.put("method", index++);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>                     re.append("([\\p{javaJavaIdentifierPart}\\.]+)");<a name="line.142"></a>
+<span class="sourceLineNo">143</span>                     break;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>                  case 4:<a name="line.144"></a>
+<span class="sourceLineNo">145</span>                     fieldIndexes.put("logger", index++);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>                     re.append("([\\w\\d\\.\\_]+)");<a name="line.146"></a>
+<span class="sourceLineNo">147</span>                     break;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>                  case 5:<a name="line.148"></a>
+<span class="sourceLineNo">149</span>                     fieldIndexes.put("level", index++);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>                     re.append("(SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST)");<a name="line.150"></a>
+<span class="sourceLineNo">151</span>                     break;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>                  case 6:<a name="line.152"></a>
+<span class="sourceLineNo">153</span>                     fieldIndexes.put("msg", index++);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>                     re.append("(.*)");<a name="line.154"></a>
+<span class="sourceLineNo">155</span>                     break;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>                  case 7:<a name="line.156"></a>
+<span class="sourceLineNo">157</span>                     fieldIndexes.put("threadid", index++);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>                     re.append("(\\\\d+)");<a name="line.158"></a>
+<span class="sourceLineNo">159</span>                     break;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>                  case 8:<a name="line.160"></a>
+<span class="sourceLineNo">161</span>                     fieldIndexes.put("exception", index++);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>                     re.append("(.*)");<a name="line.162"></a>
+<span class="sourceLineNo">163</span>                     break;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>                  default: // Fall through.<a name="line.164"></a>
+<span class="sourceLineNo">165</span>               }<a name="line.165"></a>
+<span class="sourceLineNo">166</span>            } else {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>               re.append("\\%").append(format.substring(i1, i));<a name="line.167"></a>
+<span class="sourceLineNo">168</span>            }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>            state = S1;<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><a name="line.172"></a>
+<span class="sourceLineNo">173</span>      // The log parser<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      String sre = re.toString();<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      if (sre.endsWith("\\%n"))<a name="line.175"></a>
+<span class="sourceLineNo">176</span>         sre = sre.substring(0, sre.length()-3);<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>      // Replace instances of %n.<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      sre = sre.replaceAll("\\\\%n", "\\\\n");<a name="line.179"></a>
+<span class="sourceLineNo">180</span><a name="line.180"></a>
+<span class="sourceLineNo">181</span>      rePattern = Pattern.compile(sre);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      fieldIndexes = mapFrom(fieldIndexes);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   }<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>    * Returns the regular expression pattern used for matching log entries.<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    *<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    * @return The regular expression pattern used for matching log entries.<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    */<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   public Pattern getLogEntryPattern() {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      return rePattern;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>   /**<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    * Returns the {@link DateFormat} used for matching dates.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    *<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    * @return The {@link DateFormat} used for matching dates.<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    */<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   public DateFormat getDateFormat() {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      return df;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   }<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>   /**<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    * Given a matcher that has matched the pattern specified by {@link #getLogEntryPattern()}, returns the field value<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    * from the match.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    *<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    * @param fieldName<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    *    The field name.<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    *    Possible values are:<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    *    &lt;ul&gt;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    *       &lt;li&gt;&lt;js&gt;"date"&lt;/js&gt;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    *       &lt;li&gt;&lt;js&gt;"class"&lt;/js&gt;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    *       &lt;li&gt;&lt;js&gt;"method"&lt;/js&gt;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    *       &lt;li&gt;&lt;js&gt;"logger"&lt;/js&gt;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    *       &lt;li&gt;&lt;js&gt;"level"&lt;/js&gt;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    *       &lt;li&gt;&lt;js&gt;"msg"&lt;/js&gt;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    *       &lt;li&gt;&lt;js&gt;"threadid"&lt;/js&gt;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    *       &lt;li&gt;&lt;js&gt;"exception"&lt;/js&gt;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    *    &lt;/ul&gt;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    * @param m The matcher.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    * @return The field value, or &lt;jk&gt;null&lt;/jk&gt; if the specified field does not exist.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    */<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   public String getField(String fieldName, Matcher m) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      Integer i = fieldIndexes.get(fieldName);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      return (i == null ? null : m.group(i));<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>   @Override /* Formatter */<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   public String format(LogRecord r) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      String msg = formatMessage(r);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      Throwable t = r.getThrown();<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      String hash = null;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      int c = 0;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      if (hashes != null &amp;&amp; t != null) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>         hash = hashCode(t);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>         hashes.putIfAbsent(hash, new AtomicInteger(0));<a name="line.236"></a>
+<span class="sourceLineNo">237</span>         c = hashes.get(hash).incrementAndGet();<a name="line.237"></a>
+<span class="sourceLineNo">238</span>         if (c == 1) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>            msg = '[' + hash + '.' + c + "] " + msg;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>         } else {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>            msg = '[' + hash + '.' + c + "] " + msg + ", " + t.getLocalizedMessage();<a name="line.241"></a>
+<span class="sourceLineNo">242</span>            t = null;<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>      String s = String.format(format,<a name="line.245"></a>
+<span class="sourceLineNo">246</span>         df.format(new Date(r.getMillis())),<a name="line.246"></a>
+<span class="sourceLineNo">247</span>         r.getSourceClassName(),<a name="line.247"></a>
+<span class="sourceLineNo">248</span>         r.getSourceMethodName(),<a name="line.248"></a>
+<span class="sourceLineNo">249</span>         r.getLoggerName(),<a name="line.249"></a>
+<span class="sourceLineNo">250</span>         r.getLevel(),<a name="line.250"></a>
+<span class="sourceLineNo">251</span>         msg,<a name="line.251"></a>
+<span class="sourceLineNo">252</span>         r.getThreadID(),<a name="line.252"></a>
+<span class="sourceLineNo">253</span>         r.getThrown() == null ? "" : r.getThrown().getMessage());<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      if (t != null)<a name="line.254"></a>
+<span class="sourceLineNo">255</span>         s += String.format("%n%s", ThrowableUtils.getStackTrace(r.getThrown()));<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      return s;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   }<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>   private static String hashCode(Throwable t) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      int i = 0;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      while (t != null) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>         for (StackTraceElement e : t.getStackTrace())<a name="line.262"></a>
+<span class="sourceLineNo">263</span>            i ^= e.hashCode();<a name="line.263"></a>
+<span class="sourceLineNo">264</span>         t = t.getCause();<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      }<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      return Integer.toHexString(i);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   }<a name="line.267"></a>
+<span class="sourceLineNo">268</span>}<a name="line.268"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/resources/LogParser.Entry.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/resources/LogParser.Entry.html
new file mode 100644
index 0000000..20e3592
--- /dev/null
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/resources/LogParser.Entry.html
@@ -0,0 +1,296 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../javadoc.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>// ***************************************************************************************************************************<a name="line.1"></a>
+<span class="sourceLineNo">002</span>// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *<a name="line.2"></a>
+<span class="sourceLineNo">003</span>// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *<a name="line.3"></a>
+<span class="sourceLineNo">004</span>// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *<a name="line.4"></a>
+<span class="sourceLineNo">005</span>// * with the License.  You may obtain a copy of the License at                                                              *<a name="line.5"></a>
+<span class="sourceLineNo">006</span>// *                                                                                                                         *<a name="line.6"></a>
+<span class="sourceLineNo">007</span>// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *<a name="line.7"></a>
+<span class="sourceLineNo">008</span>// *                                                                                                                         *<a name="line.8"></a>
+<span class="sourceLineNo">009</span>// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *<a name="line.9"></a>
+<span class="sourceLineNo">010</span>// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *<a name="line.10"></a>
+<span class="sourceLineNo">011</span>// * specific language governing permissions and limitations under the License.                                              *<a name="line.11"></a>
+<span class="sourceLineNo">012</span>// ***************************************************************************************************************************<a name="line.12"></a>
+<span class="sourceLineNo">013</span>package org.apache.juneau.microservice.resources;<a name="line.13"></a>
+<span class="sourceLineNo">014</span><a name="line.14"></a>
+<span class="sourceLineNo">015</span>import java.io.*;<a name="line.15"></a>
+<span class="sourceLineNo">016</span>import java.nio.charset.*;<a name="line.16"></a>
+<span class="sourceLineNo">017</span>import java.text.*;<a name="line.17"></a>
+<span class="sourceLineNo">018</span>import java.util.*;<a name="line.18"></a>
+<span class="sourceLineNo">019</span>import java.util.regex.*;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>/**<a name="line.21"></a>
+<span class="sourceLineNo">022</span> * Utility class for reading log files.<a name="line.22"></a>
+<span class="sourceLineNo">023</span> *<a name="line.23"></a>
+<span class="sourceLineNo">024</span> * &lt;p&gt;<a name="line.24"></a>
+<span class="sourceLineNo">025</span> * Provides the capability of returning splices of log files based on dates and filtering based on thread and logger<a name="line.25"></a>
+<span class="sourceLineNo">026</span> * names.<a name="line.26"></a>
+<span class="sourceLineNo">027</span> */<a name="line.27"></a>
+<span class="sourceLineNo">028</span>public final class LogParser implements Iterable&lt;LogParser.Entry&gt;, Iterator&lt;LogParser.Entry&gt;, Closeable {<a name="line.28"></a>
+<span class="sourceLineNo">029</span>   private BufferedReader br;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>   LogEntryFormatter formatter;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>   Date start, end;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>   Set&lt;String&gt; loggerFilter, severityFilter;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>   String threadFilter;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>   private Entry next;<a name="line.34"></a>
+<span class="sourceLineNo">035</span><a name="line.35"></a>
+<span class="sourceLineNo">036</span>   /**<a name="line.36"></a>
+<span class="sourceLineNo">037</span>    * Constructor.<a name="line.37"></a>
+<span class="sourceLineNo">038</span>    *<a name="line.38"></a>
+<span class="sourceLineNo">039</span>    * @param formatter The log entry formatter.<a name="line.39"></a>
+<span class="sourceLineNo">040</span>    * @param f The log file.<a name="line.40"></a>
+<span class="sourceLineNo">041</span>    * @param start Don't return rows before this date.  If &lt;jk&gt;null&lt;/jk&gt;, start from the beginning of the file.<a name="line.41"></a>
+<span class="sourceLineNo">042</span>    * @param end Don't return rows after this date.  If &lt;jk&gt;null&lt;/jk&gt;, go to the end of the file.<a name="line.42"></a>
+<span class="sourceLineNo">043</span>    * @param thread Only return log entries with this thread name.<a name="line.43"></a>
+<span class="sourceLineNo">044</span>    * @param loggers Only return log entries produced by these loggers (simple class names).<a name="line.44"></a>
+<span class="sourceLineNo">045</span>    * @param severity Only return log entries with the specified severity.<a name="line.45"></a>
+<span class="sourceLineNo">046</span>    * @throws IOException Thrown by underlying stream.<a name="line.46"></a>
+<span class="sourceLineNo">047</span>    */<a name="line.47"></a>
+<span class="sourceLineNo">048</span>   public LogParser(LogEntryFormatter formatter, File f, Date start, Date end, String thread, String[] loggers, String[] severity) throws IOException {<a name="line.48"></a>
+<span class="sourceLineNo">049</span>      br = new BufferedReader(new InputStreamReader(new FileInputStream(f), Charset.defaultCharset()));<a name="line.49"></a>
+<span class="sourceLineNo">050</span>      this.formatter = formatter;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>      this.start = start;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>      this.end = end;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>      this.threadFilter = thread;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>      if (loggers != null)<a name="line.54"></a>
+<span class="sourceLineNo">055</span>         this.loggerFilter = new LinkedHashSet&lt;&gt;(Arrays.asList(loggers));<a name="line.55"></a>
+<span class="sourceLineNo">056</span>      if (severity != null)<a name="line.56"></a>
+<span class="sourceLineNo">057</span>         this.severityFilter = new LinkedHashSet&lt;&gt;(Arrays.asList(severity));<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>      // Find the first line.<a name="line.59"></a>
+<span class="sourceLineNo">060</span>      String line;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      while (next == null &amp;&amp; (line = br.readLine()) != null) {<a name="line.61"></a>
+<span class="sourceLineNo">062</span>         Entry e = new Entry(line);<a name="line.62"></a>
+<span class="sourceLineNo">063</span>         if (e.matches())<a name="line.63"></a>
+<span class="sourceLineNo">064</span>            next = e;<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><a name="line.67"></a>
+<span class="sourceLineNo">068</span>   @Override /* Iterator */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>   public boolean hasNext() {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      return next != null;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   }<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>   @Override /* Iterator */<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   public Entry next() {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      Entry current = next;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      Entry prev = next;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      try {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>         next = null;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>         String line = null;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>         while (next == null &amp;&amp; (line = br.readLine()) != null) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>            Entry e = new Entry(line);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>            if (e.isRecord) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>               if (e.matches())<a name="line.83"></a>
+<span class="sourceLineNo">084</span>                  next = e;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>               prev = null;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>            } else {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>               if (prev != null)<a name="line.87"></a>
+<span class="sourceLineNo">088</span>                  prev.addText(e.line);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>            }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>         }<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      } catch (IOException e) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>         throw new RuntimeException(e);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      }<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      return current;<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>   @Override /* Iterator */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   public void remove() {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      throw new NoSuchMethodError();<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>
+<span class="sourceLineNo">102</span>   @Override /* Iterable */<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   public Iterator&lt;Entry&gt; iterator() {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      return this;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   }<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>   @Override /* Closeable */<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   public void close() throws IOException {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      br.close();<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   }<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>   /**<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    * Serializes the contents of the parsed log file to the specified writer and then closes the underlying reader.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    *<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    * @param w The writer to write the log file to.<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    * @throws IOException Thrown by underlying stream.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    */<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   public void writeTo(Writer w) throws IOException {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      try {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>         if (! hasNext())<a name="line.120"></a>
+<span class="sourceLineNo">121</span>            w.append("[EMPTY]");<a name="line.121"></a>
+<span class="sourceLineNo">122</span>         else for (LogParser.Entry le : this)<a name="line.122"></a>
+<span class="sourceLineNo">123</span>            le.append(w);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      } finally {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>         close();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>   /**<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    * Represents a single line from the log file.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   @SuppressWarnings("javadoc")<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   public final class Entry {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      public Date date;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      public String severity, logger;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      protected String line, text;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      protected String thread;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      protected List&lt;String&gt; additionalText;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      protected boolean isRecord;<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>      Entry(String line) throws IOException {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>         try {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>            this.line = line;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>            Matcher m = formatter.getLogEntryPattern().matcher(line);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>            if (m.matches()) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>               isRecord = true;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>               String s = formatter.getField("date", m);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>               if (s != null)<a name="line.148"></a>
+<span class="sourceLineNo">149</span>                  date = formatter.getDateFormat().parse(s);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>               thread = formatter.getField("thread", m);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>               severity = formatter.getField("level", m);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>               logger = formatter.getField("logger", m);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>               text = formatter.getField("msg", m);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>               if (logger != null &amp;&amp; logger.indexOf('.') &gt; -1)<a name="line.154"></a>
+<span class="sourceLineNo">155</span>                  logger = logger.substring(logger.lastIndexOf('.')+1);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>            }<a name="line.156"></a>
+<span class="sourceLineNo">157</span>         } catch (ParseException e) {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>            throw new IOException(e);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>         }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>      void addText(String t) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>         if (additionalText == null)<a name="line.163"></a>
+<span class="sourceLineNo">164</span>            additionalText = new LinkedList&lt;&gt;();<a name="line.164"></a>
+<span class="sourceLineNo">165</span>         additionalText.add(t);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span><a name="line.167"></a>
+<span class="sourceLineNo">168</span>      public String getText() {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>         if (additionalText == null)<a name="line.169"></a>
+<span class="sourceLineNo">170</span>            return text;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>         int i = text.length();<a name="line.171"></a>
+<span class="sourceLineNo">172</span>         for (String s : additionalText)<a name="line.172"></a>
+<span class="sourceLineNo">173</span>            i += s.length() + 1;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>         StringBuilder sb = new StringBuilder(i);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>         sb.append(text);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>         for (String s : additionalText)<a name="line.176"></a>
+<span class="sourceLineNo">177</span>            sb.append('\n').append(s);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>         return sb.toString();<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>      public String getThread() {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>         return thread;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>      public Writer appendHtml(Writer w) throws IOException {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>         w.append(toHtml(line)).append("&lt;br&gt;");<a name="line.186"></a>
+<span class="sourceLineNo">187</span>         if (additionalText != null)<a name="line.187"></a>
+<span class="sourceLineNo">188</span>            for (String t : additionalText)<a name="line.188"></a>
+<span class="sourceLineNo">189</span>               w.append(toHtml(t)).append("&lt;br&gt;");<a name="line.189"></a>
+<span class="sourceLineNo">190</span>         return w;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>      protected Writer append(Writer w) throws IOException {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>         w.append(line).append('\n');<a name="line.194"></a>
+<span class="sourceLineNo">195</span>         if (additionalText != null)<a name="line.195"></a>
+<span class="sourceLineNo">196</span>            for (String t : additionalText)<a name="line.196"></a>
+<span class="sourceLineNo">197</span>               w.append(t).append('\n');<a name="line.197"></a>
+<span class="sourceLineNo">198</span>         return w;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>      boolean matches() {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>         if (! isRecord)<a name="line.202"></a>
+<span class="sourceLineNo">203</span>            return false;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>         if (start != null &amp;&amp; date.before(start))<a name="line.204"></a>
+<span class="sourceLineNo">205</span>            return false;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>         if (end != null &amp;&amp; date.after(end))<a name="line.206"></a>
+<span class="sourceLineNo">207</span>            return false;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>         if (threadFilter != null &amp;&amp; ! threadFilter.equals(thread))<a name="line.208"></a>
+<span class="sourceLineNo">209</span>            return false;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>         if (loggerFilter != null &amp;&amp; ! loggerFilter.contains(logger))<a name="line.210"></a>
+<span class="sourceLineNo">211</span>            return false;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>         if (severityFilter != null &amp;&amp; ! severityFilter.contains(severity))<a name="line.212"></a>
+<span class="sourceLineNo">213</span>            return false;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>         return true;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      }<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>   static final String toHtml(String s) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      if (s.indexOf('&lt;') != -1)<a name="line.219"></a>
+<span class="sourceLineNo">220</span>         return s.replaceAll("&lt;", "&amp;lt;");//$NON-NLS-2$<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      return s;<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><a name="line.224"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/resources/LogParser.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/resources/LogParser.html
new file mode 100644
index 0000000..20e3592
--- /dev/null
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/resources/LogParser.html
@@ -0,0 +1,296 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../javadoc.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>// ***************************************************************************************************************************<a name="line.1"></a>
+<span class="sourceLineNo">002</span>// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *<a name="line.2"></a>
+<span class="sourceLineNo">003</span>// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *<a name="line.3"></a>
+<span class="sourceLineNo">004</span>// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *<a name="line.4"></a>
+<span class="sourceLineNo">005</span>// * with the License.  You may obtain a copy of the License at                                                              *<a name="line.5"></a>
+<span class="sourceLineNo">006</span>// *                                                                                                                         *<a name="line.6"></a>
+<span class="sourceLineNo">007</span>// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *<a name="line.7"></a>
+<span class="sourceLineNo">008</span>// *                                                                                                                         *<a name="line.8"></a>
+<span class="sourceLineNo">009</span>// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *<a name="line.9"></a>
+<span class="sourceLineNo">010</span>// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *<a name="line.10"></a>
+<span class="sourceLineNo">011</span>// * specific language governing permissions and limitations under the License.                                              *<a name="line.11"></a>
+<span class="sourceLineNo">012</span>// ***************************************************************************************************************************<a name="line.12"></a>
+<span class="sourceLineNo">013</span>package org.apache.juneau.microservice.resources;<a name="line.13"></a>
+<span class="sourceLineNo">014</span><a name="line.14"></a>
+<span class="sourceLineNo">015</span>import java.io.*;<a name="line.15"></a>
+<span class="sourceLineNo">016</span>import java.nio.charset.*;<a name="line.16"></a>
+<span class="sourceLineNo">017</span>import java.text.*;<a name="line.17"></a>
+<span class="sourceLineNo">018</span>import java.util.*;<a name="line.18"></a>
+<span class="sourceLineNo">019</span>import java.util.regex.*;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>/**<a name="line.21"></a>
+<span class="sourceLineNo">022</span> * Utility class for reading log files.<a name="line.22"></a>
+<span class="sourceLineNo">023</span> *<a name="line.23"></a>
+<span class="sourceLineNo">024</span> * &lt;p&gt;<a name="line.24"></a>
+<span class="sourceLineNo">025</span> * Provides the capability of returning splices of log files based on dates and filtering based on thread and logger<a name="line.25"></a>
+<span class="sourceLineNo">026</span> * names.<a name="line.26"></a>
+<span class="sourceLineNo">027</span> */<a name="line.27"></a>
+<span class="sourceLineNo">028</span>public final class LogParser implements Iterable&lt;LogParser.Entry&gt;, Iterator&lt;LogParser.Entry&gt;, Closeable {<a name="line.28"></a>
+<span class="sourceLineNo">029</span>   private BufferedReader br;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>   LogEntryFormatter formatter;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>   Date start, end;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>   Set&lt;String&gt; loggerFilter, severityFilter;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>   String threadFilter;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>   private Entry next;<a name="line.34"></a>
+<span class="sourceLineNo">035</span><a name="line.35"></a>
+<span class="sourceLineNo">036</span>   /**<a name="line.36"></a>
+<span class="sourceLineNo">037</span>    * Constructor.<a name="line.37"></a>
+<span class="sourceLineNo">038</span>    *<a name="line.38"></a>
+<span class="sourceLineNo">039</span>    * @param formatter The log entry formatter.<a name="line.39"></a>
+<span class="sourceLineNo">040</span>    * @param f The log file.<a name="line.40"></a>
+<span class="sourceLineNo">041</span>    * @param start Don't return rows before this date.  If &lt;jk&gt;null&lt;/jk&gt;, start from the beginning of the file.<a name="line.41"></a>
+<span class="sourceLineNo">042</span>    * @param end Don't return rows after this date.  If &lt;jk&gt;null&lt;/jk&gt;, go to the end of the file.<a name="line.42"></a>
+<span class="sourceLineNo">043</span>    * @param thread Only return log entries with this thread name.<a name="line.43"></a>
+<span class="sourceLineNo">044</span>    * @param loggers Only return log entries produced by these loggers (simple class names).<a name="line.44"></a>
+<span class="sourceLineNo">045</span>    * @param severity Only return log entries with the specified severity.<a name="line.45"></a>
+<span class="sourceLineNo">046</span>    * @throws IOException Thrown by underlying stream.<a name="line.46"></a>
+<span class="sourceLineNo">047</span>    */<a name="line.47"></a>
+<span class="sourceLineNo">048</span>   public LogParser(LogEntryFormatter formatter, File f, Date start, Date end, String thread, String[] loggers, String[] severity) throws IOException {<a name="line.48"></a>
+<span class="sourceLineNo">049</span>      br = new BufferedReader(new InputStreamReader(new FileInputStream(f), Charset.defaultCharset()));<a name="line.49"></a>
+<span class="sourceLineNo">050</span>      this.formatter = formatter;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>      this.start = start;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>      this.end = end;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>      this.threadFilter = thread;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>      if (loggers != null)<a name="line.54"></a>
+<span class="sourceLineNo">055</span>         this.loggerFilter = new LinkedHashSet&lt;&gt;(Arrays.asList(loggers));<a name="line.55"></a>
+<span class="sourceLineNo">056</span>      if (severity != null)<a name="line.56"></a>
+<span class="sourceLineNo">057</span>         this.severityFilter = new LinkedHashSet&lt;&gt;(Arrays.asList(severity));<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>      // Find the first line.<a name="line.59"></a>
+<span class="sourceLineNo">060</span>      String line;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      while (next == null &amp;&amp; (line = br.readLine()) != null) {<a name="line.61"></a>
+<span class="sourceLineNo">062</span>         Entry e = new Entry(line);<a name="line.62"></a>
+<span class="sourceLineNo">063</span>         if (e.matches())<a name="line.63"></a>
+<span class="sourceLineNo">064</span>            next = e;<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><a name="line.67"></a>
+<span class="sourceLineNo">068</span>   @Override /* Iterator */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>   public boolean hasNext() {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      return next != null;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   }<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>   @Override /* Iterator */<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   public Entry next() {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      Entry current = next;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      Entry prev = next;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      try {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>         next = null;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>         String line = null;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>         while (next == null &amp;&amp; (line = br.readLine()) != null) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>            Entry e = new Entry(line);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>            if (e.isRecord) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>               if (e.matches())<a name="line.83"></a>
+<span class="sourceLineNo">084</span>                  next = e;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>               prev = null;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>            } else {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>               if (prev != null)<a name="line.87"></a>
+<span class="sourceLineNo">088</span>                  prev.addText(e.line);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>            }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>         }<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      } catch (IOException e) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>         throw new RuntimeException(e);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      }<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      return current;<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>   @Override /* Iterator */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   public void remove() {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      throw new NoSuchMethodError();<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>
+<span class="sourceLineNo">102</span>   @Override /* Iterable */<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   public Iterator&lt;Entry&gt; iterator() {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      return this;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   }<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>   @Override /* Closeable */<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   public void close() throws IOException {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      br.close();<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   }<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>   /**<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    * Serializes the contents of the parsed log file to the specified writer and then closes the underlying reader.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    *<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    * @param w The writer to write the log file to.<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    * @throws IOException Thrown by underlying stream.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    */<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   public void writeTo(Writer w) throws IOException {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      try {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>         if (! hasNext())<a name="line.120"></a>
+<span class="sourceLineNo">121</span>            w.append("[EMPTY]");<a name="line.121"></a>
+<span class="sourceLineNo">122</span>         else for (LogParser.Entry le : this)<a name="line.122"></a>
+<span class="sourceLineNo">123</span>            le.append(w);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      } finally {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>         close();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>   /**<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    * Represents a single line from the log file.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   @SuppressWarnings("javadoc")<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   public final class Entry {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      public Date date;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      public String severity, logger;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      protected String line, text;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      protected String thread;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      protected List&lt;String&gt; additionalText;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      protected boolean isRecord;<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>      Entry(String line) throws IOException {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>         try {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>            this.line = line;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>            Matcher m = formatter.getLogEntryPattern().matcher(line);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>            if (m.matches()) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>               isRecord = true;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>               String s = formatter.getField("date", m);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>               if (s != null)<a name="line.148"></a>
+<span class="sourceLineNo">149</span>                  date = formatter.getDateFormat().parse(s);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>               thread = formatter.getField("thread", m);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>               severity = formatter.getField("level", m);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>               logger = formatter.getField("logger", m);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>               text = formatter.getField("msg", m);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>               if (logger != null &amp;&amp; logger.indexOf('.') &gt; -1)<a name="line.154"></a>
+<span class="sourceLineNo">155</span>                  logger = logger.substring(logger.lastIndexOf('.')+1);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>            }<a name="line.156"></a>
+<span class="sourceLineNo">157</span>         } catch (ParseException e) {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>            throw new IOException(e);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>         }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>      void addText(String t) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>         if (additionalText == null)<a name="line.163"></a>
+<span class="sourceLineNo">164</span>            additionalText = new LinkedList&lt;&gt;();<a name="line.164"></a>
+<span class="sourceLineNo">165</span>         additionalText.add(t);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span><a name="line.167"></a>
+<span class="sourceLineNo">168</span>      public String getText() {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>         if (additionalText == null)<a name="line.169"></a>
+<span class="sourceLineNo">170</span>            return text;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>         int i = text.length();<a name="line.171"></a>
+<span class="sourceLineNo">172</span>         for (String s : additionalText)<a name="line.172"></a>
+<span class="sourceLineNo">173</span>            i += s.length() + 1;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>         StringBuilder sb = new StringBuilder(i);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>         sb.append(text);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>         for (String s : additionalText)<a name="line.176"></a>
+<span class="sourceLineNo">177</span>            sb.append('\n').append(s);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>         return sb.toString();<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>      public String getThread() {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>         return thread;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>      public Writer appendHtml(Writer w) throws IOException {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>         w.append(toHtml(line)).append("&lt;br&gt;");<a name="line.186"></a>
+<span class="sourceLineNo">187</span>         if (additionalText != null)<a name="line.187"></a>
+<span class="sourceLineNo">188</span>            for (String t : additionalText)<a name="line.188"></a>
+<span class="sourceLineNo">189</span>               w.append(toHtml(t)).append("&lt;br&gt;");<a name="line.189"></a>
+<span class="sourceLineNo">190</span>         return w;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>      protected Writer append(Writer w) throws IOException {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>         w.append(line).append('\n');<a name="line.194"></a>
+<span class="sourceLineNo">195</span>         if (additionalText != null)<a name="line.195"></a>
+<span class="sourceLineNo">196</span>            for (String t : additionalText)<a name="line.196"></a>
+<span class="sourceLineNo">197</span>               w.append(t).append('\n');<a name="line.197"></a>
+<span class="sourceLineNo">198</span>         return w;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>      boolean matches() {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>         if (! isRecord)<a name="line.202"></a>
+<span class="sourceLineNo">203</span>            return false;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>         if (start != null &amp;&amp; date.before(start))<a name="line.204"></a>
+<span class="sourceLineNo">205</span>            return false;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>         if (end != null &amp;&amp; date.after(end))<a name="line.206"></a>
+<span class="sourceLineNo">207</span>            return false;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>         if (threadFilter != null &amp;&amp; ! threadFilter.equals(thread))<a name="line.208"></a>
+<span class="sourceLineNo">209</span>            return false;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>         if (loggerFilter != null &amp;&amp; ! loggerFilter.contains(logger))<a name="line.210"></a>
+<span class="sourceLineNo">211</span>            return false;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>         if (severityFilter != null &amp;&amp; ! severityFilter.contains(severity))<a name="line.212"></a>
+<span class="sourceLineNo">213</span>            return false;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>         return true;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      }<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>   static final String toHtml(String s) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      if (s.indexOf('&lt;') != -1)<a name="line.219"></a>
+<span class="sourceLineNo">220</span>         return s.replaceAll("&lt;", "&amp;lt;");//$NON-NLS-2$<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      return s;<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><a name="line.224"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/resources/LogsResource.Action.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/resources/LogsResource.Action.html
new file mode 100644
index 0000000..17dc3b1
--- /dev/null
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/resources/LogsResource.Action.html
@@ -0,0 +1,410 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../javadoc.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>// ***************************************************************************************************************************<a name="line.1"></a>
+<span class="sourceLineNo">002</span>// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *<a name="line.2"></a>
+<span class="sourceLineNo">003</span>// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *<a name="line.3"></a>
+<span class="sourceLineNo">004</span>// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *<a name="line.4"></a>
+<span class="sourceLineNo">005</span>// * with the License.  You may obtain a copy of the License at                                                              *<a name="line.5"></a>
+<span class="sourceLineNo">006</span>// *                                                                                                                         *<a name="line.6"></a>
+<span class="sourceLineNo">007</span>// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *<a name="line.7"></a>
+<span class="sourceLineNo">008</span>// *                                                                                                                         *<a name="line.8"></a>
+<span class="sourceLineNo">009</span>// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *<a name="line.9"></a>
+<span class="sourceLineNo">010</span>// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *<a name="line.10"></a>
+<span class="sourceLineNo">011</span>// * specific language governing permissions and limitations under the License.                                              *<a name="line.11"></a>
+<span class="sourceLineNo">012</span>// ***************************************************************************************************************************<a name="line.12"></a>
+<span class="sourceLineNo">013</span>package org.apache.juneau.microservice.resources;<a name="line.13"></a>
+<span class="sourceLineNo">014</span><a name="line.14"></a>
+<span class="sourceLineNo">015</span>import static org.apache.juneau.rest.annotation.HookEvent.*;<a name="line.15"></a>
+<span class="sourceLineNo">016</span>import static org.apache.juneau.internal.StringUtils.*;<a name="line.16"></a>
+<span class="sourceLineNo">017</span><a name="line.17"></a>
+<span class="sourceLineNo">018</span>import java.io.*;<a name="line.18"></a>
+<span class="sourceLineNo">019</span>import java.nio.charset.*;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.util.*;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.juneau.annotation.*;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.juneau.config.*;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.juneau.dto.*;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.juneau.html.annotation.*;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.juneau.http.annotation.Path;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.juneau.http.annotation.Query;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.juneau.http.annotation.Response;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.juneau.http.response.*;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.juneau.rest.*;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.juneau.rest.annotation.*;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.juneau.rest.beans.*;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.juneau.rest.config.*;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.juneau.rest.converter.*;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.juneau.rest.servlet.*;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>/**<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * REST resource for viewing and accessing log files.<a name="line.38"></a>
+<span class="sourceLineNo">039</span> */<a name="line.39"></a>
+<span class="sourceLineNo">040</span>@Rest(<a name="line.40"></a>
+<span class="sourceLineNo">041</span>   path="/logs",<a name="line.41"></a>
+<span class="sourceLineNo">042</span>   title="Log files",<a name="line.42"></a>
+<span class="sourceLineNo">043</span>   description="Log files from this service",<a name="line.43"></a>
+<span class="sourceLineNo">044</span>   allowedMethodParams="*"<a name="line.44"></a>
+<span class="sourceLineNo">045</span>)<a name="line.45"></a>
+<span class="sourceLineNo">046</span>@HtmlConfig(uriAnchorText="PROPERTY_NAME")<a name="line.46"></a>
+<span class="sourceLineNo">047</span>@SuppressWarnings("javadoc")<a name="line.47"></a>
+<span class="sourceLineNo">048</span>public class LogsResource extends BasicRestServlet implements BasicUniversalConfig {<a name="line.48"></a>
+<span class="sourceLineNo">049</span>   private static final long serialVersionUID = 1L;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>   //-------------------------------------------------------------------------------------------------------------------<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   // Instance<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   //-------------------------------------------------------------------------------------------------------------------<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>   private File logDir;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   private LogEntryFormatter leFormatter;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   boolean allowDeletes;<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>   @RestHook(INIT)<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   public void init(Config config) throws Exception {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      logDir = new File(config.get("Logging/logDir").asString().orElse("logs"));<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      allowDeletes = config.get("Logging/allowDeletes").asBoolean().orElse(true);<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      leFormatter = new LogEntryFormatter(<a name="line.63"></a>
+<span class="sourceLineNo">064</span>         config.get("Logging/format").asString().orElse("[{date} {level}] {msg}%n"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>         config.get("Logging/dateFormat").asString().orElse("yyyy.MM.dd hh:mm:ss"),<a name="line.65"></a>
+<span class="sourceLineNo">066</span>         config.get("Logging/useStackTraceHashes").asBoolean().orElse(true)<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><a name="line.69"></a>
+<span class="sourceLineNo">070</span>   @RestGet(<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      path="/*",<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      summary="View information on file or directory",<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      description="Returns information about the specified file or directory."<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   )<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   @HtmlDocConfig(<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      nav={"&lt;h5&gt;Folder:  $RA{fullPath}&lt;/h5&gt;"}<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   )<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   public FileResource getFile(RestRequest req, @Path("/*") String path) throws NotFound, Exception {<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>      File dir = getFile(path);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      req.setAttribute("fullPath", dir.getAbsolutePath());<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>      return new FileResource(dir, path, allowDeletes, true);<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>   @RestOp(<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      method="VIEW",<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      path="/*",<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      summary="View contents of log file",<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      description="View the contents of a log file."<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   )<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   public void viewFile(<a name="line.92"></a>
+<span class="sourceLineNo">093</span>         RestResponse res,<a name="line.93"></a>
+<span class="sourceLineNo">094</span>         @Path("/*") String path,<a name="line.94"></a>
+<span class="sourceLineNo">095</span>         @Query(name="highlight", schema=@Schema(d="Add severity color highlighting.")) boolean highlight,<a name="line.95"></a>
+<span class="sourceLineNo">096</span>         @Query(name="start", schema=@Schema(d="Start timestamp (ISO8601, full or partial).\nDon't print lines logged before the specified timestamp.\nUse any of the following formats: yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-ddThh, yyyy-MM-ddThh:mm, yyyy-MM-ddThh:mm:ss, yyyy-MM-ddThh:mm:ss.SSS")) String start,<a name="line.96"></a>
+<span class="sourceLineNo">097</span>         @Query(name="end", schema=@Schema(d="End timestamp (ISO8601, full or partial).\nDon't print lines logged after the specified timestamp.\nUse any of the following formats: yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-ddThh, yyyy-MM-ddThh:mm, yyyy-MM-ddThh:mm:ss, yyyy-MM-ddThh:mm:ss.SSS")) String end,<a name="line.97"></a>
+<span class="sourceLineNo">098</span>         @Query(name="thread", schema=@Schema(d="Thread name filter.\nOnly show log entries with the specified thread name.")) String thread,<a name="line.98"></a>
+<span class="sourceLineNo">099</span>         @Query(name="loggers", schema=@Schema(d="Logger filter (simple class name).\nOnly show log entries if they were produced by one of the specified loggers.")) String[] loggers,<a name="line.99"></a>
+<span class="sourceLineNo">100</span>         @Query(name="severity",schema=@Schema( d="Severity filter.\nOnly show log entries with the specified severity.")) String[] severity<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      ) throws NotFound, MethodNotAllowed, IOException {<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>      File f = getFile(path);<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>      Date startDate = parseIsoDate(start), endDate = parseIsoDate(end);<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>      if (! highlight) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>         Object o = getReader(f, startDate, endDate, thread, loggers, severity);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>         res.setContentType("text/plain");<a name="line.109"></a>
+<span class="sourceLineNo">110</span>         if (o instanceof Reader)<a name="line.110"></a>
+<span class="sourceLineNo">111</span>            res.setContent(o);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>         else {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>            try (LogParser p = (LogParser)o; Writer w = res.getNegotiatedWriter()) {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>               p.writeTo(w);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>            }<a name="line.115"></a>
+<span class="sourceLineNo">116</span>         }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>         return;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>      res.setContentType("text/html");<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      try (PrintWriter w = res.getNegotiatedWriter()) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>         w.println("&lt;html&gt;&lt;body style='font-family:monospace;font-size:8pt;white-space:pre;'&gt;");<a name="line.122"></a>
+<span class="sourceLineNo">123</span>         try (LogParser lp = getLogParser(f, startDate, endDate, thread, loggers, severity)) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>            if (! lp.hasNext())<a name="line.124"></a>
+<span class="sourceLineNo">125</span>               w.append("&lt;span style='color:gray'&gt;[EMPTY]&lt;/span&gt;");<a name="line.125"></a>
+<span class="sourceLineNo">126</span>            else for (LogParser.Entry le : lp) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>               char s = le.severity.charAt(0);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>               String color = "black";<a name="line.128"></a>
+<span class="sourceLineNo">129</span>               //SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST<a name="line.129"></a>
+<span class="sourceLineNo">130</span>               if (s == 'I')<a name="line.130"></a>
+<span class="sourceLineNo">131</span>                  color = "#006400";<a name="line.131"></a>
+<span class="sourceLineNo">132</span>               else if (s == 'W')<a name="line.132"></a>
+<span class="sourceLineNo">133</span>                  color = "#CC8400";<a name="line.133"></a>
+<span class="sourceLineNo">134</span>               else if (s == 'E' || s == 'S')<a name="line.134"></a>
+<span class="sourceLineNo">135</span>                  color = "#DD0000";<a name="line.135"></a>
+<span class="sourceLineNo">136</span>               else if (s == 'D' || s == 'F' || s == 'T')<a name="line.136"></a>
+<span class="sourceLineNo">137</span>                  color = "#000064";<a name="line.137"></a>
+<span class="sourceLineNo">138</span>               w.append("&lt;span style='color:").append(color).append("'&gt;");<a name="line.138"></a>
+<span class="sourceLineNo">139</span>               le.appendHtml(w).append("&lt;/span&gt;");<a name="line.139"></a>
+<span class="sourceLineNo">140</span>            }<a name="line.140"></a>
+<span class="sourceLineNo">141</span>            w.append("&lt;/body&gt;&lt;/html&gt;");<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>   }<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>   @RestOp(<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      method="PARSE",<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      path="/*",<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      converters=Queryable.class,<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      summary="View parsed contents of file",<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      description="View the parsed contents of a file.",<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      swagger=@OpSwagger(<a name="line.152"></a>
+<span class="sourceLineNo">153</span>         parameters={<a name="line.153"></a>
+<span class="sourceLineNo">154</span>             Queryable.SWAGGER_PARAMS<a name="line.154"></a>
+<span class="sourceLineNo">155</span>         }<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      )<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   )<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   @HtmlDocConfig(<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      nav={"&lt;h5&gt;Folder:  $RA{fullPath}&lt;/h5&gt;"}<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   )<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   public LogParser viewParsedEntries(<a name="line.161"></a>
+<span class="sourceLineNo">162</span>         RestRequest req,<a name="line.162"></a>
+<span class="sourceLineNo">163</span>         @Path("/*") String path,<a name="line.163"></a>
+<span class="sourceLineNo">164</span>         @Query(name="start", schema=@Schema(d="Start timestamp (ISO8601, full or partial).\nDon't print lines logged before the specified timestamp.\nUse any of the following formats: yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-ddThh, yyyy-MM-ddThh:mm, yyyy-MM-ddThh:mm:ss, yyyy-MM-ddThh:mm:ss.SSS")) String start,<a name="line.164"></a>
+<span class="sourceLineNo">165</span>         @Query(name="end", schema=@Schema(d="End timestamp (ISO8601, full or partial).\nDon't print lines logged after the specified timestamp.\nUse any of the following formats: yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-ddThh, yyyy-MM-ddThh:mm, yyyy-MM-ddThh:mm:ss, yyyy-MM-ddThh:mm:ss.SSS")) String end,<a name="line.165"></a>
+<span class="sourceLineNo">166</span>         @Query(name="thread", schema=@Schema(d="Thread name filter.\nOnly show log entries with the specified thread name.")) String thread,<a name="line.166"></a>
+<span class="sourceLineNo">167</span>         @Query(name="loggers", schema=@Schema(d="Logger filter (simple class name).\nOnly show log entries if they were produced by one of the specified loggers.")) String[] loggers,<a name="line.167"></a>
+<span class="sourceLineNo">168</span>         @Query(name="severity", schema=@Schema(d="Severity filter.\nOnly show log entries with the specified severity.")) String[] severity<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      ) throws NotFound, IOException {<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>      File f = getFile(path);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      req.setAttribute("fullPath", f.getAbsolutePath());<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>      Date startDate = parseIsoDate(start), endDate = parseIsoDate(end);<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>      return getLogParser(f, startDate, endDate, thread, loggers, severity);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   }<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>   @RestOp(<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      method="DOWNLOAD",<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      path="/*",<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      summary="Download file",<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      description="Download the contents of a file.\nContent-Type is set to 'application/octet-stream'."<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   )<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   public FileContents downloadFile(RestResponse res, @Path("/*") String path) throws NotFound, MethodNotAllowed {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      res.setContentType("application/octet-stream");<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      try {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>         return new FileContents(getFile(path));<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      } catch (FileNotFoundException e) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>         throw new NotFound("File not found");<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      }<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>   @RestDelete(<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      path="/*",<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      summary="Delete log file",<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      description="Delete a log file on the file system."<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   )<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   public RedirectToRoot deleteFile(@Path("/*") String path) throws MethodNotAllowed {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      deleteFile(getFile(path));<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      return new RedirectToRoot();<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   // Helper beans<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>   @Response(schema=@Schema(type="string",format="binary",description="Contents of file"))<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   static class FileContents extends FileInputStream {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      public FileContents(File file) throws FileNotFoundException {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>         super(file);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      }<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   }<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>   @Response(schema=@Schema(description="Redirect to root page on success"))<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   static class RedirectToRoot extends SeeOtherRoot {}<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>   @Response(schema=@Schema(description="File action"))<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   public static class Action extends LinkString {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      public Action(String name, String uri, Object...uriArgs) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>         super(name, uri, uriArgs);<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><a name="line.225"></a>
+<span class="sourceLineNo">226</span>   @Response(schema=@Schema(description="File or directory details"))<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   @Bean(properties="type,name,size,lastModified,actions,files")<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   public static class FileResource {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      private final File f;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      private final String path;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      private final String uri;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      private final boolean includeChildren, allowDeletes;<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>      public FileResource(File f, String path, boolean allowDeletes, boolean includeChildren) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>         this.f = f;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>         this.path = path;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>         this.uri = "servlet:/"+(path == null ? "" : path);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>         this.includeChildren = includeChildren;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>         this.allowDeletes = allowDeletes;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      }<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>      public String getType() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>         return (f.isDirectory() ? "dir" : "file");<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>      public LinkString getName() {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>         return new LinkString(f.getName(), uri);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>      public long getSize() {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>         return f.isDirectory() ? f.listFiles().length : f.length();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
+<span class="sourceLineNo">253</span><a name="line.253"></a>
+<span class="sourceLineNo">254</span>      public Date getLastModified() {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>         return new Date(f.lastModified());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>      @Html(format=HtmlFormat.HTML_CDC)<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      public List&lt;Action&gt; getActions() throws Exception {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>         List&lt;Action&gt; l = new ArrayList&lt;&gt;();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>         if (f.canRead() &amp;&amp; ! f.isDirectory()) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>            l.add(new Action("view", uri + "?method=VIEW"));<a name="line.262"></a>
+<span class="sourceLineNo">263</span>            l.add(new Action("highlighted", uri + "?method=VIEW&amp;highlight=true"));<a name="line.263"></a>
+<span class="sourceLineNo">264</span>            l.add(new Action("parsed", uri + "?method=PARSE"));<a name="line.264"></a>
+<span class="sourceLineNo">265</span>            l.add(new Action("download", uri + "?method=DOWNLOAD"));<a name="line.265"></a>
+<span class="sourceLineNo">266</span>            if (allowDeletes)<a name="line.266"></a>
+<span class="sourceLineNo">267</span>               l.add(new Action("delete", uri + "?method=DELETE"));<a name="line.267"></a>
+<span class="sourceLineNo">268</span>         }<a name="line.268"></a>
+<span class="sourceLineNo">269</span>         return l;<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>      public Set&lt;FileResource&gt; getFiles() {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>         if (f.isFile() || ! includeChildren)<a name="line.273"></a>
+<span class="sourceLineNo">274</span>            return null;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>         Set&lt;FileResource&gt; s = new TreeSet&lt;&gt;(FILE_COMPARATOR);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>         for (File fc : f.listFiles(FILE_FILTER))<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            s.add(new FileResource(fc, (path != null ? (path + '/') : "") + urlEncode(fc.getName()), allowDeletes, false));<a name="line.277"></a>
+<span class="sourceLineNo">278</span>         return s;<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>      static final FileFilter FILE_FILTER = new FileFilter() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>         @Override /* FileFilter */<a name="line.282"></a>
+<span class="sourceLineNo">283</span>         public boolean accept(File f) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>            return f.isDirectory() || f.getName().endsWith(".log");<a name="line.284"></a>
+<span class="sourceLineNo">285</span>         }<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>      static final Comparator&lt;FileResource&gt; FILE_COMPARATOR = new Comparator&lt;FileResource&gt;() {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>         @Override /* Comparator */<a name="line.289"></a>
+<span class="sourceLineNo">290</span>         public int compare(FileResource o1, FileResource o2) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>            int c = o1.getType().compareTo(o2.getType());<a name="line.291"></a>
+<span class="sourceLineNo">292</span>            return c != 0 ? c : o1.getName().compareTo(o2.getName());<a name="line.292"></a>
+<span class="sourceLineNo">293</span>         }<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><a name="line.297"></a>
+<span class="sourceLineNo">298</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.298"></a>
+<span class="sourceLineNo">299</span>   // Helper methods<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>   private File getFile(String path) throws NotFound {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      if (path == null)<a name="line.303"></a>
+<span class="sourceLineNo">304</span>         return logDir;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      File f = new File(logDir.getAbsolutePath() + '/' + path);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      if (f.exists())<a name="line.306"></a>
+<span class="sourceLineNo">307</span>         return f;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      throw new NotFound("File not found.");<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>   private void deleteFile(File f) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      if (! allowDeletes)<a name="line.312"></a>
+<span class="sourceLineNo">313</span>         throw new MethodNotAllowed("DELETE not enabled");<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      if (f.isDirectory()) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>         File[] files = f.listFiles();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>         if (files != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>            for (File fc : files)<a name="line.317"></a>
+<span class="sourceLineNo">318</span>               deleteFile(fc);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>         }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      if (! f.delete())<a name="line.321"></a>
+<span class="sourceLineNo">322</span>         throw new Forbidden("Could not delete file {0}", f.getAbsolutePath()) ;<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>   private static BufferedReader getReader(File f) throws IOException {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      return new BufferedReader(new InputStreamReader(new FileInputStream(f), Charset.defaultCharset()));<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   }<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>   private Object getReader(File f, final Date start, final Date end, final String thread, final String[] loggers, final String[] severity) throws IOException {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      if (start == null &amp;&amp; end == null &amp;&amp; thread == null &amp;&amp; loggers == null)<a name="line.330"></a>
+<span class="sourceLineNo">331</span>         return getReader(f);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      return getLogParser(f, start, end, thread, loggers, severity);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   }<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>   private LogParser getLogParser(File f, final Date start, final Date end, final String thread, final String[] loggers, final String[] severity) throws IOException {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      return new LogParser(leFormatter, f, start, end, thread, loggers, severity);<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html
new file mode 100644
index 0000000..17dc3b1
--- /dev/null
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html
@@ -0,0 +1,410 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../javadoc.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>// ***************************************************************************************************************************<a name="line.1"></a>
+<span class="sourceLineNo">002</span>// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *<a name="line.2"></a>
+<span class="sourceLineNo">003</span>// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *<a name="line.3"></a>
+<span class="sourceLineNo">004</span>// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *<a name="line.4"></a>
+<span class="sourceLineNo">005</span>// * with the License.  You may obtain a copy of the License at                                                              *<a name="line.5"></a>
+<span class="sourceLineNo">006</span>// *                                                                                                                         *<a name="line.6"></a>
+<span class="sourceLineNo">007</span>// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *<a name="line.7"></a>
+<span class="sourceLineNo">008</span>// *                                                                                                                         *<a name="line.8"></a>
+<span class="sourceLineNo">009</span>// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *<a name="line.9"></a>
+<span class="sourceLineNo">010</span>// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *<a name="line.10"></a>
+<span class="sourceLineNo">011</span>// * specific language governing permissions and limitations under the License.                                              *<a name="line.11"></a>
+<span class="sourceLineNo">012</span>// ***************************************************************************************************************************<a name="line.12"></a>
+<span class="sourceLineNo">013</span>package org.apache.juneau.microservice.resources;<a name="line.13"></a>
+<span class="sourceLineNo">014</span><a name="line.14"></a>
+<span class="sourceLineNo">015</span>import static org.apache.juneau.rest.annotation.HookEvent.*;<a name="line.15"></a>
+<span class="sourceLineNo">016</span>import static org.apache.juneau.internal.StringUtils.*;<a name="line.16"></a>
+<span class="sourceLineNo">017</span><a name="line.17"></a>
+<span class="sourceLineNo">018</span>import java.io.*;<a name="line.18"></a>
+<span class="sourceLineNo">019</span>import java.nio.charset.*;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.util.*;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.juneau.annotation.*;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.juneau.config.*;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.juneau.dto.*;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.juneau.html.annotation.*;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.juneau.http.annotation.Path;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.juneau.http.annotation.Query;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.juneau.http.annotation.Response;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.juneau.http.response.*;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.juneau.rest.*;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.juneau.rest.annotation.*;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.juneau.rest.beans.*;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.juneau.rest.config.*;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.juneau.rest.converter.*;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.juneau.rest.servlet.*;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>/**<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * REST resource for viewing and accessing log files.<a name="line.38"></a>
+<span class="sourceLineNo">039</span> */<a name="line.39"></a>
+<span class="sourceLineNo">040</span>@Rest(<a name="line.40"></a>
+<span class="sourceLineNo">041</span>   path="/logs",<a name="line.41"></a>
+<span class="sourceLineNo">042</span>   title="Log files",<a name="line.42"></a>
+<span class="sourceLineNo">043</span>   description="Log files from this service",<a name="line.43"></a>
+<span class="sourceLineNo">044</span>   allowedMethodParams="*"<a name="line.44"></a>
+<span class="sourceLineNo">045</span>)<a name="line.45"></a>
+<span class="sourceLineNo">046</span>@HtmlConfig(uriAnchorText="PROPERTY_NAME")<a name="line.46"></a>
+<span class="sourceLineNo">047</span>@SuppressWarnings("javadoc")<a name="line.47"></a>
+<span class="sourceLineNo">048</span>public class LogsResource extends BasicRestServlet implements BasicUniversalConfig {<a name="line.48"></a>
+<span class="sourceLineNo">049</span>   private static final long serialVersionUID = 1L;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>   //-------------------------------------------------------------------------------------------------------------------<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   // Instance<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   //-------------------------------------------------------------------------------------------------------------------<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>   private File logDir;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   private LogEntryFormatter leFormatter;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   boolean allowDeletes;<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>   @RestHook(INIT)<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   public void init(Config config) throws Exception {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      logDir = new File(config.get("Logging/logDir").asString().orElse("logs"));<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      allowDeletes = config.get("Logging/allowDeletes").asBoolean().orElse(true);<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      leFormatter = new LogEntryFormatter(<a name="line.63"></a>
+<span class="sourceLineNo">064</span>         config.get("Logging/format").asString().orElse("[{date} {level}] {msg}%n"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>         config.get("Logging/dateFormat").asString().orElse("yyyy.MM.dd hh:mm:ss"),<a name="line.65"></a>
+<span class="sourceLineNo">066</span>         config.get("Logging/useStackTraceHashes").asBoolean().orElse(true)<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><a name="line.69"></a>
+<span class="sourceLineNo">070</span>   @RestGet(<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      path="/*",<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      summary="View information on file or directory",<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      description="Returns information about the specified file or directory."<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   )<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   @HtmlDocConfig(<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      nav={"&lt;h5&gt;Folder:  $RA{fullPath}&lt;/h5&gt;"}<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   )<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   public FileResource getFile(RestRequest req, @Path("/*") String path) throws NotFound, Exception {<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>      File dir = getFile(path);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      req.setAttribute("fullPath", dir.getAbsolutePath());<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>      return new FileResource(dir, path, allowDeletes, true);<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>   @RestOp(<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      method="VIEW",<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      path="/*",<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      summary="View contents of log file",<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      description="View the contents of a log file."<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   )<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   public void viewFile(<a name="line.92"></a>
+<span class="sourceLineNo">093</span>         RestResponse res,<a name="line.93"></a>
+<span class="sourceLineNo">094</span>         @Path("/*") String path,<a name="line.94"></a>
+<span class="sourceLineNo">095</span>         @Query(name="highlight", schema=@Schema(d="Add severity color highlighting.")) boolean highlight,<a name="line.95"></a>
+<span class="sourceLineNo">096</span>         @Query(name="start", schema=@Schema(d="Start timestamp (ISO8601, full or partial).\nDon't print lines logged before the specified timestamp.\nUse any of the following formats: yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-ddThh, yyyy-MM-ddThh:mm, yyyy-MM-ddThh:mm:ss, yyyy-MM-ddThh:mm:ss.SSS")) String start,<a name="line.96"></a>
+<span class="sourceLineNo">097</span>         @Query(name="end", schema=@Schema(d="End timestamp (ISO8601, full or partial).\nDon't print lines logged after the specified timestamp.\nUse any of the following formats: yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-ddThh, yyyy-MM-ddThh:mm, yyyy-MM-ddThh:mm:ss, yyyy-MM-ddThh:mm:ss.SSS")) String end,<a name="line.97"></a>
+<span class="sourceLineNo">098</span>         @Query(name="thread", schema=@Schema(d="Thread name filter.\nOnly show log entries with the specified thread name.")) String thread,<a name="line.98"></a>
+<span class="sourceLineNo">099</span>         @Query(name="loggers", schema=@Schema(d="Logger filter (simple class name).\nOnly show log entries if they were produced by one of the specified loggers.")) String[] loggers,<a name="line.99"></a>
+<span class="sourceLineNo">100</span>         @Query(name="severity",schema=@Schema( d="Severity filter.\nOnly show log entries with the specified severity.")) String[] severity<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      ) throws NotFound, MethodNotAllowed, IOException {<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>      File f = getFile(path);<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>      Date startDate = parseIsoDate(start), endDate = parseIsoDate(end);<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>      if (! highlight) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>         Object o = getReader(f, startDate, endDate, thread, loggers, severity);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>         res.setContentType("text/plain");<a name="line.109"></a>
+<span class="sourceLineNo">110</span>         if (o instanceof Reader)<a name="line.110"></a>
+<span class="sourceLineNo">111</span>            res.setContent(o);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>         else {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>            try (LogParser p = (LogParser)o; Writer w = res.getNegotiatedWriter()) {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>               p.writeTo(w);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>            }<a name="line.115"></a>
+<span class="sourceLineNo">116</span>         }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>         return;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>      res.setContentType("text/html");<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      try (PrintWriter w = res.getNegotiatedWriter()) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>         w.println("&lt;html&gt;&lt;body style='font-family:monospace;font-size:8pt;white-space:pre;'&gt;");<a name="line.122"></a>
+<span class="sourceLineNo">123</span>         try (LogParser lp = getLogParser(f, startDate, endDate, thread, loggers, severity)) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>            if (! lp.hasNext())<a name="line.124"></a>
+<span class="sourceLineNo">125</span>               w.append("&lt;span style='color:gray'&gt;[EMPTY]&lt;/span&gt;");<a name="line.125"></a>
+<span class="sourceLineNo">126</span>            else for (LogParser.Entry le : lp) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>               char s = le.severity.charAt(0);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>               String color = "black";<a name="line.128"></a>
+<span class="sourceLineNo">129</span>               //SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST<a name="line.129"></a>
+<span class="sourceLineNo">130</span>               if (s == 'I')<a name="line.130"></a>
+<span class="sourceLineNo">131</span>                  color = "#006400";<a name="line.131"></a>
+<span class="sourceLineNo">132</span>               else if (s == 'W')<a name="line.132"></a>
+<span class="sourceLineNo">133</span>                  color = "#CC8400";<a name="line.133"></a>
+<span class="sourceLineNo">134</span>               else if (s == 'E' || s == 'S')<a name="line.134"></a>
+<span class="sourceLineNo">135</span>                  color = "#DD0000";<a name="line.135"></a>
+<span class="sourceLineNo">136</span>               else if (s == 'D' || s == 'F' || s == 'T')<a name="line.136"></a>
+<span class="sourceLineNo">137</span>                  color = "#000064";<a name="line.137"></a>
+<span class="sourceLineNo">138</span>               w.append("&lt;span style='color:").append(color).append("'&gt;");<a name="line.138"></a>
+<span class="sourceLineNo">139</span>               le.appendHtml(w).append("&lt;/span&gt;");<a name="line.139"></a>
+<span class="sourceLineNo">140</span>            }<a name="line.140"></a>
+<span class="sourceLineNo">141</span>            w.append("&lt;/body&gt;&lt;/html&gt;");<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>   }<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>   @RestOp(<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      method="PARSE",<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      path="/*",<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      converters=Queryable.class,<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      summary="View parsed contents of file",<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      description="View the parsed contents of a file.",<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      swagger=@OpSwagger(<a name="line.152"></a>
+<span class="sourceLineNo">153</span>         parameters={<a name="line.153"></a>
+<span class="sourceLineNo">154</span>             Queryable.SWAGGER_PARAMS<a name="line.154"></a>
+<span class="sourceLineNo">155</span>         }<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      )<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   )<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   @HtmlDocConfig(<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      nav={"&lt;h5&gt;Folder:  $RA{fullPath}&lt;/h5&gt;"}<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   )<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   public LogParser viewParsedEntries(<a name="line.161"></a>
+<span class="sourceLineNo">162</span>         RestRequest req,<a name="line.162"></a>
+<span class="sourceLineNo">163</span>         @Path("/*") String path,<a name="line.163"></a>
+<span class="sourceLineNo">164</span>         @Query(name="start", schema=@Schema(d="Start timestamp (ISO8601, full or partial).\nDon't print lines logged before the specified timestamp.\nUse any of the following formats: yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-ddThh, yyyy-MM-ddThh:mm, yyyy-MM-ddThh:mm:ss, yyyy-MM-ddThh:mm:ss.SSS")) String start,<a name="line.164"></a>
+<span class="sourceLineNo">165</span>         @Query(name="end", schema=@Schema(d="End timestamp (ISO8601, full or partial).\nDon't print lines logged after the specified timestamp.\nUse any of the following formats: yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-ddThh, yyyy-MM-ddThh:mm, yyyy-MM-ddThh:mm:ss, yyyy-MM-ddThh:mm:ss.SSS")) String end,<a name="line.165"></a>
+<span class="sourceLineNo">166</span>         @Query(name="thread", schema=@Schema(d="Thread name filter.\nOnly show log entries with the specified thread name.")) String thread,<a name="line.166"></a>
+<span class="sourceLineNo">167</span>         @Query(name="loggers", schema=@Schema(d="Logger filter (simple class name).\nOnly show log entries if they were produced by one of the specified loggers.")) String[] loggers,<a name="line.167"></a>
+<span class="sourceLineNo">168</span>         @Query(name="severity", schema=@Schema(d="Severity filter.\nOnly show log entries with the specified severity.")) String[] severity<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      ) throws NotFound, IOException {<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>      File f = getFile(path);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      req.setAttribute("fullPath", f.getAbsolutePath());<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>      Date startDate = parseIsoDate(start), endDate = parseIsoDate(end);<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>      return getLogParser(f, startDate, endDate, thread, loggers, severity);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   }<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>   @RestOp(<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      method="DOWNLOAD",<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      path="/*",<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      summary="Download file",<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      description="Download the contents of a file.\nContent-Type is set to 'application/octet-stream'."<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   )<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   public FileContents downloadFile(RestResponse res, @Path("/*") String path) throws NotFound, MethodNotAllowed {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      res.setContentType("application/octet-stream");<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      try {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>         return new FileContents(getFile(path));<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      } catch (FileNotFoundException e) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>         throw new NotFound("File not found");<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      }<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>   @RestDelete(<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      path="/*",<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      summary="Delete log file",<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      description="Delete a log file on the file system."<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   )<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   public RedirectToRoot deleteFile(@Path("/*") String path) throws MethodNotAllowed {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      deleteFile(getFile(path));<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      return new RedirectToRoot();<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   // Helper beans<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>   @Response(schema=@Schema(type="string",format="binary",description="Contents of file"))<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   static class FileContents extends FileInputStream {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      public FileContents(File file) throws FileNotFoundException {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>         super(file);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      }<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   }<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>   @Response(schema=@Schema(description="Redirect to root page on success"))<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   static class RedirectToRoot extends SeeOtherRoot {}<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>   @Response(schema=@Schema(description="File action"))<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   public static class Action extends LinkString {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      public Action(String name, String uri, Object...uriArgs) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>         super(name, uri, uriArgs);<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><a name="line.225"></a>
+<span class="sourceLineNo">226</span>   @Response(schema=@Schema(description="File or directory details"))<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   @Bean(properties="type,name,size,lastModified,actions,files")<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   public static class FileResource {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      private final File f;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      private final String path;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      private final String uri;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      private final boolean includeChildren, allowDeletes;<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>      public FileResource(File f, String path, boolean allowDeletes, boolean includeChildren) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>         this.f = f;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>         this.path = path;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>         this.uri = "servlet:/"+(path == null ? "" : path);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>         this.includeChildren = includeChildren;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>         this.allowDeletes = allowDeletes;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      }<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>      public String getType() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>         return (f.isDirectory() ? "dir" : "file");<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>      public LinkString getName() {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>         return new LinkString(f.getName(), uri);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>      public long getSize() {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>         return f.isDirectory() ? f.listFiles().length : f.length();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
+<span class="sourceLineNo">253</span><a name="line.253"></a>
+<span class="sourceLineNo">254</span>      public Date getLastModified() {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>         return new Date(f.lastModified());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>      @Html(format=HtmlFormat.HTML_CDC)<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      public List&lt;Action&gt; getActions() throws Exception {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>         List&lt;Action&gt; l = new ArrayList&lt;&gt;();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>         if (f.canRead() &amp;&amp; ! f.isDirectory()) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>            l.add(new Action("view", uri + "?method=VIEW"));<a name="line.262"></a>
+<span class="sourceLineNo">263</span>            l.add(new Action("highlighted", uri + "?method=VIEW&amp;highlight=true"));<a name="line.263"></a>
+<span class="sourceLineNo">264</span>            l.add(new Action("parsed", uri + "?method=PARSE"));<a name="line.264"></a>
+<span class="sourceLineNo">265</span>            l.add(new Action("download", uri + "?method=DOWNLOAD"));<a name="line.265"></a>
+<span class="sourceLineNo">266</span>            if (allowDeletes)<a name="line.266"></a>
+<span class="sourceLineNo">267</span>               l.add(new Action("delete", uri + "?method=DELETE"));<a name="line.267"></a>
+<span class="sourceLineNo">268</span>         }<a name="line.268"></a>
+<span class="sourceLineNo">269</span>         return l;<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>      public Set&lt;FileResource&gt; getFiles() {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>         if (f.isFile() || ! includeChildren)<a name="line.273"></a>
+<span class="sourceLineNo">274</span>            return null;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>         Set&lt;FileResource&gt; s = new TreeSet&lt;&gt;(FILE_COMPARATOR);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>         for (File fc : f.listFiles(FILE_FILTER))<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            s.add(new FileResource(fc, (path != null ? (path + '/') : "") + urlEncode(fc.getName()), allowDeletes, false));<a name="line.277"></a>
+<span class="sourceLineNo">278</span>         return s;<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>      static final FileFilter FILE_FILTER = new FileFilter() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>         @Override /* FileFilter */<a name="line.282"></a>
+<span class="sourceLineNo">283</span>         public boolean accept(File f) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>            return f.isDirectory() || f.getName().endsWith(".log");<a name="line.284"></a>
+<span class="sourceLineNo">285</span>         }<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>      static final Comparator&lt;FileResource&gt; FILE_COMPARATOR = new Comparator&lt;FileResource&gt;() {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>         @Override /* Comparator */<a name="line.289"></a>
+<span class="sourceLineNo">290</span>         public int compare(FileResource o1, FileResource o2) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>            int c = o1.getType().compareTo(o2.getType());<a name="line.291"></a>
+<span class="sourceLineNo">292</span>            return c != 0 ? c : o1.getName().compareTo(o2.getName());<a name="line.292"></a>
+<span class="sourceLineNo">293</span>         }<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><a name="line.297"></a>
+<span class="sourceLineNo">298</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.298"></a>
+<span class="sourceLineNo">299</span>   // Helper methods<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>   private File getFile(String path) throws NotFound {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      if (path == null)<a name="line.303"></a>
+<span class="sourceLineNo">304</span>         return logDir;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      File f = new File(logDir.getAbsolutePath() + '/' + path);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      if (f.exists())<a name="line.306"></a>
+<span class="sourceLineNo">307</span>         return f;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      throw new NotFound("File not found.");<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>   private void deleteFile(File f) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      if (! allowDeletes)<a name="line.312"></a>
+<span class="sourceLineNo">313</span>         throw new MethodNotAllowed("DELETE not enabled");<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      if (f.isDirectory()) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>         File[] files = f.listFiles();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>         if (files != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>            for (File fc : files)<a name="line.317"></a>
+<span class="sourceLineNo">318</span>               deleteFile(fc);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>         }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      if (! f.delete())<a name="line.321"></a>
+<span class="sourceLineNo">322</span>         throw new Forbidden("Could not delete file {0}", f.getAbsolutePath()) ;<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>   private static BufferedReader getReader(File f) throws IOException {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      return new BufferedReader(new InputStreamReader(new FileInputStream(f), Charset.defaultCharset()));<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   }<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>   private Object getReader(File f, final Date start, final Date end, final String thread, final String[] loggers, final String[] severity) throws IOException {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      if (start == null &amp;&amp; end == null &amp;&amp; thread == null &amp;&amp; loggers == null)<a name="line.330"></a>
+<span class="sourceLineNo">331</span>         return getReader(f);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      return getLogParser(f, start, end, thread, loggers, severity);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   }<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>   private LogParser getLogParser(File f, final Date start, final Date end, final String thread, final String[] loggers, final String[] severity) throws IOException {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      return new LogParser(leFormatter, f, start, end, thread, loggers, severity);<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/resources/LogsResource.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/resources/LogsResource.html
new file mode 100644
index 0000000..17dc3b1
--- /dev/null
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/microservice/resources/LogsResource.html
@@ -0,0 +1,410 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../javadoc.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>// ***************************************************************************************************************************<a name="line.1"></a>
+<span class="sourceLineNo">002</span>// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *<a name="line.2"></a>
+<span class="sourceLineNo">003</span>// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *<a name="line.3"></a>
+<span class="sourceLineNo">004</span>// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *<a name="line.4"></a>
+<span class="sourceLineNo">005</span>// * with the License.  You may obtain a copy of the License at                                                              *<a name="line.5"></a>
+<span class="sourceLineNo">006</span>// *                                                                                                                         *<a name="line.6"></a>
+<span class="sourceLineNo">007</span>// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *<a name="line.7"></a>
+<span class="sourceLineNo">008</span>// *                                                                                                                         *<a name="line.8"></a>
+<span class="sourceLineNo">009</span>// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *<a name="line.9"></a>
+<span class="sourceLineNo">010</span>// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *<a name="line.10"></a>
+<span class="sourceLineNo">011</span>// * specific language governing permissions and limitations under the License.                                              *<a name="line.11"></a>
+<span class="sourceLineNo">012</span>// ***************************************************************************************************************************<a name="line.12"></a>
+<span class="sourceLineNo">013</span>package org.apache.juneau.microservice.resources;<a name="line.13"></a>
+<span class="sourceLineNo">014</span><a name="line.14"></a>
+<span class="sourceLineNo">015</span>import static org.apache.juneau.rest.annotation.HookEvent.*;<a name="line.15"></a>
+<span class="sourceLineNo">016</span>import static org.apache.juneau.internal.StringUtils.*;<a name="line.16"></a>
+<span class="sourceLineNo">017</span><a name="line.17"></a>
+<span class="sourceLineNo">018</span>import java.io.*;<a name="line.18"></a>
+<span class="sourceLineNo">019</span>import java.nio.charset.*;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.util.*;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.juneau.annotation.*;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.juneau.config.*;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.juneau.dto.*;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.juneau.html.annotation.*;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.juneau.http.annotation.Path;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.juneau.http.annotation.Query;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.juneau.http.annotation.Response;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.juneau.http.response.*;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.juneau.rest.*;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.juneau.rest.annotation.*;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.juneau.rest.beans.*;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.juneau.rest.config.*;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.juneau.rest.converter.*;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.juneau.rest.servlet.*;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>/**<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * REST resource for viewing and accessing log files.<a name="line.38"></a>
+<span class="sourceLineNo">039</span> */<a name="line.39"></a>
+<span class="sourceLineNo">040</span>@Rest(<a name="line.40"></a>
+<span class="sourceLineNo">041</span>   path="/logs",<a name="line.41"></a>
+<span class="sourceLineNo">042</span>   title="Log files",<a name="line.42"></a>
+<span class="sourceLineNo">043</span>   description="Log files from this service",<a name="line.43"></a>
+<span class="sourceLineNo">044</span>   allowedMethodParams="*"<a name="line.44"></a>
+<span class="sourceLineNo">045</span>)<a name="line.45"></a>
+<span class="sourceLineNo">046</span>@HtmlConfig(uriAnchorText="PROPERTY_NAME")<a name="line.46"></a>
+<span class="sourceLineNo">047</span>@SuppressWarnings("javadoc")<a name="line.47"></a>
+<span class="sourceLineNo">048</span>public class LogsResource extends BasicRestServlet implements BasicUniversalConfig {<a name="line.48"></a>
+<span class="sourceLineNo">049</span>   private static final long serialVersionUID = 1L;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>   //-------------------------------------------------------------------------------------------------------------------<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   // Instance<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   //-------------------------------------------------------------------------------------------------------------------<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>   private File logDir;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   private LogEntryFormatter leFormatter;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   boolean allowDeletes;<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>   @RestHook(INIT)<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   public void init(Config config) throws Exception {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      logDir = new File(config.get("Logging/logDir").asString().orElse("logs"));<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      allowDeletes = config.get("Logging/allowDeletes").asBoolean().orElse(true);<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      leFormatter = new LogEntryFormatter(<a name="line.63"></a>
+<span class="sourceLineNo">064</span>         config.get("Logging/format").asString().orElse("[{date} {level}] {msg}%n"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>         config.get("Logging/dateFormat").asString().orElse("yyyy.MM.dd hh:mm:ss"),<a name="line.65"></a>
+<span class="sourceLineNo">066</span>         config.get("Logging/useStackTraceHashes").asBoolean().orElse(true)<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><a name="line.69"></a>
+<span class="sourceLineNo">070</span>   @RestGet(<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      path="/*",<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      summary="View information on file or directory",<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      description="Returns information about the specified file or directory."<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   )<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   @HtmlDocConfig(<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      nav={"&lt;h5&gt;Folder:  $RA{fullPath}&lt;/h5&gt;"}<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   )<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   public FileResource getFile(RestRequest req, @Path("/*") String path) throws NotFound, Exception {<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>      File dir = getFile(path);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      req.setAttribute("fullPath", dir.getAbsolutePath());<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>      return new FileResource(dir, path, allowDeletes, true);<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>   @RestOp(<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      method="VIEW",<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      path="/*",<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      summary="View contents of log file",<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      description="View the contents of a log file."<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   )<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   public void viewFile(<a name="line.92"></a>
+<span class="sourceLineNo">093</span>         RestResponse res,<a name="line.93"></a>
+<span class="sourceLineNo">094</span>         @Path("/*") String path,<a name="line.94"></a>
+<span class="sourceLineNo">095</span>         @Query(name="highlight", schema=@Schema(d="Add severity color highlighting.")) boolean highlight,<a name="line.95"></a>
+<span class="sourceLineNo">096</span>         @Query(name="start", schema=@Schema(d="Start timestamp (ISO8601, full or partial).\nDon't print lines logged before the specified timestamp.\nUse any of the following formats: yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-ddThh, yyyy-MM-ddThh:mm, yyyy-MM-ddThh:mm:ss, yyyy-MM-ddThh:mm:ss.SSS")) String start,<a name="line.96"></a>
+<span class="sourceLineNo">097</span>         @Query(name="end", schema=@Schema(d="End timestamp (ISO8601, full or partial).\nDon't print lines logged after the specified timestamp.\nUse any of the following formats: yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-ddThh, yyyy-MM-ddThh:mm, yyyy-MM-ddThh:mm:ss, yyyy-MM-ddThh:mm:ss.SSS")) String end,<a name="line.97"></a>
+<span class="sourceLineNo">098</span>         @Query(name="thread", schema=@Schema(d="Thread name filter.\nOnly show log entries with the specified thread name.")) String thread,<a name="line.98"></a>
+<span class="sourceLineNo">099</span>         @Query(name="loggers", schema=@Schema(d="Logger filter (simple class name).\nOnly show log entries if they were produced by one of the specified loggers.")) String[] loggers,<a name="line.99"></a>
+<span class="sourceLineNo">100</span>         @Query(name="severity",schema=@Schema( d="Severity filter.\nOnly show log entries with the specified severity.")) String[] severity<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      ) throws NotFound, MethodNotAllowed, IOException {<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>      File f = getFile(path);<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>      Date startDate = parseIsoDate(start), endDate = parseIsoDate(end);<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>      if (! highlight) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>         Object o = getReader(f, startDate, endDate, thread, loggers, severity);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>         res.setContentType("text/plain");<a name="line.109"></a>
+<span class="sourceLineNo">110</span>         if (o instanceof Reader)<a name="line.110"></a>
+<span class="sourceLineNo">111</span>            res.setContent(o);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>         else {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>            try (LogParser p = (LogParser)o; Writer w = res.getNegotiatedWriter()) {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>               p.writeTo(w);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>            }<a name="line.115"></a>
+<span class="sourceLineNo">116</span>         }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>         return;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>      res.setContentType("text/html");<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      try (PrintWriter w = res.getNegotiatedWriter()) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>         w.println("&lt;html&gt;&lt;body style='font-family:monospace;font-size:8pt;white-space:pre;'&gt;");<a name="line.122"></a>
+<span class="sourceLineNo">123</span>         try (LogParser lp = getLogParser(f, startDate, endDate, thread, loggers, severity)) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>            if (! lp.hasNext())<a name="line.124"></a>
+<span class="sourceLineNo">125</span>               w.append("&lt;span style='color:gray'&gt;[EMPTY]&lt;/span&gt;");<a name="line.125"></a>
+<span class="sourceLineNo">126</span>            else for (LogParser.Entry le : lp) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>               char s = le.severity.charAt(0);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>               String color = "black";<a name="line.128"></a>
+<span class="sourceLineNo">129</span>               //SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST<a name="line.129"></a>
+<span class="sourceLineNo">130</span>               if (s == 'I')<a name="line.130"></a>
+<span class="sourceLineNo">131</span>                  color = "#006400";<a name="line.131"></a>
+<span class="sourceLineNo">132</span>               else if (s == 'W')<a name="line.132"></a>
+<span class="sourceLineNo">133</span>                  color = "#CC8400";<a name="line.133"></a>
+<span class="sourceLineNo">134</span>               else if (s == 'E' || s == 'S')<a name="line.134"></a>
+<span class="sourceLineNo">135</span>                  color = "#DD0000";<a name="line.135"></a>
+<span class="sourceLineNo">136</span>               else if (s == 'D' || s == 'F' || s == 'T')<a name="line.136"></a>
+<span class="sourceLineNo">137</span>                  color = "#000064";<a name="line.137"></a>
+<span class="sourceLineNo">138</span>               w.append("&lt;span style='color:").append(color).append("'&gt;");<a name="line.138"></a>
+<span class="sourceLineNo">139</span>               le.appendHtml(w).append("&lt;/span&gt;");<a name="line.139"></a>
+<span class="sourceLineNo">140</span>            }<a name="line.140"></a>
+<span class="sourceLineNo">141</span>            w.append("&lt;/body&gt;&lt;/html&gt;");<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>   }<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>   @RestOp(<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      method="PARSE",<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      path="/*",<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      converters=Queryable.class,<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      summary="View parsed contents of file",<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      description="View the parsed contents of a file.",<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      swagger=@OpSwagger(<a name="line.152"></a>
+<span class="sourceLineNo">153</span>         parameters={<a name="line.153"></a>
+<span class="sourceLineNo">154</span>             Queryable.SWAGGER_PARAMS<a name="line.154"></a>
+<span class="sourceLineNo">155</span>         }<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      )<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   )<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   @HtmlDocConfig(<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      nav={"&lt;h5&gt;Folder:  $RA{fullPath}&lt;/h5&gt;"}<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   )<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   public LogParser viewParsedEntries(<a name="line.161"></a>
+<span class="sourceLineNo">162</span>         RestRequest req,<a name="line.162"></a>
+<span class="sourceLineNo">163</span>         @Path("/*") String path,<a name="line.163"></a>
+<span class="sourceLineNo">164</span>         @Query(name="start", schema=@Schema(d="Start timestamp (ISO8601, full or partial).\nDon't print lines logged before the specified timestamp.\nUse any of the following formats: yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-ddThh, yyyy-MM-ddThh:mm, yyyy-MM-ddThh:mm:ss, yyyy-MM-ddThh:mm:ss.SSS")) String start,<a name="line.164"></a>
+<span class="sourceLineNo">165</span>         @Query(name="end", schema=@Schema(d="End timestamp (ISO8601, full or partial).\nDon't print lines logged after the specified timestamp.\nUse any of the following formats: yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-ddThh, yyyy-MM-ddThh:mm, yyyy-MM-ddThh:mm:ss, yyyy-MM-ddThh:mm:ss.SSS")) String end,<a name="line.165"></a>
+<span class="sourceLineNo">166</span>         @Query(name="thread", schema=@Schema(d="Thread name filter.\nOnly show log entries with the specified thread name.")) String thread,<a name="line.166"></a>
+<span class="sourceLineNo">167</span>         @Query(name="loggers", schema=@Schema(d="Logger filter (simple class name).\nOnly show log entries if they were produced by one of the specified loggers.")) String[] loggers,<a name="line.167"></a>
+<span class="sourceLineNo">168</span>         @Query(name="severity", schema=@Schema(d="Severity filter.\nOnly show log entries with the specified severity.")) String[] severity<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      ) throws NotFound, IOException {<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>      File f = getFile(path);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      req.setAttribute("fullPath", f.getAbsolutePath());<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>      Date startDate = parseIsoDate(start), endDate = parseIsoDate(end);<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>      return getLogParser(f, startDate, endDate, thread, loggers, severity);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   }<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>   @RestOp(<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      method="DOWNLOAD",<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      path="/*",<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      summary="Download file",<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      description="Download the contents of a file.\nContent-Type is set to 'application/octet-stream'."<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   )<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   public FileContents downloadFile(RestResponse res, @Path("/*") String path) throws NotFound, MethodNotAllowed {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      res.setContentType("application/octet-stream");<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      try {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>         return new FileContents(getFile(path));<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      } catch (FileNotFoundException e) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>         throw new NotFound("File not found");<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      }<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>   @RestDelete(<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      path="/*",<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      summary="Delete log file",<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      description="Delete a log file on the file system."<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   )<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   public RedirectToRoot deleteFile(@Path("/*") String path) throws MethodNotAllowed {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      deleteFile(getFile(path));<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      return new RedirectToRoot();<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   // Helper beans<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>   @Response(schema=@Schema(type="string",format="binary",description="Contents of file"))<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   static class FileContents extends FileInputStream {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      public FileContents(File file) throws FileNotFoundException {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>         super(file);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      }<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   }<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>   @Response(schema=@Schema(description="Redirect to root page on success"))<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   static class RedirectToRoot extends SeeOtherRoot {}<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>   @Response(schema=@Schema(description="File action"))<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   public static class Action extends LinkString {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      public Action(String name, String uri, Object...uriArgs) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>         super(name, uri, uriArgs);<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><a name="line.225"></a>
+<span class="sourceLineNo">226</span>   @Response(schema=@Schema(description="File or directory details"))<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   @Bean(properties="type,name,size,lastModified,actions,files")<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   public static class FileResource {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      private final File f;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      private final String path;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      private final String uri;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      private final boolean includeChildren, allowDeletes;<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>      public FileResource(File f, String path, boolean allowDeletes, boolean includeChildren) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>         this.f = f;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>         this.path = path;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>         this.uri = "servlet:/"+(path == null ? "" : path);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>         this.includeChildren = includeChildren;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>         this.allowDeletes = allowDeletes;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      }<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>      public String getType() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>         return (f.isDirectory() ? "dir" : "file");<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>      public LinkString getName() {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>         return new LinkString(f.getName(), uri);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>      public long getSize() {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>         return f.isDirectory() ? f.listFiles().length : f.length();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
+<span class="sourceLineNo">253</span><a name="line.253"></a>
+<span class="sourceLineNo">254</span>      public Date getLastModified() {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>         return new Date(f.lastModified());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>      @Html(format=HtmlFormat.HTML_CDC)<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      public List&lt;Action&gt; getActions() throws Exception {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>         List&lt;Action&gt; l = new ArrayList&lt;&gt;();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>         if (f.canRead() &amp;&amp; ! f.isDirectory()) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>            l.add(new Action("view", uri + "?method=VIEW"));<a name="line.262"></a>
+<span class="sourceLineNo">263</span>            l.add(new Action("highlighted", uri + "?method=VIEW&amp;highlight=true"));<a name="line.263"></a>
+<span class="sourceLineNo">264</span>            l.add(new Action("parsed", uri + "?method=PARSE"));<a name="line.264"></a>
+<span class="sourceLineNo">265</span>            l.add(new Action("download", uri + "?method=DOWNLOAD"));<a name="line.265"></a>
+<span class="sourceLineNo">266</span>            if (allowDeletes)<a name="line.266"></a>
+<span class="sourceLineNo">267</span>               l.add(new Action("delete", uri + "?method=DELETE"));<a name="line.267"></a>
+<span class="sourceLineNo">268</span>         }<a name="line.268"></a>
+<span class="sourceLineNo">269</span>         return l;<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>      public Set&lt;FileResource&gt; getFiles() {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>         if (f.isFile() || ! includeChildren)<a name="line.273"></a>
+<span class="sourceLineNo">274</span>            return null;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>         Set&lt;FileResource&gt; s = new TreeSet&lt;&gt;(FILE_COMPARATOR);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>         for (File fc : f.listFiles(FILE_FILTER))<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            s.add(new FileResource(fc, (path != null ? (path + '/') : "") + urlEncode(fc.getName()), allowDeletes, false));<a name="line.277"></a>
+<span class="sourceLineNo">278</span>         return s;<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>      static final FileFilter FILE_FILTER = new FileFilter() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>         @Override /* FileFilter */<a name="line.282"></a>
+<span class="sourceLineNo">283</span>         public boolean accept(File f) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>            return f.isDirectory() || f.getName().endsWith(".log");<a name="line.284"></a>
+<span class="sourceLineNo">285</span>         }<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>      static final Comparator&lt;FileResource&gt; FILE_COMPARATOR = new Comparator&lt;FileResource&gt;() {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>         @Override /* Comparator */<a name="line.289"></a>
+<span class="sourceLineNo">290</span>         public int compare(FileResource o1, FileResource o2) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>            int c = o1.getType().compareTo(o2.getType());<a name="line.291"></a>
+<span class="sourceLineNo">292</span>            return c != 0 ? c : o1.getName().compareTo(o2.getName());<a name="line.292"></a>
+<span class="sourceLineNo">293</span>         }<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><a name="line.297"></a>
+<span class="sourceLineNo">298</span>   //-----------------------------------------------------------------------------------------------------------------<a name="line.298"></a>
+<span class="sourceLineNo">299</span>   // Helper methods<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>   private File getFile(String path) throws NotFound {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      if (path == null)<a name="line.303"></a>
+<span class="sourceLineNo">304</span>         return logDir;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      File f = new File(logDir.getAbsolutePath() + '/' + path);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      if (f.exists())<a name="line.306"></a>
+<span class="sourceLineNo">307</span>         return f;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      throw new NotFound("File not found.");<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>   private void deleteFile(File f) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      if (! allowDeletes)<a name="line.312"></a>
+<span class="sourceLineNo">313</span>         throw new MethodNotAllowed("DELETE not enabled");<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      if (f.isDirectory()) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>         File[] files = f.listFiles();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>         if (files != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>            for (File fc : files)<a name="line.317"></a>
+<span class="sourceLineNo">318</span>               deleteFile(fc);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>         }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      if (! f.delete())<a name="line.321"></a>
+<span class="sourceLineNo">322</span>         throw new Forbidden("Could not delete file {0}", f.getAbsolutePath()) ;<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>   private static BufferedReader getReader(File f) throws IOException {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      return new BufferedReader(new InputStreamReader(new FileInputStream(f), Charset.defaultCharset()));<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   }<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>   private Object getReader(File f, final Date start, final Date end, final String thread, final String[] loggers, final String[] severity) throws IOException {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      if (start == null &amp;&amp; end == null &amp;&amp; thread == null &amp;&amp; loggers == null)<a name="line.330"></a>
+<span class="sourceLineNo">331</span>         return getReader(f);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      return getLogParser(f, start, end, thread, loggers, severity);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   }<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>   private LogParser getLogParser(File f, final Date start, final Date end, final String thread, final String[] loggers, final String[] severity) throws IOException {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      return new LogParser(leFormatter, f, start, end, thread, loggers, severity);<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/arg/FormDataArg.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/arg/FormDataArg.html
index 260c710..d511b44 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/arg/FormDataArg.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/arg/FormDataArg.html
@@ -65,7 +65,7 @@
 <span class="sourceLineNo">057</span>   private final boolean multi;<a name="line.57"></a>
 <span class="sourceLineNo">058</span>   private final HttpPartParser partParser;<a name="line.58"></a>
 <span class="sourceLineNo">059</span>   private final HttpPartSchema schema;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>   private final String name;<a name="line.60"></a>
+<span class="sourceLineNo">060</span>   private final String name, def;<a name="line.60"></a>
 <span class="sourceLineNo">061</span>   private final ClassInfo type;<a name="line.61"></a>
 <span class="sourceLineNo">062</span><a name="line.62"></a>
 <span class="sourceLineNo">063</span>   /**<a name="line.63"></a>
@@ -89,41 +89,42 @@
 <span class="sourceLineNo">081</span>    */<a name="line.81"></a>
 <span class="sourceLineNo">082</span>   protected FormDataArg(ParamInfo pi, AnnotationWorkList annotations) {<a name="line.82"></a>
 <span class="sourceLineNo">083</span>      this.name = findName(pi).orElseThrow(()-&gt;new ArgException(pi, "@FormData used without name or value"));<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      this.type = pi.getParameterType();<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      this.schema = HttpPartSchema.create(FormData.class, pi);<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      Class&lt;? extends HttpPartParser&gt; pp = schema.getParser();<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      this.partParser = pp != null ? HttpPartParser.creator().type(pp).apply(annotations).create() : null;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      this.multi = schema.getCollectionFormat() == HttpPartCollectionFormat.MULTI;<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>      if (multi &amp;&amp; ! type.isCollectionOrArray())<a name="line.90"></a>
-<span class="sourceLineNo">091</span>         throw new ArgException(pi, "Use of multipart flag on @FormData parameter that is not an array or Collection");<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   }<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>   @SuppressWarnings({ "rawtypes", "unchecked" })<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   @Override /* RestOpArg */<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   public Object resolve(RestOpSession opSession) throws Exception {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      RestRequest req = opSession.getRequest();<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      HttpPartParserSession ps = partParser == null ? req.getPartParserSession() : partParser.getPartSession();<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      RequestFormParams rh = req.getFormParams();<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      BeanSession bs = req.getBeanSession();<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      ClassMeta&lt;?&gt; cm = bs.getClassMeta(type.innerType());<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>      if (multi) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>         Collection c = cm.isArray() ? list() : (Collection)(cm.canCreateNewInstance() ? cm.newInstance() : new JsonList());<a name="line.104"></a>
-<span class="sourceLineNo">105</span>         rh.getAll(name).stream().map(x -&gt; x.parser(ps).schema(schema).as(cm.getElementType()).orElse(null)).forEach(x -&gt; c.add(x));<a name="line.105"></a>
-<span class="sourceLineNo">106</span>         return cm.isArray() ? ArrayUtils.toArray(c, cm.getElementType().getInnerClass()) : c;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      }<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>      if (cm.isMapOrBean() &amp;&amp; isOneOf(name, "*", "")) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>         JsonMap m = new JsonMap();<a name="line.110"></a>
-<span class="sourceLineNo">111</span>         for (RequestFormParam e : rh.getAll())<a name="line.111"></a>
-<span class="sourceLineNo">112</span>            m.put(e.getName(), e.parser(ps).schema(schema == null ? null : schema.getProperty(e.getName())).as(cm.getValueType()).orElse(null));<a name="line.112"></a>
-<span class="sourceLineNo">113</span>         return req.getBeanSession().convertToType(m, cm);<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>      return rh.getLast(name).parser(ps).schema(schema).as(type.innerType()).orElse(null);<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">084</span>      this.def = findDef(pi).orElse(null);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      this.type = pi.getParameterType();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      this.schema = HttpPartSchema.create(FormData.class, pi);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      Class&lt;? extends HttpPartParser&gt; pp = schema.getParser();<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      this.partParser = pp != null ? HttpPartParser.creator().type(pp).apply(annotations).create() : null;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      this.multi = schema.getCollectionFormat() == HttpPartCollectionFormat.MULTI;<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>      if (multi &amp;&amp; ! type.isCollectionOrArray())<a name="line.91"></a>
+<span class="sourceLineNo">092</span>         throw new ArgException(pi, "Use of multipart flag on @FormData parameter that is not an array or Collection");<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>   @SuppressWarnings({ "rawtypes", "unchecked" })<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   @Override /* RestOpArg */<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   public Object resolve(RestOpSession opSession) throws Exception {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      RestRequest req = opSession.getRequest();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      HttpPartParserSession ps = partParser == null ? req.getPartParserSession() : partParser.getPartSession();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      RequestFormParams rh = req.getFormParams();<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      BeanSession bs = req.getBeanSession();<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      ClassMeta&lt;?&gt; cm = bs.getClassMeta(type.innerType());<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>      if (multi) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>         Collection c = cm.isArray() ? list() : (Collection)(cm.canCreateNewInstance() ? cm.newInstance() : new JsonList());<a name="line.105"></a>
+<span class="sourceLineNo">106</span>         rh.getAll(name).stream().map(x -&gt; x.parser(ps).schema(schema).as(cm.getElementType()).orElse(null)).forEach(x -&gt; c.add(x));<a name="line.106"></a>
+<span class="sourceLineNo">107</span>         return cm.isArray() ? ArrayUtils.toArray(c, cm.getElementType().getInnerClass()) : c;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>      if (cm.isMapOrBean() &amp;&amp; isOneOf(name, "*", "")) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>         JsonMap m = new JsonMap();<a name="line.111"></a>
+<span class="sourceLineNo">112</span>         for (RequestFormParam e : rh.getAll())<a name="line.112"></a>
+<span class="sourceLineNo">113</span>            m.put(e.getName(), e.parser(ps).schema(schema == null ? null : schema.getProperty(e.getName())).as(cm.getValueType()).orElse(null));<a name="line.113"></a>
+<span class="sourceLineNo">114</span>         return req.getBeanSession().convertToType(m, cm);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>      return rh.getLast(name).parser(ps).schema(schema).def(def).as(type.innerType()).orElse(null);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   }<a name="line.118"></a>
+<span class="sourceLineNo">119</span>}<a name="line.119"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/arg/HeaderArg.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/arg/HeaderArg.html
index 9e2345f..9db9ccd 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/arg/HeaderArg.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/arg/HeaderArg.html
@@ -106,7 +106,7 @@
 <span class="sourceLineNo">098</span>   private final HttpPartParser partParser;<a name="line.98"></a>
 <span class="sourceLineNo">099</span>   private final HttpPartSchema schema;<a name="line.99"></a>
 <span class="sourceLineNo">100</span>   private final boolean multi;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   private final String name;<a name="line.101"></a>
+<span class="sourceLineNo">101</span>   private final String name, def;<a name="line.101"></a>
 <span class="sourceLineNo">102</span>   private final ClassInfo type;<a name="line.102"></a>
 <span class="sourceLineNo">103</span><a name="line.103"></a>
 <span class="sourceLineNo">104</span>   /**<a name="line.104"></a>
@@ -130,41 +130,42 @@
 <span class="sourceLineNo">122</span>    */<a name="line.122"></a>
 <span class="sourceLineNo">123</span>   protected HeaderArg(ParamInfo pi, AnnotationWorkList annotations) {<a name="line.123"></a>
 <span class="sourceLineNo">124</span>      this.name = findName(pi).orElseThrow(() -&gt; new ArgException(pi, "@Header used without name or value"));<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      this.type = pi.getParameterType();<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      this.schema = HttpPartSchema.create(Header.class, pi);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      Class&lt;? extends HttpPartParser&gt; pp = schema.getParser();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      this.partParser = pp != null ? HttpPartParser.creator().type(pp).apply(annotations).create() : null;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      this.multi = schema.getCollectionFormat() == HttpPartCollectionFormat.MULTI;<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>      if (multi &amp;&amp; ! type.isCollectionOrArray())<a name="line.131"></a>
-<span class="sourceLineNo">132</span>         throw new ArgException(pi, "Use of multipart flag on @Header parameter that is not an array or Collection");<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   }<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>   @SuppressWarnings({ "rawtypes", "unchecked" })<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   @Override /* RestOpArg */<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   public Object resolve(RestOpSession opSession) throws Exception {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      RestRequest req = opSession.getRequest();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      HttpPartParserSession ps = partParser == null ? req.getPartParserSession() : partParser.getPartSession();<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      RequestHeaders rh = req.getHeaders();<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      BeanSession bs = req.getBeanSession();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      ClassMeta&lt;?&gt; cm = bs.getClassMeta(type.innerType());<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>      if (multi) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>         Collection c = cm.isArray() ? list() : (Collection)(cm.canCreateNewInstance() ? cm.newInstance() : new JsonList());<a name="line.145"></a>
-<span class="sourceLineNo">146</span>         rh.getAll(name).stream().map(x -&gt; x.parser(ps).schema(schema).as(cm.getElementType()).orElse(null)).forEach(x -&gt; c.add(x));<a name="line.146"></a>
-<span class="sourceLineNo">147</span>         return cm.isArray() ? ArrayUtils.toArray(c, cm.getElementType().getInnerClass()) : c;<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>      if (cm.isMapOrBean() &amp;&amp; isOneOf(name, "*", "")) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>         JsonMap m = new JsonMap();<a name="line.151"></a>
-<span class="sourceLineNo">152</span>         for (RequestHeader e : rh.getAll())<a name="line.152"></a>
-<span class="sourceLineNo">153</span>            m.put(e.getName(), e.parser(ps).schema(schema == null ? null : schema.getProperty(e.getName())).as(cm.getValueType()).orElse(null));<a name="line.153"></a>
-<span class="sourceLineNo">154</span>         return req.getBeanSession().convertToType(m, cm);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      }<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>      return rh.getLast(name).parser(ps).schema(schema).as(type.innerType()).orElse(null);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   }<a name="line.158"></a>
-<span class="sourceLineNo">159</span>}<a name="line.159"></a>
+<span class="sourceLineNo">125</span>      this.def = findDef(pi).orElse(null);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      this.type = pi.getParameterType();<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      this.schema = HttpPartSchema.create(Header.class, pi);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      Class&lt;? extends HttpPartParser&gt; pp = schema.getParser();<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      this.partParser = pp != null ? HttpPartParser.creator().type(pp).apply(annotations).create() : null;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      this.multi = schema.getCollectionFormat() == HttpPartCollectionFormat.MULTI;<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>      if (multi &amp;&amp; ! type.isCollectionOrArray())<a name="line.132"></a>
+<span class="sourceLineNo">133</span>         throw new ArgException(pi, "Use of multipart flag on @Header parameter that is not an array or Collection");<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>   @SuppressWarnings({ "rawtypes", "unchecked" })<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   @Override /* RestOpArg */<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   public Object resolve(RestOpSession opSession) throws Exception {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      RestRequest req = opSession.getRequest();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      HttpPartParserSession ps = partParser == null ? req.getPartParserSession() : partParser.getPartSession();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      RequestHeaders rh = req.getHeaders();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      BeanSession bs = req.getBeanSession();<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      ClassMeta&lt;?&gt; cm = bs.getClassMeta(type.innerType());<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>      if (multi) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>         Collection c = cm.isArray() ? list() : (Collection)(cm.canCreateNewInstance() ? cm.newInstance() : new JsonList());<a name="line.146"></a>
+<span class="sourceLineNo">147</span>         rh.getAll(name).stream().map(x -&gt; x.parser(ps).schema(schema).as(cm.getElementType()).orElse(null)).forEach(x -&gt; c.add(x));<a name="line.147"></a>
+<span class="sourceLineNo">148</span>         return cm.isArray() ? ArrayUtils.toArray(c, cm.getElementType().getInnerClass()) : c;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      }<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>      if (cm.isMapOrBean() &amp;&amp; isOneOf(name, "*", "")) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>         JsonMap m = new JsonMap();<a name="line.152"></a>
+<span class="sourceLineNo">153</span>         for (RequestHeader e : rh.getAll())<a name="line.153"></a>
+<span class="sourceLineNo">154</span>            m.put(e.getName(), e.parser(ps).schema(schema == null ? null : schema.getProperty(e.getName())).as(cm.getValueType()).orElse(null));<a name="line.154"></a>
+<span class="sourceLineNo">155</span>         return req.getBeanSession().convertToType(m, cm);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      }<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>      return rh.getLast(name).parser(ps).schema(schema).def(def).as(type.innerType()).orElse(null);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>}<a name="line.160"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/arg/PathArg.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/arg/PathArg.html
index 5df9752..da22272 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/arg/PathArg.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/arg/PathArg.html
@@ -58,7 +58,7 @@
 <span class="sourceLineNo">050</span>public class PathArg implements RestOpArg {<a name="line.50"></a>
 <span class="sourceLineNo">051</span>   private final HttpPartParser partParser;<a name="line.51"></a>
 <span class="sourceLineNo">052</span>   private final HttpPartSchema schema;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>   private final String name;<a name="line.53"></a>
+<span class="sourceLineNo">053</span>   private final String name, def;<a name="line.53"></a>
 <span class="sourceLineNo">054</span>   private final Type type;<a name="line.54"></a>
 <span class="sourceLineNo">055</span><a name="line.55"></a>
 <span class="sourceLineNo">056</span>   /**<a name="line.56"></a>
@@ -84,52 +84,53 @@
 <span class="sourceLineNo">076</span>    */<a name="line.76"></a>
 <span class="sourceLineNo">077</span>   protected PathArg(ParamInfo paramInfo, AnnotationWorkList annotations, UrlPathMatcher pathMatcher) {<a name="line.77"></a>
 <span class="sourceLineNo">078</span>      this.name = getName(paramInfo, pathMatcher);<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      this.type = paramInfo.getParameterType().innerType();<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      this.schema = HttpPartSchema.create(Path.class, paramInfo);<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      Class&lt;? extends HttpPartParser&gt; pp = schema.getParser();<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      this.partParser = pp != null ? HttpPartParser.creator().type(pp).apply(annotations).create() : null;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   }<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>   private String getName(ParamInfo pi, UrlPathMatcher pathMatcher) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      String p = findName(pi).orElse(null);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      if (p != null)<a name="line.87"></a>
-<span class="sourceLineNo">088</span>         return p;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      if (pathMatcher != null) {<a name="line.89"></a>
-<span class="sourceLineNo">090</span>         int idx = 0;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>         int i = pi.getIndex();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>         MethodInfo mi = pi.getMethod();<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>         for (int j = 0; j &lt; i; j++)<a name="line.94"></a>
-<span class="sourceLineNo">095</span>            if (mi.getParam(i).getAnnotation(Path.class) != null)<a name="line.95"></a>
-<span class="sourceLineNo">096</span>               idx++;<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>         String[] vars = pathMatcher.getVars();<a name="line.98"></a>
-<span class="sourceLineNo">099</span>         if (vars.length &lt;= idx)<a name="line.99"></a>
-<span class="sourceLineNo">100</span>            throw new ArgException(pi, "Number of attribute parameters exceeds the number of URL pattern variables");<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>         // Check for {#} variables.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>         String idxs = String.valueOf(idx);<a name="line.103"></a>
-<span class="sourceLineNo">104</span>         for (int j = 0; j &lt; vars.length; j++)<a name="line.104"></a>
-<span class="sourceLineNo">105</span>            if (StringUtils.isNumeric(vars[j]) &amp;&amp; vars[j].equals(idxs))<a name="line.105"></a>
-<span class="sourceLineNo">106</span>               return vars[j];<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>         return pathMatcher.getVars()[idx];<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      }<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      throw new ArgException(pi, "@Path used without name or value");<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   }<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>   @Override /* RestOpArg */<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   public Object resolve(RestOpSession opSession) throws Exception {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      RestRequest req = opSession.getRequest();<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      if (name.equals("*")) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>         JsonMap m = new JsonMap();<a name="line.117"></a>
-<span class="sourceLineNo">118</span>         req.getPathParams().getAll().stream().forEach(x -&gt; m.put(x.getName(), x.getValue()));<a name="line.118"></a>
-<span class="sourceLineNo">119</span>         return req.getBeanSession().convertToType(m, type);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      HttpPartParserSession ps = partParser == null ? req.getPartParserSession() : partParser.getPartSession();<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      return req.getPathParams().get(name).parser(ps).schema(schema).as(type).orElse(null);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   }<a name="line.123"></a>
-<span class="sourceLineNo">124</span>}<a name="line.124"></a>
+<span class="sourceLineNo">079</span>      this.def = findDef(paramInfo).orElse(null);<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      this.type = paramInfo.getParameterType().innerType();<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      this.schema = HttpPartSchema.create(Path.class, paramInfo);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      Class&lt;? extends HttpPartParser&gt; pp = schema.getParser();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      this.partParser = pp != null ? HttpPartParser.creator().type(pp).apply(annotations).create() : null;<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>   private String getName(ParamInfo pi, UrlPathMatcher pathMatcher) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      String p = findName(pi).orElse(null);<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      if (p != null)<a name="line.88"></a>
+<span class="sourceLineNo">089</span>         return p;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      if (pathMatcher != null) {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>         int idx = 0;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>         int i = pi.getIndex();<a name="line.92"></a>
+<span class="sourceLineNo">093</span>         MethodInfo mi = pi.getMethod();<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>         for (int j = 0; j &lt; i; j++)<a name="line.95"></a>
+<span class="sourceLineNo">096</span>            if (mi.getParam(i).getAnnotation(Path.class) != null)<a name="line.96"></a>
+<span class="sourceLineNo">097</span>               idx++;<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>         String[] vars = pathMatcher.getVars();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>         if (vars.length &lt;= idx)<a name="line.100"></a>
+<span class="sourceLineNo">101</span>            throw new ArgException(pi, "Number of attribute parameters exceeds the number of URL pattern variables");<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>         // Check for {#} variables.<a name="line.103"></a>
+<span class="sourceLineNo">104</span>         String idxs = String.valueOf(idx);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>         for (int j = 0; j &lt; vars.length; j++)<a name="line.105"></a>
+<span class="sourceLineNo">106</span>            if (StringUtils.isNumeric(vars[j]) &amp;&amp; vars[j].equals(idxs))<a name="line.106"></a>
+<span class="sourceLineNo">107</span>               return vars[j];<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>         return pathMatcher.getVars()[idx];<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      }<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      throw new ArgException(pi, "@Path used without name or value");<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   }<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>   @Override /* RestOpArg */<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   public Object resolve(RestOpSession opSession) throws Exception {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      RestRequest req = opSession.getRequest();<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      if (name.equals("*")) {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>         JsonMap m = new JsonMap();<a name="line.118"></a>
+<span class="sourceLineNo">119</span>         req.getPathParams().getAll().stream().forEach(x -&gt; m.put(x.getName(), x.getValue()));<a name="line.119"></a>
+<span class="sourceLineNo">120</span>         return req.getBeanSession().convertToType(m, type);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      }<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      HttpPartParserSession ps = partParser == null ? req.getPartParserSession() : partParser.getPartSession();<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      return req.getPathParams().get(name).parser(ps).schema(schema).def(def).as(type).orElse(null);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   }<a name="line.124"></a>
+<span class="sourceLineNo">125</span>}<a name="line.125"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/arg/QueryArg.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/arg/QueryArg.html
index 20c01a1..4516f2d 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/arg/QueryArg.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/arg/QueryArg.html
@@ -22,107 +22,109 @@
 <span class="sourceLineNo">014</span><a name="line.14"></a>
 <span class="sourceLineNo">015</span>import static org.apache.juneau.internal.CollectionUtils.*;<a name="line.15"></a>
 <span class="sourceLineNo">016</span>import static org.apache.juneau.internal.StringUtils.*;<a name="line.16"></a>
-<span class="sourceLineNo">017</span><a name="line.17"></a>
-<span class="sourceLineNo">018</span>import java.util.*;<a name="line.18"></a>
-<span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import org.apache.juneau.*;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.juneau.annotation.*;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.juneau.collections.*;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.juneau.http.annotation.*;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.juneau.httppart.*;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.juneau.internal.*;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.juneau.reflect.*;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.juneau.rest.*;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.juneau.rest.annotation.*;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.juneau.rest.httppart.*;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
-<span class="sourceLineNo">032</span> * Resolves method parameters and parameter types annotated with {@link Query} on {@link RestOp}-annotated Java methods.<a name="line.32"></a>
-<span class="sourceLineNo">033</span> *<a name="line.33"></a>
-<span class="sourceLineNo">034</span> * &lt;p&gt;<a name="line.34"></a>
-<span class="sourceLineNo">035</span> * The parameter value is resolved using:<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * &lt;p class='bjava'&gt;<a name="line.36"></a>
-<span class="sourceLineNo">037</span> *    &lt;jv&gt;opSession&lt;/jv&gt;<a name="line.37"></a>
-<span class="sourceLineNo">038</span> *       .{@link RestOpSession#getRequest() getRequest}()<a name="line.38"></a>
-<span class="sourceLineNo">039</span> *       .{@link RestRequest#getQueryParams() getQueryParams}()<a name="line.39"></a>
-<span class="sourceLineNo">040</span> *       .{@link RequestQueryParams#get(String) get}(&lt;jv&gt;name&lt;/jv&gt;)<a name="line.40"></a>
-<span class="sourceLineNo">041</span> *       .{@link RequestQueryParam#as(Class) as}(&lt;jv&gt;type&lt;/jv&gt;);<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * &lt;/p&gt;<a name="line.42"></a>
-<span class="sourceLineNo">043</span> *<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * &lt;p&gt;<a name="line.44"></a>
-<span class="sourceLineNo">045</span> * {@link HttpPartSchema schema} is derived from the {@link Query} annotation.<a name="line.45"></a>
-<span class="sourceLineNo">046</span> *<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * &lt;p&gt;<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * If the {@link Schema#collectionFormat()} value is {@link HttpPartCollectionFormat#MULTI}, then the data type can be a {@link Collection} or array.<a name="line.48"></a>
-<span class="sourceLineNo">049</span> *<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * &lt;ul class='seealso'&gt;<a name="line.50"></a>
-<span class="sourceLineNo">051</span> *    &lt;li class='link'&gt;{@doc jrs.JavaMethodParameters}<a name="line.51"></a>
-<span class="sourceLineNo">052</span> *    &lt;li class='extlink'&gt;{@source}<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * &lt;/ul&gt;<a name="line.53"></a>
-<span class="sourceLineNo">054</span> */<a name="line.54"></a>
-<span class="sourceLineNo">055</span>public class QueryArg implements RestOpArg {<a name="line.55"></a>
-<span class="sourceLineNo">056</span>   private final boolean multi;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   private final HttpPartParser partParser;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   private final HttpPartSchema schema;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>   private final String name;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>   private final ClassInfo type;<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>   /**<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    * Static creator.<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    *<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    * @param paramInfo The Java method parameter being resolved.<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    * @param annotations The annotations to apply to any new part parsers.<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    * @return A new {@link QueryArg}, or &lt;jk&gt;null&lt;/jk&gt; if the parameter is not annotated with {@link Query}.<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    */<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   public static QueryArg create(ParamInfo paramInfo, AnnotationWorkList annotations) {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      if (paramInfo.hasAnnotation(Query.class) || paramInfo.getParameterType().hasAnnotation(Query.class))<a name="line.70"></a>
-<span class="sourceLineNo">071</span>         return new QueryArg(paramInfo, annotations);<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      return null;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   }<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>    * Constructor.<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    *<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    * @param pi The Java method parameter being resolved.<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    * @param annotations The annotations to apply to any new part parsers.<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    */<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   protected QueryArg(ParamInfo pi, AnnotationWorkList annotations) {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      this.name = QueryAnnotation.findName(pi).orElseThrow(() -&gt; new ArgException(pi, "@Query used without name or value"));<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      this.type = pi.getParameterType();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      this.schema = HttpPartSchema.create(Query.class, pi);<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      Class&lt;? extends HttpPartParser&gt; pp = schema.getParser();<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      this.partParser = pp != null ? HttpPartParser.creator().type(pp).apply(annotations).create() : null;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      this.multi = schema.getCollectionFormat() == HttpPartCollectionFormat.MULTI;<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>      if (multi &amp;&amp; ! type.isCollectionOrArray())<a name="line.89"></a>
-<span class="sourceLineNo">090</span>         throw new ArgException(pi, "Use of multipart flag on @Query parameter that is not an array or Collection");<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   }<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>   @SuppressWarnings({ "rawtypes", "unchecked" })<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   @Override /* RestOpArg */<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   public Object resolve(RestOpSession opSession) throws Exception {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      RestRequest req = opSession.getRequest();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      HttpPartParserSession ps = partParser == null ? req.getPartParserSession() : partParser.getPartSession();<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      RequestQueryParams rh = req.getQueryParams();<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      BeanSession bs = req.getBeanSession();<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      ClassMeta&lt;?&gt; cm = bs.getClassMeta(type.innerType());<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>      if (multi) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>         Collection c = cm.isArray() ? list() : (Collection)(cm.canCreateNewInstance() ? cm.newInstance() : new JsonList());<a name="line.103"></a>
-<span class="sourceLineNo">104</span>         rh.getAll(name).stream().map(x -&gt; x.parser(ps).schema(schema).as(cm.getElementType()).orElse(null)).forEach(x -&gt; c.add(x));<a name="line.104"></a>
-<span class="sourceLineNo">105</span>         return cm.isArray() ? ArrayUtils.toArray(c, cm.getElementType().getInnerClass()) : c;<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>      if (cm.isMapOrBean() &amp;&amp; isOneOf(name, "*", "")) {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>         JsonMap m = new JsonMap();<a name="line.109"></a>
-<span class="sourceLineNo">110</span>         for (RequestQueryParam e : rh.getAll())<a name="line.110"></a>
-<span class="sourceLineNo">111</span>            m.put(e.getName(), e.parser(ps).schema(schema == null ? null : schema.getProperty(e.getName())).as(cm.getValueType()).orElse(null));<a name="line.111"></a>
-<span class="sourceLineNo">112</span>         return req.getBeanSession().convertToType(m, cm);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>      return rh.getLast(name).parser(ps).schema(schema).as(type.innerType()).orElse(null);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>}<a name="line.117"></a>
+<span class="sourceLineNo">017</span>import static org.apache.juneau.http.annotation.QueryAnnotation.*;<a name="line.17"></a>
+<span class="sourceLineNo">018</span><a name="line.18"></a>
+<span class="sourceLineNo">019</span>import java.util.*;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.juneau.*;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.juneau.annotation.*;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.juneau.collections.*;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.juneau.http.annotation.*;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.juneau.httppart.*;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.juneau.internal.*;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.juneau.reflect.*;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.juneau.rest.*;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.juneau.rest.annotation.*;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.juneau.rest.httppart.*;<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> * Resolves method parameters and parameter types annotated with {@link Query} on {@link RestOp}-annotated Java methods.<a name="line.33"></a>
+<span class="sourceLineNo">034</span> *<a name="line.34"></a>
+<span class="sourceLineNo">035</span> * &lt;p&gt;<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * The parameter value is resolved using:<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * &lt;p class='bjava'&gt;<a name="line.37"></a>
+<span class="sourceLineNo">038</span> *    &lt;jv&gt;opSession&lt;/jv&gt;<a name="line.38"></a>
+<span class="sourceLineNo">039</span> *       .{@link RestOpSession#getRequest() getRequest}()<a name="line.39"></a>
+<span class="sourceLineNo">040</span> *       .{@link RestRequest#getQueryParams() getQueryParams}()<a name="line.40"></a>
+<span class="sourceLineNo">041</span> *       .{@link RequestQueryParams#get(String) get}(&lt;jv&gt;name&lt;/jv&gt;)<a name="line.41"></a>
+<span class="sourceLineNo">042</span> *       .{@link RequestQueryParam#as(Class) as}(&lt;jv&gt;type&lt;/jv&gt;);<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * &lt;/p&gt;<a name="line.43"></a>
+<span class="sourceLineNo">044</span> *<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * &lt;p&gt;<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * {@link HttpPartSchema schema} is derived from the {@link Query} annotation.<a name="line.46"></a>
+<span class="sourceLineNo">047</span> *<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * &lt;p&gt;<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * If the {@link Schema#collectionFormat()} value is {@link HttpPartCollectionFormat#MULTI}, then the data type can be a {@link Collection} or array.<a name="line.49"></a>
+<span class="sourceLineNo">050</span> *<a name="line.50"></a>
+<span class="sourceLineNo">051</span> * &lt;ul class='seealso'&gt;<a name="line.51"></a>
+<span class="sourceLineNo">052</span> *    &lt;li class='link'&gt;{@doc jrs.JavaMethodParameters}<a name="line.52"></a>
+<span class="sourceLineNo">053</span> *    &lt;li class='extlink'&gt;{@source}<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * &lt;/ul&gt;<a name="line.54"></a>
+<span class="sourceLineNo">055</span> */<a name="line.55"></a>
+<span class="sourceLineNo">056</span>public class QueryArg implements RestOpArg {<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   private final boolean multi;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   private final HttpPartParser partParser;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   private final HttpPartSchema schema;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   private final String name, def;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   private final ClassInfo type;<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>   /**<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    * Static creator.<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    *<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    * @param paramInfo The Java method parameter being resolved.<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    * @param annotations The annotations to apply to any new part parsers.<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    * @return A new {@link QueryArg}, or &lt;jk&gt;null&lt;/jk&gt; if the parameter is not annotated with {@link Query}.<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    */<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   public static QueryArg create(ParamInfo paramInfo, AnnotationWorkList annotations) {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      if (paramInfo.hasAnnotation(Query.class) || paramInfo.getParameterType().hasAnnotation(Query.class))<a name="line.71"></a>
+<span class="sourceLineNo">072</span>         return new QueryArg(paramInfo, annotations);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      return null;<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>   /**<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    * Constructor.<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    *<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    * @param pi The Java method parameter being resolved.<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    * @param annotations The annotations to apply to any new part parsers.<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    */<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   protected QueryArg(ParamInfo pi, AnnotationWorkList annotations) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      this.name = findName(pi).orElseThrow(() -&gt; new ArgException(pi, "@Query used without name or value"));<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      this.def = findDef(pi).orElse(null);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      this.type = pi.getParameterType();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      this.schema = HttpPartSchema.create(Query.class, pi);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      Class&lt;? extends HttpPartParser&gt; pp = schema.getParser();<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      this.partParser = pp != null ? HttpPartParser.creator().type(pp).apply(annotations).create() : null;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      this.multi = schema.getCollectionFormat() == HttpPartCollectionFormat.MULTI;<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>      if (multi &amp;&amp; ! type.isCollectionOrArray())<a name="line.91"></a>
+<span class="sourceLineNo">092</span>         throw new ArgException(pi, "Use of multipart flag on @Query parameter that is not an array or Collection");<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>   @SuppressWarnings({ "rawtypes", "unchecked" })<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   @Override /* RestOpArg */<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   public Object resolve(RestOpSession opSession) throws Exception {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      RestRequest req = opSession.getRequest();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      HttpPartParserSession ps = partParser == null ? req.getPartParserSession() : partParser.getPartSession();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      RequestQueryParams rh = req.getQueryParams();<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      BeanSession bs = req.getBeanSession();<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      ClassMeta&lt;?&gt; cm = bs.getClassMeta(type.innerType());<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>      if (multi) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>         Collection c = cm.isArray() ? list() : (Collection)(cm.canCreateNewInstance() ? cm.newInstance() : new JsonList());<a name="line.105"></a>
+<span class="sourceLineNo">106</span>         rh.getAll(name).stream().map(x -&gt; x.parser(ps).schema(schema).as(cm.getElementType()).orElse(null)).forEach(x -&gt; c.add(x));<a name="line.106"></a>
+<span class="sourceLineNo">107</span>         return cm.isArray() ? ArrayUtils.toArray(c, cm.getElementType().getInnerClass()) : c;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>      if (cm.isMapOrBean() &amp;&amp; isOneOf(name, "*", "")) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>         JsonMap m = new JsonMap();<a name="line.111"></a>
+<span class="sourceLineNo">112</span>         for (RequestQueryParam e : rh.getAll())<a name="line.112"></a>
+<span class="sourceLineNo">113</span>            m.put(e.getName(), e.parser(ps).schema(schema == null ? null : schema.getProperty(e.getName())).as(cm.getValueType()).orElse(null));<a name="line.113"></a>
+<span class="sourceLineNo">114</span>         return req.getBeanSession().convertToType(m, cm);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>      return rh.getLast(name).parser(ps).schema(schema).def(def).as(type.innerType()).orElse(null);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   }<a name="line.118"></a>
+<span class="sourceLineNo">119</span>}<a name="line.119"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/httppart/RequestFormParam.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/httppart/RequestFormParam.html
index 09ac626..2fb7457 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/httppart/RequestFormParam.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/httppart/RequestFormParam.html
@@ -143,115 +143,128 @@
 <span class="sourceLineNo">135</span>      return value;<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>   //------------------------------------------------------------------------------------------------------------------<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   // Assertions<a name="line.139"></a>
-<span class="sourceLineNo">140</span>   //------------------------------------------------------------------------------------------------------------------<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>    * Provides the ability to perform fluent-style assertions on this parameter.<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    *<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    * &lt;p class='bjava'&gt;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    *       .getFormParam(&lt;js&gt;"foo"&lt;/js&gt;)<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    *       .assertString().contains(&lt;js&gt;"bar"&lt;/js&gt;);<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    * &lt;/p&gt;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    *<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    * &lt;p&gt;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    * The assertion test returns the original object allowing you to chain multiple requests like so:<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    * &lt;p class='bjava'&gt;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    *    String &lt;jv&gt;foo&lt;/jv&gt; = &lt;jv&gt;request&lt;/jv&gt;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    *       .getFormParam(&lt;js&gt;"foo"&lt;/js&gt;)<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    *       .assertString().contains(&lt;js&gt;"bar"&lt;/js&gt;)<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    *       .asString().get();<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    * &lt;/p&gt;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    *<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    * @return A new fluent assertion object.<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    */<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   public FluentStringAssertion&lt;RequestFormParam&gt; assertString() {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      return new FluentStringAssertion&lt;&gt;(orElse(null), this);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   }<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span>   /**<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    * Provides the ability to perform fluent-style assertions on an integer parameter.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    *<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    * &lt;p class='bjava'&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    *       .getFormParam(&lt;js&gt;"age"&lt;/js&gt;)<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    *       .assertInteger().isGreaterThan(1);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    * &lt;/p&gt;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    *<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    * @return A new fluent assertion object.<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    */<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   public FluentIntegerAssertion&lt;RequestFormParam&gt; assertInteger() {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      return new FluentIntegerAssertion&lt;&gt;(asIntegerPart().asInteger().orElse(null), this);<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>   /**<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    * Provides the ability to perform fluent-style assertions on a long parameter.<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    *<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    * &lt;p class='bjava'&gt;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    *       .getFormParam(&lt;js&gt;"length"&lt;/js&gt;)<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    *       .assertLong().isLessThan(100000);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    * &lt;/p&gt;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    *<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    * @return A new fluent assertion object.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    */<a name="line.194"></a>
-<span class="sourceLineNo">195</span>   public FluentLongAssertion&lt;RequestFormParam&gt; assertLong() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      return new FluentLongAssertion&lt;&gt;(asLongPart().asLong().orElse(null), this);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   }<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>   /**<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    * Provides the ability to perform fluent-style assertions on a date parameter.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    *<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    * &lt;p class='bjava'&gt;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    *       .getFormParam(&lt;js&gt;"time"&lt;/js&gt;)<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    *       .assertDate().isAfterNow();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    * &lt;/p&gt;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    *<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    * @return A new fluent assertion object.<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    */<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   public FluentZonedDateTimeAssertion&lt;RequestFormParam&gt; assertDate() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      return new FluentZonedDateTimeAssertion&lt;&gt;(asDatePart().asZonedDateTime().orElse(null), this);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>   /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    * Provides the ability to perform fluent-style assertions on comma-separated string parameters.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    *<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    * &lt;p class='bjava'&gt;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    *       .getFormParam(&lt;js&gt;"allow"&lt;/js&gt;)<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    *       .assertCsvArray().contains(&lt;js&gt;"GET"&lt;/js&gt;);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    * &lt;/p&gt;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    *<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    * @return A new fluent assertion object.<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    */<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   public FluentListAssertion&lt;String,RequestFormParam&gt; assertCsvArray() {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      return new FluentListAssertion&lt;&gt;(asCsvArrayPart().toList(), this);<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>   // &lt;FluentSetters&gt;<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>   @Override /* GENERATED */<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   public RequestFormParam schema(HttpPartSchema value) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      super.schema(value);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      return this;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   }<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span>   @Override /* GENERATED */<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   public RequestFormParam parser(HttpPartParserSession value) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      super.parser(value);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      return this;<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>   // &lt;/FluentSetters&gt;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>}<a name="line.246"></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>    * Sets a default value for this part.<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    *<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    * @param def The default value.<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    * @return This object.<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    */<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   public RequestFormParam def(String def) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      if (getValue() == null)<a name="line.146"></a>
+<span class="sourceLineNo">147</span>         value = def;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      return this;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   }<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>   //------------------------------------------------------------------------------------------------------------------<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   // Assertions<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   //------------------------------------------------------------------------------------------------------------------<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>   /**<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    * Provides the ability to perform fluent-style assertions on this parameter.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    *<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    * &lt;p class='bjava'&gt;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    *       .getFormParam(&lt;js&gt;"foo"&lt;/js&gt;)<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    *       .assertString().contains(&lt;js&gt;"bar"&lt;/js&gt;);<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    * &lt;/p&gt;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    *<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    * &lt;p&gt;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    * The assertion test returns the original object allowing you to chain multiple requests like so:<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    * &lt;p class='bjava'&gt;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    *    String &lt;jv&gt;foo&lt;/jv&gt; = &lt;jv&gt;request&lt;/jv&gt;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    *       .getFormParam(&lt;js&gt;"foo"&lt;/js&gt;)<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    *       .assertString().contains(&lt;js&gt;"bar"&lt;/js&gt;)<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    *       .asString().get();<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    * &lt;/p&gt;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    *<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    * @return A new fluent assertion object.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    */<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   public FluentStringAssertion&lt;RequestFormParam&gt; assertString() {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      return new FluentStringAssertion&lt;&gt;(orElse(null), this);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   }<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>    * Provides the ability to perform fluent-style assertions on an integer parameter.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    *<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    * &lt;p class='bjava'&gt;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    *       .getFormParam(&lt;js&gt;"age"&lt;/js&gt;)<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    *       .assertInteger().isGreaterThan(1);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    * &lt;/p&gt;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    *<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    * @return A new fluent assertion object.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    */<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   public FluentIntegerAssertion&lt;RequestFormParam&gt; assertInteger() {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      return new FluentIntegerAssertion&lt;&gt;(asIntegerPart().asInteger().orElse(null), this);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   }<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span>   /**<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    * Provides the ability to perform fluent-style assertions on a long parameter.<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    *<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    * &lt;p class='bjava'&gt;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    *       .getFormParam(&lt;js&gt;"length"&lt;/js&gt;)<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    *       .assertLong().isLessThan(100000);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    * &lt;/p&gt;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    *<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    * @return A new fluent assertion object.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    */<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   public FluentLongAssertion&lt;RequestFormParam&gt; assertLong() {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      return new FluentLongAssertion&lt;&gt;(asLongPart().asLong().orElse(null), this);<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>   /**<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    * Provides the ability to perform fluent-style assertions on a date parameter.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    *<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    * &lt;p class='bjava'&gt;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    *       .getFormParam(&lt;js&gt;"time"&lt;/js&gt;)<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    *       .assertDate().isAfterNow();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    * &lt;/p&gt;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    *<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    * @return A new fluent assertion object.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    */<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   public FluentZonedDateTimeAssertion&lt;RequestFormParam&gt; assertDate() {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      return new FluentZonedDateTimeAssertion&lt;&gt;(asDatePart().asZonedDateTime().orElse(null), this);<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>   /**<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    * Provides the ability to perform fluent-style assertions on comma-separated string parameters.<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    *<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    * &lt;p class='bjava'&gt;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    *       .getFormParam(&lt;js&gt;"allow"&lt;/js&gt;)<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    *       .assertCsvArray().contains(&lt;js&gt;"GET"&lt;/js&gt;);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    * &lt;/p&gt;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    *<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    * @return A new fluent assertion object.<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    */<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   public FluentListAssertion&lt;String,RequestFormParam&gt; assertCsvArray() {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      return new FluentListAssertion&lt;&gt;(asCsvArrayPart().toList(), this);<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>   // &lt;FluentSetters&gt;<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>   @Override /* GENERATED */<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   public RequestFormParam schema(HttpPartSchema value) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      super.schema(value);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      return this;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   }<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>   @Override /* GENERATED */<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   public RequestFormParam parser(HttpPartParserSession value) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      super.parser(value);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      return this;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>   // &lt;/FluentSetters&gt;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>}<a name="line.259"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/httppart/RequestHeader.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/httppart/RequestHeader.html
index 75a6b9c..ea45b7a 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/httppart/RequestHeader.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/httppart/RequestHeader.html
@@ -103,7 +103,7 @@
 <span class="sourceLineNo">095</span> */<a name="line.95"></a>
 <span class="sourceLineNo">096</span>public class RequestHeader extends RequestHttpPart implements Header {<a name="line.96"></a>
 <span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>   private final String value;<a name="line.98"></a>
+<span class="sourceLineNo">098</span>   private String value;<a name="line.98"></a>
 <span class="sourceLineNo">099</span><a name="line.99"></a>
 <span class="sourceLineNo">100</span>   /**<a name="line.100"></a>
 <span class="sourceLineNo">101</span>    * Constructor.<a name="line.101"></a>
@@ -117,230 +117,242 @@
 <span class="sourceLineNo">109</span>      this.value = value;<a name="line.109"></a>
 <span class="sourceLineNo">110</span>   }<a name="line.110"></a>
 <span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>   //------------------------------------------------------------------------------------------------------------------<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   // Retrievers<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>   @Override /* RequestHttpPart */<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   public String getValue() {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      return value;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   }<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>   /**<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    * Returns the value of this header as a {@link BasicCsvHeader}.<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    *<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    * @return The value of this header as a  {@link BasicCsvHeader}, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    */<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   public BasicCsvHeader asCsvHeader() {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      return new BasicCsvHeader(getName(), getValue());<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   }<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>   /**<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    * Returns the value of this header as a {@link BasicDateHeader}.<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    *<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    * @return The value of this header as a {@link BasicDateHeader}, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    */<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   public BasicDateHeader asDateHeader() {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      return new BasicDateHeader(getName(), getValue());<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   }<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>    * Returns the value of this header as a {@link BasicEntityTagsHeader}.<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    *<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    * @return The value of this header as a {@link BasicEntityTagsHeader}, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    */<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   public BasicEntityTagsHeader asEntityTagsHeader() {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      return new BasicEntityTagsHeader(getName(), getValue());<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   }<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>   /**<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    * Returns the value of this header as a {@link BasicEntityTagHeader}.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    *<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    * @return The value of this header as a {@link BasicEntityTagHeader}, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    */<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   public BasicEntityTagHeader asEntityTagHeader() {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      return new BasicEntityTagHeader(getName(), getValue());<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   }<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>   /**<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    * Returns the value of this header as a {@link BasicIntegerHeader}.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    *<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    * @return The value of this header as a {@link BasicIntegerHeader}, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    */<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   public BasicIntegerHeader asIntegerHeader() {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      return new BasicIntegerHeader(getName(), getValue());<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>   /**<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    * Returns the value of this header as a {@link BasicBooleanHeader}.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    *<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    * @return The value of this header as a {@link BasicBooleanHeader}, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    */<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   public BasicBooleanHeader asBooleanHeader() {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      return new BasicBooleanHeader(getName(), getValue());<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>   /**<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    * Returns the value of this header as a {@link BasicLongHeader}.<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    *<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    * @return The value of this header as a {@link BasicLongHeader}, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    */<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   public BasicLongHeader asLongHeader() {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      return new BasicLongHeader(getName(), getValue());<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   }<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>   /**<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    * Returns the value of this header as a {@link BasicStringRangesHeader}.<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    *<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    * @return The value of this header as a {@link BasicStringRangesHeader}, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    */<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   public BasicStringRangesHeader asStringRangesHeader() {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return new BasicStringRangesHeader(getName(), getValue());<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   }<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>   /**<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    * Returns the value of this header as a {@link BasicStringHeader}.<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    *<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    * @return The value of this header as a {@link BasicStringHeader}, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    */<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   public BasicStringHeader asStringHeader() {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      return new BasicStringHeader(getName(), getValue());<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>   /**<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    * Returns the value of this header as a {@link BasicUriHeader}.<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    *<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    * @return The value of this header as a {@link BasicUriHeader}, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    */<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   public BasicUriHeader asUriHeader() {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      return new BasicUriHeader(getName(), getValue());<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>   // Assertions<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   //------------------------------------------------------------------------------------------------------------------<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>   /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    * Provides the ability to perform fluent-style assertions on this parameter.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    *<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    * &lt;p class='bjava'&gt;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    *       .getHeader(&lt;js&gt;"foo"&lt;/js&gt;)<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    *       .assertString().contains(&lt;js&gt;"bar"&lt;/js&gt;);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    * &lt;/p&gt;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    *<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    * &lt;p&gt;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    * The assertion test returns the original object allowing you to chain multiple requests like so:<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    * &lt;p class='bjava'&gt;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    *    String &lt;jv&gt;foo&lt;/jv&gt; = &lt;jv&gt;request&lt;/jv&gt;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    *       .getHeader(&lt;js&gt;"foo"&lt;/js&gt;)<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    *       .assertString().contains(&lt;js&gt;"bar"&lt;/js&gt;)<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    *       .asString().get();<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    * &lt;/p&gt;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    *<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    * @return A new fluent assertion object.<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   public FluentStringAssertion&lt;RequestHeader&gt; assertString() {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      return new FluentStringAssertion&lt;&gt;(orElse(null), this);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   }<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>   /**<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    * Provides the ability to perform fluent-style assertions on an integer parameter.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    *<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    * &lt;p class='bjava'&gt;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    *       .getHeader(&lt;js&gt;"age"&lt;/js&gt;)<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    *       .assertInteger().isGreaterThan(1);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    * &lt;/p&gt;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    *<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    * @return A new fluent assertion object.<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    */<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   public FluentIntegerAssertion&lt;RequestHeader&gt; assertInteger() {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      return new FluentIntegerAssertion&lt;&gt;(asIntegerPart().asInteger().orElse(null), this);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   }<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span>   /**<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    * Provides the ability to perform fluent-style assertions on a long parameter.<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    *<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    * &lt;p class='bjava'&gt;<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    *       .getHeader(&lt;js&gt;"length"&lt;/js&gt;)<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    *       .assertLong().isLessThan(100000);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    * &lt;/p&gt;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    *<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    * @return A new fluent assertion object.<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    */<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   public FluentLongAssertion&lt;RequestHeader&gt; assertLong() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      return new FluentLongAssertion&lt;&gt;(asLongPart().asLong().orElse(null), this);<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>    * Provides the ability to perform fluent-style assertions on a date parameter.<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    *<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    * &lt;p class='bjava'&gt;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    *       .getHeader(&lt;js&gt;"time"&lt;/js&gt;)<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    *       .assertDate().isAfterNow();<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    * &lt;/p&gt;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    *<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    * @return A new fluent assertion object.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    */<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   public FluentZonedDateTimeAssertion&lt;RequestHeader&gt; assertDate() {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      return new FluentZonedDateTimeAssertion&lt;&gt;(asDatePart().asZonedDateTime().orElse(null), this);<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>    * Provides the ability to perform fluent-style assertions on comma-separated string parameters.<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    *<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    * &lt;p class='bjava'&gt;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    *       .getHeader(&lt;js&gt;"allow"&lt;/js&gt;)<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    *       .assertCsvArray().contains(&lt;js&gt;"GET"&lt;/js&gt;);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    * &lt;/p&gt;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    *<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    * @return A new fluent assertion object.<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   public FluentListAssertion&lt;String,RequestHeader&gt; assertCsvArray() {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      return new FluentListAssertion&lt;&gt;(asCsvArrayPart().asList().orElse(null), this);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   }<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>   /**<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    * Parses the value.<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    *<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    * @return An array of {@link HeaderElement} entries, may be empty, but is never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    * @throws BasicHttpException In case of a parsing error.<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    */<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   @Override /* Header */<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   public HeaderElement[] getElements() throws BasicHttpException {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      return new HeaderElement[0];<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   }<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span>   @Override /* Object */<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   public String toString() {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      return getName() + ": " + getValue();<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>   // &lt;FluentSetters&gt;<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>   @Override /* GENERATED */<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   public RequestHeader schema(HttpPartSchema value) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      super.schema(value);<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      return this;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>   @Override /* GENERATED */<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   public RequestHeader parser(HttpPartParserSession value) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      super.parser(value);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      return this;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   }<a name="line.332"></a>
+<span class="sourceLineNo">112</span>   /**<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    * Sets a default value for this part.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    *<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    * @param def The default value.<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    * @return This object.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    */<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   public RequestHeader def(String def) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      if (value == null)<a name="line.119"></a>
+<span class="sourceLineNo">120</span>         value = def;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      return this;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   }<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>   //------------------------------------------------------------------------------------------------------------------<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   // Retrievers<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   //------------------------------------------------------------------------------------------------------------------<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>   @Override /* RequestHttpPart */<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   public String getValue() {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      return value;<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>   /**<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    * Returns the value of this header as a {@link BasicCsvHeader}.<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    *<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    * @return The value of this header as a  {@link BasicCsvHeader}, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    */<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   public BasicCsvHeader asCsvHeader() {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      return new BasicCsvHeader(getName(), getValue());<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   }<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>    * Returns the value of this header as a {@link BasicDateHeader}.<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    *<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    * @return The value of this header as a {@link BasicDateHeader}, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    */<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   public BasicDateHeader asDateHeader() {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      return new BasicDateHeader(getName(), getValue());<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   }<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>   /**<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    * Returns the value of this header as a {@link BasicEntityTagsHeader}.<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    *<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    * @return The value of this header as a {@link BasicEntityTagsHeader}, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   public BasicEntityTagsHeader asEntityTagsHeader() {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      return new BasicEntityTagsHeader(getName(), getValue());<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   }<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>   /**<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    * Returns the value of this header as a {@link BasicEntityTagHeader}.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    *<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    * @return The value of this header as a {@link BasicEntityTagHeader}, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    */<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   public BasicEntityTagHeader asEntityTagHeader() {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      return new BasicEntityTagHeader(getName(), getValue());<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   }<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>   /**<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    * Returns the value of this header as a {@link BasicIntegerHeader}.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    *<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    * @return The value of this header as a {@link BasicIntegerHeader}, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    */<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   public BasicIntegerHeader asIntegerHeader() {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      return new BasicIntegerHeader(getName(), getValue());<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>   /**<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    * Returns the value of this header as a {@link BasicBooleanHeader}.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    *<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    * @return The value of this header as a {@link BasicBooleanHeader}, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    */<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   public BasicBooleanHeader asBooleanHeader() {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      return new BasicBooleanHeader(getName(), getValue());<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   }<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>    * Returns the value of this header as a {@link BasicLongHeader}.<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    *<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    * @return The value of this header as a {@link BasicLongHeader}, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    */<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   public BasicLongHeader asLongHeader() {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      return new BasicLongHeader(getName(), getValue());<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   }<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span>   /**<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    * Returns the value of this header as a {@link BasicStringRangesHeader}.<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    *<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    * @return The value of this header as a {@link BasicStringRangesHeader}, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    */<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   public BasicStringRangesHeader asStringRangesHeader() {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      return new BasicStringRangesHeader(getName(), getValue());<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   }<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>   /**<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    * Returns the value of this header as a {@link BasicStringHeader}.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    *<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    * @return The value of this header as a {@link BasicStringHeader}, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   public BasicStringHeader asStringHeader() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return new BasicStringHeader(getName(), getValue());<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   }<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>   /**<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    * Returns the value of this header as a {@link BasicUriHeader}.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    *<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    * @return The value of this header as a {@link BasicUriHeader}, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    */<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   public BasicUriHeader asUriHeader() {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      return new BasicUriHeader(getName(), getValue());<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   }<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>   // Assertions<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   //------------------------------------------------------------------------------------------------------------------<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>    * Provides the ability to perform fluent-style assertions on this parameter.<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    *<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    * &lt;p class='bjava'&gt;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    *       .getHeader(&lt;js&gt;"foo"&lt;/js&gt;)<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    *       .assertString().contains(&lt;js&gt;"bar"&lt;/js&gt;);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    * &lt;/p&gt;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    *<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    * &lt;p&gt;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    * The assertion test returns the original object allowing you to chain multiple requests like so:<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    * &lt;p class='bjava'&gt;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    *    String &lt;jv&gt;foo&lt;/jv&gt; = &lt;jv&gt;request&lt;/jv&gt;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    *       .getHeader(&lt;js&gt;"foo"&lt;/js&gt;)<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    *       .assertString().contains(&lt;js&gt;"bar"&lt;/js&gt;)<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    *       .asString().get();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    * &lt;/p&gt;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    *<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    * @return A new fluent assertion object.<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    */<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   public FluentStringAssertion&lt;RequestHeader&gt; assertString() {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      return new FluentStringAssertion&lt;&gt;(orElse(null), this);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   }<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>   /**<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    * Provides the ability to perform fluent-style assertions on an integer parameter.<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    *<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    * &lt;p class='bjava'&gt;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    *       .getHeader(&lt;js&gt;"age"&lt;/js&gt;)<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    *       .assertInteger().isGreaterThan(1);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    * &lt;/p&gt;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    *<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    * @return A new fluent assertion object.<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    */<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   public FluentIntegerAssertion&lt;RequestHeader&gt; assertInteger() {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      return new FluentIntegerAssertion&lt;&gt;(asIntegerPart().asInteger().orElse(null), this);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   }<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>   /**<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    * Provides the ability to perform fluent-style assertions on a long parameter.<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    *<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    * &lt;p class='bjava'&gt;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    *       .getHeader(&lt;js&gt;"length"&lt;/js&gt;)<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    *       .assertLong().isLessThan(100000);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    * &lt;/p&gt;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    *<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    * @return A new fluent assertion object.<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    */<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   public FluentLongAssertion&lt;RequestHeader&gt; assertLong() {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      return new FluentLongAssertion&lt;&gt;(asLongPart().asLong().orElse(null), this);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   }<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>   /**<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    * Provides the ability to perform fluent-style assertions on a date parameter.<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    *<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    * &lt;p class='bjava'&gt;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    *       .getHeader(&lt;js&gt;"time"&lt;/js&gt;)<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    *       .assertDate().isAfterNow();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    * &lt;/p&gt;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    *<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    * @return A new fluent assertion object.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    */<a name="line.295"></a>
+<span class="sourceLineNo">296</span>   public FluentZonedDateTimeAssertion&lt;RequestHeader&gt; assertDate() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      return new FluentZonedDateTimeAssertion&lt;&gt;(asDatePart().asZonedDateTime().orElse(null), this);<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>   /**<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    * Provides the ability to perform fluent-style assertions on comma-separated string parameters.<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    *<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    * &lt;p class='bjava'&gt;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    *       .getHeader(&lt;js&gt;"allow"&lt;/js&gt;)<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    *       .assertCsvArray().contains(&lt;js&gt;"GET"&lt;/js&gt;);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    * &lt;/p&gt;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    *<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    * @return A new fluent assertion object.<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    */<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   public FluentListAssertion&lt;String,RequestHeader&gt; assertCsvArray() {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return new FluentListAssertion&lt;&gt;(asCsvArrayPart().asList().orElse(null), this);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   }<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span>   /**<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    * Parses the value.<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    *<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    * @return An array of {@link HeaderElement} entries, may be empty, but is never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    * @throws BasicHttpException In case of a parsing error.<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    */<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   @Override /* Header */<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   public HeaderElement[] getElements() throws BasicHttpException {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      return new HeaderElement[0];<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>   @Override /* Object */<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   public String toString() {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      return getName() + ": " + getValue();<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>   // &lt;FluentSetters&gt;<a name="line.332"></a>
 <span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>   // &lt;/FluentSetters&gt;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>}<a name="line.335"></a>
+<span class="sourceLineNo">334</span>   @Override /* GENERATED */<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   public RequestHeader schema(HttpPartSchema value) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      super.schema(value);<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      return this;<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>   @Override /* GENERATED */<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   public RequestHeader parser(HttpPartParserSession value) {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      super.parser(value);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      return this;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   }<a name="line.344"></a>
+<span class="sourceLineNo">345</span><a name="line.345"></a>
+<span class="sourceLineNo">346</span>   // &lt;/FluentSetters&gt;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>}<a name="line.347"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/httppart/RequestPathParam.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/httppart/RequestPathParam.html
index 2c6ce01..848b9f7 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/httppart/RequestPathParam.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/httppart/RequestPathParam.html
@@ -98,7 +98,7 @@
 <span class="sourceLineNo">090</span> */<a name="line.90"></a>
 <span class="sourceLineNo">091</span>public class RequestPathParam extends RequestHttpPart implements NameValuePair {<a name="line.91"></a>
 <span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>   private final String value;<a name="line.93"></a>
+<span class="sourceLineNo">093</span>   private String value;<a name="line.93"></a>
 <span class="sourceLineNo">094</span><a name="line.94"></a>
 <span class="sourceLineNo">095</span>   /**<a name="line.95"></a>
 <span class="sourceLineNo">096</span>    * Constructor.<a name="line.96"></a>
@@ -112,123 +112,135 @@
 <span class="sourceLineNo">104</span>      this.value = value;<a name="line.104"></a>
 <span class="sourceLineNo">105</span>   }<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>   // Retrievers<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>   @Override /* RequestHttpPart */<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   public String getValue() {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      return value;<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>   //------------------------------------------------------------------------------------------------------------------<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   // Assertions<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   //------------------------------------------------------------------------------------------------------------------<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>   /**<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    * Provides the ability to perform fluent-style assertions on this parameter.<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    *<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    * &lt;p class='bjava'&gt;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    *       .getPathParam(&lt;js&gt;"foo"&lt;/js&gt;)<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    *       .assertString().contains(&lt;js&gt;"bar"&lt;/js&gt;);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    * &lt;/p&gt;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    *<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    * &lt;p&gt;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    * The assertion test returns the original object allowing you to chain multiple requests like so:<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    * &lt;p class='bjava'&gt;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    *    String &lt;jv&gt;foo&lt;/jv&gt; = &lt;jv&gt;request&lt;/jv&gt;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    *       .getPathParam(&lt;js&gt;"foo"&lt;/js&gt;)<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    *       .assertString().contains(&lt;js&gt;"bar"&lt;/js&gt;)<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    *       .asString().get();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    * &lt;/p&gt;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    *<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    * @return A new fluent assertion object.<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    */<a name="line.140"></a>
-<span class="sourceLineNo">141</span>   public FluentStringAssertion&lt;RequestPathParam&gt; assertString() {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return new FluentStringAssertion&lt;&gt;(orElse(null), this);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>   /**<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    * Provides the ability to perform fluent-style assertions on an integer parameter.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    *<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    * &lt;p class='bjava'&gt;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    *       .getPathParam(&lt;js&gt;"age"&lt;/js&gt;)<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    *       .assertInteger().isGreaterThan(1);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    * &lt;/p&gt;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    *<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    * @return A new fluent assertion object.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    */<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   public FluentIntegerAssertion&lt;RequestPathParam&gt; assertInteger() {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      return new FluentIntegerAssertion&lt;&gt;(asIntegerPart().asInteger().orElse(null), this);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   }<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>   /**<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    * Provides the ability to perform fluent-style assertions on a long parameter.<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    *<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    * &lt;p class='bjava'&gt;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    *       .getPathParam(&lt;js&gt;"length"&lt;/js&gt;)<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    *       .assertLong().isLessThan(100000);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    * &lt;/p&gt;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    *<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    * @return A new fluent assertion object.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   public FluentLongAssertion&lt;RequestPathParam&gt; assertLong() {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      return new FluentLongAssertion&lt;&gt;(asLongPart().asLong().orElse(null), this);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>   /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    * Provides the ability to perform fluent-style assertions on a date parameter.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    *<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    * &lt;p class='bjava'&gt;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    *       .getPathParam(&lt;js&gt;"time"&lt;/js&gt;)<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    *       .assertDate().isAfterNow();<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    * &lt;/p&gt;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    *<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    * @return A new fluent assertion object.<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    */<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   public FluentZonedDateTimeAssertion&lt;RequestPathParam&gt; assertDate() {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return new FluentZonedDateTimeAssertion&lt;&gt;(asDatePart().asZonedDateTime().orElse(null), this);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   }<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>   /**<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    * Provides the ability to perform fluent-style assertions on comma-separated string parameters.<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    *<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    * &lt;p class='bjava'&gt;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    *       .getPathParam(&lt;js&gt;"allow"&lt;/js&gt;)<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    *       .assertCsvArray().contains(&lt;js&gt;"GET"&lt;/js&gt;);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    * &lt;/p&gt;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    *<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    * @return A new fluent assertion object.<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    */<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   public FluentListAssertion&lt;String,RequestPathParam&gt; assertCsvArray() {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      return new FluentListAssertion&lt;&gt;(asCsvArrayPart().asList().orElse(null), this);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>   // &lt;FluentSetters&gt;<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>   @Override /* GENERATED */<a name="line.211"></a>
-<span class="sourceLineNo">212</span>   public RequestPathParam schema(HttpPartSchema value) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      super.schema(value);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      return this;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   }<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>   @Override /* GENERATED */<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   public RequestPathParam parser(HttpPartParserSession value) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      super.parser(value);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      return this;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   // &lt;/FluentSetters&gt;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>}<a name="line.223"></a>
+<span class="sourceLineNo">107</span>   /**<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    * Sets a default value for this part.<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    *<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    * @param def The default value.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    * @return This object.<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    */<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   public RequestPathParam def(String def) {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      if (value == null)<a name="line.114"></a>
+<span class="sourceLineNo">115</span>         value = def;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      return this;<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>   //------------------------------------------------------------------------------------------------------------------<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   // Retrievers<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   //------------------------------------------------------------------------------------------------------------------<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>   @Override /* RequestHttpPart */<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   public String getValue() {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      return value;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>   //------------------------------------------------------------------------------------------------------------------<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   // Assertions<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   //------------------------------------------------------------------------------------------------------------------<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>    * Provides the ability to perform fluent-style assertions on this parameter.<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    *<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    * &lt;p class='bjava'&gt;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    *       .getPathParam(&lt;js&gt;"foo"&lt;/js&gt;)<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    *       .assertString().contains(&lt;js&gt;"bar"&lt;/js&gt;);<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    * &lt;/p&gt;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    *<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    * &lt;p&gt;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    * The assertion test returns the original object allowing you to chain multiple requests like so:<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    * &lt;p class='bjava'&gt;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    *    String &lt;jv&gt;foo&lt;/jv&gt; = &lt;jv&gt;request&lt;/jv&gt;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    *       .getPathParam(&lt;js&gt;"foo"&lt;/js&gt;)<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    *       .assertString().contains(&lt;js&gt;"bar"&lt;/js&gt;)<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    *       .asString().get();<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    * &lt;/p&gt;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    *<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    * @return A new fluent assertion object.<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    */<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   public FluentStringAssertion&lt;RequestPathParam&gt; assertString() {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      return new FluentStringAssertion&lt;&gt;(orElse(null), this);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   }<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>   /**<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    * Provides the ability to perform fluent-style assertions on an integer parameter.<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    *<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    * &lt;p class='bjava'&gt;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    *       .getPathParam(&lt;js&gt;"age"&lt;/js&gt;)<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    *       .assertInteger().isGreaterThan(1);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    * &lt;/p&gt;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    *<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    * @return A new fluent assertion object.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    */<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   public FluentIntegerAssertion&lt;RequestPathParam&gt; assertInteger() {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      return new FluentIntegerAssertion&lt;&gt;(asIntegerPart().asInteger().orElse(null), this);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   }<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span>   /**<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    * Provides the ability to perform fluent-style assertions on a long parameter.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    *<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    * &lt;p class='bjava'&gt;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    *       .getPathParam(&lt;js&gt;"length"&lt;/js&gt;)<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    *       .assertLong().isLessThan(100000);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    * &lt;/p&gt;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    *<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    * @return A new fluent assertion object.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    */<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   public FluentLongAssertion&lt;RequestPathParam&gt; assertLong() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      return new FluentLongAssertion&lt;&gt;(asLongPart().asLong().orElse(null), this);<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>   /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    * Provides the ability to perform fluent-style assertions on a date parameter.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    *<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    * &lt;p class='bjava'&gt;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    *       .getPathParam(&lt;js&gt;"time"&lt;/js&gt;)<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    *       .assertDate().isAfterNow();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    * &lt;/p&gt;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    *<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    * @return A new fluent assertion object.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    */<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   public FluentZonedDateTimeAssertion&lt;RequestPathParam&gt; assertDate() {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      return new FluentZonedDateTimeAssertion&lt;&gt;(asDatePart().asZonedDateTime().orElse(null), this);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   }<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>   /**<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    * Provides the ability to perform fluent-style assertions on comma-separated string parameters.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    *<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    * &lt;p class='bjava'&gt;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    *       .getPathParam(&lt;js&gt;"allow"&lt;/js&gt;)<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    *       .assertCsvArray().contains(&lt;js&gt;"GET"&lt;/js&gt;);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    * &lt;/p&gt;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    *<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    * @return A new fluent assertion object.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    */<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   public FluentListAssertion&lt;String,RequestPathParam&gt; assertCsvArray() {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      return new FluentListAssertion&lt;&gt;(asCsvArrayPart().asList().orElse(null), this);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   }<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span>   // &lt;FluentSetters&gt;<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span>   @Override /* GENERATED */<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   public RequestPathParam schema(HttpPartSchema value) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      super.schema(value);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      return this;<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>   @Override /* GENERATED */<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   public RequestPathParam parser(HttpPartParserSession value) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      super.parser(value);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      return this;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   }<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   // &lt;/FluentSetters&gt;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>}<a name="line.235"></a>
 
 
 
diff --git a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html
index c765c3f..355a59f 100644
--- a/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html
+++ b/content/site/apidocs-9.0.0/src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html
@@ -98,7 +98,7 @@
 <span class="sourceLineNo">090</span> */<a name="line.90"></a>
 <span class="sourceLineNo">091</span>public class RequestQueryParam extends RequestHttpPart implements NameValuePair {<a name="line.91"></a>
 <span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>   private final String value;<a name="line.93"></a>
+<span class="sourceLineNo">093</span>   private String value;<a name="line.93"></a>
 <span class="sourceLineNo">094</span><a name="line.94"></a>
 <span class="sourceLineNo">095</span>   /**<a name="line.95"></a>
 <span class="sourceLineNo">096</span>    * Constructor.<a name="line.96"></a>
@@ -112,123 +112,135 @@
 <span class="sourceLineNo">104</span>      this.value = value;<a name="line.104"></a>
 <span class="sourceLineNo">105</span>   }<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>   // Retrievers<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>   @Override /* RequestHttpPart */<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   public String getValue() {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      return value;<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>   //------------------------------------------------------------------------------------------------------------------<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   // Assertions<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   //------------------------------------------------------------------------------------------------------------------<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>   /**<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    * Provides the ability to perform fluent-style assertions on this parameter.<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    *<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    * &lt;p class='bjava'&gt;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    *       .getQueryParam(&lt;js&gt;"foo"&lt;/js&gt;)<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    *       .assertString().contains(&lt;js&gt;"bar"&lt;/js&gt;);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    * &lt;/p&gt;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    *<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    * &lt;p&gt;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    * The assertion test returns the original object allowing you to chain multiple requests like so:<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    * &lt;p class='bjava'&gt;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    *    String &lt;jv&gt;foo&lt;/jv&gt; = &lt;jv&gt;request&lt;/jv&gt;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    *       .getQueryParam(&lt;js&gt;"foo"&lt;/js&gt;)<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    *       .assertString().contains(&lt;js&gt;"bar"&lt;/js&gt;)<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    *       .asString().get();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    * &lt;/p&gt;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    *<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    * @return A new fluent assertion object.<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    */<a name="line.140"></a>
-<span class="sourceLineNo">141</span>   public FluentStringAssertion&lt;RequestQueryParam&gt; assertString() {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return new FluentStringAssertion&lt;&gt;(orElse(null), this);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>   /**<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    * Provides the ability to perform fluent-style assertions on an integer parameter.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    *<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    * &lt;p class='bjava'&gt;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    *       .getQueryParam(&lt;js&gt;"age"&lt;/js&gt;)<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    *       .assertInteger().isGreaterThan(1);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    * &lt;/p&gt;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    *<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    * @return A new fluent assertion object.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    */<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   public FluentIntegerAssertion&lt;RequestQueryParam&gt; assertInteger() {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      return new FluentIntegerAssertion&lt;&gt;(asIntegerPart().asInteger().orElse(null), this);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   }<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>   /**<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    * Provides the ability to perform fluent-style assertions on a long parameter.<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    *<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    * &lt;p class='bjava'&gt;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    *       .getQueryParam(&lt;js&gt;"length"&lt;/js&gt;)<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    *       .assertLong().isLessThan(100000);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    * &lt;/p&gt;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    *<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    * @return A new fluent assertion object.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   public FluentLongAssertion&lt;RequestQueryParam&gt; assertLong() {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      return new FluentLongAssertion&lt;&gt;(asLongPart().asLong().orElse(null), this);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>   /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    * Provides the ability to perform fluent-style assertions on a date parameter.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    *<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    * &lt;p class='bjava'&gt;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    *       .getQueryParam(&lt;js&gt;"time"&lt;/js&gt;)<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    *       .assertDate().isAfterNow();<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    * &lt;/p&gt;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    *<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    * @return A new fluent assertion object.<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    */<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   public FluentZonedDateTimeAssertion&lt;RequestQueryParam&gt; assertDate() {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return new FluentZonedDateTimeAssertion&lt;&gt;(asDatePart().asZonedDateTime().orElse(null), this);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   }<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>   /**<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    * Provides the ability to perform fluent-style assertions on comma-separated string parameters.<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    *<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    * &lt;p class='bjava'&gt;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    *       .getQueryParam(&lt;js&gt;"allow"&lt;/js&gt;)<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    *       .assertCsvArray().contains(&lt;js&gt;"GET"&lt;/js&gt;);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    * &lt;/p&gt;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    *<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    * @return A new fluent assertion object.<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    */<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   public FluentListAssertion&lt;String,RequestQueryParam&gt; assertCsvArray() {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      return new FluentListAssertion&lt;&gt;(asCsvArrayPart().asList().orElse(null), this);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>   // &lt;FluentSetters&gt;<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>   @Override /* GENERATED */<a name="line.211"></a>
-<span class="sourceLineNo">212</span>   public RequestQueryParam schema(HttpPartSchema value) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      super.schema(value);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      return this;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   }<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>   @Override /* GENERATED */<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   public RequestQueryParam parser(HttpPartParserSession value) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      super.parser(value);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      return this;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   // &lt;/FluentSetters&gt;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>}<a name="line.223"></a>
+<span class="sourceLineNo">107</span>   /**<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    * Sets a default value for this part.<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    *<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    * @param def The default value.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    * @return This object.<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    */<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   public RequestQueryParam def(String def) {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      if (value == null)<a name="line.114"></a>
+<span class="sourceLineNo">115</span>         value = def;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      return this;<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>   //------------------------------------------------------------------------------------------------------------------<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   // Retrievers<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   //------------------------------------------------------------------------------------------------------------------<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>   @Override /* RequestHttpPart */<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   public String getValue() {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      return value;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>   //------------------------------------------------------------------------------------------------------------------<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   // Assertions<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   //------------------------------------------------------------------------------------------------------------------<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>    * Provides the ability to perform fluent-style assertions on this parameter.<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    *<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    * &lt;p class='bjava'&gt;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    *       .getQueryParam(&lt;js&gt;"foo"&lt;/js&gt;)<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    *       .assertString().contains(&lt;js&gt;"bar"&lt;/js&gt;);<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    * &lt;/p&gt;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    *<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    * &lt;p&gt;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    * The assertion test returns the original object allowing you to chain multiple requests like so:<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    * &lt;p class='bjava'&gt;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    *    String &lt;jv&gt;foo&lt;/jv&gt; = &lt;jv&gt;request&lt;/jv&gt;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    *       .getQueryParam(&lt;js&gt;"foo"&lt;/js&gt;)<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    *       .assertString().contains(&lt;js&gt;"bar"&lt;/js&gt;)<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    *       .asString().get();<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    * &lt;/p&gt;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    *<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    * @return A new fluent assertion object.<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    */<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   public FluentStringAssertion&lt;RequestQueryParam&gt; assertString() {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      return new FluentStringAssertion&lt;&gt;(orElse(null), this);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   }<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>   /**<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    * Provides the ability to perform fluent-style assertions on an integer parameter.<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    *<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    * &lt;p class='bjava'&gt;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    *       .getQueryParam(&lt;js&gt;"age"&lt;/js&gt;)<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    *       .assertInteger().isGreaterThan(1);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    * &lt;/p&gt;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    *<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    * @return A new fluent assertion object.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    */<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   public FluentIntegerAssertion&lt;RequestQueryParam&gt; assertInteger() {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      return new FluentIntegerAssertion&lt;&gt;(asIntegerPart().asInteger().orElse(null), this);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   }<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span>   /**<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    * Provides the ability to perform fluent-style assertions on a long parameter.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    *<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    * &lt;p class='bjava'&gt;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    *       .getQueryParam(&lt;js&gt;"length"&lt;/js&gt;)<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    *       .assertLong().isLessThan(100000);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    * &lt;/p&gt;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    *<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    * @return A new fluent assertion object.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    */<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   public FluentLongAssertion&lt;RequestQueryParam&gt; assertLong() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      return new FluentLongAssertion&lt;&gt;(asLongPart().asLong().orElse(null), this);<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>   /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    * Provides the ability to perform fluent-style assertions on a date parameter.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    *<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    * &lt;p class='bjava'&gt;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    *       .getQueryParam(&lt;js&gt;"time"&lt;/js&gt;)<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    *       .assertDate().isAfterNow();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    * &lt;/p&gt;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    *<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    * @return A new fluent assertion object.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    */<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   public FluentZonedDateTimeAssertion&lt;RequestQueryParam&gt; assertDate() {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      return new FluentZonedDateTimeAssertion&lt;&gt;(asDatePart().asZonedDateTime().orElse(null), this);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   }<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>   /**<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    * Provides the ability to perform fluent-style assertions on comma-separated string parameters.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    *<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    * &lt;p class='bjava'&gt;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    *    &lt;jv&gt;request&lt;/jv&gt;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    *       .getQueryParam(&lt;js&gt;"allow"&lt;/js&gt;)<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    *       .assertCsvArray().contains(&lt;js&gt;"GET"&lt;/js&gt;);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    * &lt;/p&gt;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    *<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    * @return A new fluent assertion object.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    */<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   public FluentListAssertion&lt;String,RequestQueryParam&gt; assertCsvArray() {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      return new FluentListAssertion&lt;&gt;(asCsvArrayPart().asList().orElse(null), this);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   }<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span>   // &lt;FluentSetters&gt;<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span>   @Override /* GENERATED */<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   public RequestQueryParam schema(HttpPartSchema value) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      super.schema(value);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      return this;<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>   @Override /* GENERATED */<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   public RequestQueryParam parser(HttpPartParserSession value) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      super.parser(value);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      return this;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   }<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   // &lt;/FluentSetters&gt;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>}<a name="line.235"></a>