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> </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> </dd>
<dt><span class="memberNameLink"><a href="org/apache/juneau/AnnotationWorkList.html#add-org.apache.juneau.reflect.AnnotationInfo-org.apache.juneau.AnnotationApplier-">add(AnnotationInfo<?>, AnnotationApplier<Annotation, Object>)</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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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'><dt></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> </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> </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<Rdf>, List<RdfSchema>)</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> </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: </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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<?>, 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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </dd>
<dt><span class="memberNameLink"><a href="org/apache/juneau/reflect/ClassInfo.html#hasNoAnnotation-java.lang.Class-">hasNoAnnotation(Class<A>)</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> </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> </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> </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> </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> </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> </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<Object></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<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 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> </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> </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> </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> </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<RestRequest, RestResponse>)</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<RestRequest, RestResponse>)</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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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 <a href="../../../../../src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html#line.58">HtmlBeansResource</a>()</pre>
+<pre>public <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 <a href="../../../../../org/apache/juneau/rest/beans/ResourceDescriptions.html" title="class in org.apache.juneau.rest.beans">ResourceDescriptions</a> <a href="../../../../../src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html#line.68">getChildDescriptions</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/rest/beans/ResourceDescriptions.html" title="class in org.apache.juneau.rest.beans">ResourceDescriptions</a> <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 <a href="../../../../../org/apache/juneau/dto/html5/Table.html" title="class in org.apache.juneau.dto.html5">Table</a> <a href="../../../../../src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html#line.88">aTable</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/dto/html5/Table.html" title="class in org.apache.juneau.dto.html5">Table</a> <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 <a href="../../../../../org/apache/juneau/dto/html5/HtmlElement.html" title="class in org.apache.juneau.dto.html5">HtmlElement</a> <a href="../../../../../src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html#line.113">aDiv</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/dto/html5/HtmlElement.html" title="class in org.apache.juneau.dto.html5">HtmlElement</a> <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 <a href="../../../../../org/apache/juneau/dto/html5/Form.html" title="class in org.apache.juneau.dto.html5">Form</a> <a href="../../../../../src-html/org/apache/juneau/examples/rest/HtmlBeansResource.html#line.133">aForm</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/dto/html5/Form.html" title="class in org.apache.juneau.dto.html5">Form</a> <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 <a href="../../../../../src-html/org/apache/juneau/examples/rest/RootResources.html#line.74">RootResources</a>()</pre>
+<pre>public <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><?>[]</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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>></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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>></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 <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/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 <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/http/annotation/FormData.html#line.189">name</a></pre>
+<pre>public abstract <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/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 <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/http/annotation/FormData.html#line.200">on</a></pre>
+<pre>public abstract <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/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 <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><?>[] <a href="../../../../../src-html/org/apache/juneau/http/annotation/FormData.html#line.214">onClass</a></pre>
+<pre>public abstract <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><?>[] <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 <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>> <a href="../../../../../src-html/org/apache/juneau/http/annotation/FormData.html#line.224">parser</a></pre>
+<pre>public abstract <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>> <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 <a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a> <a href="../../../../../src-html/org/apache/juneau/http/annotation/FormData.html#line.249">schema</a></pre>
+<pre>public abstract <a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a> <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 <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>> <a href="../../../../../src-html/org/apache/juneau/http/annotation/FormData.html#line.259">serializer</a></pre>
+<pre>public abstract <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>> <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 <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/http/annotation/FormData.html#line.278">value</a></pre>
+<pre>public abstract <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/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><<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>></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 <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> vr)</pre>
+<pre>public <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> 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 void <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><<a href="../../../../../org/apache/juneau/http/annotation/FormData.html" title="annotation in org.apache.juneau.http.annotation">FormData</a>> ai,
+<pre>public void <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><<a href="../../../../../org/apache/juneau/http/annotation/FormData.html" title="annotation in org.apache.juneau.http.annotation">FormData</a>> ai,
<a href="../../../../../org/apache/juneau/BeanContext.Builder.html" title="class in org.apache.juneau">BeanContext.Builder</a> b)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/annotation/FormData.html" title="annotation in org.apache.juneau.http.annotation">FormData</a>[] <a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Array.html#line.315">value</a></pre>
+<pre>public abstract <a href="../../../../../org/apache/juneau/http/annotation/FormData.html" title="annotation in org.apache.juneau.http.annotation">FormData</a>[] <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> 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> 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><?>... 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>... 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>... 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>... 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><?>... 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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>> 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> 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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>> 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> 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 <a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.120">Builder</a>()</pre>
+<pre>protected <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 <a href="../../../../../org/apache/juneau/http/annotation/FormData.html" title="annotation in org.apache.juneau.http.annotation">FormData</a> <a href="../../../../../src-html/org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html#line.129">build</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/FormData.html" title="annotation in org.apache.juneau.http.annotation">FormData</a> <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 <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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> 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 <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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> 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 <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>> 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 <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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> 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 <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>> 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 <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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> 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 <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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>... values)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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>... values)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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><?>... value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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><?>... value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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><?>... value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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><?>... value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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>... value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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>... value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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>... value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/FormDataAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">FormDataAnnotation.Builder</a> <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>... value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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><<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/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> 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><<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/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> 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 <a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">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>> <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> 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 <a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">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>> <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> 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><?>[]</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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>></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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>></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 <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/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 <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/http/annotation/Header.html#line.150">name</a></pre>
+<pre>public abstract <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/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 <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/http/annotation/Header.html#line.161">on</a></pre>
+<pre>public abstract <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/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 <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><?>[] <a href="../../../../../src-html/org/apache/juneau/http/annotation/Header.html#line.175">onClass</a></pre>
+<pre>public abstract <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><?>[] <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 <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>> <a href="../../../../../src-html/org/apache/juneau/http/annotation/Header.html#line.185">parser</a></pre>
+<pre>public abstract <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>> <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 <a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a> <a href="../../../../../src-html/org/apache/juneau/http/annotation/Header.html#line.210">schema</a></pre>
+<pre>public abstract <a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a> <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 <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>> <a href="../../../../../src-html/org/apache/juneau/http/annotation/Header.html#line.220">serializer</a></pre>
+<pre>public abstract <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>> <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 <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/http/annotation/Header.html#line.239">value</a></pre>
+<pre>public abstract <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/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><<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>></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 <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> vr)</pre>
+<pre>public <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> 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 void <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><<a href="../../../../../org/apache/juneau/http/annotation/Header.html" title="annotation in org.apache.juneau.http.annotation">Header</a>> ai,
+<pre>public void <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><<a href="../../../../../org/apache/juneau/http/annotation/Header.html" title="annotation in org.apache.juneau.http.annotation">Header</a>> ai,
<a href="../../../../../org/apache/juneau/BeanContext.Builder.html" title="class in org.apache.juneau">BeanContext.Builder</a> b)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/annotation/Header.html" title="annotation in org.apache.juneau.http.annotation">Header</a>[] <a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Array.html#line.316">value</a></pre>
+<pre>public abstract <a href="../../../../../org/apache/juneau/http/annotation/Header.html" title="annotation in org.apache.juneau.http.annotation">Header</a>[] <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> 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> 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><?>... 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>... 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>... 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>... 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><?>... 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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>> 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> 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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>> 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> 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 <a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.121">Builder</a>()</pre>
+<pre>protected <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 <a href="../../../../../org/apache/juneau/http/annotation/Header.html" title="annotation in org.apache.juneau.http.annotation">Header</a> <a href="../../../../../src-html/org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html#line.130">build</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/Header.html" title="annotation in org.apache.juneau.http.annotation">Header</a> <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 <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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> 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 <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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> 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 <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>> 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 <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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> 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 <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>> 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 <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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> 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 <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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>... values)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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>... values)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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><?>... value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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><?>... value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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><?>... value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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><?>... value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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>... value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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>... value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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>... value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/HeaderAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">HeaderAnnotation.Builder</a> <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>... value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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><<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/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> 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><<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/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> 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 <a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">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>> <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> 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 <a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">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>> <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> 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><?>[]</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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>></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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>></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 <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/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 <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/http/annotation/Path.html#line.155">name</a></pre>
+<pre>public abstract <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/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 <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/http/annotation/Path.html#line.166">on</a></pre>
+<pre>public abstract <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/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 <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><?>[] <a href="../../../../../src-html/org/apache/juneau/http/annotation/Path.html#line.180">onClass</a></pre>
+<pre>public abstract <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><?>[] <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 <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>> <a href="../../../../../src-html/org/apache/juneau/http/annotation/Path.html#line.190">parser</a></pre>
+<pre>public abstract <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>> <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 <a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a> <a href="../../../../../src-html/org/apache/juneau/http/annotation/Path.html#line.215">schema</a></pre>
+<pre>public abstract <a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a> <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 <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>> <a href="../../../../../src-html/org/apache/juneau/http/annotation/Path.html#line.225">serializer</a></pre>
+<pre>public abstract <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>> <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 <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/http/annotation/Path.html#line.246">value</a></pre>
+<pre>public abstract <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/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><<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>></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 <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> vr)</pre>
+<pre>public <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> 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 void <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><<a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation">Path</a>> ai,
+<pre>public void <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><<a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation">Path</a>> ai,
<a href="../../../../../org/apache/juneau/BeanContext.Builder.html" title="class in org.apache.juneau">BeanContext.Builder</a> b)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation">Path</a>[] <a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Array.html#line.315">value</a></pre>
+<pre>public abstract <a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation">Path</a>[] <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> 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> 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> 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><?>... 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>... 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>... 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>... 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><?>... 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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>> 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> 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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>> 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> 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 <a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.120">Builder</a>()</pre>
+<pre>protected <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 <a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation">Path</a> <a href="../../../../../src-html/org/apache/juneau/http/annotation/PathAnnotation.Builder.html#line.129">build</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/Path.html" title="annotation in org.apache.juneau.http.annotation">Path</a> <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 <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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> 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 <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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> 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 <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>> 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 <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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> 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 <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>> 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 <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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> 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 <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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>... values)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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>... values)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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><?>... value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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><?>... value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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><?>... value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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><?>... value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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>... value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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>... value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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>... value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/PathAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">PathAnnotation.Builder</a> <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>... value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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><<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/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> 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><<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/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> 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 <a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">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>> <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> 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 <a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">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>> <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> 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><?>[]</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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>></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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>></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 <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/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 <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/http/annotation/Query.html#line.161">name</a></pre>
+<pre>public abstract <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/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 <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/http/annotation/Query.html#line.172">on</a></pre>
+<pre>public abstract <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/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 <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><?>[] <a href="../../../../../src-html/org/apache/juneau/http/annotation/Query.html#line.186">onClass</a></pre>
+<pre>public abstract <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><?>[] <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 <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>> <a href="../../../../../src-html/org/apache/juneau/http/annotation/Query.html#line.196">parser</a></pre>
+<pre>public abstract <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>> <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 <a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a> <a href="../../../../../src-html/org/apache/juneau/http/annotation/Query.html#line.221">schema</a></pre>
+<pre>public abstract <a href="../../../../../org/apache/juneau/annotation/Schema.html" title="annotation in org.apache.juneau.annotation">Schema</a> <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 <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>> <a href="../../../../../src-html/org/apache/juneau/http/annotation/Query.html#line.231">serializer</a></pre>
+<pre>public abstract <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>> <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 <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/http/annotation/Query.html#line.250">value</a></pre>
+<pre>public abstract <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/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><<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>></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 <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> vr)</pre>
+<pre>public <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> 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 void <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><<a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">Query</a>> ai,
+<pre>public void <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><<a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">Query</a>> ai,
<a href="../../../../../org/apache/juneau/BeanContext.Builder.html" title="class in org.apache.juneau">BeanContext.Builder</a> b)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">Query</a>[] <a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Array.html#line.315">value</a></pre>
+<pre>public abstract <a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">Query</a>[] <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> 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> 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><?>... 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>... 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>... 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>... 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><?>... 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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>> 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> 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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>> 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> 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 <a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.120">Builder</a>()</pre>
+<pre>protected <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 <a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">Query</a> <a href="../../../../../src-html/org/apache/juneau/http/annotation/QueryAnnotation.Builder.html#line.129">build</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/Query.html" title="annotation in org.apache.juneau.http.annotation">Query</a> <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 <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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> 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 <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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> 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 <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartParser.html" title="interface in org.apache.juneau.httppart">HttpPartParser</a>> 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 <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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> 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 <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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><? extends <a href="../../../../../org/apache/juneau/httppart/HttpPartSerializer.html" title="interface in org.apache.juneau.httppart">HttpPartSerializer</a>> 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 <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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> 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 <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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>... values)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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>... values)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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><?>... value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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><?>... value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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><?>... value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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><?>... value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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>... value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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>... value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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>... value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/annotation/QueryAnnotation.Builder.html" title="class in org.apache.juneau.http.annotation">QueryAnnotation.Builder</a> <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>... value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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><<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/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> 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><<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/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> 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 <a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">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>> <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> 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 <a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">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>> <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> 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 <a href="../../../../../org/apache/juneau/Value.html" title="class in org.apache.juneau">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>> <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> 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 Class</li>
-<li><a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Next 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 Class</li>
-<li><a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Next 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 Class</span></a></li>
+<li><a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Next 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 Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All 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: </li>
+<li>Nested | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </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"> </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> 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"> </span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </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> 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 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> 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> 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> 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> 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><<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>> 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 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> 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> 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 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 <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> 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 <a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a> <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 <a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a> <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 <a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a> <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> 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 <a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a> <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> 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 <a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a> <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> 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 <a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a> <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 <a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a> <a href="../../../../src-html/org/apache/juneau/microservice/LogConfig.html#line.144">limit</a>(int 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 <a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a> <a href="../../../../src-html/org/apache/juneau/microservice/LogConfig.html#line.155">count</a>(int 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 <a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a> <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> 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 <a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a> <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> 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 <a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a> <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><<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>> 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 <a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice">LogConfig</a> <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> 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> 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 Class</span></a></li>
+<li><a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Next 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 Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All 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: </li>
+<li>Nested | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </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 © 2016–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> 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> 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> 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> 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><T> <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><T> c,
T 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><? extends <a href="../../../../org/apache/juneau/svl/Var.html" title="class in org.apache.juneau.svl">Var</a>>... 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> 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> 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 <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.158">Builder</a>()</pre>
+<pre>protected <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 <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> copyFrom)</pre>
+<pre>protected <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> 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 <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.183">copy</a>()</pre>
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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 <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.193">build</a>()
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.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 <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> args)</pre>
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> 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 <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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>... args)</pre>
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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>... 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 <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> value)
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> 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 <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> 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 <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> 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 <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> 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 <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> config)</pre>
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> 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 <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> configName)</pre>
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> 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 <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> configStore)</pre>
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> 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 <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.366">consoleEnabled</a>(boolean consoleEnabled)</pre>
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.Builder.html#line.393">consoleEnabled</a>(boolean 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 <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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><? extends <a href="../../../../org/apache/juneau/microservice/console/ConsoleCommand.html" title="class in org.apache.juneau.microservice.console">ConsoleCommand</a>>... consoleCommands)
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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><? extends <a href="../../../../org/apache/juneau/microservice/console/ConsoleCommand.html" title="class in org.apache.juneau.microservice.console">ConsoleCommand</a>>... 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 <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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>... consoleCommands)</pre>
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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>... 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 <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> consoleReader,
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> 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> 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 <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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><? extends <a href="../../../../org/apache/juneau/svl/Var.html" title="class in org.apache.juneau.svl">Var</a>>... vars)</pre>
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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><? extends <a href="../../../../org/apache/juneau/svl/Var.html" title="class in org.apache.juneau.svl">Var</a>>... 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 <T> <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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><T> c,
+<pre>public <T> <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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><T> c,
T 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 <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> workingDir)</pre>
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> 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 <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> workingDir)</pre>
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> 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 <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> listener)</pre>
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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> 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 <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> <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> path)</pre>
+<pre>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> <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> 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 Class</span></a></li>
+<li><a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Prev 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 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 <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> builder)
+<pre>protected <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> 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 <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.116">getInstance</a>()</pre>
+<pre>public static <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.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 <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.127">create</a>()</pre>
+<pre>public static <a href="../../../../org/apache/juneau/microservice/Microservice.Builder.html" title="class in org.apache.juneau.microservice">Microservice.Builder</a> <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 <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> <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> path)</pre>
+<pre>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> <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> 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 <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.727">init</a>()
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.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 <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.749">start</a>()
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.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 <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.781">startConsole</a>()
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.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 <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.793">stopConsole</a>()
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.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 <a href="../../../../org/apache/juneau/collections/Args.html" title="class in org.apache.juneau.collections">Args</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.810">getArgs</a>()</pre>
+<pre>public <a href="../../../../org/apache/juneau/collections/Args.html" title="class in org.apache.juneau.collections">Args</a> <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 <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.911">getConfig</a>()</pre>
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.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 <a href="../../../../org/apache/juneau/utils/ManifestFile.html" title="class in org.apache.juneau.utils">ManifestFile</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.935">getManifest</a>()</pre>
+<pre>public <a href="../../../../org/apache/juneau/utils/ManifestFile.html" title="class in org.apache.juneau.utils">ManifestFile</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.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 <a href="../../../../org/apache/juneau/svl/VarResolver.html" title="class in org.apache.juneau.svl">VarResolver</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.951">getVarResolver</a>()</pre>
+<pre>public <a href="../../../../org/apache/juneau/svl/VarResolver.html" title="class in org.apache.juneau.svl">VarResolver</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.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 <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> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.960">getLogger</a>()</pre>
+<pre>public <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> <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 boolean <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> args,
+<pre>public boolean <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> 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> 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> 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 <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/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> command,
+<pre>public <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/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> 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> 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>... 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 <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1021">join</a>()
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.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 <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1034">stop</a>()
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.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 void <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1044">exit</a>()
+<pre>public void <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 void <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1056">kill</a>()</pre>
+<pre>public void <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 <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><<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>> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1071">getConsoleCommands</a>()</pre>
+<pre>public final <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><<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>> <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 <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> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1083">getConsoleReader</a>()</pre>
+<pre>protected <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> <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 <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> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.1095">getConsoleWriter</a>()</pre>
+<pre>protected <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> <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 void <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> mb,
+<pre>public void <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> 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> 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>... 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 void <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> mb,
+<pre>public void <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> 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> 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>... 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 void <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> level,
+<pre>protected void <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> 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> 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>... 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 void <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> events)</pre>
+<pre>public void <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> events)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../org/apache/juneau/config/event/ConfigEventListener.html#onConfigChange-org.apache.juneau.config.event.ConfigEvents-">ConfigEventListener</a></code></span></div>
<div class="block">Gets called immediately after a config file has been loaded.</div>
<dl>
@@ -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 Class</span></a></li>
+<li><a href="../../../../org/apache/juneau/microservice/LogConfig.html" title="class in org.apache.juneau.microservice"><span class="typeNameLink">Prev 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 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 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 <a href="../../../../../org/apache/juneau/microservice/jetty/JettyMicroservice.Builder.html" title="class in org.apache.juneau.microservice.jetty">JettyMicroservice.Builder</a> <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> logger)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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> in class <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 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 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 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 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 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 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 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 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 Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All 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: </li>
+<li>Nested | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </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"> </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> 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> dateFormat,
+ boolean 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"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </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> r)</code> </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> 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> 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 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 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 <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> 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> dateFormat,
+ boolean 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 <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> <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 <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> <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 <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/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> 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> 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 <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/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> 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> in class <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 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 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 Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All 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: </li>
+<li>Nested | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </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 © 2016–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 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 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 Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All 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: </li>
+<li>Nested | </li>
+<li><a href="#field.summary">Field</a> | </li>
+<li>Constr | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#field.detail">Field</a> | </li>
+<li>Constr | </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"> </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><<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#additionalText">additionalText</a></span></code> </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> </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> </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> </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> </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> </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> </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> </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"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </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> w)</code> </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> w)</code> </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> </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> </td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class 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 <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 <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 <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 <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 <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 <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 <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><<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.138">additionalText</a></pre>
+</li>
+</ul>
+<a name="isRecord">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>isRecord</h4>
+<pre>protected 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 <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.168">getText</a>()</pre>
+</li>
+</ul>
+<a name="getThread--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getThread</h4>
+<pre>public <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.181">getThread</a>()</pre>
+</li>
+</ul>
+<a name="appendHtml-java.io.Writer-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>appendHtml</h4>
+<pre>public <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> <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> 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 <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> <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> 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 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 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 Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All 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: </li>
+<li>Nested | </li>
+<li><a href="#field.summary">Field</a> | </li>
+<li>Constr | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#field.detail">Field</a> | </li>
+<li>Constr | </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 © 2016–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 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 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 Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All 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: </li>
+<li><a href="#nested.class.summary">Nested</a> | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </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><<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a>>, <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><<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a>></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><<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a>>, <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><<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a>>, <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"> </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 </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"> </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> 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> 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> 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> 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> 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>[] 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>[] 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"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </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> </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> </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><<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#iterator--">iterator</a></span>()</code> </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> </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> </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> 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 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 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 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 <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> 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> 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> 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> 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> 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>[] 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>[] 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 boolean <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> in interface <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><<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a>></code></dd>
+</dl>
+</li>
+</ul>
+<a name="next--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>next</h4>
+<pre>public <a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a> <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> in interface <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><<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a>></code></dd>
+</dl>
+</li>
+</ul>
+<a name="remove--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>remove</h4>
+<pre>public void <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> in interface <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><<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a>></code></dd>
+</dl>
+</li>
+</ul>
+<a name="iterator--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>iterator</h4>
+<pre>public <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><<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a>> <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> in interface <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><<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.Entry.html" title="class in org.apache.juneau.microservice.resources">LogParser.Entry</a>></code></dd>
+</dl>
+</li>
+</ul>
+<a name="close--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>close</h4>
+<pre>public void <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> in interface <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> in interface <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 void <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> 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 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 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 Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All 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: </li>
+<li><a href="#nested.class.summary">Nested</a> | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </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 © 2016–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 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 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 Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All 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: </li>
+<li>Nested | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#methods.inherited.from.class.org.apache.juneau.dto.LinkString">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </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><<a href="../../../../../org/apache/juneau/dto/LinkString.html" title="class in org.apache.juneau.dto">LinkString</a>></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"> </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> 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> 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>... uriArgs)</code> </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 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 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 <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> 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> 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>... 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 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 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 Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All 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: </li>
+<li>Nested | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#methods.inherited.from.class.org.apache.juneau.dto.LinkString">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2016–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 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 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 Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All 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: </li>
+<li>Nested | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </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"> </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> 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> path,
+ boolean allowDeletes,
+ boolean includeChildren)</code> </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"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </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><<a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.Action.html" title="class in org.apache.juneau.microservice.resources">LogsResource.Action</a>></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html#getActions--">getActions</a></span>()</code> </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><<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.FileResource.html#getFiles--">getFiles</a></span>()</code> </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> </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> </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> </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> </td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class 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 <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> 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> path,
+ boolean allowDeletes,
+ boolean 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 <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/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 <a href="../../../../../org/apache/juneau/dto/LinkString.html" title="class in org.apache.juneau.dto">LinkString</a> <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 long <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 <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/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 <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><<a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.Action.html" title="class in org.apache.juneau.microservice.resources">LogsResource.Action</a>> <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 <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><<a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource.FileResource</a>> <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 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 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 Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All 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: </li>
+<li>Nested | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </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 © 2016–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 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 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 Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All 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: </li>
+<li><a href="#nested.class.summary">Nested</a> | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </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"> </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 </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> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static class </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> </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"> </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> </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"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </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> path)</code> </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> 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> path)</code> </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> 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> path)</code> </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> config)</code> </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> 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> path,
+ boolean 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> 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> 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> 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>[] 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>[] severity)</code> </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> 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> 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> 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> 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> 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>[] 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>[] severity)</code> </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 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 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 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 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 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 <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 void <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> 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 <a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource.FileResource</a> <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> 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> 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 void <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> 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> 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 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> 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> 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> 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>[] 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>[] 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 <a href="../../../../../org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources">LogParser</a> <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> 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> 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> 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> 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> 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>[] 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>[] 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 org.apache.juneau.microservice.resources.LogsResource.FileContents <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> 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> 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 org.apache.juneau.microservice.resources.LogsResource.RedirectToRoot <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> 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 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 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 Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All 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: </li>
+<li><a href="#nested.class.summary">Nested</a> | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </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 © 2016–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 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 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 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 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 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 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"> </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"> </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"> </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><T>)
<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><T>, 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><E>)</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 <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> <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> opSession)
+<pre>public <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> <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> 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: <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 <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> <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> opSession)
+<pre>public <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> <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> 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: <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 <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> <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> opSession)
+<pre>public <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> <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> 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: <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 <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> pi,
+<pre>protected <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> pi,
<a href="../../../../../org/apache/juneau/AnnotationWorkList.html" title="class in org.apache.juneau">AnnotationWorkList</a> annotations)</pre>
<div class="block">Constructor.</div>
<dl>
@@ -242,7 +242,7 @@
<ul class="blockList">
<li class="blockList">
<h4>create</h4>
-<pre>public static <a href="../../../../../org/apache/juneau/rest/arg/QueryArg.html" title="class in org.apache.juneau.rest.arg">QueryArg</a> <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> paramInfo,
+<pre>public static <a href="../../../../../org/apache/juneau/rest/arg/QueryArg.html" title="class in org.apache.juneau.rest.arg">QueryArg</a> <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> paramInfo,
<a href="../../../../../org/apache/juneau/AnnotationWorkList.html" title="class in org.apache.juneau">AnnotationWorkList</a> annotations)</pre>
<div class="block">Static creator.</div>
<dl>
@@ -260,7 +260,7 @@
<ul class="blockListLast">
<li class="blockList">
<h4>resolve</h4>
-<pre>public <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> <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> opSession)
+<pre>public <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> <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> 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: <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> 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> 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> 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 <a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a> <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> 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 <a href="../../../../../org/apache/juneau/assertions/FluentStringAssertion.html" title="class in org.apache.juneau.assertions">FluentStringAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestFormParam.html#line.163">assertString</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/assertions/FluentStringAssertion.html" title="class in org.apache.juneau.assertions">FluentStringAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>> <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 <a href="../../../../../org/apache/juneau/assertions/FluentIntegerAssertion.html" title="class in org.apache.juneau.assertions">FluentIntegerAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestFormParam.html#line.179">assertInteger</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/assertions/FluentIntegerAssertion.html" title="class in org.apache.juneau.assertions">FluentIntegerAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>> <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 <a href="../../../../../org/apache/juneau/assertions/FluentLongAssertion.html" title="class in org.apache.juneau.assertions">FluentLongAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestFormParam.html#line.195">assertLong</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/assertions/FluentLongAssertion.html" title="class in org.apache.juneau.assertions">FluentLongAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>> <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 <a href="../../../../../org/apache/juneau/assertions/FluentZonedDateTimeAssertion.html" title="class in org.apache.juneau.assertions">FluentZonedDateTimeAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestFormParam.html#line.211">assertDate</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/assertions/FluentZonedDateTimeAssertion.html" title="class in org.apache.juneau.assertions">FluentZonedDateTimeAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>> <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 <a href="../../../../../org/apache/juneau/assertions/FluentListAssertion.html" title="class in org.apache.juneau.assertions">FluentListAssertion</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>,<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestFormParam.html#line.227">assertCsvArray</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/assertions/FluentListAssertion.html" title="class in org.apache.juneau.assertions">FluentListAssertion</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>,<a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a>> <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 <a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a> <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> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a> <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> value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a> <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> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/rest/httppart/RequestFormParam.html" title="class in org.apache.juneau.rest.httppart">RequestFormParam</a> <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> value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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> 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> 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> 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> </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 <a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a> <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> 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 <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/rest/httppart/RequestHeader.html#line.117">getValue</a>()</pre>
+<pre>public <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/rest/httppart/RequestHeader.html#line.129">getValue</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/http/header/BasicCsvHeader.html" title="class in org.apache.juneau.http.header">BasicCsvHeader</a> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.126">asCsvHeader</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/header/BasicCsvHeader.html" title="class in org.apache.juneau.http.header">BasicCsvHeader</a> <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 <a href="../../../../../org/apache/juneau/http/header/BasicDateHeader.html" title="class in org.apache.juneau.http.header">BasicDateHeader</a> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.135">asDateHeader</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/header/BasicDateHeader.html" title="class in org.apache.juneau.http.header">BasicDateHeader</a> <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 <a href="../../../../../org/apache/juneau/http/header/BasicEntityTagsHeader.html" title="class in org.apache.juneau.http.header">BasicEntityTagsHeader</a> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.144">asEntityTagsHeader</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/header/BasicEntityTagsHeader.html" title="class in org.apache.juneau.http.header">BasicEntityTagsHeader</a> <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 <a href="../../../../../org/apache/juneau/http/header/BasicEntityTagHeader.html" title="class in org.apache.juneau.http.header">BasicEntityTagHeader</a> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.153">asEntityTagHeader</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/header/BasicEntityTagHeader.html" title="class in org.apache.juneau.http.header">BasicEntityTagHeader</a> <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 <a href="../../../../../org/apache/juneau/http/header/BasicIntegerHeader.html" title="class in org.apache.juneau.http.header">BasicIntegerHeader</a> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.162">asIntegerHeader</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/header/BasicIntegerHeader.html" title="class in org.apache.juneau.http.header">BasicIntegerHeader</a> <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 <a href="../../../../../org/apache/juneau/http/header/BasicBooleanHeader.html" title="class in org.apache.juneau.http.header">BasicBooleanHeader</a> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.171">asBooleanHeader</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/header/BasicBooleanHeader.html" title="class in org.apache.juneau.http.header">BasicBooleanHeader</a> <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 <a href="../../../../../org/apache/juneau/http/header/BasicLongHeader.html" title="class in org.apache.juneau.http.header">BasicLongHeader</a> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.180">asLongHeader</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/header/BasicLongHeader.html" title="class in org.apache.juneau.http.header">BasicLongHeader</a> <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 <a href="../../../../../org/apache/juneau/http/header/BasicStringRangesHeader.html" title="class in org.apache.juneau.http.header">BasicStringRangesHeader</a> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.189">asStringRangesHeader</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/header/BasicStringRangesHeader.html" title="class in org.apache.juneau.http.header">BasicStringRangesHeader</a> <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 <a href="../../../../../org/apache/juneau/http/header/BasicStringHeader.html" title="class in org.apache.juneau.http.header">BasicStringHeader</a> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.198">asStringHeader</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/header/BasicStringHeader.html" title="class in org.apache.juneau.http.header">BasicStringHeader</a> <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 <a href="../../../../../org/apache/juneau/http/header/BasicUriHeader.html" title="class in org.apache.juneau.http.header">BasicUriHeader</a> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.207">asUriHeader</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/http/header/BasicUriHeader.html" title="class in org.apache.juneau.http.header">BasicUriHeader</a> <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 <a href="../../../../../org/apache/juneau/assertions/FluentStringAssertion.html" title="class in org.apache.juneau.assertions">FluentStringAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.236">assertString</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/assertions/FluentStringAssertion.html" title="class in org.apache.juneau.assertions">FluentStringAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>> <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 <a href="../../../../../org/apache/juneau/assertions/FluentIntegerAssertion.html" title="class in org.apache.juneau.assertions">FluentIntegerAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.252">assertInteger</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/assertions/FluentIntegerAssertion.html" title="class in org.apache.juneau.assertions">FluentIntegerAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>> <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 <a href="../../../../../org/apache/juneau/assertions/FluentLongAssertion.html" title="class in org.apache.juneau.assertions">FluentLongAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.268">assertLong</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/assertions/FluentLongAssertion.html" title="class in org.apache.juneau.assertions">FluentLongAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>> <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 <a href="../../../../../org/apache/juneau/assertions/FluentZonedDateTimeAssertion.html" title="class in org.apache.juneau.assertions">FluentZonedDateTimeAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.284">assertDate</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/assertions/FluentZonedDateTimeAssertion.html" title="class in org.apache.juneau.assertions">FluentZonedDateTimeAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>> <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 <a href="../../../../../org/apache/juneau/assertions/FluentListAssertion.html" title="class in org.apache.juneau.assertions">FluentListAssertion</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>,<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.300">assertCsvArray</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/assertions/FluentListAssertion.html" title="class in org.apache.juneau.assertions">FluentListAssertion</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>,<a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a>> <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 org.apache.http.HeaderElement[] <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestHeader.html#line.311">getElements</a>()
+<pre>public org.apache.http.HeaderElement[] <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 <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/rest/httppart/RequestHeader.html#line.316">toString</a>()</pre>
+<pre>public <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/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> in class <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 <a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a> <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> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a> <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> value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a> <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> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/rest/httppart/RequestHeader.html" title="class in org.apache.juneau.rest.httppart">RequestHeader</a> <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> value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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> 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> 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> 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 <a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a> <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> 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 <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/rest/httppart/RequestPathParam.html#line.112">getValue</a>()</pre>
+<pre>public <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/rest/httppart/RequestPathParam.html#line.124">getValue</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/assertions/FluentStringAssertion.html" title="class in org.apache.juneau.assertions">FluentStringAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.141">assertString</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/assertions/FluentStringAssertion.html" title="class in org.apache.juneau.assertions">FluentStringAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>> <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 <a href="../../../../../org/apache/juneau/assertions/FluentIntegerAssertion.html" title="class in org.apache.juneau.assertions">FluentIntegerAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.157">assertInteger</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/assertions/FluentIntegerAssertion.html" title="class in org.apache.juneau.assertions">FluentIntegerAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>> <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 <a href="../../../../../org/apache/juneau/assertions/FluentLongAssertion.html" title="class in org.apache.juneau.assertions">FluentLongAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.173">assertLong</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/assertions/FluentLongAssertion.html" title="class in org.apache.juneau.assertions">FluentLongAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>> <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 <a href="../../../../../org/apache/juneau/assertions/FluentZonedDateTimeAssertion.html" title="class in org.apache.juneau.assertions">FluentZonedDateTimeAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.189">assertDate</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/assertions/FluentZonedDateTimeAssertion.html" title="class in org.apache.juneau.assertions">FluentZonedDateTimeAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>> <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 <a href="../../../../../org/apache/juneau/assertions/FluentListAssertion.html" title="class in org.apache.juneau.assertions">FluentListAssertion</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>,<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestPathParam.html#line.205">assertCsvArray</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/assertions/FluentListAssertion.html" title="class in org.apache.juneau.assertions">FluentListAssertion</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>,<a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a>> <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 <a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a> <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> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a> <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> value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a> <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> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/rest/httppart/RequestPathParam.html" title="class in org.apache.juneau.rest.httppart">RequestPathParam</a> <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> value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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> 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> 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> 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 <a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a> <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> 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 <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/rest/httppart/RequestQueryParam.html#line.112">getValue</a>()</pre>
+<pre>public <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/rest/httppart/RequestQueryParam.html#line.124">getValue</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/assertions/FluentStringAssertion.html" title="class in org.apache.juneau.assertions">FluentStringAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.141">assertString</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/assertions/FluentStringAssertion.html" title="class in org.apache.juneau.assertions">FluentStringAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>> <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 <a href="../../../../../org/apache/juneau/assertions/FluentIntegerAssertion.html" title="class in org.apache.juneau.assertions">FluentIntegerAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.157">assertInteger</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/assertions/FluentIntegerAssertion.html" title="class in org.apache.juneau.assertions">FluentIntegerAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>> <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 <a href="../../../../../org/apache/juneau/assertions/FluentLongAssertion.html" title="class in org.apache.juneau.assertions">FluentLongAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.173">assertLong</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/assertions/FluentLongAssertion.html" title="class in org.apache.juneau.assertions">FluentLongAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>> <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 <a href="../../../../../org/apache/juneau/assertions/FluentZonedDateTimeAssertion.html" title="class in org.apache.juneau.assertions">FluentZonedDateTimeAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.189">assertDate</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/assertions/FluentZonedDateTimeAssertion.html" title="class in org.apache.juneau.assertions">FluentZonedDateTimeAssertion</a><<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>> <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 <a href="../../../../../org/apache/juneau/assertions/FluentListAssertion.html" title="class in org.apache.juneau.assertions">FluentListAssertion</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>,<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>> <a href="../../../../../src-html/org/apache/juneau/rest/httppart/RequestQueryParam.html#line.205">assertCsvArray</a>()</pre>
+<pre>public <a href="../../../../../org/apache/juneau/assertions/FluentListAssertion.html" title="class in org.apache.juneau.assertions">FluentListAssertion</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>,<a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a>> <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 <a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a> <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> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a> <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> value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 <a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a> <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> value)</pre>
+<pre>public <a href="../../../../../org/apache/juneau/rest/httppart/RequestQueryParam.html" title="class in org.apache.juneau.rest.httppart">RequestQueryParam</a> <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> value)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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<Integer> <jv>p1</jv>,
+ <ja>@FormData</ja>(<js>"f1"</js>) Optional<MyBean> <jv>f1</jv>,
+ <ja>@Header</ja>(<js>"Accept-Language"</js>) Optional<AcceptLanguage> <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><a href='$U{$C{REST/footerLink}}'>
<img src='$U{$C{REST/footerIcon}}' style='float:right;padding-right:20px;height:32px'/>
</a></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><T>)
<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><E></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><T>, 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><E>)</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><K,V></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 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 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> "<div class='text'>",<a name="line.83"></a>
-<span class="sourceLineNo">084</span> " <p>Example of serialized table.</p>",<a name="line.84"></a>
-<span class="sourceLineNo">085</span> "</div>"<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> "<div class='text'>",<a name="line.108"></a>
-<span class="sourceLineNo">109</span> " <p>Example of serialized div tag.</p>",<a name="line.109"></a>
-<span class="sourceLineNo">110</span> "</div>"<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> "<div class='text'>",<a name="line.128"></a>
-<span class="sourceLineNo">129</span> " <p>Example of serialized HTML form.</p>",<a name="line.129"></a>
-<span class="sourceLineNo">130</span> "</div>"<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> "<div class='text'>",<a name="line.82"></a>
+<span class="sourceLineNo">083</span> " <p>Example of serialized table.</p>",<a name="line.83"></a>
+<span class="sourceLineNo">084</span> "</div>"<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> "<div class='text'>",<a name="line.107"></a>
+<span class="sourceLineNo">108</span> " <p>Example of serialized div tag.</p>",<a name="line.108"></a>
+<span class="sourceLineNo">109</span> "</div>"<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> "<div class='text'>",<a name="line.127"></a>
+<span class="sourceLineNo">128</span> " <p>Example of serialized HTML form.</p>",<a name="line.128"></a>
+<span class="sourceLineNo">129</span> "</div>"<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> "<div class='text'>",<a name="line.56"></a>
-<span class="sourceLineNo">057</span> " <p>This is an example of a 'router' page that serves as a jumping-off point to child resources.</p>",<a name="line.57"></a>
-<span class="sourceLineNo">058</span> " <p>Resources can be nested arbitrarily deep through router pages.</p>",<a name="line.58"></a>
-<span class="sourceLineNo">059</span> " <p>Note the <span class='link'>API</span> link provided that lets you see the generated swagger doc for this page.</p>",<a name="line.59"></a>
-<span class="sourceLineNo">060</span> " <p>Also note the <span class='link'>STATS</span> link to view runtime statistics on this page.</p>",<a name="line.60"></a>
-<span class="sourceLineNo">061</span> " <p>Also note the <span class='link'>SOURCE</span> link to view the source code for the page.</p>",<a name="line.61"></a>
-<span class="sourceLineNo">062</span> " <p>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'.</p>",<a name="line.62"></a>
-<span class="sourceLineNo">063</span> " <p>Other features (such as this aside) are added through annotations.</p>",<a name="line.63"></a>
-<span class="sourceLineNo">064</span> "</div>"<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> "<div class='text'>",<a name="line.57"></a>
+<span class="sourceLineNo">058</span> " <p>This is an example of a 'router' page that serves as a jumping-off point to child resources.</p>",<a name="line.58"></a>
+<span class="sourceLineNo">059</span> " <p>Resources can be nested arbitrarily deep through router pages.</p>",<a name="line.59"></a>
+<span class="sourceLineNo">060</span> " <p>Note the <span class='link'>API</span> link provided that lets you see the generated swagger doc for this page.</p>",<a name="line.60"></a>
+<span class="sourceLineNo">061</span> " <p>Also note the <span class='link'>STATS</span> link to view runtime statistics on this page.</p>",<a name="line.61"></a>
+<span class="sourceLineNo">062</span> " <p>Also note the <span class='link'>SOURCE</span> link to view the source code for the page.</p>",<a name="line.62"></a>
+<span class="sourceLineNo">063</span> " <p>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'.</p>",<a name="line.63"></a>
+<span class="sourceLineNo">064</span> " <p>Other features (such as this aside) are added through annotations.</p>",<a name="line.64"></a>
+<span class="sourceLineNo">065</span> "</div>"<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> * <p><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> * <p><a name="line.131"></a>
-<span class="sourceLineNo">132</span> * The value should be either a valid form parameter name, or <js>"*"</js> 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> * <p><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> * <ul class='spaced-list'><a name="line.136"></a>
-<span class="sourceLineNo">137</span> * <li><a name="line.137"></a>
-<span class="sourceLineNo">138</span> * If the data type is <c>NameValuePairs</c>, <c>Map</c>, or a bean,<a name="line.138"></a>
-<span class="sourceLineNo">139</span> * then it's the equivalent to <js>"*"</js> 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> * <p><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> * <p><a name="line.138"></a>
+<span class="sourceLineNo">139</span> * The value should be either a valid form parameter name, or <js>"*"</js> 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> * <h5 class='figure'>Examples:</h5><a name="line.141"></a>
-<span class="sourceLineNo">142</span> * <p class='bjava'><a name="line.142"></a>
-<span class="sourceLineNo">143</span> * <jc>// When used on a REST method</jc><a name="line.143"></a>
-<span class="sourceLineNo">144</span> * <ja>@RestPost</ja>(<js>"/addPet"</js>)<a name="line.144"></a>
-<span class="sourceLineNo">145</span> * <jk>public void</jk> addPet(<ja>@FormData</ja> JsonMap <jv>allFormDataParameters</jv>) {...}<a name="line.145"></a>
-<span class="sourceLineNo">146</span> * </p><a name="line.146"></a>
-<span class="sourceLineNo">147</span> * <p class='bjava'><a name="line.147"></a>
-<span class="sourceLineNo">148</span> * <jc>// When used on a remote method parameter</jc><a name="line.148"></a>
-<span class="sourceLineNo">149</span> * <ja>@RemoteResource</ja>(path=<js>"/myproxy"</js>)<a name="line.149"></a>
-<span class="sourceLineNo">150</span> * <jk>public interface</jk> MyProxy {<a name="line.150"></a>
-<span class="sourceLineNo">151</span> *<a name="line.151"></a>
-<span class="sourceLineNo">152</span> * <jc>// Equivalent to @FormData("*")</jc><a name="line.152"></a>
-<span class="sourceLineNo">153</span> * <ja>@RemotePost</ja>(<js>"/mymethod"</js>)<a name="line.153"></a>
-<span class="sourceLineNo">154</span> * String myProxyMethod1(<ja>@FormData</ja> Map&lt;String,Object&gt; <jv>allFormDataParameters</jv>);<a name="line.154"></a>
-<span class="sourceLineNo">155</span> * }<a name="line.155"></a>
-<span class="sourceLineNo">156</span> * </p><a name="line.156"></a>
-<span class="sourceLineNo">157</span> * <p class='bjava'><a name="line.157"></a>
-<span class="sourceLineNo">158</span> * <jc>// When used on a request bean method</jc><a name="line.158"></a>
-<span class="sourceLineNo">159</span> * <jk>public interface</jk> MyRequest {<a name="line.159"></a>
-<span class="sourceLineNo">160</span> *<a name="line.160"></a>
-<span class="sourceLineNo">161</span> * <jc>// Equivalent to @FormData("*")</jc><a name="line.161"></a>
-<span class="sourceLineNo">162</span> * <ja>@FormData</ja><a name="line.162"></a>
-<span class="sourceLineNo">163</span> * Map&lt;String,Object&gt; getFoo();<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * }<a name="line.164"></a>
-<span class="sourceLineNo">165</span> * </p><a name="line.165"></a>
-<span class="sourceLineNo">166</span> * </li><a name="line.166"></a>
-<span class="sourceLineNo">167</span> * <li><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> * <h5 class='figure'>Example:</h5><a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <p class='bjava'><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <jk>public interface</jk> MyRequest {<a name="line.172"></a>
-<span class="sourceLineNo">173</span> *<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * <jc>// Equivalent to @FormData("foo")</jc><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <ja>@FormData</ja><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> * </p><a name="line.178"></a>
-<span class="sourceLineNo">179</span> * </li><a name="line.179"></a>
-<span class="sourceLineNo">180</span> * </ul><a name="line.180"></a>
-<span class="sourceLineNo">181</span> *<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <ul class='notes'><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * <li class='note'><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> * </ul><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> * <p><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> * <ul class='spaced-list'><a name="line.143"></a>
+<span class="sourceLineNo">144</span> * <li><a name="line.144"></a>
+<span class="sourceLineNo">145</span> * If the data type is <c>NameValuePairs</c>, <c>Map</c>, or a bean,<a name="line.145"></a>
+<span class="sourceLineNo">146</span> * then it's the equivalent to <js>"*"</js> 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> * <h5 class='figure'>Examples:</h5><a name="line.148"></a>
+<span class="sourceLineNo">149</span> * <p class='bjava'><a name="line.149"></a>
+<span class="sourceLineNo">150</span> * <jc>// When used on a REST method</jc><a name="line.150"></a>
+<span class="sourceLineNo">151</span> * <ja>@RestPost</ja>(<js>"/addPet"</js>)<a name="line.151"></a>
+<span class="sourceLineNo">152</span> * <jk>public void</jk> addPet(<ja>@FormData</ja> JsonMap <jv>allFormDataParameters</jv>) {...}<a name="line.152"></a>
+<span class="sourceLineNo">153</span> * </p><a name="line.153"></a>
+<span class="sourceLineNo">154</span> * <p class='bjava'><a name="line.154"></a>
+<span class="sourceLineNo">155</span> * <jc>// When used on a remote method parameter</jc><a name="line.155"></a>
+<span class="sourceLineNo">156</span> * <ja>@RemoteResource</ja>(path=<js>"/myproxy"</js>)<a name="line.156"></a>
+<span class="sourceLineNo">157</span> * <jk>public interface</jk> MyProxy {<a name="line.157"></a>
+<span class="sourceLineNo">158</span> *<a name="line.158"></a>
+<span class="sourceLineNo">159</span> * <jc>// Equivalent to @FormData("*")</jc><a name="line.159"></a>
+<span class="sourceLineNo">160</span> * <ja>@RemotePost</ja>(<js>"/mymethod"</js>)<a name="line.160"></a>
+<span class="sourceLineNo">161</span> * String myProxyMethod1(<ja>@FormData</ja> Map&lt;String,Object&gt; <jv>allFormDataParameters</jv>);<a name="line.161"></a>
+<span class="sourceLineNo">162</span> * }<a name="line.162"></a>
+<span class="sourceLineNo">163</span> * </p><a name="line.163"></a>
+<span class="sourceLineNo">164</span> * <p class='bjava'><a name="line.164"></a>
+<span class="sourceLineNo">165</span> * <jc>// When used on a request bean method</jc><a name="line.165"></a>
+<span class="sourceLineNo">166</span> * <jk>public interface</jk> MyRequest {<a name="line.166"></a>
+<span class="sourceLineNo">167</span> *<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <jc>// Equivalent to @FormData("*")</jc><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * <ja>@FormData</ja><a name="line.169"></a>
+<span class="sourceLineNo">170</span> * Map&lt;String,Object&gt; getFoo();<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * }<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * </p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * </li><a name="line.173"></a>
+<span class="sourceLineNo">174</span> * <li><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> * <h5 class='figure'>Example:</h5><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * <p class='bjava'><a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <jk>public interface</jk> MyRequest {<a name="line.179"></a>
+<span class="sourceLineNo">180</span> *<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <jc>// Equivalent to @FormData("foo")</jc><a name="line.181"></a>
+<span class="sourceLineNo">182</span> * <ja>@FormData</ja><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> * </p><a name="line.185"></a>
+<span class="sourceLineNo">186</span> * </li><a name="line.186"></a>
+<span class="sourceLineNo">187</span> * </ul><a name="line.187"></a>
+<span class="sourceLineNo">188</span> *<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * <ul class='notes'><a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <li class='note'><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> * </ul><a name="line.192"></a>
<span class="sourceLineNo">193</span> *<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * <ul class='seealso'><a name="line.194"></a>
-<span class="sourceLineNo">195</span> * <li class='link'>{@doc jm.DynamicallyAppliedAnnotations}<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * </ul><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> * <ul class='seealso'><a name="line.201"></a>
+<span class="sourceLineNo">202</span> * <li class='link'>{@doc jm.DynamicallyAppliedAnnotations}<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * </ul><a name="line.203"></a>
<span class="sourceLineNo">204</span> *<a name="line.204"></a>
-<span class="sourceLineNo">205</span> * <p><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> * <ul class='seealso'><a name="line.208"></a>
-<span class="sourceLineNo">209</span> * <li class='link'>{@doc jm.DynamicallyAppliedAnnotations}<a name="line.209"></a>
-<span class="sourceLineNo">210</span> * </ul><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<?>[] 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> * <p><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> * <ul class='seealso'><a name="line.215"></a>
+<span class="sourceLineNo">216</span> * <li class='link'>{@doc jm.DynamicallyAppliedAnnotations}<a name="line.216"></a>
+<span class="sourceLineNo">217</span> * </ul><a name="line.217"></a>
<span class="sourceLineNo">218</span> *<a name="line.218"></a>
-<span class="sourceLineNo">219</span> * <p><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<? extends HttpPartParser> 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> * <mk>schema</mk> 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<?>[] 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> * <p><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> * <p><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> * <p><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> * <h5 class='section'>Used for:</h5><a name="line.237"></a>
-<span class="sourceLineNo">238</span> * <ul class='spaced-list'><a name="line.238"></a>
-<span class="sourceLineNo">239</span> * <li><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> * <li><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> * <li><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> * </ul><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<? extends HttpPartParser> 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> * <mk>schema</mk> 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> * <p><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> * <p><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> * <h5 class='section'>Used for:</h5><a name="line.244"></a>
+<span class="sourceLineNo">245</span> * <ul class='spaced-list'><a name="line.245"></a>
+<span class="sourceLineNo">246</span> * <li><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> * <li><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> * <li><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> * </ul><a name="line.252"></a>
<span class="sourceLineNo">253</span> *<a name="line.253"></a>
-<span class="sourceLineNo">254</span> * <p><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<? extends HttpPartSerializer> 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> * <p><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> * <p><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> * <p><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> * <p class='bjava'><a name="line.269"></a>
-<span class="sourceLineNo">270</span> * <jk>public</jk> Order placeOrder(<ja>@FormData</ja>(name=<js>"petId"</js>) <jk>long</jk> <jv>petId</jv>) {...}<a name="line.270"></a>
-<span class="sourceLineNo">271</span> * </p><a name="line.271"></a>
-<span class="sourceLineNo">272</span> * <p class='bjava'><a name="line.272"></a>
-<span class="sourceLineNo">273</span> * <jk>public</jk> Order placeOrder(<ja>@FormData</ja>(<js>"petId"</js>) <jk>long</jk> <jv>petId</jv>) {...}<a name="line.273"></a>
-<span class="sourceLineNo">274</span> * </p><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<? extends HttpPartSerializer> 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> * <p><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> * <p><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> * <p class='bjava'><a name="line.276"></a>
+<span class="sourceLineNo">277</span> * <jk>public</jk> Order placeOrder(<ja>@FormData</ja>(name=<js>"petId"</js>) <jk>long</jk> <jv>petId</jv>) {...}<a name="line.277"></a>
+<span class="sourceLineNo">278</span> * </p><a name="line.278"></a>
+<span class="sourceLineNo">279</span> * <p class='bjava'><a name="line.279"></a>
+<span class="sourceLineNo">280</span> * <jk>public</jk> Order placeOrder(<ja>@FormData</ja>(<js>"petId"</js>) <jk>long</jk> <jv>petId</jv>) {...}<a name="line.280"></a>
+<span class="sourceLineNo">281</span> * </p><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> * <ul class='seealso'><a name="line.106"></a>
-<span class="sourceLineNo">107</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * </ul><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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> Class<? extends HttpPartSerializer> 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<String> findDef(ParamInfo pi) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span> Value<String> n = Value.empty();<a name="line.106"></a>
+<span class="sourceLineNo">107</span> pi.forEachAnnotation(FormData.class, x -> isNotEmpty(x.def()), x -> 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> * <ul class='seealso'><a name="line.118"></a>
+<span class="sourceLineNo">119</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * </ul><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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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<FormData,BeanContext.Builder> {<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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.124"></a>
+<span class="sourceLineNo">125</span> Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.252"></a>
+<span class="sourceLineNo">253</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<FormData> 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<? extends HttpPartSerializer> 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<FormData,BeanContext.Builder> {<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<FormData> 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> * <ul class='seealso'><a name="line.106"></a>
-<span class="sourceLineNo">107</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * </ul><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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> Class<? extends HttpPartSerializer> 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<String> findDef(ParamInfo pi) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span> Value<String> n = Value.empty();<a name="line.106"></a>
+<span class="sourceLineNo">107</span> pi.forEachAnnotation(FormData.class, x -> isNotEmpty(x.def()), x -> 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> * <ul class='seealso'><a name="line.118"></a>
+<span class="sourceLineNo">119</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * </ul><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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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<FormData,BeanContext.Builder> {<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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.124"></a>
+<span class="sourceLineNo">125</span> Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.252"></a>
+<span class="sourceLineNo">253</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<FormData> 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<? extends HttpPartSerializer> 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<FormData,BeanContext.Builder> {<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<FormData> 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> * <ul class='seealso'><a name="line.106"></a>
-<span class="sourceLineNo">107</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * </ul><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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> Class<? extends HttpPartSerializer> 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<String> findDef(ParamInfo pi) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span> Value<String> n = Value.empty();<a name="line.106"></a>
+<span class="sourceLineNo">107</span> pi.forEachAnnotation(FormData.class, x -> isNotEmpty(x.def()), x -> 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> * <ul class='seealso'><a name="line.118"></a>
+<span class="sourceLineNo">119</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * </ul><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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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<FormData,BeanContext.Builder> {<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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.124"></a>
+<span class="sourceLineNo">125</span> Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.252"></a>
+<span class="sourceLineNo">253</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<FormData> 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<? extends HttpPartSerializer> 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<FormData,BeanContext.Builder> {<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<FormData> 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> * <ul class='seealso'><a name="line.106"></a>
-<span class="sourceLineNo">107</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * </ul><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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> Class<? extends HttpPartSerializer> 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<String> findDef(ParamInfo pi) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span> Value<String> n = Value.empty();<a name="line.106"></a>
+<span class="sourceLineNo">107</span> pi.forEachAnnotation(FormData.class, x -> isNotEmpty(x.def()), x -> 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> * <ul class='seealso'><a name="line.118"></a>
+<span class="sourceLineNo">119</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * </ul><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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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<FormData,BeanContext.Builder> {<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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.124"></a>
+<span class="sourceLineNo">125</span> Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.252"></a>
+<span class="sourceLineNo">253</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<FormData> 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<? extends HttpPartSerializer> 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<FormData,BeanContext.Builder> {<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<FormData> 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> * <p><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> * <p><a name="line.96"></a>
-<span class="sourceLineNo">097</span> * The value should be either a valid HTTP header name, or <js>"*"</js> 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> * <p><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> * <ul class='spaced-list'><a name="line.101"></a>
-<span class="sourceLineNo">102</span> * <li><a name="line.102"></a>
-<span class="sourceLineNo">103</span> * If the data type is <c>NameValuePairs</c>, <c>Map</c>, or a bean,<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * then it's the equivalent to <js>"*"</js> 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> * <p><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> * <p><a name="line.103"></a>
+<span class="sourceLineNo">104</span> * The value should be either a valid HTTP header name, or <js>"*"</js> 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> * <h5 class='figure'>Examples:</h5><a name="line.106"></a>
-<span class="sourceLineNo">107</span> * <p class='bjava'><a name="line.107"></a>
-<span class="sourceLineNo">108</span> * <jc>// When used on a REST method</jc><a name="line.108"></a>
-<span class="sourceLineNo">109</span> * <ja>@RestPost</ja>(<js>"/addPet"</js>)<a name="line.109"></a>
-<span class="sourceLineNo">110</span> * <jk>public void</jk> addPet(<ja>@Header</ja> JsonMap <jv>allHeaderParameters</jv>) {...}<a name="line.110"></a>
-<span class="sourceLineNo">111</span> * </p><a name="line.111"></a>
-<span class="sourceLineNo">112</span> * <p class='bjava'><a name="line.112"></a>
-<span class="sourceLineNo">113</span> * <jc>// When used on a remote method parameter</jc><a name="line.113"></a>
-<span class="sourceLineNo">114</span> * <ja>@RemoteResource</ja>(path=<js>"/myproxy"</js>)<a name="line.114"></a>
-<span class="sourceLineNo">115</span> * <jk>public interface</jk> MyProxy {<a name="line.115"></a>
-<span class="sourceLineNo">116</span> *<a name="line.116"></a>
-<span class="sourceLineNo">117</span> * <jc>// Equivalent to @Header("*")</jc><a name="line.117"></a>
-<span class="sourceLineNo">118</span> * <ja>@RemoteGet</ja>(<js>"/mymethod"</js>)<a name="line.118"></a>
-<span class="sourceLineNo">119</span> * String myProxyMethod1(<ja>@Header</ja> Map&lt;String,Object&gt; <jv>allHeaderParameters</jv>);<a name="line.119"></a>
-<span class="sourceLineNo">120</span> * }<a name="line.120"></a>
-<span class="sourceLineNo">121</span> * </p><a name="line.121"></a>
-<span class="sourceLineNo">122</span> * <p class='bjava'><a name="line.122"></a>
-<span class="sourceLineNo">123</span> * <jc>// When used on a request bean method</jc><a name="line.123"></a>
-<span class="sourceLineNo">124</span> * <jk>public interface</jk> MyRequest {<a name="line.124"></a>
-<span class="sourceLineNo">125</span> *<a name="line.125"></a>
-<span class="sourceLineNo">126</span> * <jc>// Equivalent to @Header("*")</jc><a name="line.126"></a>
-<span class="sourceLineNo">127</span> * <ja>@Header</ja><a name="line.127"></a>
-<span class="sourceLineNo">128</span> * Map&lt;String,Object&gt; getFoo();<a name="line.128"></a>
-<span class="sourceLineNo">129</span> * }<a name="line.129"></a>
-<span class="sourceLineNo">130</span> * </p><a name="line.130"></a>
-<span class="sourceLineNo">131</span> * </li><a name="line.131"></a>
-<span class="sourceLineNo">132</span> * <li><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> * <h5 class='figure'>Example:</h5><a name="line.135"></a>
-<span class="sourceLineNo">136</span> * <p class='bjava'><a name="line.136"></a>
-<span class="sourceLineNo">137</span> * <jk>public interface</jk> MyRequest {<a name="line.137"></a>
-<span class="sourceLineNo">138</span> *<a name="line.138"></a>
-<span class="sourceLineNo">139</span> * <jc>// Equivalent to @Header("Foo")</jc><a name="line.139"></a>
-<span class="sourceLineNo">140</span> * <ja>@Header</ja><a name="line.140"></a>
-<span class="sourceLineNo">141</span> * <ja>@Beanp</ja>(<js>"Foo"</js>)<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> * </p><a name="line.144"></a>
-<span class="sourceLineNo">145</span> * </li><a name="line.145"></a>
-<span class="sourceLineNo">146</span> * </ul><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> * <p><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> * <ul class='spaced-list'><a name="line.108"></a>
+<span class="sourceLineNo">109</span> * <li><a name="line.109"></a>
+<span class="sourceLineNo">110</span> * If the data type is <c>NameValuePairs</c>, <c>Map</c>, or a bean,<a name="line.110"></a>
+<span class="sourceLineNo">111</span> * then it's the equivalent to <js>"*"</js> 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> * <h5 class='figure'>Examples:</h5><a name="line.113"></a>
+<span class="sourceLineNo">114</span> * <p class='bjava'><a name="line.114"></a>
+<span class="sourceLineNo">115</span> * <jc>// When used on a REST method</jc><a name="line.115"></a>
+<span class="sourceLineNo">116</span> * <ja>@RestPost</ja>(<js>"/addPet"</js>)<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * <jk>public void</jk> addPet(<ja>@Header</ja> JsonMap <jv>allHeaderParameters</jv>) {...}<a name="line.117"></a>
+<span class="sourceLineNo">118</span> * </p><a name="line.118"></a>
+<span class="sourceLineNo">119</span> * <p class='bjava'><a name="line.119"></a>
+<span class="sourceLineNo">120</span> * <jc>// When used on a remote method parameter</jc><a name="line.120"></a>
+<span class="sourceLineNo">121</span> * <ja>@RemoteResource</ja>(path=<js>"/myproxy"</js>)<a name="line.121"></a>
+<span class="sourceLineNo">122</span> * <jk>public interface</jk> MyProxy {<a name="line.122"></a>
+<span class="sourceLineNo">123</span> *<a name="line.123"></a>
+<span class="sourceLineNo">124</span> * <jc>// Equivalent to @Header("*")</jc><a name="line.124"></a>
+<span class="sourceLineNo">125</span> * <ja>@RemoteGet</ja>(<js>"/mymethod"</js>)<a name="line.125"></a>
+<span class="sourceLineNo">126</span> * String myProxyMethod1(<ja>@Header</ja> Map&lt;String,Object&gt; <jv>allHeaderParameters</jv>);<a name="line.126"></a>
+<span class="sourceLineNo">127</span> * }<a name="line.127"></a>
+<span class="sourceLineNo">128</span> * </p><a name="line.128"></a>
+<span class="sourceLineNo">129</span> * <p class='bjava'><a name="line.129"></a>
+<span class="sourceLineNo">130</span> * <jc>// When used on a request bean method</jc><a name="line.130"></a>
+<span class="sourceLineNo">131</span> * <jk>public interface</jk> MyRequest {<a name="line.131"></a>
+<span class="sourceLineNo">132</span> *<a name="line.132"></a>
+<span class="sourceLineNo">133</span> * <jc>// Equivalent to @Header("*")</jc><a name="line.133"></a>
+<span class="sourceLineNo">134</span> * <ja>@Header</ja><a name="line.134"></a>
+<span class="sourceLineNo">135</span> * Map&lt;String,Object&gt; getFoo();<a name="line.135"></a>
+<span class="sourceLineNo">136</span> * }<a name="line.136"></a>
+<span class="sourceLineNo">137</span> * </p><a name="line.137"></a>
+<span class="sourceLineNo">138</span> * </li><a name="line.138"></a>
+<span class="sourceLineNo">139</span> * <li><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> * <h5 class='figure'>Example:</h5><a name="line.142"></a>
+<span class="sourceLineNo">143</span> * <p class='bjava'><a name="line.143"></a>
+<span class="sourceLineNo">144</span> * <jk>public interface</jk> MyRequest {<a name="line.144"></a>
+<span class="sourceLineNo">145</span> *<a name="line.145"></a>
+<span class="sourceLineNo">146</span> * <jc>// Equivalent to @Header("Foo")</jc><a name="line.146"></a>
+<span class="sourceLineNo">147</span> * <ja>@Header</ja><a name="line.147"></a>
+<span class="sourceLineNo">148</span> * <ja>@Beanp</ja>(<js>"Foo"</js>)<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> * </p><a name="line.151"></a>
+<span class="sourceLineNo">152</span> * </li><a name="line.152"></a>
+<span class="sourceLineNo">153</span> * </ul><a name="line.153"></a>
<span class="sourceLineNo">154</span> *<a name="line.154"></a>
-<span class="sourceLineNo">155</span> * <ul class='seealso'><a name="line.155"></a>
-<span class="sourceLineNo">156</span> * <li class='link'>{@doc jm.DynamicallyAppliedAnnotations}<a name="line.156"></a>
-<span class="sourceLineNo">157</span> * </ul><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> * <ul class='seealso'><a name="line.162"></a>
+<span class="sourceLineNo">163</span> * <li class='link'>{@doc jm.DynamicallyAppliedAnnotations}<a name="line.163"></a>
+<span class="sourceLineNo">164</span> * </ul><a name="line.164"></a>
<span class="sourceLineNo">165</span> *<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * <p><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> * <ul class='seealso'><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * <li class='link'>{@doc jm.DynamicallyAppliedAnnotations}<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * </ul><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<?>[] 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> * <p><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> * <ul class='seealso'><a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <li class='link'>{@doc jm.DynamicallyAppliedAnnotations}<a name="line.177"></a>
+<span class="sourceLineNo">178</span> * </ul><a name="line.178"></a>
<span class="sourceLineNo">179</span> *<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * <p><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<? extends HttpPartParser> 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> * <mk>schema</mk> 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<?>[] 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> * <p><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> * <p><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> * <p><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> * <h5 class='section'>Used for:</h5><a name="line.198"></a>
-<span class="sourceLineNo">199</span> * <ul class='spaced-list'><a name="line.199"></a>
-<span class="sourceLineNo">200</span> * <li><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> * <li><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> * <li><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> * </ul><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<? extends HttpPartParser> 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> * <mk>schema</mk> 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> * <p><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> * <p><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> * <h5 class='section'>Used for:</h5><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * <ul class='spaced-list'><a name="line.206"></a>
+<span class="sourceLineNo">207</span> * <li><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> * <li><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> * <li><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> * </ul><a name="line.213"></a>
<span class="sourceLineNo">214</span> *<a name="line.214"></a>
-<span class="sourceLineNo">215</span> * <p><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<? extends HttpPartSerializer> 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> * <p><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> * <p><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> * <p><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> * <p class='bjava'><a name="line.230"></a>
-<span class="sourceLineNo">231</span> * <jk>public</jk> Order placeOrder(<ja>@Header</ja>(name=<js>"api_key"</js>) String <jv>apiKey</jv>) {...}<a name="line.231"></a>
-<span class="sourceLineNo">232</span> * </p><a name="line.232"></a>
-<span class="sourceLineNo">233</span> * <p class='bjava'><a name="line.233"></a>
-<span class="sourceLineNo">234</span> * <jk>public</jk> Order placeOrder(<ja>@Header</ja>(<js>"api_key"</js>) String <jv>apiKey</jv>) {...}<a name="line.234"></a>
-<span class="sourceLineNo">235</span> * </p><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<? extends HttpPartSerializer> 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> * <p><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> * <p><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> * <p class='bjava'><a name="line.237"></a>
+<span class="sourceLineNo">238</span> * <jk>public</jk> Order placeOrder(<ja>@Header</ja>(name=<js>"api_key"</js>) String <jv>apiKey</jv>) {...}<a name="line.238"></a>
+<span class="sourceLineNo">239</span> * </p><a name="line.239"></a>
+<span class="sourceLineNo">240</span> * <p class='bjava'><a name="line.240"></a>
+<span class="sourceLineNo">241</span> * <jk>public</jk> Order placeOrder(<ja>@Header</ja>(<js>"api_key"</js>) String <jv>apiKey</jv>) {...}<a name="line.241"></a>
+<span class="sourceLineNo">242</span> * </p><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> * <ul class='seealso'><a name="line.107"></a>
-<span class="sourceLineNo">108</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * </ul><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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.113"></a>
-<span class="sourceLineNo">114</span> Class<? extends HttpPartSerializer> 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<String> findDef(ParamInfo pi) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span> Value<String> n = Value.empty();<a name="line.107"></a>
+<span class="sourceLineNo">108</span> pi.forEachAnnotation(Header.class, x -> isNotEmpty(x.def()), x -> 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> * <ul class='seealso'><a name="line.119"></a>
+<span class="sourceLineNo">120</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.120"></a>
+<span class="sourceLineNo">121</span> * </ul><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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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<Header,BeanContext.Builder> {<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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.125"></a>
+<span class="sourceLineNo">126</span> Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<Header> 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<? extends HttpPartSerializer> 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<Header,BeanContext.Builder> {<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<Header> 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> * <ul class='seealso'><a name="line.107"></a>
-<span class="sourceLineNo">108</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * </ul><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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.113"></a>
-<span class="sourceLineNo">114</span> Class<? extends HttpPartSerializer> 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<String> findDef(ParamInfo pi) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span> Value<String> n = Value.empty();<a name="line.107"></a>
+<span class="sourceLineNo">108</span> pi.forEachAnnotation(Header.class, x -> isNotEmpty(x.def()), x -> 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> * <ul class='seealso'><a name="line.119"></a>
+<span class="sourceLineNo">120</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.120"></a>
+<span class="sourceLineNo">121</span> * </ul><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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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<Header,BeanContext.Builder> {<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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.125"></a>
+<span class="sourceLineNo">126</span> Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<Header> 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<? extends HttpPartSerializer> 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<Header,BeanContext.Builder> {<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<Header> 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> * <ul class='seealso'><a name="line.107"></a>
-<span class="sourceLineNo">108</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * </ul><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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.113"></a>
-<span class="sourceLineNo">114</span> Class<? extends HttpPartSerializer> 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<String> findDef(ParamInfo pi) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span> Value<String> n = Value.empty();<a name="line.107"></a>
+<span class="sourceLineNo">108</span> pi.forEachAnnotation(Header.class, x -> isNotEmpty(x.def()), x -> 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> * <ul class='seealso'><a name="line.119"></a>
+<span class="sourceLineNo">120</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.120"></a>
+<span class="sourceLineNo">121</span> * </ul><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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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<Header,BeanContext.Builder> {<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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.125"></a>
+<span class="sourceLineNo">126</span> Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<Header> 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<? extends HttpPartSerializer> 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<Header,BeanContext.Builder> {<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<Header> 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> * <ul class='seealso'><a name="line.107"></a>
-<span class="sourceLineNo">108</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * </ul><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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.113"></a>
-<span class="sourceLineNo">114</span> Class<? extends HttpPartSerializer> 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<String> findDef(ParamInfo pi) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span> Value<String> n = Value.empty();<a name="line.107"></a>
+<span class="sourceLineNo">108</span> pi.forEachAnnotation(Header.class, x -> isNotEmpty(x.def()), x -> 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> * <ul class='seealso'><a name="line.119"></a>
+<span class="sourceLineNo">120</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.120"></a>
+<span class="sourceLineNo">121</span> * </ul><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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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<Header,BeanContext.Builder> {<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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.125"></a>
+<span class="sourceLineNo">126</span> Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<Header> 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<? extends HttpPartSerializer> 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<Header,BeanContext.Builder> {<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<Header> 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> * <p><a name="line.91"></a>
-<span class="sourceLineNo">092</span> * The path remainder after the path match can be referenced using the name <js>"/*"</js>.<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * <br>The non-URL-decoded path remainder after the path match can be referenced using the name <js>"/**"</js>.<a name="line.93"></a>
-<span class="sourceLineNo">094</span> *<a name="line.94"></a>
-<span class="sourceLineNo">095</span> * <p><a name="line.95"></a>
-<span class="sourceLineNo">096</span> * The value should be either a valid path parameter name, or <js>"*"</js> 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> * <p><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> * <ul class='spaced-list'><a name="line.100"></a>
-<span class="sourceLineNo">101</span> * <li><a name="line.101"></a>
-<span class="sourceLineNo">102</span> * If the data type is <c>NameValuePairs</c>, <c>Map</c>, or a bean,<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * then it's the equivalent to <js>"*"</js> 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 <js>"/*"</js>.<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * <br>The non-URL-decoded path remainder after the path match can be referenced using the name <js>"/**"</js>.<a name="line.100"></a>
+<span class="sourceLineNo">101</span> *<a name="line.101"></a>
+<span class="sourceLineNo">102</span> * <p><a name="line.102"></a>
+<span class="sourceLineNo">103</span> * The value should be either a valid path parameter name, or <js>"*"</js> 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> * <h5 class='figure'>Examples:</h5><a name="line.105"></a>
-<span class="sourceLineNo">106</span> * <p class='bjava'><a name="line.106"></a>
-<span class="sourceLineNo">107</span> * <jc>// When used on a REST method</jc><a name="line.107"></a>
-<span class="sourceLineNo">108</span> * <ja>@RestPost</ja><a name="line.108"></a>
-<span class="sourceLineNo">109</span> * <jk>public void</jk> addPet(<ja>@Path</ja> JsonMap <jv>allPathParameters</jv>) {...}<a name="line.109"></a>
-<span class="sourceLineNo">110</span> * </p><a name="line.110"></a>
-<span class="sourceLineNo">111</span> * <p class='bjava'><a name="line.111"></a>
-<span class="sourceLineNo">112</span> * <jc>// When used on a remote method parameter</jc><a name="line.112"></a>
-<span class="sourceLineNo">113</span> * <ja>@RemoteResource</ja>(path=<js>"/myproxy"</js>)<a name="line.113"></a>
-<span class="sourceLineNo">114</span> * <jk>public interface</jk> MyProxy {<a name="line.114"></a>
-<span class="sourceLineNo">115</span> *<a name="line.115"></a>
-<span class="sourceLineNo">116</span> * <jc>// Equivalent to @Path("*")</jc><a name="line.116"></a>
-<span class="sourceLineNo">117</span> * <ja>@RemoteGet</ja>(<js>"/mymethod/{foo}/{bar}"</js>)<a name="line.117"></a>
-<span class="sourceLineNo">118</span> * String myProxyMethod1(<ja>@Path</ja> Map&lt;String,Object&gt; <jv>allPathParameters</jv>);<a name="line.118"></a>
-<span class="sourceLineNo">119</span> * }<a name="line.119"></a>
-<span class="sourceLineNo">120</span> * </p><a name="line.120"></a>
-<span class="sourceLineNo">121</span> * <p class='bjava'><a name="line.121"></a>
-<span class="sourceLineNo">122</span> * <jc>// When used on a request bean method</jc><a name="line.122"></a>
-<span class="sourceLineNo">123</span> * <jk>public interface</jk> MyRequest {<a name="line.123"></a>
-<span class="sourceLineNo">124</span> *<a name="line.124"></a>
-<span class="sourceLineNo">125</span> * <jc>// Equivalent to @Path("*")</jc><a name="line.125"></a>
-<span class="sourceLineNo">126</span> * <ja>@Path</ja><a name="line.126"></a>
-<span class="sourceLineNo">127</span> * Map&lt;String,Object&gt; getPathVars();<a name="line.127"></a>
-<span class="sourceLineNo">128</span> * }<a name="line.128"></a>
-<span class="sourceLineNo">129</span> * </p><a name="line.129"></a>
-<span class="sourceLineNo">130</span> * </li><a name="line.130"></a>
-<span class="sourceLineNo">131</span> * <li><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> * <h5 class='figure'>Example:</h5><a name="line.134"></a>
-<span class="sourceLineNo">135</span> * <p class='bjava'><a name="line.135"></a>
-<span class="sourceLineNo">136</span> * <jk>public interface</jk> MyRequest {<a name="line.136"></a>
-<span class="sourceLineNo">137</span> *<a name="line.137"></a>
-<span class="sourceLineNo">138</span> * <jc>// Equivalent to @Path("foo")</jc><a name="line.138"></a>
-<span class="sourceLineNo">139</span> * <ja>@Path</ja><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> * </ul><a name="line.142"></a>
-<span class="sourceLineNo">143</span> *<a name="line.143"></a>
-<span class="sourceLineNo">144</span> * <p><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> * <ul class='notes'><a name="line.148"></a>
-<span class="sourceLineNo">149</span> * <li class='note'><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> * </ul><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> * <p><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> * <ul class='spaced-list'><a name="line.107"></a>
+<span class="sourceLineNo">108</span> * <li><a name="line.108"></a>
+<span class="sourceLineNo">109</span> * If the data type is <c>NameValuePairs</c>, <c>Map</c>, or a bean,<a name="line.109"></a>
+<span class="sourceLineNo">110</span> * then it's the equivalent to <js>"*"</js> 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> * <h5 class='figure'>Examples:</h5><a name="line.112"></a>
+<span class="sourceLineNo">113</span> * <p class='bjava'><a name="line.113"></a>
+<span class="sourceLineNo">114</span> * <jc>// When used on a REST method</jc><a name="line.114"></a>
+<span class="sourceLineNo">115</span> * <ja>@RestPost</ja><a name="line.115"></a>
+<span class="sourceLineNo">116</span> * <jk>public void</jk> addPet(<ja>@Path</ja> JsonMap <jv>allPathParameters</jv>) {...}<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * </p><a name="line.117"></a>
+<span class="sourceLineNo">118</span> * <p class='bjava'><a name="line.118"></a>
+<span class="sourceLineNo">119</span> * <jc>// When used on a remote method parameter</jc><a name="line.119"></a>
+<span class="sourceLineNo">120</span> * <ja>@RemoteResource</ja>(path=<js>"/myproxy"</js>)<a name="line.120"></a>
+<span class="sourceLineNo">121</span> * <jk>public interface</jk> MyProxy {<a name="line.121"></a>
+<span class="sourceLineNo">122</span> *<a name="line.122"></a>
+<span class="sourceLineNo">123</span> * <jc>// Equivalent to @Path("*")</jc><a name="line.123"></a>
+<span class="sourceLineNo">124</span> * <ja>@RemoteGet</ja>(<js>"/mymethod/{foo}/{bar}"</js>)<a name="line.124"></a>
+<span class="sourceLineNo">125</span> * String myProxyMethod1(<ja>@Path</ja> Map&lt;String,Object&gt; <jv>allPathParameters</jv>);<a name="line.125"></a>
+<span class="sourceLineNo">126</span> * }<a name="line.126"></a>
+<span class="sourceLineNo">127</span> * </p><a name="line.127"></a>
+<span class="sourceLineNo">128</span> * <p class='bjava'><a name="line.128"></a>
+<span class="sourceLineNo">129</span> * <jc>// When used on a request bean method</jc><a name="line.129"></a>
+<span class="sourceLineNo">130</span> * <jk>public interface</jk> MyRequest {<a name="line.130"></a>
+<span class="sourceLineNo">131</span> *<a name="line.131"></a>
+<span class="sourceLineNo">132</span> * <jc>// Equivalent to @Path("*")</jc><a name="line.132"></a>
+<span class="sourceLineNo">133</span> * <ja>@Path</ja><a name="line.133"></a>
+<span class="sourceLineNo">134</span> * Map&lt;String,Object&gt; getPathVars();<a name="line.134"></a>
+<span class="sourceLineNo">135</span> * }<a name="line.135"></a>
+<span class="sourceLineNo">136</span> * </p><a name="line.136"></a>
+<span class="sourceLineNo">137</span> * </li><a name="line.137"></a>
+<span class="sourceLineNo">138</span> * <li><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> * <h5 class='figure'>Example:</h5><a name="line.141"></a>
+<span class="sourceLineNo">142</span> * <p class='bjava'><a name="line.142"></a>
+<span class="sourceLineNo">143</span> * <jk>public interface</jk> MyRequest {<a name="line.143"></a>
+<span class="sourceLineNo">144</span> *<a name="line.144"></a>
+<span class="sourceLineNo">145</span> * <jc>// Equivalent to @Path("foo")</jc><a name="line.145"></a>
+<span class="sourceLineNo">146</span> * <ja>@Path</ja><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> * </ul><a name="line.149"></a>
+<span class="sourceLineNo">150</span> *<a name="line.150"></a>
+<span class="sourceLineNo">151</span> * <p><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> * <ul class='notes'><a name="line.155"></a>
+<span class="sourceLineNo">156</span> * <li class='note'><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> * </ul><a name="line.158"></a>
<span class="sourceLineNo">159</span> *<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <ul class='seealso'><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * <li class='link'>{@doc jm.DynamicallyAppliedAnnotations}<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * </ul><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> * <ul class='seealso'><a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <li class='link'>{@doc jm.DynamicallyAppliedAnnotations}<a name="line.168"></a>
+<span class="sourceLineNo">169</span> * </ul><a name="line.169"></a>
<span class="sourceLineNo">170</span> *<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <p><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> * <ul class='seealso'><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <li class='link'>{@doc jm.DynamicallyAppliedAnnotations}<a name="line.175"></a>
-<span class="sourceLineNo">176</span> * </ul><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<?>[] 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> * <p><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> * <ul class='seealso'><a name="line.181"></a>
+<span class="sourceLineNo">182</span> * <li class='link'>{@doc jm.DynamicallyAppliedAnnotations}<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * </ul><a name="line.183"></a>
<span class="sourceLineNo">184</span> *<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * <p><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<? extends HttpPartParser> 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> * <mk>schema</mk> 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<?>[] 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> * <p><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> * <p><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> * <p><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> * <h5 class='section'>Used for:</h5><a name="line.203"></a>
-<span class="sourceLineNo">204</span> * <ul class='spaced-list'><a name="line.204"></a>
-<span class="sourceLineNo">205</span> * <li><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> * <li><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> * <li><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> * </ul><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<? extends HttpPartParser> 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> * <mk>schema</mk> 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> * <p><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> * <p><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> * <h5 class='section'>Used for:</h5><a name="line.210"></a>
+<span class="sourceLineNo">211</span> * <ul class='spaced-list'><a name="line.211"></a>
+<span class="sourceLineNo">212</span> * <li><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> * <li><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> * <li><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> * </ul><a name="line.218"></a>
<span class="sourceLineNo">219</span> *<a name="line.219"></a>
-<span class="sourceLineNo">220</span> * <p><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<? extends HttpPartSerializer> 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> * <p><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> * <p><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> * <p><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> * <p class='bjava'><a name="line.235"></a>
-<span class="sourceLineNo">236</span> * <ja>@RestGet</ja>(<js>"/pet/{petId}"</js>)<a name="line.236"></a>
-<span class="sourceLineNo">237</span> * <jk>public</jk> Pet getPet(<ja>@Path</ja>(name=<js>"petId"</js>) <jk>long</jk> <jv>petId</jv>) { ... }<a name="line.237"></a>
-<span class="sourceLineNo">238</span> * </p><a name="line.238"></a>
-<span class="sourceLineNo">239</span> * <p class='bjava'><a name="line.239"></a>
-<span class="sourceLineNo">240</span> * <ja>@RestGet</ja>(<js>"/pet/{petId}"</js>)<a name="line.240"></a>
-<span class="sourceLineNo">241</span> * <jk>public</jk> Pet getPet(<ja>@Path</ja>(<js>"petId"</js>) <jk>long</jk> <jv>petId</jv>) { ... }<a name="line.241"></a>
-<span class="sourceLineNo">242</span> * </p><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<? extends HttpPartSerializer> 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> * <p><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> * <p><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> * <p class='bjava'><a name="line.242"></a>
+<span class="sourceLineNo">243</span> * <ja>@RestGet</ja>(<js>"/pet/{petId}"</js>)<a name="line.243"></a>
+<span class="sourceLineNo">244</span> * <jk>public</jk> Pet getPet(<ja>@Path</ja>(name=<js>"petId"</js>) <jk>long</jk> <jv>petId</jv>) { ... }<a name="line.244"></a>
+<span class="sourceLineNo">245</span> * </p><a name="line.245"></a>
+<span class="sourceLineNo">246</span> * <p class='bjava'><a name="line.246"></a>
+<span class="sourceLineNo">247</span> * <ja>@RestGet</ja>(<js>"/pet/{petId}"</js>)<a name="line.247"></a>
+<span class="sourceLineNo">248</span> * <jk>public</jk> Pet getPet(<ja>@Path</ja>(<js>"petId"</js>) <jk>long</jk> <jv>petId</jv>) { ... }<a name="line.248"></a>
+<span class="sourceLineNo">249</span> * </p><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> * <ul class='seealso'><a name="line.106"></a>
-<span class="sourceLineNo">107</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * </ul><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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> Class<? extends HttpPartSerializer> 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<String> findDef(ParamInfo pi) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span> Value<String> n = Value.empty();<a name="line.106"></a>
+<span class="sourceLineNo">107</span> pi.forEachAnnotation(Path.class, x -> isNotEmpty(x.def()), x -> 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> * <ul class='seealso'><a name="line.118"></a>
+<span class="sourceLineNo">119</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * </ul><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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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<Path,BeanContext.Builder> {<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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.124"></a>
+<span class="sourceLineNo">125</span> Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.252"></a>
+<span class="sourceLineNo">253</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<Path> 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<? extends HttpPartSerializer> 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<Path,BeanContext.Builder> {<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<Path> 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> * <ul class='seealso'><a name="line.106"></a>
-<span class="sourceLineNo">107</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * </ul><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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> Class<? extends HttpPartSerializer> 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<String> findDef(ParamInfo pi) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span> Value<String> n = Value.empty();<a name="line.106"></a>
+<span class="sourceLineNo">107</span> pi.forEachAnnotation(Path.class, x -> isNotEmpty(x.def()), x -> 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> * <ul class='seealso'><a name="line.118"></a>
+<span class="sourceLineNo">119</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * </ul><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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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<Path,BeanContext.Builder> {<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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.124"></a>
+<span class="sourceLineNo">125</span> Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.252"></a>
+<span class="sourceLineNo">253</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<Path> 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<? extends HttpPartSerializer> 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<Path,BeanContext.Builder> {<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<Path> 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> * <ul class='seealso'><a name="line.106"></a>
-<span class="sourceLineNo">107</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * </ul><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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> Class<? extends HttpPartSerializer> 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<String> findDef(ParamInfo pi) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span> Value<String> n = Value.empty();<a name="line.106"></a>
+<span class="sourceLineNo">107</span> pi.forEachAnnotation(Path.class, x -> isNotEmpty(x.def()), x -> 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> * <ul class='seealso'><a name="line.118"></a>
+<span class="sourceLineNo">119</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * </ul><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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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<Path,BeanContext.Builder> {<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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.124"></a>
+<span class="sourceLineNo">125</span> Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.252"></a>
+<span class="sourceLineNo">253</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<Path> 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<? extends HttpPartSerializer> 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<Path,BeanContext.Builder> {<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<Path> 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> * <ul class='seealso'><a name="line.106"></a>
-<span class="sourceLineNo">107</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * </ul><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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> Class<? extends HttpPartSerializer> 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<String> findDef(ParamInfo pi) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span> Value<String> n = Value.empty();<a name="line.106"></a>
+<span class="sourceLineNo">107</span> pi.forEachAnnotation(Path.class, x -> isNotEmpty(x.def()), x -> 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> * <ul class='seealso'><a name="line.118"></a>
+<span class="sourceLineNo">119</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * </ul><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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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<Path,BeanContext.Builder> {<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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.124"></a>
+<span class="sourceLineNo">125</span> Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.252"></a>
+<span class="sourceLineNo">253</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<Path> 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<? extends HttpPartSerializer> 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<Path,BeanContext.Builder> {<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<Path> 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> * <p><a name="line.104"></a>
-<span class="sourceLineNo">105</span> * The value should be either a valid query parameter name, or <js>"*"</js> 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> * <p><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> * <ul class='spaced-list'><a name="line.109"></a>
-<span class="sourceLineNo">110</span> * <li><a name="line.110"></a>
-<span class="sourceLineNo">111</span> * If the data type is <c>NameValuePairs</c>, <c>Map</c>, or a bean,<a name="line.111"></a>
-<span class="sourceLineNo">112</span> * then it's the equivalent to <js>"*"</js> 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> * <p><a name="line.111"></a>
+<span class="sourceLineNo">112</span> * The value should be either a valid query parameter name, or <js>"*"</js> 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> * <h5 class='figure'>Examples:</h5><a name="line.114"></a>
-<span class="sourceLineNo">115</span> * <p class='bjava'><a name="line.115"></a>
-<span class="sourceLineNo">116</span> * <jc>// When used on a REST method</jc><a name="line.116"></a>
-<span class="sourceLineNo">117</span> * <ja>@RestPost</ja><a name="line.117"></a>
-<span class="sourceLineNo">118</span> * <jk>public void</jk> addPet(<ja>@Query</ja> JsonMap <jv>allQueryParameters</jv>) {...}<a name="line.118"></a>
-<span class="sourceLineNo">119</span> * </p><a name="line.119"></a>
-<span class="sourceLineNo">120</span> * <p class='bjava'><a name="line.120"></a>
-<span class="sourceLineNo">121</span> * <jc>// When used on a remote method parameter</jc><a name="line.121"></a>
-<span class="sourceLineNo">122</span> * <ja>@RemoteResource</ja>(path=<js>"/myproxy"</js>)<a name="line.122"></a>
-<span class="sourceLineNo">123</span> * <jk>public interface</jk> MyProxy {<a name="line.123"></a>
-<span class="sourceLineNo">124</span> *<a name="line.124"></a>
-<span class="sourceLineNo">125</span> * <jc>// Equivalent to @Query("*")</jc><a name="line.125"></a>
-<span class="sourceLineNo">126</span> * <ja>@RemoteGet</ja>(<js>"/mymethod"</js>)<a name="line.126"></a>
-<span class="sourceLineNo">127</span> * String myProxyMethod1(<ja>@Query</ja> Map&lt;String,Object&gt; <jv>allQueryParameters</jv>);<a name="line.127"></a>
-<span class="sourceLineNo">128</span> * }<a name="line.128"></a>
-<span class="sourceLineNo">129</span> * </p><a name="line.129"></a>
-<span class="sourceLineNo">130</span> * <p class='bjava'><a name="line.130"></a>
-<span class="sourceLineNo">131</span> * <jc>// When used on a request bean method</jc><a name="line.131"></a>
-<span class="sourceLineNo">132</span> * <jk>public interface</jk> MyRequest {<a name="line.132"></a>
-<span class="sourceLineNo">133</span> *<a name="line.133"></a>
-<span class="sourceLineNo">134</span> * <jc>// Equivalent to @Query("*")</jc><a name="line.134"></a>
-<span class="sourceLineNo">135</span> * <ja>@Query</ja><a name="line.135"></a>
-<span class="sourceLineNo">136</span> * Map&lt;String,Object&gt; getFoo();<a name="line.136"></a>
-<span class="sourceLineNo">137</span> * }<a name="line.137"></a>
-<span class="sourceLineNo">138</span> * </p><a name="line.138"></a>
-<span class="sourceLineNo">139</span> * </li><a name="line.139"></a>
-<span class="sourceLineNo">140</span> * <li><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> * <h5 class='figure'>Example:</h5><a name="line.143"></a>
-<span class="sourceLineNo">144</span> * <p class='bjava'><a name="line.144"></a>
-<span class="sourceLineNo">145</span> * <jk>public interface</jk> MyRequest {<a name="line.145"></a>
-<span class="sourceLineNo">146</span> *<a name="line.146"></a>
-<span class="sourceLineNo">147</span> * <jc>// Equivalent to @Query("foo")</jc><a name="line.147"></a>
-<span class="sourceLineNo">148</span> * <ja>@Query</ja><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> * </p><a name="line.151"></a>
-<span class="sourceLineNo">152</span> * </li><a name="line.152"></a>
-<span class="sourceLineNo">153</span> * </ul><a name="line.153"></a>
-<span class="sourceLineNo">154</span> * <ul class='notes'><a name="line.154"></a>
-<span class="sourceLineNo">155</span> * <li class='note'><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> * </ul><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> * <p><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> * <ul class='spaced-list'><a name="line.116"></a>
+<span class="sourceLineNo">117</span> * <li><a name="line.117"></a>
+<span class="sourceLineNo">118</span> * If the data type is <c>NameValuePairs</c>, <c>Map</c>, or a bean,<a name="line.118"></a>
+<span class="sourceLineNo">119</span> * then it's the equivalent to <js>"*"</js> 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> * <h5 class='figure'>Examples:</h5><a name="line.121"></a>
+<span class="sourceLineNo">122</span> * <p class='bjava'><a name="line.122"></a>
+<span class="sourceLineNo">123</span> * <jc>// When used on a REST method</jc><a name="line.123"></a>
+<span class="sourceLineNo">124</span> * <ja>@RestPost</ja><a name="line.124"></a>
+<span class="sourceLineNo">125</span> * <jk>public void</jk> addPet(<ja>@Query</ja> JsonMap <jv>allQueryParameters</jv>) {...}<a name="line.125"></a>
+<span class="sourceLineNo">126</span> * </p><a name="line.126"></a>
+<span class="sourceLineNo">127</span> * <p class='bjava'><a name="line.127"></a>
+<span class="sourceLineNo">128</span> * <jc>// When used on a remote method parameter</jc><a name="line.128"></a>
+<span class="sourceLineNo">129</span> * <ja>@RemoteResource</ja>(path=<js>"/myproxy"</js>)<a name="line.129"></a>
+<span class="sourceLineNo">130</span> * <jk>public interface</jk> MyProxy {<a name="line.130"></a>
+<span class="sourceLineNo">131</span> *<a name="line.131"></a>
+<span class="sourceLineNo">132</span> * <jc>// Equivalent to @Query("*")</jc><a name="line.132"></a>
+<span class="sourceLineNo">133</span> * <ja>@RemoteGet</ja>(<js>"/mymethod"</js>)<a name="line.133"></a>
+<span class="sourceLineNo">134</span> * String myProxyMethod1(<ja>@Query</ja> Map&lt;String,Object&gt; <jv>allQueryParameters</jv>);<a name="line.134"></a>
+<span class="sourceLineNo">135</span> * }<a name="line.135"></a>
+<span class="sourceLineNo">136</span> * </p><a name="line.136"></a>
+<span class="sourceLineNo">137</span> * <p class='bjava'><a name="line.137"></a>
+<span class="sourceLineNo">138</span> * <jc>// When used on a request bean method</jc><a name="line.138"></a>
+<span class="sourceLineNo">139</span> * <jk>public interface</jk> MyRequest {<a name="line.139"></a>
+<span class="sourceLineNo">140</span> *<a name="line.140"></a>
+<span class="sourceLineNo">141</span> * <jc>// Equivalent to @Query("*")</jc><a name="line.141"></a>
+<span class="sourceLineNo">142</span> * <ja>@Query</ja><a name="line.142"></a>
+<span class="sourceLineNo">143</span> * Map&lt;String,Object&gt; getFoo();<a name="line.143"></a>
+<span class="sourceLineNo">144</span> * }<a name="line.144"></a>
+<span class="sourceLineNo">145</span> * </p><a name="line.145"></a>
+<span class="sourceLineNo">146</span> * </li><a name="line.146"></a>
+<span class="sourceLineNo">147</span> * <li><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> * <h5 class='figure'>Example:</h5><a name="line.150"></a>
+<span class="sourceLineNo">151</span> * <p class='bjava'><a name="line.151"></a>
+<span class="sourceLineNo">152</span> * <jk>public interface</jk> MyRequest {<a name="line.152"></a>
+<span class="sourceLineNo">153</span> *<a name="line.153"></a>
+<span class="sourceLineNo">154</span> * <jc>// Equivalent to @Query("foo")</jc><a name="line.154"></a>
+<span class="sourceLineNo">155</span> * <ja>@Query</ja><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> * </p><a name="line.158"></a>
+<span class="sourceLineNo">159</span> * </li><a name="line.159"></a>
+<span class="sourceLineNo">160</span> * </ul><a name="line.160"></a>
+<span class="sourceLineNo">161</span> * <ul class='notes'><a name="line.161"></a>
+<span class="sourceLineNo">162</span> * <li class='note'><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> * </ul><a name="line.164"></a>
<span class="sourceLineNo">165</span> *<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * <ul class='seealso'><a name="line.166"></a>
-<span class="sourceLineNo">167</span> * <li class='link'>{@doc jm.DynamicallyAppliedAnnotations}<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * </ul><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> * <ul class='seealso'><a name="line.173"></a>
+<span class="sourceLineNo">174</span> * <li class='link'>{@doc jm.DynamicallyAppliedAnnotations}<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * </ul><a name="line.175"></a>
<span class="sourceLineNo">176</span> *<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * <p><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> * <ul class='seealso'><a name="line.180"></a>
-<span class="sourceLineNo">181</span> * <li class='link'>{@doc jm.DynamicallyAppliedAnnotations}<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * </ul><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<?>[] 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> * <p><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> * <ul class='seealso'><a name="line.187"></a>
+<span class="sourceLineNo">188</span> * <li class='link'>{@doc jm.DynamicallyAppliedAnnotations}<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * </ul><a name="line.189"></a>
<span class="sourceLineNo">190</span> *<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * <p><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<? extends HttpPartParser> 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> * <mk>schema</mk> 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<?>[] 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> * <p><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> * <p><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> * <p><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> * <h5 class='section'>Used for:</h5><a name="line.209"></a>
-<span class="sourceLineNo">210</span> * <ul class='spaced-list'><a name="line.210"></a>
-<span class="sourceLineNo">211</span> * <li><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> * <li><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> * <li><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> * </ul><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<? extends HttpPartParser> 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> * <mk>schema</mk> 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> * <p><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> * <p><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> * <h5 class='section'>Used for:</h5><a name="line.216"></a>
+<span class="sourceLineNo">217</span> * <ul class='spaced-list'><a name="line.217"></a>
+<span class="sourceLineNo">218</span> * <li><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> * <li><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> * <li><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> * </ul><a name="line.224"></a>
<span class="sourceLineNo">225</span> *<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * <p><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<? extends HttpPartSerializer> 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> * <p><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> * <p><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> * <p><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> * <p class='bjava'><a name="line.241"></a>
-<span class="sourceLineNo">242</span> * <jk>public</jk> Order placeOrder(<ja>@Query</ja>(name=<js>"petId"</js>) <jk>long</jk> <jv>petId</jv>) {...}<a name="line.242"></a>
-<span class="sourceLineNo">243</span> * </p><a name="line.243"></a>
-<span class="sourceLineNo">244</span> * <p class='bjava'><a name="line.244"></a>
-<span class="sourceLineNo">245</span> * <jk>public</jk> Order placeOrder(<ja>@Query</ja>(<js>"petId"</js>) <jk>long</jk> <jv>petId</jv>) {...}<a name="line.245"></a>
-<span class="sourceLineNo">246</span> * </p><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<? extends HttpPartSerializer> 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> * <p><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> * <p><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> * <p class='bjava'><a name="line.248"></a>
+<span class="sourceLineNo">249</span> * <jk>public</jk> Order placeOrder(<ja>@Query</ja>(name=<js>"petId"</js>) <jk>long</jk> <jv>petId</jv>) {...}<a name="line.249"></a>
+<span class="sourceLineNo">250</span> * </p><a name="line.250"></a>
+<span class="sourceLineNo">251</span> * <p class='bjava'><a name="line.251"></a>
+<span class="sourceLineNo">252</span> * <jk>public</jk> Order placeOrder(<ja>@Query</ja>(<js>"petId"</js>) <jk>long</jk> <jv>petId</jv>) {...}<a name="line.252"></a>
+<span class="sourceLineNo">253</span> * </p><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> * <p><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<String> findName(ParamInfo pi) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span> Value<String> n = Value.empty();<a name="line.93"></a>
-<span class="sourceLineNo">094</span> pi.forEachAnnotation(Query.class, x -> isNotEmpty(x.value()), x -> n.set(x.value()));<a name="line.94"></a>
-<span class="sourceLineNo">095</span> pi.forEachAnnotation(Query.class, x -> isNotEmpty(x.name()), x -> 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> * <ul class='seealso'><a name="line.106"></a>
-<span class="sourceLineNo">107</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * </ul><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<String> findName(ParamInfo pi) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span> Value<String> n = Value.empty();<a name="line.90"></a>
+<span class="sourceLineNo">091</span> pi.forEachAnnotation(Query.class, x -> isNotEmpty(x.value()), x -> n.set(x.value()));<a name="line.91"></a>
+<span class="sourceLineNo">092</span> pi.forEachAnnotation(Query.class, x -> isNotEmpty(x.name()), x -> 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<String> findDef(ParamInfo pi) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span> Value<String> n = Value.empty();<a name="line.103"></a>
+<span class="sourceLineNo">104</span> pi.forEachAnnotation(Query.class, x -> isNotEmpty(x.def()), x -> 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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> Class<? extends HttpPartSerializer> 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> * <ul class='seealso'><a name="line.115"></a>
+<span class="sourceLineNo">116</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * </ul><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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.121"></a>
+<span class="sourceLineNo">122</span> Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private final Class<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> 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<? extends HttpPartParser> parser;<a name="line.249"></a>
+<span class="sourceLineNo">250</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartSerializer> 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<Query,BeanContext.Builder> {<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<Query> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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<Query,BeanContext.Builder> {<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<Query> 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> * <p><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<String> findName(ParamInfo pi) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span> Value<String> n = Value.empty();<a name="line.93"></a>
-<span class="sourceLineNo">094</span> pi.forEachAnnotation(Query.class, x -> isNotEmpty(x.value()), x -> n.set(x.value()));<a name="line.94"></a>
-<span class="sourceLineNo">095</span> pi.forEachAnnotation(Query.class, x -> isNotEmpty(x.name()), x -> 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> * <ul class='seealso'><a name="line.106"></a>
-<span class="sourceLineNo">107</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * </ul><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<String> findName(ParamInfo pi) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span> Value<String> n = Value.empty();<a name="line.90"></a>
+<span class="sourceLineNo">091</span> pi.forEachAnnotation(Query.class, x -> isNotEmpty(x.value()), x -> n.set(x.value()));<a name="line.91"></a>
+<span class="sourceLineNo">092</span> pi.forEachAnnotation(Query.class, x -> isNotEmpty(x.name()), x -> 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<String> findDef(ParamInfo pi) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span> Value<String> n = Value.empty();<a name="line.103"></a>
+<span class="sourceLineNo">104</span> pi.forEachAnnotation(Query.class, x -> isNotEmpty(x.def()), x -> 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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> Class<? extends HttpPartSerializer> 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> * <ul class='seealso'><a name="line.115"></a>
+<span class="sourceLineNo">116</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * </ul><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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.121"></a>
+<span class="sourceLineNo">122</span> Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private final Class<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> 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<? extends HttpPartParser> parser;<a name="line.249"></a>
+<span class="sourceLineNo">250</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartSerializer> 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<Query,BeanContext.Builder> {<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<Query> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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<Query,BeanContext.Builder> {<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<Query> 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> * <p><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<String> findName(ParamInfo pi) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span> Value<String> n = Value.empty();<a name="line.93"></a>
-<span class="sourceLineNo">094</span> pi.forEachAnnotation(Query.class, x -> isNotEmpty(x.value()), x -> n.set(x.value()));<a name="line.94"></a>
-<span class="sourceLineNo">095</span> pi.forEachAnnotation(Query.class, x -> isNotEmpty(x.name()), x -> 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> * <ul class='seealso'><a name="line.106"></a>
-<span class="sourceLineNo">107</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * </ul><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<String> findName(ParamInfo pi) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span> Value<String> n = Value.empty();<a name="line.90"></a>
+<span class="sourceLineNo">091</span> pi.forEachAnnotation(Query.class, x -> isNotEmpty(x.value()), x -> n.set(x.value()));<a name="line.91"></a>
+<span class="sourceLineNo">092</span> pi.forEachAnnotation(Query.class, x -> isNotEmpty(x.name()), x -> 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<String> findDef(ParamInfo pi) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span> Value<String> n = Value.empty();<a name="line.103"></a>
+<span class="sourceLineNo">104</span> pi.forEachAnnotation(Query.class, x -> isNotEmpty(x.def()), x -> 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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> Class<? extends HttpPartSerializer> 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> * <ul class='seealso'><a name="line.115"></a>
+<span class="sourceLineNo">116</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * </ul><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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.121"></a>
+<span class="sourceLineNo">122</span> Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private final Class<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> 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<? extends HttpPartParser> parser;<a name="line.249"></a>
+<span class="sourceLineNo">250</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartSerializer> 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<Query,BeanContext.Builder> {<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<Query> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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<Query,BeanContext.Builder> {<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<Query> 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> * <p><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<String> findName(ParamInfo pi) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span> Value<String> n = Value.empty();<a name="line.93"></a>
-<span class="sourceLineNo">094</span> pi.forEachAnnotation(Query.class, x -> isNotEmpty(x.value()), x -> n.set(x.value()));<a name="line.94"></a>
-<span class="sourceLineNo">095</span> pi.forEachAnnotation(Query.class, x -> isNotEmpty(x.name()), x -> 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> * <ul class='seealso'><a name="line.106"></a>
-<span class="sourceLineNo">107</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * </ul><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<String> findName(ParamInfo pi) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span> Value<String> n = Value.empty();<a name="line.90"></a>
+<span class="sourceLineNo">091</span> pi.forEachAnnotation(Query.class, x -> isNotEmpty(x.value()), x -> n.set(x.value()));<a name="line.91"></a>
+<span class="sourceLineNo">092</span> pi.forEachAnnotation(Query.class, x -> isNotEmpty(x.name()), x -> 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<String> findDef(ParamInfo pi) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span> Value<String> n = Value.empty();<a name="line.103"></a>
+<span class="sourceLineNo">104</span> pi.forEachAnnotation(Query.class, x -> isNotEmpty(x.def()), x -> 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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> Class<? extends HttpPartSerializer> 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> * <ul class='seealso'><a name="line.115"></a>
+<span class="sourceLineNo">116</span> * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)}<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * </ul><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<? extends HttpPartParser> parser = HttpPartParser.Void.class;<a name="line.121"></a>
+<span class="sourceLineNo">122</span> Class<? extends HttpPartSerializer> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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> // </FluentSetters><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<? extends HttpPartParser> parser;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private final Class<? extends HttpPartSerializer> 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> // <FluentSetters><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<?>...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<?>...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> // </FluentSetters><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<? extends HttpPartParser> 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<? extends HttpPartParser> parser;<a name="line.249"></a>
+<span class="sourceLineNo">250</span> private final Class<? extends HttpPartSerializer> 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<? extends HttpPartSerializer> 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<Query,BeanContext.Builder> {<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<Query> 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<? extends HttpPartParser> 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<? extends HttpPartSerializer> 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<Query,BeanContext.Builder> {<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<Query> 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> * <p><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> * <p><a name="line.28"></a>
+<span class="sourceLineNo">029</span> * These values override values specified in the <js>"Logging"</js> 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<String,Level> levels = new LinkedHashMap<>();<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<>(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> * <p><a name="line.80"></a>
+<span class="sourceLineNo">081</span> * This overrides the configuration value <js>"Logging/logFile"</js>.<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> * <p><a name="line.95"></a>
+<span class="sourceLineNo">096</span> * This overrides the configuration value <js>"Logging/logDir"</js>.<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> * <p><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> * <ul><a name="line.112"></a>
+<span class="sourceLineNo">113</span> * <li><js><js>"Logging/format"</js> (default is <js>"[{date} {level}] {msg}%n"</js>)<a name="line.113"></a>
+<span class="sourceLineNo">114</span> * <li><js><js>"Logging/dateFormat"</js> (default is <js>"yyyy.MM.dd hh:mm:ss"</js>)<a name="line.114"></a>
+<span class="sourceLineNo">115</span> * <li><js><js>"Logging/useStackTraceHashes"</js> (default is <jk>false</jk>)<a name="line.115"></a>
+<span class="sourceLineNo">116</span> * </ul><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<String,Level> 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> * <p><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> * <p><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> * <p class='bjava'><a name="line.52"></a>
-<span class="sourceLineNo">053</span> * <jk>public static void</jk> main(String[] <jv>args</jv>) {<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * Microservice.<jsm>create</jsm>().args(<jv>args</jv>).build().start().join();<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * }<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * </p><a name="line.56"></a>
-<span class="sourceLineNo">057</span> *<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * <p><a name="line.58"></a>
-<span class="sourceLineNo">059</span> * Your microservice class must be specified as the <jk>Main-Class</jk> 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> * <h5 class='topic'>Microservice Configuration</h5><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> * <ul class='spaced-list'><a name="line.65"></a>
-<span class="sourceLineNo">066</span> * <li><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> * <li><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> * <li><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> * </ul><a name="line.72"></a>
-<span class="sourceLineNo">073</span> *<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * <h5 class='topic'>Lifecycle Methods</h5><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> * <ul class='spaced-list'><a name="line.77"></a>
-<span class="sourceLineNo">078</span> * <li><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> * <li><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> * <li><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> * <li><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> * </ul><a name="line.86"></a>
-<span class="sourceLineNo">087</span> *<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * <ul class='seealso'><a name="line.88"></a>
-<span class="sourceLineNo">089</span> * <li class='link'>{@doc juneau-microservice-core}<a name="line.89"></a>
-<span class="sourceLineNo">090</span> * <li class='extlink'>{@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> * <p><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> * <p><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> * <p class='bjava'><a name="line.57"></a>
+<span class="sourceLineNo">058</span> * <jk>public static void</jk> main(String[] <jv>args</jv>) {<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * Microservice.<jsm>create</jsm>().args(<jv>args</jv>).build().start().join();<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * }<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * </p><a name="line.61"></a>
+<span class="sourceLineNo">062</span> *<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * <p><a name="line.63"></a>
+<span class="sourceLineNo">064</span> * Your microservice class must be specified as the <jk>Main-Class</jk> 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> * <h5 class='topic'>Microservice Configuration</h5><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> * <ul class='spaced-list'><a name="line.70"></a>
+<span class="sourceLineNo">071</span> * <li><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> * <li><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> * <li><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> * </ul><a name="line.77"></a>
+<span class="sourceLineNo">078</span> *<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * <h5 class='topic'>Lifecycle Methods</h5><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> * <ul class='spaced-list'><a name="line.82"></a>
+<span class="sourceLineNo">083</span> * <li><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> * <li><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> * <li><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> * <li><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> * </ul><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> * <p><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 <jk>null</jk> 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> * <ul class='seealso'><a name="line.93"></a>
+<span class="sourceLineNo">094</span> * <li class='link'>{@doc juneau-microservice-core}<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * <li class='extlink'>{@source}<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * </ul><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> * <p><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 <jk>null</jk> 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<ConsoleCommand> 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> * <p><a name="line.200"></a>
-<span class="sourceLineNo">201</span> * This is required if you use {@link Microservice#getArgs()} or <c>$A</c> 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> * <p><a name="line.215"></a>
-<span class="sourceLineNo">216</span> * This is required if you use {@link Microservice#getArgs()} or <c>$A</c> 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> * <p><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 <c>Main-Config</c>.<a name="line.232"></a>
-<span class="sourceLineNo">233</span> *<a name="line.233"></a>
-<span class="sourceLineNo">234</span> * <p><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> * <ol class='spaced-list'><a name="line.236"></a>
-<span class="sourceLineNo">237</span> * <li><a name="line.237"></a>
-<span class="sourceLineNo">238</span> * Looking on the file system for a file at <js>"META-INF/MANIFEST.MF"</js>.<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> * <li><a name="line.241"></a>
-<span class="sourceLineNo">242</span> * Using the class loader for this class to find the file at the URL <js>"META-INF/MANIFEST.MF"</js>.<a name="line.242"></a>
-<span class="sourceLineNo">243</span> * </ol><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> * <br>Can be any of the following types:<a name="line.247"></a>
-<span class="sourceLineNo">248</span> * <ul><a name="line.248"></a>
-<span class="sourceLineNo">249</span> * <li>{@link ManifestFile}<a name="line.249"></a>
-<span class="sourceLineNo">250</span> * <li>{@link Manifest}<a name="line.250"></a>
-<span class="sourceLineNo">251</span> * <li>{@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> * <li>{@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> * <li>{@link File} - File containing the raw contents of the manifest.<a name="line.253"></a>
-<span class="sourceLineNo">254</span> * <li>{@link String} - Path to file containing the raw contents of the manifest.<a name="line.254"></a>
-<span class="sourceLineNo">255</span> * <li>{@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> * </ul><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<?>)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> * <p><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> * <p><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> * <ol class='spaced-list'><a name="line.313"></a>
-<span class="sourceLineNo">314</span> * <li><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> * <ul><a name="line.316"></a>
-<span class="sourceLineNo">317</span> * <li><a name="line.317"></a>
-<span class="sourceLineNo">318</span> * The <js>"configFile"</js> argument in the command line arguments passed in through the constructor.<a name="line.318"></a>
-<span class="sourceLineNo">319</span> * <li><a name="line.319"></a>
-<span class="sourceLineNo">320</span> * The value of the <c>Main-Config</c> entry in the manifest file.<a name="line.320"></a>
-<span class="sourceLineNo">321</span> * <li><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. <js>"java -jar myjar.jar"</js> will look for <js>"myjar.cfg"</js>).<a name="line.323"></a>
-<span class="sourceLineNo">324</span> * </ul><a name="line.324"></a>
-<span class="sourceLineNo">325</span> * <li><a name="line.325"></a>
-<span class="sourceLineNo">326</span> * Resolve any <js>"*.cfg"</js> file that can be found in the working directory.<a name="line.326"></a>
-<span class="sourceLineNo">327</span> * <li><a name="line.327"></a>
-<span class="sourceLineNo">328</span> * Resolve any of the following files in the classpath: <js>"juneau.cfg"</js>, <js>"system.cfg"</js><a name="line.328"></a>
-<span class="sourceLineNo">329</span> * </ol><a name="line.329"></a>
-<span class="sourceLineNo">330</span> *<a name="line.330"></a>
-<span class="sourceLineNo">331</span> * <p><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> * <p><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> * <p><a name="line.359"></a>
-<span class="sourceLineNo">360</span> * If not specified, this value is taken from the <js>"Console/enabled"</js> configuration setting.<a name="line.360"></a>
-<span class="sourceLineNo">361</span> * If not specified in the configuration, defaults to <jk>false</jk>.<a name="line.361"></a>
-<span class="sourceLineNo">362</span> *<a name="line.362"></a>
-<span class="sourceLineNo">363</span> * @param consoleEnabled <jk>true</jk> 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> * <p><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> * <p><a name="line.377"></a>
-<span class="sourceLineNo">378</span> * This list augments the commands defined via the <js>"Console/commands"</js> configuration setting.<a name="line.378"></a>
-<span class="sourceLineNo">379</span> *<a name="line.379"></a>
-<span class="sourceLineNo">380</span> * <p><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<? extends ConsoleCommand>...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<? extends ConsoleCommand> 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<ConsoleCommand> 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> * <p><a name="line.207"></a>
+<span class="sourceLineNo">208</span> * This is required if you use {@link Microservice#getArgs()} or <c>$A</c> 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> * <p><a name="line.222"></a>
+<span class="sourceLineNo">223</span> * This is required if you use {@link Microservice#getArgs()} or <c>$A</c> 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> * <p><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 <c>Main-Config</c>.<a name="line.239"></a>
+<span class="sourceLineNo">240</span> *<a name="line.240"></a>
+<span class="sourceLineNo">241</span> * <p><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> * <ol class='spaced-list'><a name="line.243"></a>
+<span class="sourceLineNo">244</span> * <li><a name="line.244"></a>
+<span class="sourceLineNo">245</span> * Looking on the file system for a file at <js>"META-INF/MANIFEST.MF"</js>.<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> * <li><a name="line.248"></a>
+<span class="sourceLineNo">249</span> * Using the class loader for this class to find the file at the URL <js>"META-INF/MANIFEST.MF"</js>.<a name="line.249"></a>
+<span class="sourceLineNo">250</span> * </ol><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> * <br>Can be any of the following types:<a name="line.254"></a>
+<span class="sourceLineNo">255</span> * <ul><a name="line.255"></a>
+<span class="sourceLineNo">256</span> * <li>{@link ManifestFile}<a name="line.256"></a>
+<span class="sourceLineNo">257</span> * <li>{@link Manifest}<a name="line.257"></a>
+<span class="sourceLineNo">258</span> * <li>{@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> * <li>{@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> * <li>{@link File} - File containing the raw contents of the manifest.<a name="line.260"></a>
+<span class="sourceLineNo">261</span> * <li>{@link String} - Path to file containing the raw contents of the manifest.<a name="line.261"></a>
+<span class="sourceLineNo">262</span> * <li>{@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> * </ul><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<?>)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> * <p><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> * <p><a name="line.307"></a>
+<span class="sourceLineNo">308</span> * If not specified, the values are taken from the <js>"Logging"</js> section of the configuration.<a name="line.308"></a>
+<span class="sourceLineNo">309</span> *<a name="line.309"></a>
+<span class="sourceLineNo">310</span> * <p><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> * <p><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> * <p><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> * <ol class='spaced-list'><a name="line.340"></a>
+<span class="sourceLineNo">341</span> * <li><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> * <ul><a name="line.343"></a>
+<span class="sourceLineNo">344</span> * <li><a name="line.344"></a>
+<span class="sourceLineNo">345</span> * The <js>"configFile"</js> argument in the command line arguments passed in through the constructor.<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * <li><a name="line.346"></a>
+<span class="sourceLineNo">347</span> * The value of the <c>Main-Config</c> entry in the manifest file.<a name="line.347"></a>
+<span class="sourceLineNo">348</span> * <li><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. <js>"java -jar myjar.jar"</js> will look for <js>"myjar.cfg"</js>).<a name="line.350"></a>
+<span class="sourceLineNo">351</span> * </ul><a name="line.351"></a>
+<span class="sourceLineNo">352</span> * <li><a name="line.352"></a>
+<span class="sourceLineNo">353</span> * Resolve any <js>"*.cfg"</js> file that can be found in the working directory.<a name="line.353"></a>
+<span class="sourceLineNo">354</span> * <li><a name="line.354"></a>
+<span class="sourceLineNo">355</span> * Resolve any of the following files in the classpath: <js>"juneau.cfg"</js>, <js>"system.cfg"</js><a name="line.355"></a>
+<span class="sourceLineNo">356</span> * </ol><a name="line.356"></a>
+<span class="sourceLineNo">357</span> *<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * <p><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> * <p><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> * <p><a name="line.386"></a>
+<span class="sourceLineNo">387</span> * If not specified, this value is taken from the <js>"Console/enabled"</js> configuration setting.<a name="line.387"></a>
+<span class="sourceLineNo">388</span> * If not specified in the configuration, defaults to <jk>false</jk>.<a name="line.388"></a>
+<span class="sourceLineNo">389</span> *<a name="line.389"></a>
+<span class="sourceLineNo">390</span> * @param consoleEnabled <jk>true</jk> 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> * <p><a name="line.404"></a>
<span class="sourceLineNo">405</span> * This list augments the commands defined via the <js>"Console/commands"</js> 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> * <p><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> * <p><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> * <p><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<? extends Var>...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> * <p><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 <T> 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 <T> Builder varBean(Class<T> 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 <jk>null</jk> 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 <jk>null</jk> 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> * <p><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<String,ConsoleCommand> consoleCommandMap = new ConcurrentHashMap<>();<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> * <p><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<? extends ConsoleCommand>...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<? extends ConsoleCommand> 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> * <p><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> * <p><a name="line.431"></a>
+<span class="sourceLineNo">432</span> * This list augments the commands defined via the <js>"Console/commands"</js> 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> * <p><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> * <p><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> * <p><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<? extends Var>...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> * <p><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 <T> 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 <T> Builder varBean(Class<T> 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 <jk>null</jk> 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 <jk>null</jk> 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> * <p><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() && 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<String,ConsoleCommand> consoleCommandMap = new ConcurrentHashMap<>();<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() && 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<>(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("> ").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<String> 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> * <p><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> * <p><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> * <p><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<String> 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<>(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("> ").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<String> 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> * <p><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> * <p><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 && ! 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 && 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> * <p><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> * <p><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> * <p><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> * <p><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<String> 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> * <p><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> * <ol class='spaced-list'><a name="line.819"></a>
-<span class="sourceLineNo">820</span> * <li><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> * <li><a name="line.822"></a>
-<span class="sourceLineNo">823</span> * The <c>Main-Config</c> entry in the microservice jar manifest file.<a name="line.823"></a>
-<span class="sourceLineNo">824</span> * <li><a name="line.824"></a>
-<span class="sourceLineNo">825</span> * The name of the microservice jar with a <js>".cfg"</js> suffix (e.g.<a name="line.825"></a>
-<span class="sourceLineNo">826</span> * <js>"mymicroservice.jar"</js>-&gt;<js>"mymicroservice.cfg"</js>).<a name="line.826"></a>
-<span class="sourceLineNo">827</span> * </ol><a name="line.827"></a>
-<span class="sourceLineNo">828</span> *<a name="line.828"></a>
-<span class="sourceLineNo">829</span> * <p><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> * <p><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> * <ul class='javatree'><a name="line.834"></a>
-<span class="sourceLineNo">835</span> * <li class='jm'>{@link Builder#configStore(ConfigStore)}<a name="line.835"></a>
-<span class="sourceLineNo">836</span> * <li class='jm'>{@link Builder#configName(String)}<a name="line.836"></a>
-<span class="sourceLineNo">837</span> * </ul><a name="line.837"></a>
-<span class="sourceLineNo">838</span> *<a name="line.838"></a>
-<span class="sourceLineNo">839</span> * <p><a name="line.839"></a>
-<span class="sourceLineNo">840</span> * 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> * <p><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> * <h5 class='section'>Example:</h5><a name="line.845"></a>
-<span class="sourceLineNo">846</span> * <p class='bini'><a name="line.846"></a>
-<span class="sourceLineNo">847</span> * <cc>#--------------------------</cc><a name="line.847"></a>
-<span class="sourceLineNo">848</span> * <cc># My section</cc><a name="line.848"></a>
-<span class="sourceLineNo">849</span> * <cc>#--------------------------</cc><a name="line.849"></a>
-<span class="sourceLineNo">850</span> * <cs>[MySection]</cs><a name="line.850"></a>
-<span class="sourceLineNo">851</span> *<a name="line.851"></a>
-<span class="sourceLineNo">852</span> * <cc># An integer</cc><a name="line.852"></a>
-<span class="sourceLineNo">853</span> * <ck>anInt</ck> = 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> * <p><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> * <cc># A boolean</cc><a name="line.855"></a>
-<span class="sourceLineNo">856</span> * <ck>aBoolean</ck> = true<a name="line.856"></a>
-<span class="sourceLineNo">857</span> *<a name="line.857"></a>
-<span class="sourceLineNo">858</span> * <cc># An int array</cc><a name="line.858"></a>
-<span class="sourceLineNo">859</span> * <ck>anIntArray</ck> = 1,2,3<a name="line.859"></a>
-<span class="sourceLineNo">860</span> *<a name="line.860"></a>
-<span class="sourceLineNo">861</span> * <cc># A POJO that can be converted from a String</cc><a name="line.861"></a>
-<span class="sourceLineNo">862</span> * <ck>aURL</ck> = http://foo<a name="line.862"></a>
-<span class="sourceLineNo">863</span> *<a name="line.863"></a>
-<span class="sourceLineNo">864</span> * <cc># A POJO that can be converted from JSON</cc><a name="line.864"></a>
-<span class="sourceLineNo">865</span> * <ck>aBean</ck> = {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 && ! 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> * <cc># A system property</cc><a name="line.867"></a>
-<span class="sourceLineNo">868</span> * <ck>locale</ck> = $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> * <cc># An environment variable</cc><a name="line.870"></a>
-<span class="sourceLineNo">871</span> * <ck>path</ck> = $E{PATH, unknown}<a name="line.871"></a>
-<span class="sourceLineNo">872</span> *<a name="line.872"></a>
-<span class="sourceLineNo">873</span> * <cc># A manifest file entry</cc><a name="line.873"></a>
-<span class="sourceLineNo">874</span> * <ck>mainClass</ck> = $MF{Main-Class}<a name="line.874"></a>
-<span class="sourceLineNo">875</span> *<a name="line.875"></a>
-<span class="sourceLineNo">876</span> * <cc># Another value in this config file</cc><a name="line.876"></a>
-<span class="sourceLineNo">877</span> * <ck>sameAsAnInt</ck> = $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 && 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> * <cc># A command-line argument in the form "myarg=foo"</cc><a name="line.879"></a>
-<span class="sourceLineNo">880</span> * <ck>myArg</ck> = $A{myarg}<a name="line.880"></a>
+<span class="sourceLineNo">879</span> * <p><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> * <cc># The first command-line argument</cc><a name="line.882"></a>
-<span class="sourceLineNo">883</span> * <ck>firstArg</ck> = $A{0}<a name="line.883"></a>
+<span class="sourceLineNo">882</span> * <p><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> * <cc># Look for system property, or env var if that doesn't exist, or command-line arg if that doesn't exist.</cc><a name="line.885"></a>
-<span class="sourceLineNo">886</span> * <ck>nested</ck> = $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> * <cc># A POJO with embedded variables</cc><a name="line.888"></a>
-<span class="sourceLineNo">889</span> * <ck>aBean2</ck> = {foo:'$A{0}',baz:$C{MySection/anInt}}<a name="line.889"></a>
-<span class="sourceLineNo">890</span> * </p><a name="line.890"></a>
-<span class="sourceLineNo">891</span> *<a name="line.891"></a>
-<span class="sourceLineNo">892</span> * <p class='bjava'><a name="line.892"></a>
-<span class="sourceLineNo">893</span> * <jc>// Java code for accessing config entries above.</jc><a name="line.893"></a>
-<span class="sourceLineNo">894</span> * Config <jv>config</jv> = getConfig();<a name="line.894"></a>
-<span class="sourceLineNo">895</span> *<a name="line.895"></a>
-<span class="sourceLineNo">896</span> * <jk>int</jk> <jv>anInt</jv> = <jv>config</jv>.get(<js>"MySection/anInt"</js>).asInteger().orElse(-1);<a name="line.896"></a>
-<span class="sourceLineNo">897</span> * <jk>boolean</jk> <jv>aBoolean</jv> = <jv>config</jv>.get(<js>"MySection/aBoolean"</js>).asBoolean().orElse(<jk>false</jk>);<a name="line.897"></a>
-<span class="sourceLineNo">898</span> * <jk>int</jk>[] <jv>anIntArray</jv> = <jv>config</jv>.get(<js>"MySection/anIntArray"</js>).as(<jk>int</jk>[].<jk>class</jk>).orElse(<jk>null</jk>);<a name="line.898"></a>
-<span class="sourceLineNo">899</span> * URL <jv>aURL</jv> = <jv>config</jv>.get(<js>"MySection/aURL"</js>).as(URL.<jk>class</jk>).orElse(<jk>null</jk>);<a name="line.899"></a>
-<span class="sourceLineNo">900</span> * MyBean <jv>aBean</jv> = <jv>config</jv>.get(<js>"MySection/aBean"</js>).as(MyBean.<jk>class</jk>).orElse(<jk>null</jk>);<a name="line.900"></a>
-<span class="sourceLineNo">901</span> * Locale <jv>locale</jv> = <jv>config</jv>.get(<js>"MySection/locale"</js>).as(Locale.<jk>class</jk>).orElse(<jk>null</jk>);<a name="line.901"></a>
-<span class="sourceLineNo">902</span> * String <jv>path</jv> = <jv>config</jv>.get(<js>"MySection/path"</js>).orElse(<jk>null</jk>);<a name="line.902"></a>
-<span class="sourceLineNo">903</span> * String <jv>mainClass</jv> = <jv>config</jv>.get(<js>"MySection/mainClass"</js>).orElse(<jk>null</jk>);<a name="line.903"></a>
-<span class="sourceLineNo">904</span> * <jk>int</jk> <jv>sameAsAnInt</jv> = <jv>config</jv>.get(<js>"MySection/sameAsAnInt"</js>).asInteger().orElse(<jk>null</jk>);<a name="line.904"></a>
-<span class="sourceLineNo">905</span> * String <jv>myArg</jv> = <jv>config</jv>.getString(<js>"MySection/myArg"</js>);<a name="line.905"></a>
-<span class="sourceLineNo">906</span> * String <jv>firstArg</jv> = <jv>config</jv>.getString(<js>"MySection/firstArg"</js>);<a name="line.906"></a>
-<span class="sourceLineNo">907</span> * </p><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> * <p><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> * <ol class='spaced-list'><a name="line.896"></a>
+<span class="sourceLineNo">897</span> * <li><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> * <li><a name="line.899"></a>
+<span class="sourceLineNo">900</span> * The <c>Main-Config</c> entry in the microservice jar manifest file.<a name="line.900"></a>
+<span class="sourceLineNo">901</span> * <li><a name="line.901"></a>
+<span class="sourceLineNo">902</span> * The name of the microservice jar with a <js>".cfg"</js> suffix (e.g.<a name="line.902"></a>
+<span class="sourceLineNo">903</span> * <js>"mymicroservice.jar"</js>-&gt;<js>"mymicroservice.cfg"</js>).<a name="line.903"></a>
+<span class="sourceLineNo">904</span> * </ol><a name="line.904"></a>
+<span class="sourceLineNo">905</span> *<a name="line.905"></a>
+<span class="sourceLineNo">906</span> * <p><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 <jk>null</jk> 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> * <p><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> * <p><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> * <h5 class='section'>Example:</h5><a name="line.924"></a>
-<span class="sourceLineNo">925</span> * <p class='bjava'><a name="line.925"></a>
-<span class="sourceLineNo">926</span> * <jc>// Get Main-Class from manifest file.</jc><a name="line.926"></a>
-<span class="sourceLineNo">927</span> * String <jv>mainClass</jv> = Microservice.<jsm>getManifest</jsm>().getString(<js>"Main-Class"</js>, <js>"unknown"</js>);<a name="line.927"></a>
+<span class="sourceLineNo">909</span> * <p><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> * <ul class='javatree'><a name="line.911"></a>
+<span class="sourceLineNo">912</span> * <li class='jm'>{@link Builder#configStore(ConfigStore)}<a name="line.912"></a>
+<span class="sourceLineNo">913</span> * <li class='jm'>{@link Builder#configName(String)}<a name="line.913"></a>
+<span class="sourceLineNo">914</span> * </ul><a name="line.914"></a>
+<span class="sourceLineNo">915</span> *<a name="line.915"></a>
+<span class="sourceLineNo">916</span> * <p><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> * <p><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> * <h5 class='section'>Example:</h5><a name="line.922"></a>
+<span class="sourceLineNo">923</span> * <p class='bini'><a name="line.923"></a>
+<span class="sourceLineNo">924</span> * <cc>#--------------------------</cc><a name="line.924"></a>
+<span class="sourceLineNo">925</span> * <cc># My section</cc><a name="line.925"></a>
+<span class="sourceLineNo">926</span> * <cc>#--------------------------</cc><a name="line.926"></a>
+<span class="sourceLineNo">927</span> * <cs>[MySection]</cs><a name="line.927"></a>
<span class="sourceLineNo">928</span> *<a name="line.928"></a>
-<span class="sourceLineNo">929</span> * <jc>// Get Rest-Resources from manifest file.</jc><a name="line.929"></a>
-<span class="sourceLineNo">930</span> * String[] <jv>restResources</jv> = Microservice.<jsm>getManifest</jsm>().getStringArray(<js>"Rest-Resources"</js>);<a name="line.930"></a>
-<span class="sourceLineNo">931</span> * </p><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 <jk>null</jk> 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> * <p><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> * <ul class='javatree'><a name="line.944"></a>
-<span class="sourceLineNo">945</span> * <li class='jm'>{@link Builder#vars(Class...)}<a name="line.945"></a>
-<span class="sourceLineNo">946</span> * <li class='jm'>{@link Builder#varBean(Class,Object)}<a name="line.946"></a>
-<span class="sourceLineNo">947</span> * </ul><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 <jk>null</jk> 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> * <br>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 <jk>true</jk> if the command returned <jk>true</jk> 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> * <p><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 <jk>null</jk>.<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<String> 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> * <p><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> * <p><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 <c>System.exit(2);</c>.<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<String,ConsoleCommand> 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> * <p><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 <jk>null</jk>.<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> * <p><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 <jk>null</jk>.<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> * <p><a name="line.1102"></a>
-<span class="sourceLineNo">1103</span> * Ignored if <js>"Console/enabled"</js> is <jk>false</jk>.<a name="line.1103"></a>
+<span class="sourceLineNo">929</span> * <cc># An integer</cc><a name="line.929"></a>
+<span class="sourceLineNo">930</span> * <ck>anInt</ck> = 1<a name="line.930"></a>
+<span class="sourceLineNo">931</span> *<a name="line.931"></a>
+<span class="sourceLineNo">932</span> * <cc># A boolean</cc><a name="line.932"></a>
+<span class="sourceLineNo">933</span> * <ck>aBoolean</ck> = true<a name="line.933"></a>
+<span class="sourceLineNo">934</span> *<a name="line.934"></a>
+<span class="sourceLineNo">935</span> * <cc># An int array</cc><a name="line.935"></a>
+<span class="sourceLineNo">936</span> * <ck>anIntArray</ck> = 1,2,3<a name="line.936"></a>
+<span class="sourceLineNo">937</span> *<a name="line.937"></a>
+<span class="sourceLineNo">938</span> * <cc># A POJO that can be converted from a String</cc><a name="line.938"></a>
+<span class="sourceLineNo">939</span> * <ck>aURL</ck> = http://foo<a name="line.939"></a>
+<span class="sourceLineNo">940</span> *<a name="line.940"></a>
+<span class="sourceLineNo">941</span> * <cc># A POJO that can be converted from JSON</cc><a name="line.941"></a>
+<span class="sourceLineNo">942</span> * <ck>aBean</ck> = {foo:'bar',baz:123}<a name="line.942"></a>
+<span class="sourceLineNo">943</span> *<a name="line.943"></a>
+<span class="sourceLineNo">944</span> * <cc># A system property</cc><a name="line.944"></a>
+<span class="sourceLineNo">945</span> * <ck>locale</ck> = $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> * <cc># An environment variable</cc><a name="line.947"></a>
+<span class="sourceLineNo">948</span> * <ck>path</ck> = $E{PATH, unknown}<a name="line.948"></a>
+<span class="sourceLineNo">949</span> *<a name="line.949"></a>
+<span class="sourceLineNo">950</span> * <cc># A manifest file entry</cc><a name="line.950"></a>
+<span class="sourceLineNo">951</span> * <ck>mainClass</ck> = $MF{Main-Class}<a name="line.951"></a>
+<span class="sourceLineNo">952</span> *<a name="line.952"></a>
+<span class="sourceLineNo">953</span> * <cc># Another value in this config file</cc><a name="line.953"></a>
+<span class="sourceLineNo">954</span> * <ck>sameAsAnInt</ck> = $C{MySection/anInt}<a name="line.954"></a>
+<span class="sourceLineNo">955</span> *<a name="line.955"></a>
+<span class="sourceLineNo">956</span> * <cc># A command-line argument in the form "myarg=foo"</cc><a name="line.956"></a>
+<span class="sourceLineNo">957</span> * <ck>myArg</ck> = $A{myarg}<a name="line.957"></a>
+<span class="sourceLineNo">958</span> *<a name="line.958"></a>
+<span class="sourceLineNo">959</span> * <cc># The first command-line argument</cc><a name="line.959"></a>
+<span class="sourceLineNo">960</span> * <ck>firstArg</ck> = $A{0}<a name="line.960"></a>
+<span class="sourceLineNo">961</span> *<a name="line.961"></a>
+<span class="sourceLineNo">962</span> * <cc># Look for system property, or env var if that doesn't exist, or command-line arg if that doesn't exist.</cc><a name="line.962"></a>
+<span class="sourceLineNo">963</span> * <ck>nested</ck> = $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> * <cc># A POJO with embedded variables</cc><a name="line.965"></a>
+<span class="sourceLineNo">966</span> * <ck>aBean2</ck> = {foo:'$A{0}',baz:$C{MySection/anInt}}<a name="line.966"></a>
+<span class="sourceLineNo">967</span> * </p><a name="line.967"></a>
+<span class="sourceLineNo">968</span> *<a name="line.968"></a>
+<span class="sourceLineNo">969</span> * <p class='bjava'><a name="line.969"></a>
+<span class="sourceLineNo">970</span> * <jc>// Java code for accessing config entries above.</jc><a name="line.970"></a>
+<span class="sourceLineNo">971</span> * Config <jv>config</jv> = getConfig();<a name="line.971"></a>
+<span class="sourceLineNo">972</span> *<a name="line.972"></a>
+<span class="sourceLineNo">973</span> * <jk>int</jk> <jv>anInt</jv> = <jv>config</jv>.get(<js>"MySection/anInt"</js>).asInteger().orElse(-1);<a name="line.973"></a>
+<span class="sourceLineNo">974</span> * <jk>boolean</jk> <jv>aBoolean</jv> = <jv>config</jv>.get(<js>"MySection/aBoolean"</js>).asBoolean().orElse(<jk>false</jk>);<a name="line.974"></a>
+<span class="sourceLineNo">975</span> * <jk>int</jk>[] <jv>anIntArray</jv> = <jv>config</jv>.get(<js>"MySection/anIntArray"</js>).as(<jk>int</jk>[].<jk>class</jk>).orElse(<jk>null</jk>);<a name="line.975"></a>
+<span class="sourceLineNo">976</span> * URL <jv>aURL</jv> = <jv>config</jv>.get(<js>"MySection/aURL"</js>).as(URL.<jk>class</jk>).orElse(<jk>null</jk>);<a name="line.976"></a>
+<span class="sourceLineNo">977</span> * MyBean <jv>aBean</jv> = <jv>config</jv>.get(<js>"MySection/aBean"</js>).as(MyBean.<jk>class</jk>).orElse(<jk>null</jk>);<a name="line.977"></a>
+<span class="sourceLineNo">978</span> * Locale <jv>locale</jv> = <jv>config</jv>.get(<js>"MySection/locale"</js>).as(Locale.<jk>class</jk>).orElse(<jk>null</jk>);<a name="line.978"></a>
+<span class="sourceLineNo">979</span> * String <jv>path</jv> = <jv>config</jv>.get(<js>"MySection/path"</js>).orElse(<jk>null</jk>);<a name="line.979"></a>
+<span class="sourceLineNo">980</span> * String <jv>mainClass</jv> = <jv>config</jv>.get(<js>"MySection/mainClass"</js>).orElse(<jk>null</jk>);<a name="line.980"></a>
+<span class="sourceLineNo">981</span> * <jk>int</jk> <jv>sameAsAnInt</jv> = <jv>config</jv>.get(<js>"MySection/sameAsAnInt"</js>).asInteger().orElse(<jk>null</jk>);<a name="line.981"></a>
+<span class="sourceLineNo">982</span> * String <jv>myArg</jv> = <jv>config</jv>.getString(<js>"MySection/myArg"</js>);<a name="line.982"></a>
+<span class="sourceLineNo">983</span> * String <jv>firstArg</jv> = <jv>config</jv>.getString(<js>"MySection/firstArg"</js>);<a name="line.983"></a>
+<span class="sourceLineNo">984</span> * </p><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 <jk>null</jk> 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> * <p><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> * <p><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> * <h5 class='section'>Example:</h5><a name="line.1001"></a>
+<span class="sourceLineNo">1002</span> * <p class='bjava'><a name="line.1002"></a>
+<span class="sourceLineNo">1003</span> * <jc>// Get Main-Class from manifest file.</jc><a name="line.1003"></a>
+<span class="sourceLineNo">1004</span> * String <jv>mainClass</jv> = Microservice.<jsm>getManifest</jsm>().getString(<js>"Main-Class"</js>, <js>"unknown"</js>);<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span> *<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span> * <jc>// Get Rest-Resources from manifest file.</jc><a name="line.1006"></a>
+<span class="sourceLineNo">1007</span> * String[] <jv>restResources</jv> = Microservice.<jsm>getManifest</jsm>().getStringArray(<js>"Rest-Resources"</js>);<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span> * </p><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 <jk>null</jk> 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> * <p><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> * <ul class='javatree'><a name="line.1021"></a>
+<span class="sourceLineNo">1022</span> * <li class='jm'>{@link Builder#vars(Class...)}<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span> * <li class='jm'>{@link Builder#varBean(Class,Object)}<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span> * </ul><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 <jk>null</jk> 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> * <br>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 <jk>true</jk> if the command returned <jk>true</jk> 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> * <p><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 <jk>null</jk>.<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<String> 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> * <p><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> * <p><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> * <p><a name="line.1119"></a>
-<span class="sourceLineNo">1120</span> * Ignored if <js>"Console/enabled"</js> is <jk>false</jk>.<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 <c>System.exit(2);</c>.<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<String,ConsoleCommand> 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> * <p><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 <jk>null</jk>.<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> * <p><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 <jk>null</jk>.<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> * <p><a name="line.1179"></a>
+<span class="sourceLineNo">1180</span> * Ignored if <js>"Console/enabled"</js> is <jk>false</jk>.<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> * <p><a name="line.1196"></a>
+<span class="sourceLineNo">1197</span> * Ignored if <js>"Console/enabled"</js> is <jk>false</jk>.<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> * <p><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> * <p><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> * <p class='bjava'><a name="line.52"></a>
-<span class="sourceLineNo">053</span> * <jk>public static void</jk> main(String[] <jv>args</jv>) {<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * Microservice.<jsm>create</jsm>().args(<jv>args</jv>).build().start().join();<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * }<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * </p><a name="line.56"></a>
-<span class="sourceLineNo">057</span> *<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * <p><a name="line.58"></a>
-<span class="sourceLineNo">059</span> * Your microservice class must be specified as the <jk>Main-Class</jk> 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> * <h5 class='topic'>Microservice Configuration</h5><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> * <ul class='spaced-list'><a name="line.65"></a>
-<span class="sourceLineNo">066</span> * <li><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> * <li><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> * <li><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> * </ul><a name="line.72"></a>
-<span class="sourceLineNo">073</span> *<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * <h5 class='topic'>Lifecycle Methods</h5><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> * <ul class='spaced-list'><a name="line.77"></a>
-<span class="sourceLineNo">078</span> * <li><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> * <li><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> * <li><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> * <li><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> * </ul><a name="line.86"></a>
-<span class="sourceLineNo">087</span> *<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * <ul class='seealso'><a name="line.88"></a>
-<span class="sourceLineNo">089</span> * <li class='link'>{@doc juneau-microservice-core}<a name="line.89"></a>
-<span class="sourceLineNo">090</span> * <li class='extlink'>{@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> * <p><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> * <p><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> * <p class='bjava'><a name="line.57"></a>
+<span class="sourceLineNo">058</span> * <jk>public static void</jk> main(String[] <jv>args</jv>) {<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * Microservice.<jsm>create</jsm>().args(<jv>args</jv>).build().start().join();<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * }<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * </p><a name="line.61"></a>
+<span class="sourceLineNo">062</span> *<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * <p><a name="line.63"></a>
+<span class="sourceLineNo">064</span> * Your microservice class must be specified as the <jk>Main-Class</jk> 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> * <h5 class='topic'>Microservice Configuration</h5><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> * <ul class='spaced-list'><a name="line.70"></a>
+<span class="sourceLineNo">071</span> * <li><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> * <li><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> * <li><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> * </ul><a name="line.77"></a>
+<span class="sourceLineNo">078</span> *<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * <h5 class='topic'>Lifecycle Methods</h5><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> * <ul class='spaced-list'><a name="line.82"></a>
+<span class="sourceLineNo">083</span> * <li><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> * <li><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> * <li><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> * <li><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> * </ul><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> * <p><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 <jk>null</jk> 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> * <ul class='seealso'><a name="line.93"></a>
+<span class="sourceLineNo">094</span> * <li class='link'>{@doc juneau-microservice-core}<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * <li class='extlink'>{@source}<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * </ul><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> * <p><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 <jk>null</jk> 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<ConsoleCommand> 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> * <p><a name="line.200"></a>
-<span class="sourceLineNo">201</span> * This is required if you use {@link Microservice#getArgs()} or <c>$A</c> 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> * <p><a name="line.215"></a>
-<span class="sourceLineNo">216</span> * This is required if you use {@link Microservice#getArgs()} or <c>$A</c> 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> * <p><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 <c>Main-Config</c>.<a name="line.232"></a>
-<span class="sourceLineNo">233</span> *<a name="line.233"></a>
-<span class="sourceLineNo">234</span> * <p><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> * <ol class='spaced-list'><a name="line.236"></a>
-<span class="sourceLineNo">237</span> * <li><a name="line.237"></a>
-<span class="sourceLineNo">238</span> * Looking on the file system for a file at <js>"META-INF/MANIFEST.MF"</js>.<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> * <li><a name="line.241"></a>
-<span class="sourceLineNo">242</span> * Using the class loader for this class to find the file at the URL <js>"META-INF/MANIFEST.MF"</js>.<a name="line.242"></a>
-<span class="sourceLineNo">243</span> * </ol><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> * <br>Can be any of the following types:<a name="line.247"></a>
-<span class="sourceLineNo">248</span> * <ul><a name="line.248"></a>
-<span class="sourceLineNo">249</span> * <li>{@link ManifestFile}<a name="line.249"></a>
-<span class="sourceLineNo">250</span> * <li>{@link Manifest}<a name="line.250"></a>
-<span class="sourceLineNo">251</span> * <li>{@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> * <li>{@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> * <li>{@link File} - File containing the raw contents of the manifest.<a name="line.253"></a>
-<span class="sourceLineNo">254</span> * <li>{@link String} - Path to file containing the raw contents of the manifest.<a name="line.254"></a>
-<span class="sourceLineNo">255</span> * <li>{@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> * </ul><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<?>)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> * <p><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> * <p><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> * <ol class='spaced-list'><a name="line.313"></a>
-<span class="sourceLineNo">314</span> * <li><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> * <ul><a name="line.316"></a>
-<span class="sourceLineNo">317</span> * <li><a name="line.317"></a>
-<span class="sourceLineNo">318</span> * The <js>"configFile"</js> argument in the command line arguments passed in through the constructor.<a name="line.318"></a>
-<span class="sourceLineNo">319</span> * <li><a name="line.319"></a>
-<span class="sourceLineNo">320</span> * The value of the <c>Main-Config</c> entry in the manifest file.<a name="line.320"></a>
-<span class="sourceLineNo">321</span> * <li><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. <js>"java -jar myjar.jar"</js> will look for <js>"myjar.cfg"</js>).<a name="line.323"></a>
-<span class="sourceLineNo">324</span> * </ul><a name="line.324"></a>
-<span class="sourceLineNo">325</span> * <li><a name="line.325"></a>
-<span class="sourceLineNo">326</span> * Resolve any <js>"*.cfg"</js> file that can be found in the working directory.<a name="line.326"></a>
-<span class="sourceLineNo">327</span> * <li><a name="line.327"></a>
-<span class="sourceLineNo">328</span> * Resolve any of the following files in the classpath: <js>"juneau.cfg"</js>, <js>"system.cfg"</js><a name="line.328"></a>
-<span class="sourceLineNo">329</span> * </ol><a name="line.329"></a>
-<span class="sourceLineNo">330</span> *<a name="line.330"></a>
-<span class="sourceLineNo">331</span> * <p><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> * <p><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> * <p><a name="line.359"></a>
-<span class="sourceLineNo">360</span> * If not specified, this value is taken from the <js>"Console/enabled"</js> configuration setting.<a name="line.360"></a>
-<span class="sourceLineNo">361</span> * If not specified in the configuration, defaults to <jk>false</jk>.<a name="line.361"></a>
-<span class="sourceLineNo">362</span> *<a name="line.362"></a>
-<span class="sourceLineNo">363</span> * @param consoleEnabled <jk>true</jk> 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> * <p><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> * <p><a name="line.377"></a>
-<span class="sourceLineNo">378</span> * This list augments the commands defined via the <js>"Console/commands"</js> configuration setting.<a name="line.378"></a>
-<span class="sourceLineNo">379</span> *<a name="line.379"></a>
-<span class="sourceLineNo">380</span> * <p><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<? extends ConsoleCommand>...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<? extends ConsoleCommand> 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<ConsoleCommand> 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> * <p><a name="line.207"></a>
+<span class="sourceLineNo">208</span> * This is required if you use {@link Microservice#getArgs()} or <c>$A</c> 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> * <p><a name="line.222"></a>
+<span class="sourceLineNo">223</span> * This is required if you use {@link Microservice#getArgs()} or <c>$A</c> 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> * <p><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 <c>Main-Config</c>.<a name="line.239"></a>
+<span class="sourceLineNo">240</span> *<a name="line.240"></a>
+<span class="sourceLineNo">241</span> * <p><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> * <ol class='spaced-list'><a name="line.243"></a>
+<span class="sourceLineNo">244</span> * <li><a name="line.244"></a>
+<span class="sourceLineNo">245</span> * Looking on the file system for a file at <js>"META-INF/MANIFEST.MF"</js>.<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> * <li><a name="line.248"></a>
+<span class="sourceLineNo">249</span> * Using the class loader for this class to find the file at the URL <js>"META-INF/MANIFEST.MF"</js>.<a name="line.249"></a>
+<span class="sourceLineNo">250</span> * </ol><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> * <br>Can be any of the following types:<a name="line.254"></a>
+<span class="sourceLineNo">255</span> * <ul><a name="line.255"></a>
+<span class="sourceLineNo">256</span> * <li>{@link ManifestFile}<a name="line.256"></a>
+<span class="sourceLineNo">257</span> * <li>{@link Manifest}<a name="line.257"></a>
+<span class="sourceLineNo">258</span> * <li>{@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> * <li>{@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> * <li>{@link File} - File containing the raw contents of the manifest.<a name="line.260"></a>
+<span class="sourceLineNo">261</span> * <li>{@link String} - Path to file containing the raw contents of the manifest.<a name="line.261"></a>
+<span class="sourceLineNo">262</span> * <li>{@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> * </ul><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<?>)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> * <p><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> * <p><a name="line.307"></a>
+<span class="sourceLineNo">308</span> * If not specified, the values are taken from the <js>"Logging"</js> section of the configuration.<a name="line.308"></a>
+<span class="sourceLineNo">309</span> *<a name="line.309"></a>
+<span class="sourceLineNo">310</span> * <p><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> * <p><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> * <p><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> * <ol class='spaced-list'><a name="line.340"></a>
+<span class="sourceLineNo">341</span> * <li><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> * <ul><a name="line.343"></a>
+<span class="sourceLineNo">344</span> * <li><a name="line.344"></a>
+<span class="sourceLineNo">345</span> * The <js>"configFile"</js> argument in the command line arguments passed in through the constructor.<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * <li><a name="line.346"></a>
+<span class="sourceLineNo">347</span> * The value of the <c>Main-Config</c> entry in the manifest file.<a name="line.347"></a>
+<span class="sourceLineNo">348</span> * <li><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. <js>"java -jar myjar.jar"</js> will look for <js>"myjar.cfg"</js>).<a name="line.350"></a>
+<span class="sourceLineNo">351</span> * </ul><a name="line.351"></a>
+<span class="sourceLineNo">352</span> * <li><a name="line.352"></a>
+<span class="sourceLineNo">353</span> * Resolve any <js>"*.cfg"</js> file that can be found in the working directory.<a name="line.353"></a>
+<span class="sourceLineNo">354</span> * <li><a name="line.354"></a>
+<span class="sourceLineNo">355</span> * Resolve any of the following files in the classpath: <js>"juneau.cfg"</js>, <js>"system.cfg"</js><a name="line.355"></a>
+<span class="sourceLineNo">356</span> * </ol><a name="line.356"></a>
+<span class="sourceLineNo">357</span> *<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * <p><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> * <p><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> * <p><a name="line.386"></a>
+<span class="sourceLineNo">387</span> * If not specified, this value is taken from the <js>"Console/enabled"</js> configuration setting.<a name="line.387"></a>
+<span class="sourceLineNo">388</span> * If not specified in the configuration, defaults to <jk>false</jk>.<a name="line.388"></a>
+<span class="sourceLineNo">389</span> *<a name="line.389"></a>
+<span class="sourceLineNo">390</span> * @param consoleEnabled <jk>true</jk> 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> * <p><a name="line.404"></a>
<span class="sourceLineNo">405</span> * This list augments the commands defined via the <js>"Console/commands"</js> 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> * <p><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> * <p><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> * <p><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<? extends Var>...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> * <p><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 <T> 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 <T> Builder varBean(Class<T> 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 <jk>null</jk> 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 <jk>null</jk> 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> * <p><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<String,ConsoleCommand> consoleCommandMap = new ConcurrentHashMap<>();<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> * <p><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<? extends ConsoleCommand>...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<? extends ConsoleCommand> 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> * <p><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> * <p><a name="line.431"></a>
+<span class="sourceLineNo">432</span> * This list augments the commands defined via the <js>"Console/commands"</js> 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> * <p><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> * <p><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> * <p><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<? extends Var>...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> * <p><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 <T> 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 <T> Builder varBean(Class<T> 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 <jk>null</jk> 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 <jk>null</jk> 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> * <p><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() && 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<String,ConsoleCommand> consoleCommandMap = new ConcurrentHashMap<>();<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() && 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<>(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("> ").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<String> 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> * <p><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> * <p><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> * <p><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<String> 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<>(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("> ").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<String> 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> * <p><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> * <p><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 && ! 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 && 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> * <p><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> * <p><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> * <p><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> * <p><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<String> 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> * <p><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> * <ol class='spaced-list'><a name="line.819"></a>
-<span class="sourceLineNo">820</span> * <li><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> * <li><a name="line.822"></a>
-<span class="sourceLineNo">823</span> * The <c>Main-Config</c> entry in the microservice jar manifest file.<a name="line.823"></a>
-<span class="sourceLineNo">824</span> * <li><a name="line.824"></a>
-<span class="sourceLineNo">825</span> * The name of the microservice jar with a <js>".cfg"</js> suffix (e.g.<a name="line.825"></a>
-<span class="sourceLineNo">826</span> * <js>"mymicroservice.jar"</js>-&gt;<js>"mymicroservice.cfg"</js>).<a name="line.826"></a>
-<span class="sourceLineNo">827</span> * </ol><a name="line.827"></a>
-<span class="sourceLineNo">828</span> *<a name="line.828"></a>
-<span class="sourceLineNo">829</span> * <p><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> * <p><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> * <ul class='javatree'><a name="line.834"></a>
-<span class="sourceLineNo">835</span> * <li class='jm'>{@link Builder#configStore(ConfigStore)}<a name="line.835"></a>
-<span class="sourceLineNo">836</span> * <li class='jm'>{@link Builder#configName(String)}<a name="line.836"></a>
-<span class="sourceLineNo">837</span> * </ul><a name="line.837"></a>
-<span class="sourceLineNo">838</span> *<a name="line.838"></a>
-<span class="sourceLineNo">839</span> * <p><a name="line.839"></a>
-<span class="sourceLineNo">840</span> * 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> * <p><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> * <h5 class='section'>Example:</h5><a name="line.845"></a>
-<span class="sourceLineNo">846</span> * <p class='bini'><a name="line.846"></a>
-<span class="sourceLineNo">847</span> * <cc>#--------------------------</cc><a name="line.847"></a>
-<span class="sourceLineNo">848</span> * <cc># My section</cc><a name="line.848"></a>
-<span class="sourceLineNo">849</span> * <cc>#--------------------------</cc><a name="line.849"></a>
-<span class="sourceLineNo">850</span> * <cs>[MySection]</cs><a name="line.850"></a>
-<span class="sourceLineNo">851</span> *<a name="line.851"></a>
-<span class="sourceLineNo">852</span> * <cc># An integer</cc><a name="line.852"></a>
-<span class="sourceLineNo">853</span> * <ck>anInt</ck> = 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> * <p><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> * <cc># A boolean</cc><a name="line.855"></a>
-<span class="sourceLineNo">856</span> * <ck>aBoolean</ck> = true<a name="line.856"></a>
-<span class="sourceLineNo">857</span> *<a name="line.857"></a>
-<span class="sourceLineNo">858</span> * <cc># An int array</cc><a name="line.858"></a>
-<span class="sourceLineNo">859</span> * <ck>anIntArray</ck> = 1,2,3<a name="line.859"></a>
-<span class="sourceLineNo">860</span> *<a name="line.860"></a>
-<span class="sourceLineNo">861</span> * <cc># A POJO that can be converted from a String</cc><a name="line.861"></a>
-<span class="sourceLineNo">862</span> * <ck>aURL</ck> = http://foo<a name="line.862"></a>
-<span class="sourceLineNo">863</span> *<a name="line.863"></a>
-<span class="sourceLineNo">864</span> * <cc># A POJO that can be converted from JSON</cc><a name="line.864"></a>
-<span class="sourceLineNo">865</span> * <ck>aBean</ck> = {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 && ! 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> * <cc># A system property</cc><a name="line.867"></a>
-<span class="sourceLineNo">868</span> * <ck>locale</ck> = $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> * <cc># An environment variable</cc><a name="line.870"></a>
-<span class="sourceLineNo">871</span> * <ck>path</ck> = $E{PATH, unknown}<a name="line.871"></a>
-<span class="sourceLineNo">872</span> *<a name="line.872"></a>
-<span class="sourceLineNo">873</span> * <cc># A manifest file entry</cc><a name="line.873"></a>
-<span class="sourceLineNo">874</span> * <ck>mainClass</ck> = $MF{Main-Class}<a name="line.874"></a>
-<span class="sourceLineNo">875</span> *<a name="line.875"></a>
-<span class="sourceLineNo">876</span> * <cc># Another value in this config file</cc><a name="line.876"></a>
-<span class="sourceLineNo">877</span> * <ck>sameAsAnInt</ck> = $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 && 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> * <cc># A command-line argument in the form "myarg=foo"</cc><a name="line.879"></a>
-<span class="sourceLineNo">880</span> * <ck>myArg</ck> = $A{myarg}<a name="line.880"></a>
+<span class="sourceLineNo">879</span> * <p><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> * <cc># The first command-line argument</cc><a name="line.882"></a>
-<span class="sourceLineNo">883</span> * <ck>firstArg</ck> = $A{0}<a name="line.883"></a>
+<span class="sourceLineNo">882</span> * <p><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> * <cc># Look for system property, or env var if that doesn't exist, or command-line arg if that doesn't exist.</cc><a name="line.885"></a>
-<span class="sourceLineNo">886</span> * <ck>nested</ck> = $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> * <cc># A POJO with embedded variables</cc><a name="line.888"></a>
-<span class="sourceLineNo">889</span> * <ck>aBean2</ck> = {foo:'$A{0}',baz:$C{MySection/anInt}}<a name="line.889"></a>
-<span class="sourceLineNo">890</span> * </p><a name="line.890"></a>
-<span class="sourceLineNo">891</span> *<a name="line.891"></a>
-<span class="sourceLineNo">892</span> * <p class='bjava'><a name="line.892"></a>
-<span class="sourceLineNo">893</span> * <jc>// Java code for accessing config entries above.</jc><a name="line.893"></a>
-<span class="sourceLineNo">894</span> * Config <jv>config</jv> = getConfig();<a name="line.894"></a>
-<span class="sourceLineNo">895</span> *<a name="line.895"></a>
-<span class="sourceLineNo">896</span> * <jk>int</jk> <jv>anInt</jv> = <jv>config</jv>.get(<js>"MySection/anInt"</js>).asInteger().orElse(-1);<a name="line.896"></a>
-<span class="sourceLineNo">897</span> * <jk>boolean</jk> <jv>aBoolean</jv> = <jv>config</jv>.get(<js>"MySection/aBoolean"</js>).asBoolean().orElse(<jk>false</jk>);<a name="line.897"></a>
-<span class="sourceLineNo">898</span> * <jk>int</jk>[] <jv>anIntArray</jv> = <jv>config</jv>.get(<js>"MySection/anIntArray"</js>).as(<jk>int</jk>[].<jk>class</jk>).orElse(<jk>null</jk>);<a name="line.898"></a>
-<span class="sourceLineNo">899</span> * URL <jv>aURL</jv> = <jv>config</jv>.get(<js>"MySection/aURL"</js>).as(URL.<jk>class</jk>).orElse(<jk>null</jk>);<a name="line.899"></a>
-<span class="sourceLineNo">900</span> * MyBean <jv>aBean</jv> = <jv>config</jv>.get(<js>"MySection/aBean"</js>).as(MyBean.<jk>class</jk>).orElse(<jk>null</jk>);<a name="line.900"></a>
-<span class="sourceLineNo">901</span> * Locale <jv>locale</jv> = <jv>config</jv>.get(<js>"MySection/locale"</js>).as(Locale.<jk>class</jk>).orElse(<jk>null</jk>);<a name="line.901"></a>
-<span class="sourceLineNo">902</span> * String <jv>path</jv> = <jv>config</jv>.get(<js>"MySection/path"</js>).orElse(<jk>null</jk>);<a name="line.902"></a>
-<span class="sourceLineNo">903</span> * String <jv>mainClass</jv> = <jv>config</jv>.get(<js>"MySection/mainClass"</js>).orElse(<jk>null</jk>);<a name="line.903"></a>
-<span class="sourceLineNo">904</span> * <jk>int</jk> <jv>sameAsAnInt</jv> = <jv>config</jv>.get(<js>"MySection/sameAsAnInt"</js>).asInteger().orElse(<jk>null</jk>);<a name="line.904"></a>
-<span class="sourceLineNo">905</span> * String <jv>myArg</jv> = <jv>config</jv>.getString(<js>"MySection/myArg"</js>);<a name="line.905"></a>
-<span class="sourceLineNo">906</span> * String <jv>firstArg</jv> = <jv>config</jv>.getString(<js>"MySection/firstArg"</js>);<a name="line.906"></a>
-<span class="sourceLineNo">907</span> * </p><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> * <p><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> * <ol class='spaced-list'><a name="line.896"></a>
+<span class="sourceLineNo">897</span> * <li><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> * <li><a name="line.899"></a>
+<span class="sourceLineNo">900</span> * The <c>Main-Config</c> entry in the microservice jar manifest file.<a name="line.900"></a>
+<span class="sourceLineNo">901</span> * <li><a name="line.901"></a>
+<span class="sourceLineNo">902</span> * The name of the microservice jar with a <js>".cfg"</js> suffix (e.g.<a name="line.902"></a>
+<span class="sourceLineNo">903</span> * <js>"mymicroservice.jar"</js>-&gt;<js>"mymicroservice.cfg"</js>).<a name="line.903"></a>
+<span class="sourceLineNo">904</span> * </ol><a name="line.904"></a>
+<span class="sourceLineNo">905</span> *<a name="line.905"></a>
+<span class="sourceLineNo">906</span> * <p><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 <jk>null</jk> 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> * <p><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> * <p><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> * <h5 class='section'>Example:</h5><a name="line.924"></a>
-<span class="sourceLineNo">925</span> * <p class='bjava'><a name="line.925"></a>
-<span class="sourceLineNo">926</span> * <jc>// Get Main-Class from manifest file.</jc><a name="line.926"></a>
-<span class="sourceLineNo">927</span> * String <jv>mainClass</jv> = Microservice.<jsm>getManifest</jsm>().getString(<js>"Main-Class"</js>, <js>"unknown"</js>);<a name="line.927"></a>
+<span class="sourceLineNo">909</span> * <p><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> * <ul class='javatree'><a name="line.911"></a>
+<span class="sourceLineNo">912</span> * <li class='jm'>{@link Builder#configStore(ConfigStore)}<a name="line.912"></a>
+<span class="sourceLineNo">913</span> * <li class='jm'>{@link Builder#configName(String)}<a name="line.913"></a>
+<span class="sourceLineNo">914</span> * </ul><a name="line.914"></a>
+<span class="sourceLineNo">915</span> *<a name="line.915"></a>
+<span class="sourceLineNo">916</span> * <p><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> * <p><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> * <h5 class='section'>Example:</h5><a name="line.922"></a>
+<span class="sourceLineNo">923</span> * <p class='bini'><a name="line.923"></a>
+<span class="sourceLineNo">924</span> * <cc>#--------------------------</cc><a name="line.924"></a>
+<span class="sourceLineNo">925</span> * <cc># My section</cc><a name="line.925"></a>
+<span class="sourceLineNo">926</span> * <cc>#--------------------------</cc><a name="line.926"></a>
+<span class="sourceLineNo">927</span> * <cs>[MySection]</cs><a name="line.927"></a>
<span class="sourceLineNo">928</span> *<a name="line.928"></a>
-<span class="sourceLineNo">929</span> * <jc>// Get Rest-Resources from manifest file.</jc><a name="line.929"></a>
-<span class="sourceLineNo">930</span> * String[] <jv>restResources</jv> = Microservice.<jsm>getManifest</jsm>().getStringArray(<js>"Rest-Resources"</js>);<a name="line.930"></a>
-<span class="sourceLineNo">931</span> * </p><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 <jk>null</jk> 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> * <p><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> * <ul class='javatree'><a name="line.944"></a>
-<span class="sourceLineNo">945</span> * <li class='jm'>{@link Builder#vars(Class...)}<a name="line.945"></a>
-<span class="sourceLineNo">946</span> * <li class='jm'>{@link Builder#varBean(Class,Object)}<a name="line.946"></a>
-<span class="sourceLineNo">947</span> * </ul><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 <jk>null</jk> 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> * <br>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 <jk>true</jk> if the command returned <jk>true</jk> 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> * <p><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 <jk>null</jk>.<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<String> 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> * <p><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> * <p><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 <c>System.exit(2);</c>.<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<String,ConsoleCommand> 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> * <p><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 <jk>null</jk>.<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> * <p><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 <jk>null</jk>.<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> * <p><a name="line.1102"></a>
-<span class="sourceLineNo">1103</span> * Ignored if <js>"Console/enabled"</js> is <jk>false</jk>.<a name="line.1103"></a>
+<span class="sourceLineNo">929</span> * <cc># An integer</cc><a name="line.929"></a>
+<span class="sourceLineNo">930</span> * <ck>anInt</ck> = 1<a name="line.930"></a>
+<span class="sourceLineNo">931</span> *<a name="line.931"></a>
+<span class="sourceLineNo">932</span> * <cc># A boolean</cc><a name="line.932"></a>
+<span class="sourceLineNo">933</span> * <ck>aBoolean</ck> = true<a name="line.933"></a>
+<span class="sourceLineNo">934</span> *<a name="line.934"></a>
+<span class="sourceLineNo">935</span> * <cc># An int array</cc><a name="line.935"></a>
+<span class="sourceLineNo">936</span> * <ck>anIntArray</ck> = 1,2,3<a name="line.936"></a>
+<span class="sourceLineNo">937</span> *<a name="line.937"></a>
+<span class="sourceLineNo">938</span> * <cc># A POJO that can be converted from a String</cc><a name="line.938"></a>
+<span class="sourceLineNo">939</span> * <ck>aURL</ck> = http://foo<a name="line.939"></a>
+<span class="sourceLineNo">940</span> *<a name="line.940"></a>
+<span class="sourceLineNo">941</span> * <cc># A POJO that can be converted from JSON</cc><a name="line.941"></a>
+<span class="sourceLineNo">942</span> * <ck>aBean</ck> = {foo:'bar',baz:123}<a name="line.942"></a>
+<span class="sourceLineNo">943</span> *<a name="line.943"></a>
+<span class="sourceLineNo">944</span> * <cc># A system property</cc><a name="line.944"></a>
+<span class="sourceLineNo">945</span> * <ck>locale</ck> = $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> * <cc># An environment variable</cc><a name="line.947"></a>
+<span class="sourceLineNo">948</span> * <ck>path</ck> = $E{PATH, unknown}<a name="line.948"></a>
+<span class="sourceLineNo">949</span> *<a name="line.949"></a>
+<span class="sourceLineNo">950</span> * <cc># A manifest file entry</cc><a name="line.950"></a>
+<span class="sourceLineNo">951</span> * <ck>mainClass</ck> = $MF{Main-Class}<a name="line.951"></a>
+<span class="sourceLineNo">952</span> *<a name="line.952"></a>
+<span class="sourceLineNo">953</span> * <cc># Another value in this config file</cc><a name="line.953"></a>
+<span class="sourceLineNo">954</span> * <ck>sameAsAnInt</ck> = $C{MySection/anInt}<a name="line.954"></a>
+<span class="sourceLineNo">955</span> *<a name="line.955"></a>
+<span class="sourceLineNo">956</span> * <cc># A command-line argument in the form "myarg=foo"</cc><a name="line.956"></a>
+<span class="sourceLineNo">957</span> * <ck>myArg</ck> = $A{myarg}<a name="line.957"></a>
+<span class="sourceLineNo">958</span> *<a name="line.958"></a>
+<span class="sourceLineNo">959</span> * <cc># The first command-line argument</cc><a name="line.959"></a>
+<span class="sourceLineNo">960</span> * <ck>firstArg</ck> = $A{0}<a name="line.960"></a>
+<span class="sourceLineNo">961</span> *<a name="line.961"></a>
+<span class="sourceLineNo">962</span> * <cc># Look for system property, or env var if that doesn't exist, or command-line arg if that doesn't exist.</cc><a name="line.962"></a>
+<span class="sourceLineNo">963</span> * <ck>nested</ck> = $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> * <cc># A POJO with embedded variables</cc><a name="line.965"></a>
+<span class="sourceLineNo">966</span> * <ck>aBean2</ck> = {foo:'$A{0}',baz:$C{MySection/anInt}}<a name="line.966"></a>
+<span class="sourceLineNo">967</span> * </p><a name="line.967"></a>
+<span class="sourceLineNo">968</span> *<a name="line.968"></a>
+<span class="sourceLineNo">969</span> * <p class='bjava'><a name="line.969"></a>
+<span class="sourceLineNo">970</span> * <jc>// Java code for accessing config entries above.</jc><a name="line.970"></a>
+<span class="sourceLineNo">971</span> * Config <jv>config</jv> = getConfig();<a name="line.971"></a>
+<span class="sourceLineNo">972</span> *<a name="line.972"></a>
+<span class="sourceLineNo">973</span> * <jk>int</jk> <jv>anInt</jv> = <jv>config</jv>.get(<js>"MySection/anInt"</js>).asInteger().orElse(-1);<a name="line.973"></a>
+<span class="sourceLineNo">974</span> * <jk>boolean</jk> <jv>aBoolean</jv> = <jv>config</jv>.get(<js>"MySection/aBoolean"</js>).asBoolean().orElse(<jk>false</jk>);<a name="line.974"></a>
+<span class="sourceLineNo">975</span> * <jk>int</jk>[] <jv>anIntArray</jv> = <jv>config</jv>.get(<js>"MySection/anIntArray"</js>).as(<jk>int</jk>[].<jk>class</jk>).orElse(<jk>null</jk>);<a name="line.975"></a>
+<span class="sourceLineNo">976</span> * URL <jv>aURL</jv> = <jv>config</jv>.get(<js>"MySection/aURL"</js>).as(URL.<jk>class</jk>).orElse(<jk>null</jk>);<a name="line.976"></a>
+<span class="sourceLineNo">977</span> * MyBean <jv>aBean</jv> = <jv>config</jv>.get(<js>"MySection/aBean"</js>).as(MyBean.<jk>class</jk>).orElse(<jk>null</jk>);<a name="line.977"></a>
+<span class="sourceLineNo">978</span> * Locale <jv>locale</jv> = <jv>config</jv>.get(<js>"MySection/locale"</js>).as(Locale.<jk>class</jk>).orElse(<jk>null</jk>);<a name="line.978"></a>
+<span class="sourceLineNo">979</span> * String <jv>path</jv> = <jv>config</jv>.get(<js>"MySection/path"</js>).orElse(<jk>null</jk>);<a name="line.979"></a>
+<span class="sourceLineNo">980</span> * String <jv>mainClass</jv> = <jv>config</jv>.get(<js>"MySection/mainClass"</js>).orElse(<jk>null</jk>);<a name="line.980"></a>
+<span class="sourceLineNo">981</span> * <jk>int</jk> <jv>sameAsAnInt</jv> = <jv>config</jv>.get(<js>"MySection/sameAsAnInt"</js>).asInteger().orElse(<jk>null</jk>);<a name="line.981"></a>
+<span class="sourceLineNo">982</span> * String <jv>myArg</jv> = <jv>config</jv>.getString(<js>"MySection/myArg"</js>);<a name="line.982"></a>
+<span class="sourceLineNo">983</span> * String <jv>firstArg</jv> = <jv>config</jv>.getString(<js>"MySection/firstArg"</js>);<a name="line.983"></a>
+<span class="sourceLineNo">984</span> * </p><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 <jk>null</jk> 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> * <p><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> * <p><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> * <h5 class='section'>Example:</h5><a name="line.1001"></a>
+<span class="sourceLineNo">1002</span> * <p class='bjava'><a name="line.1002"></a>
+<span class="sourceLineNo">1003</span> * <jc>// Get Main-Class from manifest file.</jc><a name="line.1003"></a>
+<span class="sourceLineNo">1004</span> * String <jv>mainClass</jv> = Microservice.<jsm>getManifest</jsm>().getString(<js>"Main-Class"</js>, <js>"unknown"</js>);<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span> *<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span> * <jc>// Get Rest-Resources from manifest file.</jc><a name="line.1006"></a>
+<span class="sourceLineNo">1007</span> * String[] <jv>restResources</jv> = Microservice.<jsm>getManifest</jsm>().getStringArray(<js>"Rest-Resources"</js>);<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span> * </p><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 <jk>null</jk> 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> * <p><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> * <ul class='javatree'><a name="line.1021"></a>
+<span class="sourceLineNo">1022</span> * <li class='jm'>{@link Builder#vars(Class...)}<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span> * <li class='jm'>{@link Builder#varBean(Class,Object)}<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span> * </ul><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 <jk>null</jk> 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> * <br>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 <jk>true</jk> if the command returned <jk>true</jk> 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> * <p><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 <jk>null</jk>.<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<String> 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> * <p><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> * <p><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> * <p><a name="line.1119"></a>
-<span class="sourceLineNo">1120</span> * Ignored if <js>"Console/enabled"</js> is <jk>false</jk>.<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 <c>System.exit(2);</c>.<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<String,ConsoleCommand> 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> * <p><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 <jk>null</jk>.<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> * <p><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 <jk>null</jk>.<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> * <p><a name="line.1179"></a>
+<span class="sourceLineNo">1180</span> * Ignored if <js>"Console/enabled"</js> is <jk>false</jk>.<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> * <p><a name="line.1196"></a>
+<span class="sourceLineNo">1197</span> * Ignored if <js>"Console/enabled"</js> is <jk>false</jk>.<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> * <p><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> * <ul class='spaced-list'><a name="line.32"></a>
+<span class="sourceLineNo">033</span> * <li><a name="line.33"></a>
+<span class="sourceLineNo">034</span> * <c>dateFormat</c> - A {@link SimpleDateFormat} string describing the format for dates.<a name="line.34"></a>
+<span class="sourceLineNo">035</span> * <li><a name="line.35"></a>
+<span class="sourceLineNo">036</span> * <c>format</c> - A string with <c>{...}</c> replacement variables representing predefined fields.<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * <li><a name="line.37"></a>
+<span class="sourceLineNo">038</span> * <c>useStackTraceHashes</c> - 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> * </ul><a name="line.40"></a>
+<span class="sourceLineNo">041</span> *<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * <p><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<String,AtomicInteger> 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<String,Integer> 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. <js>"[{date} {level}] {msg}%n"</js><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> * <ol><a name="line.59"></a>
+<span class="sourceLineNo">060</span> * <li><js>"{date}"</js> - The date, formatted per <js>"Logging/dateFormat"</js>.<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * <li><js>"{class}"</js> - The class name.<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * <li><js>"{method}"</js> - The method name.<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * <li><js>"{logger}"</js> - The logger name.<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * <li><js>"{level}"</js> - The log level name.<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * <li><js>"{msg}"</js> - The log message.<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * <li><js>"{threadid}"</js> - The thread ID.<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * <li><js>"{exception}"</js> - The localized exception message.<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * </ol><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. <js>"yyyy.MM.dd hh:mm:ss"</js>.<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * @param useStackTraceHashes<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * If <jk>true</jk>, 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<>();<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span> fieldIndexes = new HashMap<>();<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 < 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> * <ul><a name="line.210"></a>
+<span class="sourceLineNo">211</span> * <li><js>"date"</js><a name="line.211"></a>
+<span class="sourceLineNo">212</span> * <li><js>"class"</js><a name="line.212"></a>
+<span class="sourceLineNo">213</span> * <li><js>"method"</js><a name="line.213"></a>
+<span class="sourceLineNo">214</span> * <li><js>"logger"</js><a name="line.214"></a>
+<span class="sourceLineNo">215</span> * <li><js>"level"</js><a name="line.215"></a>
+<span class="sourceLineNo">216</span> * <li><js>"msg"</js><a name="line.216"></a>
+<span class="sourceLineNo">217</span> * <li><js>"threadid"</js><a name="line.217"></a>
+<span class="sourceLineNo">218</span> * <li><js>"exception"</js><a name="line.218"></a>
+<span class="sourceLineNo">219</span> * </ul><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 <jk>null</jk> 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 && 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> * <p><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<LogParser.Entry>, Iterator<LogParser.Entry>, 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<String> 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 <jk>null</jk>, 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 <jk>null</jk>, 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<>(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<>(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 && (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 && (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<Entry> 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<String> 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 && logger.indexOf('.') > -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<>();<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("<br>");<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("<br>");<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 && 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 && 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 && ! 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 && ! 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 && ! 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('<') != -1)<a name="line.219"></a>
+<span class="sourceLineNo">220</span> return s.replaceAll("<", "&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> * <p><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<LogParser.Entry>, Iterator<LogParser.Entry>, 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<String> 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 <jk>null</jk>, 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 <jk>null</jk>, 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<>(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<>(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 && (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 && (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<Entry> 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<String> 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 && logger.indexOf('.') > -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<>();<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("<br>");<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("<br>");<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 && 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 && 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 && ! 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 && ! 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 && ! 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('<') != -1)<a name="line.219"></a>
+<span class="sourceLineNo">220</span> return s.replaceAll("<", "&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={"<h5>Folder: $RA{fullPath}</h5>"}<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("<html><body style='font-family:monospace;font-size:8pt;white-space:pre;'>");<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("<span style='color:gray'>[EMPTY]</span>");<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("<span style='color:").append(color).append("'>");<a name="line.138"></a>
+<span class="sourceLineNo">139</span> le.appendHtml(w).append("</span>");<a name="line.139"></a>
+<span class="sourceLineNo">140</span> }<a name="line.140"></a>
+<span class="sourceLineNo">141</span> w.append("</body></html>");<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={"<h5>Folder: $RA{fullPath}</h5>"}<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<Action> getActions() throws Exception {<a name="line.259"></a>
+<span class="sourceLineNo">260</span> List<Action> l = new ArrayList<>();<a name="line.260"></a>
+<span class="sourceLineNo">261</span> if (f.canRead() && ! 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&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<FileResource> 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<FileResource> s = new TreeSet<>(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<FileResource> FILE_COMPARATOR = new Comparator<FileResource>() {<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 && end == null && thread == null && 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={"<h5>Folder: $RA{fullPath}</h5>"}<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("<html><body style='font-family:monospace;font-size:8pt;white-space:pre;'>");<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("<span style='color:gray'>[EMPTY]</span>");<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("<span style='color:").append(color).append("'>");<a name="line.138"></a>
+<span class="sourceLineNo">139</span> le.appendHtml(w).append("</span>");<a name="line.139"></a>
+<span class="sourceLineNo">140</span> }<a name="line.140"></a>
+<span class="sourceLineNo">141</span> w.append("</body></html>");<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={"<h5>Folder: $RA{fullPath}</h5>"}<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<Action> getActions() throws Exception {<a name="line.259"></a>
+<span class="sourceLineNo">260</span> List<Action> l = new ArrayList<>();<a name="line.260"></a>
+<span class="sourceLineNo">261</span> if (f.canRead() && ! 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&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<FileResource> 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<FileResource> s = new TreeSet<>(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<FileResource> FILE_COMPARATOR = new Comparator<FileResource>() {<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 && end == null && thread == null && 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={"<h5>Folder: $RA{fullPath}</h5>"}<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("<html><body style='font-family:monospace;font-size:8pt;white-space:pre;'>");<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("<span style='color:gray'>[EMPTY]</span>");<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("<span style='color:").append(color).append("'>");<a name="line.138"></a>
+<span class="sourceLineNo">139</span> le.appendHtml(w).append("</span>");<a name="line.139"></a>
+<span class="sourceLineNo">140</span> }<a name="line.140"></a>
+<span class="sourceLineNo">141</span> w.append("</body></html>");<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={"<h5>Folder: $RA{fullPath}</h5>"}<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<Action> getActions() throws Exception {<a name="line.259"></a>
+<span class="sourceLineNo">260</span> List<Action> l = new ArrayList<>();<a name="line.260"></a>
+<span class="sourceLineNo">261</span> if (f.canRead() && ! 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&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<FileResource> 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<FileResource> s = new TreeSet<>(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<FileResource> FILE_COMPARATOR = new Comparator<FileResource>() {<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 && end == null && thread == null && 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(()->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<? extends HttpPartParser> 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 && ! 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<?> 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 -> x.parser(ps).schema(schema).as(cm.getElementType()).orElse(null)).forEach(x -> 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() && 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<? extends HttpPartParser> 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 && ! 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<?> 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 -> x.parser(ps).schema(schema).as(cm.getElementType()).orElse(null)).forEach(x -> 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() && 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(() -> 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<? extends HttpPartParser> 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 && ! 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<?> 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 -> x.parser(ps).schema(schema).as(cm.getElementType()).orElse(null)).forEach(x -> 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() && 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<? extends HttpPartParser> 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 && ! 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<?> 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 -> x.parser(ps).schema(schema).as(cm.getElementType()).orElse(null)).forEach(x -> 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() && 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<? extends HttpPartParser> 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 < 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 <= 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 < vars.length; j++)<a name="line.104"></a>
-<span class="sourceLineNo">105</span> if (StringUtils.isNumeric(vars[j]) && 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 -> 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<? extends HttpPartParser> 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 < 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 <= 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 < vars.length; j++)<a name="line.105"></a>
+<span class="sourceLineNo">106</span> if (StringUtils.isNumeric(vars[j]) && 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 -> 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> * <p><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> * <p class='bjava'><a name="line.36"></a>
-<span class="sourceLineNo">037</span> * <jv>opSession</jv><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}(<jv>name</jv>)<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * .{@link RequestQueryParam#as(Class) as}(<jv>type</jv>);<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * </p><a name="line.42"></a>
-<span class="sourceLineNo">043</span> *<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * <p><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> * <p><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> * <ul class='seealso'><a name="line.50"></a>
-<span class="sourceLineNo">051</span> * <li class='link'>{@doc jrs.JavaMethodParameters}<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * <li class='extlink'>{@source}<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * </ul><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 <jk>null</jk> 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(() -> 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<? extends HttpPartParser> 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 && ! 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<?> 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 -> x.parser(ps).schema(schema).as(cm.getElementType()).orElse(null)).forEach(x -> 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() && 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> * <p><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> * <p class='bjava'><a name="line.37"></a>
+<span class="sourceLineNo">038</span> * <jv>opSession</jv><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}(<jv>name</jv>)<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * .{@link RequestQueryParam#as(Class) as}(<jv>type</jv>);<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * </p><a name="line.43"></a>
+<span class="sourceLineNo">044</span> *<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * <p><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> * <p><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> * <ul class='seealso'><a name="line.51"></a>
+<span class="sourceLineNo">052</span> * <li class='link'>{@doc jrs.JavaMethodParameters}<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * <li class='extlink'>{@source}<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * </ul><a name="line.54"></a>
+<span class="sourceLineNo">055</span> */<a name="line.55"></a>
+<span class="sourceLineNo">056</span>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 <jk>null</jk> 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(() -> 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<? extends HttpPartParser> 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 && ! 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<?> 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 -> x.parser(ps).schema(schema).as(cm.getElementType()).orElse(null)).forEach(x -> 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() && 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> * <h5 class='section'>Examples:</h5><a name="line.145"></a>
-<span class="sourceLineNo">146</span> * <p class='bjava'><a name="line.146"></a>
-<span class="sourceLineNo">147</span> * <jv>request</jv><a name="line.147"></a>
-<span class="sourceLineNo">148</span> * .getFormParam(<js>"foo"</js>)<a name="line.148"></a>
-<span class="sourceLineNo">149</span> * .assertString().contains(<js>"bar"</js>);<a name="line.149"></a>
-<span class="sourceLineNo">150</span> * </p><a name="line.150"></a>
-<span class="sourceLineNo">151</span> *<a name="line.151"></a>
-<span class="sourceLineNo">152</span> * <p><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> * <p class='bjava'><a name="line.154"></a>
-<span class="sourceLineNo">155</span> * String <jv>foo</jv> = <jv>request</jv><a name="line.155"></a>
-<span class="sourceLineNo">156</span> * .getFormParam(<js>"foo"</js>)<a name="line.156"></a>
-<span class="sourceLineNo">157</span> * .assertString().contains(<js>"bar"</js>)<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * .asString().get();<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * </p><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<RequestFormParam> assertString() {<a name="line.163"></a>
-<span class="sourceLineNo">164</span> return new FluentStringAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <p class='bjava'><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <jv>request</jv><a name="line.172"></a>
-<span class="sourceLineNo">173</span> * .getFormParam(<js>"age"</js>)<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * .assertInteger().isGreaterThan(1);<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * </p><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<RequestFormParam> assertInteger() {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> return new FluentIntegerAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p class='bjava'><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * <jv>request</jv><a name="line.188"></a>
-<span class="sourceLineNo">189</span> * .getFormParam(<js>"length"</js>)<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * .assertLong().isLessThan(100000);<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * </p><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<RequestFormParam> assertLong() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span> return new FluentLongAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.202"></a>
-<span class="sourceLineNo">203</span> * <p class='bjava'><a name="line.203"></a>
-<span class="sourceLineNo">204</span> * <jv>request</jv><a name="line.204"></a>
-<span class="sourceLineNo">205</span> * .getFormParam(<js>"time"</js>)<a name="line.205"></a>
-<span class="sourceLineNo">206</span> * .assertDate().isAfterNow();<a name="line.206"></a>
-<span class="sourceLineNo">207</span> * </p><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<RequestFormParam> assertDate() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span> return new FluentZonedDateTimeAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.218"></a>
-<span class="sourceLineNo">219</span> * <p class='bjava'><a name="line.219"></a>
-<span class="sourceLineNo">220</span> * <jv>request</jv><a name="line.220"></a>
-<span class="sourceLineNo">221</span> * .getFormParam(<js>"allow"</js>)<a name="line.221"></a>
-<span class="sourceLineNo">222</span> * .assertCsvArray().contains(<js>"GET"</js>);<a name="line.222"></a>
-<span class="sourceLineNo">223</span> * </p><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<String,RequestFormParam> assertCsvArray() {<a name="line.227"></a>
-<span class="sourceLineNo">228</span> return new FluentListAssertion<>(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> // <FluentSetters><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> // </FluentSetters><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> * <h5 class='section'>Examples:</h5><a name="line.158"></a>
+<span class="sourceLineNo">159</span> * <p class='bjava'><a name="line.159"></a>
+<span class="sourceLineNo">160</span> * <jv>request</jv><a name="line.160"></a>
+<span class="sourceLineNo">161</span> * .getFormParam(<js>"foo"</js>)<a name="line.161"></a>
+<span class="sourceLineNo">162</span> * .assertString().contains(<js>"bar"</js>);<a name="line.162"></a>
+<span class="sourceLineNo">163</span> * </p><a name="line.163"></a>
+<span class="sourceLineNo">164</span> *<a name="line.164"></a>
+<span class="sourceLineNo">165</span> * <p><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> * <p class='bjava'><a name="line.167"></a>
+<span class="sourceLineNo">168</span> * String <jv>foo</jv> = <jv>request</jv><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * .getFormParam(<js>"foo"</js>)<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * .assertString().contains(<js>"bar"</js>)<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * .asString().get();<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * </p><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<RequestFormParam> assertString() {<a name="line.176"></a>
+<span class="sourceLineNo">177</span> return new FluentStringAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * <p class='bjava'><a name="line.184"></a>
+<span class="sourceLineNo">185</span> * <jv>request</jv><a name="line.185"></a>
+<span class="sourceLineNo">186</span> * .getFormParam(<js>"age"</js>)<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * .assertInteger().isGreaterThan(1);<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * </p><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<RequestFormParam> assertInteger() {<a name="line.192"></a>
+<span class="sourceLineNo">193</span> return new FluentIntegerAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p class='bjava'><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * <jv>request</jv><a name="line.201"></a>
+<span class="sourceLineNo">202</span> * .getFormParam(<js>"length"</js>)<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * .assertLong().isLessThan(100000);<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * </p><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<RequestFormParam> assertLong() {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> return new FluentLongAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.215"></a>
+<span class="sourceLineNo">216</span> * <p class='bjava'><a name="line.216"></a>
+<span class="sourceLineNo">217</span> * <jv>request</jv><a name="line.217"></a>
+<span class="sourceLineNo">218</span> * .getFormParam(<js>"time"</js>)<a name="line.218"></a>
+<span class="sourceLineNo">219</span> * .assertDate().isAfterNow();<a name="line.219"></a>
+<span class="sourceLineNo">220</span> * </p><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<RequestFormParam> assertDate() {<a name="line.224"></a>
+<span class="sourceLineNo">225</span> return new FluentZonedDateTimeAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.231"></a>
+<span class="sourceLineNo">232</span> * <p class='bjava'><a name="line.232"></a>
+<span class="sourceLineNo">233</span> * <jv>request</jv><a name="line.233"></a>
+<span class="sourceLineNo">234</span> * .getFormParam(<js>"allow"</js>)<a name="line.234"></a>
+<span class="sourceLineNo">235</span> * .assertCsvArray().contains(<js>"GET"</js>);<a name="line.235"></a>
+<span class="sourceLineNo">236</span> * </p><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<String,RequestFormParam> assertCsvArray() {<a name="line.240"></a>
+<span class="sourceLineNo">241</span> return new FluentListAssertion<>(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> // <FluentSetters><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> // </FluentSetters><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 <jk>null</jk>.<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 <jk>null</jk>.<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 <jk>null</jk>.<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 <jk>null</jk>.<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 <jk>null</jk>.<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 <jk>null</jk>.<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 <jk>null</jk>.<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 <jk>null</jk>.<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 <jk>null</jk>.<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 <jk>null</jk>.<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> * <h5 class='section'>Examples:</h5><a name="line.218"></a>
-<span class="sourceLineNo">219</span> * <p class='bjava'><a name="line.219"></a>
-<span class="sourceLineNo">220</span> * <jv>request</jv><a name="line.220"></a>
-<span class="sourceLineNo">221</span> * .getHeader(<js>"foo"</js>)<a name="line.221"></a>
-<span class="sourceLineNo">222</span> * .assertString().contains(<js>"bar"</js>);<a name="line.222"></a>
-<span class="sourceLineNo">223</span> * </p><a name="line.223"></a>
-<span class="sourceLineNo">224</span> *<a name="line.224"></a>
-<span class="sourceLineNo">225</span> * <p><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> * <p class='bjava'><a name="line.227"></a>
-<span class="sourceLineNo">228</span> * String <jv>foo</jv> = <jv>request</jv><a name="line.228"></a>
-<span class="sourceLineNo">229</span> * .getHeader(<js>"foo"</js>)<a name="line.229"></a>
-<span class="sourceLineNo">230</span> * .assertString().contains(<js>"bar"</js>)<a name="line.230"></a>
-<span class="sourceLineNo">231</span> * .asString().get();<a name="line.231"></a>
-<span class="sourceLineNo">232</span> * </p><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<RequestHeader> assertString() {<a name="line.236"></a>
-<span class="sourceLineNo">237</span> return new FluentStringAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.243"></a>
-<span class="sourceLineNo">244</span> * <p class='bjava'><a name="line.244"></a>
-<span class="sourceLineNo">245</span> * <jv>request</jv><a name="line.245"></a>
-<span class="sourceLineNo">246</span> * .getHeader(<js>"age"</js>)<a name="line.246"></a>
-<span class="sourceLineNo">247</span> * .assertInteger().isGreaterThan(1);<a name="line.247"></a>
-<span class="sourceLineNo">248</span> * </p><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<RequestHeader> assertInteger() {<a name="line.252"></a>
-<span class="sourceLineNo">253</span> return new FluentIntegerAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.259"></a>
-<span class="sourceLineNo">260</span> * <p class='bjava'><a name="line.260"></a>
-<span class="sourceLineNo">261</span> * <jv>request</jv><a name="line.261"></a>
-<span class="sourceLineNo">262</span> * .getHeader(<js>"length"</js>)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> * .assertLong().isLessThan(100000);<a name="line.263"></a>
-<span class="sourceLineNo">264</span> * </p><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<RequestHeader> assertLong() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span> return new FluentLongAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.275"></a>
-<span class="sourceLineNo">276</span> * <p class='bjava'><a name="line.276"></a>
-<span class="sourceLineNo">277</span> * <jv>request</jv><a name="line.277"></a>
-<span class="sourceLineNo">278</span> * .getHeader(<js>"time"</js>)<a name="line.278"></a>
-<span class="sourceLineNo">279</span> * .assertDate().isAfterNow();<a name="line.279"></a>
-<span class="sourceLineNo">280</span> * </p><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<RequestHeader> assertDate() {<a name="line.284"></a>
-<span class="sourceLineNo">285</span> return new FluentZonedDateTimeAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.291"></a>
-<span class="sourceLineNo">292</span> * <p class='bjava'><a name="line.292"></a>
-<span class="sourceLineNo">293</span> * <jv>request</jv><a name="line.293"></a>
-<span class="sourceLineNo">294</span> * .getHeader(<js>"allow"</js>)<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * .assertCsvArray().contains(<js>"GET"</js>);<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * </p><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<String,RequestHeader> assertCsvArray() {<a name="line.300"></a>
-<span class="sourceLineNo">301</span> return new FluentListAssertion<>(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 <jk>null</jk>.<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> // <FluentSetters><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 <jk>null</jk>.<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 <jk>null</jk>.<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 <jk>null</jk>.<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 <jk>null</jk>.<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 <jk>null</jk>.<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 <jk>null</jk>.<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 <jk>null</jk>.<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 <jk>null</jk>.<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 <jk>null</jk>.<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 <jk>null</jk>.<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> * <h5 class='section'>Examples:</h5><a name="line.230"></a>
+<span class="sourceLineNo">231</span> * <p class='bjava'><a name="line.231"></a>
+<span class="sourceLineNo">232</span> * <jv>request</jv><a name="line.232"></a>
+<span class="sourceLineNo">233</span> * .getHeader(<js>"foo"</js>)<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * .assertString().contains(<js>"bar"</js>);<a name="line.234"></a>
+<span class="sourceLineNo">235</span> * </p><a name="line.235"></a>
+<span class="sourceLineNo">236</span> *<a name="line.236"></a>
+<span class="sourceLineNo">237</span> * <p><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> * <p class='bjava'><a name="line.239"></a>
+<span class="sourceLineNo">240</span> * String <jv>foo</jv> = <jv>request</jv><a name="line.240"></a>
+<span class="sourceLineNo">241</span> * .getHeader(<js>"foo"</js>)<a name="line.241"></a>
+<span class="sourceLineNo">242</span> * .assertString().contains(<js>"bar"</js>)<a name="line.242"></a>
+<span class="sourceLineNo">243</span> * .asString().get();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> * </p><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<RequestHeader> assertString() {<a name="line.248"></a>
+<span class="sourceLineNo">249</span> return new FluentStringAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.255"></a>
+<span class="sourceLineNo">256</span> * <p class='bjava'><a name="line.256"></a>
+<span class="sourceLineNo">257</span> * <jv>request</jv><a name="line.257"></a>
+<span class="sourceLineNo">258</span> * .getHeader(<js>"age"</js>)<a name="line.258"></a>
+<span class="sourceLineNo">259</span> * .assertInteger().isGreaterThan(1);<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * </p><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<RequestHeader> assertInteger() {<a name="line.264"></a>
+<span class="sourceLineNo">265</span> return new FluentIntegerAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.271"></a>
+<span class="sourceLineNo">272</span> * <p class='bjava'><a name="line.272"></a>
+<span class="sourceLineNo">273</span> * <jv>request</jv><a name="line.273"></a>
+<span class="sourceLineNo">274</span> * .getHeader(<js>"length"</js>)<a name="line.274"></a>
+<span class="sourceLineNo">275</span> * .assertLong().isLessThan(100000);<a name="line.275"></a>
+<span class="sourceLineNo">276</span> * </p><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<RequestHeader> assertLong() {<a name="line.280"></a>
+<span class="sourceLineNo">281</span> return new FluentLongAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.287"></a>
+<span class="sourceLineNo">288</span> * <p class='bjava'><a name="line.288"></a>
+<span class="sourceLineNo">289</span> * <jv>request</jv><a name="line.289"></a>
+<span class="sourceLineNo">290</span> * .getHeader(<js>"time"</js>)<a name="line.290"></a>
+<span class="sourceLineNo">291</span> * .assertDate().isAfterNow();<a name="line.291"></a>
+<span class="sourceLineNo">292</span> * </p><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<RequestHeader> assertDate() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span> return new FluentZonedDateTimeAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.303"></a>
+<span class="sourceLineNo">304</span> * <p class='bjava'><a name="line.304"></a>
+<span class="sourceLineNo">305</span> * <jv>request</jv><a name="line.305"></a>
+<span class="sourceLineNo">306</span> * .getHeader(<js>"allow"</js>)<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * .assertCsvArray().contains(<js>"GET"</js>);<a name="line.307"></a>
+<span class="sourceLineNo">308</span> * </p><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<String,RequestHeader> assertCsvArray() {<a name="line.312"></a>
+<span class="sourceLineNo">313</span> return new FluentListAssertion<>(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 <jk>null</jk>.<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> // <FluentSetters><a name="line.332"></a>
<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span> // </FluentSetters><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> // </FluentSetters><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> * <h5 class='section'>Examples:</h5><a name="line.123"></a>
-<span class="sourceLineNo">124</span> * <p class='bjava'><a name="line.124"></a>
-<span class="sourceLineNo">125</span> * <jv>request</jv><a name="line.125"></a>
-<span class="sourceLineNo">126</span> * .getPathParam(<js>"foo"</js>)<a name="line.126"></a>
-<span class="sourceLineNo">127</span> * .assertString().contains(<js>"bar"</js>);<a name="line.127"></a>
-<span class="sourceLineNo">128</span> * </p><a name="line.128"></a>
-<span class="sourceLineNo">129</span> *<a name="line.129"></a>
-<span class="sourceLineNo">130</span> * <p><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> * <p class='bjava'><a name="line.132"></a>
-<span class="sourceLineNo">133</span> * String <jv>foo</jv> = <jv>request</jv><a name="line.133"></a>
-<span class="sourceLineNo">134</span> * .getPathParam(<js>"foo"</js>)<a name="line.134"></a>
-<span class="sourceLineNo">135</span> * .assertString().contains(<js>"bar"</js>)<a name="line.135"></a>
-<span class="sourceLineNo">136</span> * .asString().get();<a name="line.136"></a>
-<span class="sourceLineNo">137</span> * </p><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<RequestPathParam> assertString() {<a name="line.141"></a>
-<span class="sourceLineNo">142</span> return new FluentStringAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.148"></a>
-<span class="sourceLineNo">149</span> * <p class='bjava'><a name="line.149"></a>
-<span class="sourceLineNo">150</span> * <jv>request</jv><a name="line.150"></a>
-<span class="sourceLineNo">151</span> * .getPathParam(<js>"age"</js>)<a name="line.151"></a>
-<span class="sourceLineNo">152</span> * .assertInteger().isGreaterThan(1);<a name="line.152"></a>
-<span class="sourceLineNo">153</span> * </p><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<RequestPathParam> assertInteger() {<a name="line.157"></a>
-<span class="sourceLineNo">158</span> return new FluentIntegerAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * <p class='bjava'><a name="line.165"></a>
-<span class="sourceLineNo">166</span> * <jv>request</jv><a name="line.166"></a>
-<span class="sourceLineNo">167</span> * .getPathParam(<js>"length"</js>)<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * .assertLong().isLessThan(100000);<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * </p><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<RequestPathParam> assertLong() {<a name="line.173"></a>
-<span class="sourceLineNo">174</span> return new FluentLongAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.180"></a>
-<span class="sourceLineNo">181</span> * <p class='bjava'><a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <jv>request</jv><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * .getPathParam(<js>"time"</js>)<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * .assertDate().isAfterNow();<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * </p><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<RequestPathParam> assertDate() {<a name="line.189"></a>
-<span class="sourceLineNo">190</span> return new FluentZonedDateTimeAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p class='bjava'><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * <jv>request</jv><a name="line.198"></a>
-<span class="sourceLineNo">199</span> * .getPathParam(<js>"allow"</js>)<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * .assertCsvArray().contains(<js>"GET"</js>);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> * </p><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<String,RequestPathParam> assertCsvArray() {<a name="line.205"></a>
-<span class="sourceLineNo">206</span> return new FluentListAssertion<>(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> // <FluentSetters><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> // </FluentSetters><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> * <h5 class='section'>Examples:</h5><a name="line.135"></a>
+<span class="sourceLineNo">136</span> * <p class='bjava'><a name="line.136"></a>
+<span class="sourceLineNo">137</span> * <jv>request</jv><a name="line.137"></a>
+<span class="sourceLineNo">138</span> * .getPathParam(<js>"foo"</js>)<a name="line.138"></a>
+<span class="sourceLineNo">139</span> * .assertString().contains(<js>"bar"</js>);<a name="line.139"></a>
+<span class="sourceLineNo">140</span> * </p><a name="line.140"></a>
+<span class="sourceLineNo">141</span> *<a name="line.141"></a>
+<span class="sourceLineNo">142</span> * <p><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> * <p class='bjava'><a name="line.144"></a>
+<span class="sourceLineNo">145</span> * String <jv>foo</jv> = <jv>request</jv><a name="line.145"></a>
+<span class="sourceLineNo">146</span> * .getPathParam(<js>"foo"</js>)<a name="line.146"></a>
+<span class="sourceLineNo">147</span> * .assertString().contains(<js>"bar"</js>)<a name="line.147"></a>
+<span class="sourceLineNo">148</span> * .asString().get();<a name="line.148"></a>
+<span class="sourceLineNo">149</span> * </p><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<RequestPathParam> assertString() {<a name="line.153"></a>
+<span class="sourceLineNo">154</span> return new FluentStringAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.160"></a>
+<span class="sourceLineNo">161</span> * <p class='bjava'><a name="line.161"></a>
+<span class="sourceLineNo">162</span> * <jv>request</jv><a name="line.162"></a>
+<span class="sourceLineNo">163</span> * .getPathParam(<js>"age"</js>)<a name="line.163"></a>
+<span class="sourceLineNo">164</span> * .assertInteger().isGreaterThan(1);<a name="line.164"></a>
+<span class="sourceLineNo">165</span> * </p><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<RequestPathParam> assertInteger() {<a name="line.169"></a>
+<span class="sourceLineNo">170</span> return new FluentIntegerAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p class='bjava'><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * <jv>request</jv><a name="line.178"></a>
+<span class="sourceLineNo">179</span> * .getPathParam(<js>"length"</js>)<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * .assertLong().isLessThan(100000);<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * </p><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<RequestPathParam> assertLong() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span> return new FluentLongAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.192"></a>
+<span class="sourceLineNo">193</span> * <p class='bjava'><a name="line.193"></a>
+<span class="sourceLineNo">194</span> * <jv>request</jv><a name="line.194"></a>
+<span class="sourceLineNo">195</span> * .getPathParam(<js>"time"</js>)<a name="line.195"></a>
+<span class="sourceLineNo">196</span> * .assertDate().isAfterNow();<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * </p><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<RequestPathParam> assertDate() {<a name="line.201"></a>
+<span class="sourceLineNo">202</span> return new FluentZonedDateTimeAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.208"></a>
+<span class="sourceLineNo">209</span> * <p class='bjava'><a name="line.209"></a>
+<span class="sourceLineNo">210</span> * <jv>request</jv><a name="line.210"></a>
+<span class="sourceLineNo">211</span> * .getPathParam(<js>"allow"</js>)<a name="line.211"></a>
+<span class="sourceLineNo">212</span> * .assertCsvArray().contains(<js>"GET"</js>);<a name="line.212"></a>
+<span class="sourceLineNo">213</span> * </p><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<String,RequestPathParam> assertCsvArray() {<a name="line.217"></a>
+<span class="sourceLineNo">218</span> return new FluentListAssertion<>(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> // <FluentSetters><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> // </FluentSetters><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> * <h5 class='section'>Examples:</h5><a name="line.123"></a>
-<span class="sourceLineNo">124</span> * <p class='bjava'><a name="line.124"></a>
-<span class="sourceLineNo">125</span> * <jv>request</jv><a name="line.125"></a>
-<span class="sourceLineNo">126</span> * .getQueryParam(<js>"foo"</js>)<a name="line.126"></a>
-<span class="sourceLineNo">127</span> * .assertString().contains(<js>"bar"</js>);<a name="line.127"></a>
-<span class="sourceLineNo">128</span> * </p><a name="line.128"></a>
-<span class="sourceLineNo">129</span> *<a name="line.129"></a>
-<span class="sourceLineNo">130</span> * <p><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> * <p class='bjava'><a name="line.132"></a>
-<span class="sourceLineNo">133</span> * String <jv>foo</jv> = <jv>request</jv><a name="line.133"></a>
-<span class="sourceLineNo">134</span> * .getQueryParam(<js>"foo"</js>)<a name="line.134"></a>
-<span class="sourceLineNo">135</span> * .assertString().contains(<js>"bar"</js>)<a name="line.135"></a>
-<span class="sourceLineNo">136</span> * .asString().get();<a name="line.136"></a>
-<span class="sourceLineNo">137</span> * </p><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<RequestQueryParam> assertString() {<a name="line.141"></a>
-<span class="sourceLineNo">142</span> return new FluentStringAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.148"></a>
-<span class="sourceLineNo">149</span> * <p class='bjava'><a name="line.149"></a>
-<span class="sourceLineNo">150</span> * <jv>request</jv><a name="line.150"></a>
-<span class="sourceLineNo">151</span> * .getQueryParam(<js>"age"</js>)<a name="line.151"></a>
-<span class="sourceLineNo">152</span> * .assertInteger().isGreaterThan(1);<a name="line.152"></a>
-<span class="sourceLineNo">153</span> * </p><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<RequestQueryParam> assertInteger() {<a name="line.157"></a>
-<span class="sourceLineNo">158</span> return new FluentIntegerAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * <p class='bjava'><a name="line.165"></a>
-<span class="sourceLineNo">166</span> * <jv>request</jv><a name="line.166"></a>
-<span class="sourceLineNo">167</span> * .getQueryParam(<js>"length"</js>)<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * .assertLong().isLessThan(100000);<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * </p><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<RequestQueryParam> assertLong() {<a name="line.173"></a>
-<span class="sourceLineNo">174</span> return new FluentLongAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.180"></a>
-<span class="sourceLineNo">181</span> * <p class='bjava'><a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <jv>request</jv><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * .getQueryParam(<js>"time"</js>)<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * .assertDate().isAfterNow();<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * </p><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<RequestQueryParam> assertDate() {<a name="line.189"></a>
-<span class="sourceLineNo">190</span> return new FluentZonedDateTimeAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p class='bjava'><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * <jv>request</jv><a name="line.198"></a>
-<span class="sourceLineNo">199</span> * .getQueryParam(<js>"allow"</js>)<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * .assertCsvArray().contains(<js>"GET"</js>);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> * </p><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<String,RequestQueryParam> assertCsvArray() {<a name="line.205"></a>
-<span class="sourceLineNo">206</span> return new FluentListAssertion<>(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> // <FluentSetters><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> // </FluentSetters><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> * <h5 class='section'>Examples:</h5><a name="line.135"></a>
+<span class="sourceLineNo">136</span> * <p class='bjava'><a name="line.136"></a>
+<span class="sourceLineNo">137</span> * <jv>request</jv><a name="line.137"></a>
+<span class="sourceLineNo">138</span> * .getQueryParam(<js>"foo"</js>)<a name="line.138"></a>
+<span class="sourceLineNo">139</span> * .assertString().contains(<js>"bar"</js>);<a name="line.139"></a>
+<span class="sourceLineNo">140</span> * </p><a name="line.140"></a>
+<span class="sourceLineNo">141</span> *<a name="line.141"></a>
+<span class="sourceLineNo">142</span> * <p><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> * <p class='bjava'><a name="line.144"></a>
+<span class="sourceLineNo">145</span> * String <jv>foo</jv> = <jv>request</jv><a name="line.145"></a>
+<span class="sourceLineNo">146</span> * .getQueryParam(<js>"foo"</js>)<a name="line.146"></a>
+<span class="sourceLineNo">147</span> * .assertString().contains(<js>"bar"</js>)<a name="line.147"></a>
+<span class="sourceLineNo">148</span> * .asString().get();<a name="line.148"></a>
+<span class="sourceLineNo">149</span> * </p><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<RequestQueryParam> assertString() {<a name="line.153"></a>
+<span class="sourceLineNo">154</span> return new FluentStringAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.160"></a>
+<span class="sourceLineNo">161</span> * <p class='bjava'><a name="line.161"></a>
+<span class="sourceLineNo">162</span> * <jv>request</jv><a name="line.162"></a>
+<span class="sourceLineNo">163</span> * .getQueryParam(<js>"age"</js>)<a name="line.163"></a>
+<span class="sourceLineNo">164</span> * .assertInteger().isGreaterThan(1);<a name="line.164"></a>
+<span class="sourceLineNo">165</span> * </p><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<RequestQueryParam> assertInteger() {<a name="line.169"></a>
+<span class="sourceLineNo">170</span> return new FluentIntegerAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p class='bjava'><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * <jv>request</jv><a name="line.178"></a>
+<span class="sourceLineNo">179</span> * .getQueryParam(<js>"length"</js>)<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * .assertLong().isLessThan(100000);<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * </p><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<RequestQueryParam> assertLong() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span> return new FluentLongAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.192"></a>
+<span class="sourceLineNo">193</span> * <p class='bjava'><a name="line.193"></a>
+<span class="sourceLineNo">194</span> * <jv>request</jv><a name="line.194"></a>
+<span class="sourceLineNo">195</span> * .getQueryParam(<js>"time"</js>)<a name="line.195"></a>
+<span class="sourceLineNo">196</span> * .assertDate().isAfterNow();<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * </p><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<RequestQueryParam> assertDate() {<a name="line.201"></a>
+<span class="sourceLineNo">202</span> return new FluentZonedDateTimeAssertion<>(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> * <h5 class='section'>Examples:</h5><a name="line.208"></a>
+<span class="sourceLineNo">209</span> * <p class='bjava'><a name="line.209"></a>
+<span class="sourceLineNo">210</span> * <jv>request</jv><a name="line.210"></a>
+<span class="sourceLineNo">211</span> * .getQueryParam(<js>"allow"</js>)<a name="line.211"></a>
+<span class="sourceLineNo">212</span> * .assertCsvArray().contains(<js>"GET"</js>);<a name="line.212"></a>
+<span class="sourceLineNo">213</span> * </p><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<String,RequestQueryParam> assertCsvArray() {<a name="line.217"></a>
+<span class="sourceLineNo">218</span> return new FluentListAssertion<>(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> // <FluentSetters><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> // </FluentSetters><a name="line.234"></a>
+<span class="sourceLineNo">235</span>}<a name="line.235"></a>