This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new 69814d9  Update Javadocs.
69814d9 is described below

commit 69814d9ec2b14ccb5d3c6992057df7adc5937579
Author: JamesBognar <jamesbog...@apache.org>
AuthorDate: Sun Feb 4 19:02:38 2018 -0500

    Update Javadocs.
---
 .../java/org/apache/juneau/dto/LinkString.java     |   1 +
 .../org/apache/juneau/html/HtmlParserSession.java  |   1 +
 .../apache/juneau/html/HtmlSerializerSession.java  |   1 +
 .../juneau/html/{ => annotation}/HtmlLink.java     |   4 +-
 .../javadoc/doc-files/PredefinedLabelBeans.1.png   | Bin 0 -> 23665 bytes
 .../javadoc/doc-files/PredefinedLabelBeans.2.png   | Bin 0 -> 72375 bytes
 .../javadoc/doc-files/PredefinedLabelBeans.3.png   | Bin 0 -> 7975 bytes
 .../src/main/javadoc/doc-files/Stylesheets.1.png   | Bin 0 -> 26898 bytes
 .../src/main/javadoc/doc-files/Stylesheets.2.png   | Bin 0 -> 347467 bytes
 .../src/main/javadoc/doc-files/Stylesheets.3.png   | Bin 0 -> 317232 bytes
 .../main/javadoc/doc-files/UiCustomization.1.png   | Bin 0 -> 278647 bytes
 .../main/javadoc/doc-files/UiCustomization.2.png   | Bin 0 -> 7196 bytes
 .../main/javadoc/doc-files/UiCustomization.3.png   | Bin 0 -> 6957 bytes
 juneau-doc/src/main/javadoc/overview.html          | 389 +++++++++++++++++++--
 .../src/main/javadoc/resources/juneau-doc.css      |   2 +-
 .../examples/rest/PredefinedLabelsResource.java    |  77 ++++
 .../apache/juneau/examples/rest/RootResources.java |   1 +
 .../juneau/microservice/ResourceJenaGroup.java     |   3 +-
 .../org/apache/juneau/rest/HtmlDocBuilder.java     | 298 +++++++++-------
 .../java/org/apache/juneau/rest/RestContext.java   |   5 +
 .../org/apache/juneau/rest/RestServletDefault.java |   2 +-
 .../org/apache/juneau/rest/annotation/HtmlDoc.java | 105 +++---
 .../apache/juneau/rest/annotation/RestMethod.java  |   2 +-
 .../juneau/rest/annotation/RestResource.java       |   5 +
 .../apache/juneau/rest/labels/BeanDescription.java |   2 +
 .../apache/juneau/rest/labels/NameDescription.java |  10 +-
 .../apache/juneau/rest/widget/StyleMenuItem.java   |   4 +-
 .../java/org/apache/juneau/rest/widget/Widget.java |   6 +-
 28 files changed, 672 insertions(+), 246 deletions(-)

diff --git 
a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/LinkString.java 
b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/LinkString.java
index 111665f..0bb04d6 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/LinkString.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/LinkString.java
@@ -17,6 +17,7 @@ import static org.apache.juneau.internal.StringUtils.*;
 import java.text.*;
 
 import org.apache.juneau.html.*;
+import org.apache.juneau.html.annotation.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.utils.*;
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
index b1d2779..e4f22d3 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
@@ -22,6 +22,7 @@ import java.util.*;
 import javax.xml.stream.*;
 
 import org.apache.juneau.*;
+import org.apache.juneau.html.annotation.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.transform.*;
 import org.apache.juneau.xml.*;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
index 75cfbf5..912b6f5 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
@@ -21,6 +21,7 @@ import java.util.*;
 import java.util.regex.*;
 
 import org.apache.juneau.*;
+import org.apache.juneau.html.annotation.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.transform.*;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlLink.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java
similarity index 95%
rename from 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlLink.java
rename to 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java
index 716ff0a..735e970 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlLink.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java
@@ -10,13 +10,15 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
 // * specific language governing permissions and limitations under the 
License.                                              *
 // 
***************************************************************************************************************************
-package org.apache.juneau.html;
+package org.apache.juneau.html.annotation;
 
 import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
 
 import java.lang.annotation.*;
 
+import org.apache.juneau.html.*;
+
 /**
  * Used in conjunction with the {@link HtmlSerializer} class to define 
hyperlinks.
  * 
diff --git a/juneau-doc/src/main/javadoc/doc-files/PredefinedLabelBeans.1.png 
b/juneau-doc/src/main/javadoc/doc-files/PredefinedLabelBeans.1.png
new file mode 100644
index 0000000..76a85e2
Binary files /dev/null and 
b/juneau-doc/src/main/javadoc/doc-files/PredefinedLabelBeans.1.png differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/PredefinedLabelBeans.2.png 
b/juneau-doc/src/main/javadoc/doc-files/PredefinedLabelBeans.2.png
new file mode 100644
index 0000000..9a56c43
Binary files /dev/null and 
b/juneau-doc/src/main/javadoc/doc-files/PredefinedLabelBeans.2.png differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/PredefinedLabelBeans.3.png 
b/juneau-doc/src/main/javadoc/doc-files/PredefinedLabelBeans.3.png
new file mode 100644
index 0000000..0ccbc37
Binary files /dev/null and 
b/juneau-doc/src/main/javadoc/doc-files/PredefinedLabelBeans.3.png differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/Stylesheets.1.png 
b/juneau-doc/src/main/javadoc/doc-files/Stylesheets.1.png
new file mode 100644
index 0000000..ab4d89f
Binary files /dev/null and 
b/juneau-doc/src/main/javadoc/doc-files/Stylesheets.1.png differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/Stylesheets.2.png 
b/juneau-doc/src/main/javadoc/doc-files/Stylesheets.2.png
new file mode 100644
index 0000000..34fb4a1
Binary files /dev/null and 
b/juneau-doc/src/main/javadoc/doc-files/Stylesheets.2.png differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/Stylesheets.3.png 
b/juneau-doc/src/main/javadoc/doc-files/Stylesheets.3.png
new file mode 100644
index 0000000..f2f8e87
Binary files /dev/null and 
b/juneau-doc/src/main/javadoc/doc-files/Stylesheets.3.png differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/UiCustomization.1.png 
b/juneau-doc/src/main/javadoc/doc-files/UiCustomization.1.png
new file mode 100644
index 0000000..d058fba
Binary files /dev/null and 
b/juneau-doc/src/main/javadoc/doc-files/UiCustomization.1.png differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/UiCustomization.2.png 
b/juneau-doc/src/main/javadoc/doc-files/UiCustomization.2.png
new file mode 100644
index 0000000..a2a6a07
Binary files /dev/null and 
b/juneau-doc/src/main/javadoc/doc-files/UiCustomization.2.png differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/UiCustomization.3.png 
b/juneau-doc/src/main/javadoc/doc-files/UiCustomization.3.png
new file mode 100644
index 0000000..e196d1a
Binary files /dev/null and 
b/juneau-doc/src/main/javadoc/doc-files/UiCustomization.3.png differ
diff --git a/juneau-doc/src/main/javadoc/overview.html 
b/juneau-doc/src/main/javadoc/overview.html
index 18d8491..5f1bcd6 100644
--- a/juneau-doc/src/main/javadoc/overview.html
+++ b/juneau-doc/src/main/javadoc/overview.html
@@ -4495,7 +4495,7 @@
                                Extensive listener APIs.
                </ul>
                
-               <h5 class='topic'>Example:</h5>
+               <h5 class='figure'>Example:</h5>
                <p class='bcode'>
        <cc>#--------------------------</cc>
        <cc># My section</cc>
@@ -6264,7 +6264,8 @@
                                </p>
                                <p class='bcode'>
        <jk>public class</jk> IsAdminMatcher <jk>extends</jk> RestMatcher {
-               <ja>@Override</ja>
+
+               <ja>@Override</ja> <jc>/* RestMatcher */</jc>
                <jk>public boolean</jk> matches(RestRequest req) {
                        <jk>return</jk> 
req.isUserInRole(<js>"ADMINS_GROUP"</js>);
                }
@@ -6438,6 +6439,7 @@
        
                <jd>/** Causes a 404 if POST isn't multipart/form-data */</jd>
                <jk>public static class</jk> MultipartFormDataMatcher 
<jk>extends</jk> RestMatcher {
+               
                        <ja>@Override</ja> <jc>/* RestMatcher */</jc>
                        <jk>public boolean</jk> matches(RestRequest req) {
                                String contentType = req.getContentType();
@@ -6903,7 +6905,7 @@
        <jc>// Define a guard that only lets Billy make a request</jc>
        <jk>public</jk> BillyGuard <jk>extends</jk> RestGuard {
 
-               <ja>@Override</ja>
+               <ja>@Override</ja> <jc>/* RestGuard */</jc>
                <jk>public boolean</jk> isRequestAllowed(RestRequest req) {
                        <jk>return</jk> 
req.getUserPrincipal().getName().equals(<js>"Billy"</js>);
                }
@@ -6928,7 +6930,8 @@
                        </p>
                        <p class='bcode'>
        <jk>public class</jk> AdminGuard <jk>extends</jk> RestGuard {
-               <ja>@Override</ja>
+
+               <ja>@Override</ja> <jc>/* RestGuard */</jc>
                <jk>public boolean</jk> isRequestAllowed(RestRequest req) {
                        <jk>return</jk> 
req.getUserPrincipal().isUserInRole(<js>"ADMIN"</js>);
                }
@@ -6942,7 +6945,8 @@
                        </p>
                        <p class='bcode'>
        <jk>public class</jk> AdminGuard <jk>extends</jk> RestGuard {
-               <ja>@Override</ja>
+
+               <ja>@Override</ja> <jc>/* RestGuard */</jc>
                <jk>public boolean</jk> guard(RestRequest req, RestResponse 
res) <jk>throws</jk> RestException {
                        <jk>if</jk> (! isOkay(req))
                                <jk>throw new</jk> 
RestException(<jsf>SC_FORBIDDEN</jsf>, <js>"Access denied!!!"</js>);
@@ -7013,7 +7017,7 @@
         */</jd>
        <jk>public class</jk> Traversable <jk>implements</jk> RestConverter {
        
-               <ja>@Override</ja>
+               <ja>@Override</ja> <jc>/* RestConverter */</jc>
                <jk>public</jk> Object convert(RestRequest req, Object o) 
<jk>throws</jk> RestException {
                        if (o == <jk>null</jk>)
                                <jk>return null</jk>;
@@ -7200,7 +7204,7 @@
                        <jk>super</jk>(<js>"BRACKET"</js>);
                }
                        
-               <ja>@Override</ja>
+               <ja>@Override</ja> <jc>/* Var */</jc>
                <jk>public</jk> String resolve(VarResolverSession session, 
String arg) {
                        <jk>return</jk> <js>'['</js> + arg + <js>']'</js>;
                }
@@ -7742,7 +7746,7 @@
                        <jk>super</jk>(context);
                }
 
-               <ja>@Override</ja>
+               <ja>@Override</ja> <jc>/* RestInfoProvider */</jc>
                <jk>public</jk> Swagger getSwagger(RestRequest req) 
<jk>throws</jk> RestException {
                        Swagger s = <jk>super</jk>.getSwagger(req);
                        <jc>// Made inline modifications to generated 
swagger.</jc>
@@ -7915,10 +7919,13 @@
                                <p>
                                        The <l>Widget</l> class is composed of 
the following methods:
                                </p>
-                               <ul>
-                                       <li class='jm'>{@link 
org.apache.juneau.rest.widget.Widget#getHtml(RestRequest) getHtml(RestRequest)}
-                                       <li class='jm'>{@link 
org.apache.juneau.rest.widget.Widget#getStyle(RestRequest) 
getStyle(RestRequest)}
-                                       <li class='jm'>{@link 
org.apache.juneau.rest.widget.Widget#getScript(RestRequest) 
getScript(RestRequest)}
+                               <ul class='doctree'>
+                                       <li class='jac'>{@link 
org.apache.juneau.rest.widget.Widget}
+                                       <ul>
+                                               <li class='jm'>{@link 
org.apache.juneau.rest.widget.Widget#getHtml(RestRequest) getHtml(RestRequest)}
+                                               <li class='jm'>{@link 
org.apache.juneau.rest.widget.Widget#getStyle(RestRequest) 
getStyle(RestRequest)}
+                                               <li class='jm'>{@link 
org.apache.juneau.rest.widget.Widget#getScript(RestRequest) 
getScript(RestRequest)}
+                                       </ul>
                                </ul>
                                <p>
                                        The HTML content returned by the {@link 
org.apache.juneau.rest.widget.Widget#getHtml(RestRequest) getHtml(RestRequest)}
@@ -7941,13 +7948,13 @@
                                <p class='bcode'>
        <jk>public class</jk> MyWidget <jk>extends</jk> Widget {
 
-               <ja>@Override</ja>
+               <ja>@Override</ja> <jc>/* Widget */</jc>
                <jk>public</jk> String getHtml(RestRequest req) <jk>throws</jk> 
Exception {
                        UriResolver r = req.getUriResolver(); <jc>// API used 
for resolving URIs.</jc>
                        <jk>return</jk> <js>"&lt;img class='myimage' 
onclick='myalert(this)' 
src='"</js>+r.resolve(<js>"servlet:/htdocs/myimage.png"</js>)+<js>"'&gt;"</js>;
                }
 
-               <ja>@Override</ja>
+               <ja>@Override</ja> <jc>/* Widget */</jc>
                <jk>public</jk> String getScript(RestRequest req) 
<jk>throws</jk> Exception {
                        <jk>return</jk> <js>""</js>
                                + <js>"\n function myalert(imageElement) {"</js>
@@ -7955,7 +7962,7 @@
                                + <js>"\n }"</js>;
                }
 
-               <ja>@Override</ja>
+               <ja>@Override</ja> <jc>/* Widget */</jc>
                <jk>public</jk> String getStyle(RestRequest req) 
<jk>throws</jk> Exception {
                        <jk>return</jk> <js>""</js>
                                + <js>"\n .myimage {"</js>
@@ -7968,24 +7975,27 @@
                                        The <l>Widget</l> class also defines 
the following two convenience methods for loading Javascript and CSS
                                        files from the classpath or file system.
                                </p>
-                               <ul>
-                                       <li class='jm'>{@link 
org.apache.juneau.rest.widget.Widget#getClasspathResourceAsString(String) 
getClasspathResourceAsString(String)}
-                                       <li class='jm'>{@link 
org.apache.juneau.rest.widget.Widget#getClasspathResourceAsString(String,Locale)
 getClasspathResourceAsString(String,Locale)}
+                               <ul class='doctree'>
+                                       <li class='jac'>{@link 
org.apache.juneau.rest.widget.Widget}
+                                       <ul>
+                                               <li class='jm'>{@link 
org.apache.juneau.rest.widget.Widget#getClasspathResourceAsString(String) 
getClasspathResourceAsString(String)}
+                                               <li class='jm'>{@link 
org.apache.juneau.rest.widget.Widget#getClasspathResourceAsString(String,Locale)
 getClasspathResourceAsString(String,Locale)}
+                                       </ul>
                                </ul>
-                               <h5 class='section'>Example:</h5>
+                               <h5 class='figure'>Example:</h5>
                                <p class='bcode'>
        <jk>public class</jk> MyWidget <jk>extends</jk> Widget {
 
                ...
 
-               <ja>@Override</ja>
+               <ja>@Override</ja> <jc>/* Widget */</jc>
                <jk>public</jk> String getScript(RestRequest req) 
<jk>throws</jk> Exception {
-                       <jk>return</jk> 
getResourceAsString(<js>"MyWidget.js"</js>);
+                       <jk>return</jk> 
getClasspathResourceAsString(<js>"MyWidget.js"</js>);
                }
 
-               <ja>@Override</ja>
+               <ja>@Override</ja> <jc>/* Widget */</jc>
                <jk>public</jk> String getStyle(RestRequest req) 
<jk>throws</jk> Exception {
-                       <jk>return</jk> 
getResourceAsString(<js>"MyWidget.css"</js>);
+                       <jk>return</jk> 
getClasspathResourceAsString(<js>"MyWidget.css"</js>);
                }
        }
                                </p>
@@ -7999,14 +8009,231 @@
                        <a id="juneau-rest-server.UiCustomization"></a>
                        <h4 class='topic' onclick='toggle(this)'>3.1.24.2 - UI 
Customization</h4>
                        <div class='topic'>
-                               TODO
+                               <p>
+                                       The HTML views of POJOs can somewhat be 
considered a rudimentary User Interface.
+                                       <br>In reality, a better term for them 
would be a Developer Interface as they're meant to be used 
+                                       primarily by developers and not end 
users.
+                                       <br>Despite that distinction, it is 
possible to 'brand' the HTML page to whatever you desire.
+                               </p>
+                               <p>
+                                       The sample root page below includes 
some default branding for Juneau and Apache:
+                               </p>
+                               <img class='bordered' 
src='doc-files/UiCustomization.1.png' style='width:800px'/>
+                               <p>
+                                       In particular, you may want to replace 
these icons:
+                               </p>
+                               <img class='bordered' 
src='doc-files/UiCustomization.2.png'/>
+                               <img class='bordered' 
src='doc-files/UiCustomization.3.png'/>
+                               <p>
+                                       The Juneau REST framework does not 
provide specific branding support (i.e. there is no concept of a brand icon).
+                                       <br>Instead, it just uses the existing 
open-ended API for defining branding.
+                               </p>
+                               <p>
+                                       The Juneau icon shown is a result of 
the header annotation on the {@link org.apache.juneau.rest.RestServletDefault} 
class:
+                               </p>    
+                               <p class='bcode'>                       
+       <ja>@RestResource</ja>(
+               ...
+               htmldoc=<ja>@HtmlDoc</ja>(
+                       header={
+                               
<js>"&lt;h1&gt;$R{resourceTitle}&lt;/h1&gt;"</js>,
+                               
<js>"&lt;h2&gt;$R{methodSummary,resourceDescription}&lt;/h2&gt;"</js>,
+                               <js>"&lt;a 
href='http://juneau.apache.org'&gt;"</js>
+                                       +<js>"&lt;img 
src='$U{servlet:/htdocs/juneau.png}' 
style='position:absolute;top:5;right:5;background-color:transparent;height:30px'/&gt;"</js>
+                               +<js>"&lt;/a&gt;"</js>
+                       },
+                       head={
+                               <jc>// Browser tab icon.</jc>
+                               <js>"&lt;link rel='icon' 
href='$U{servlet:/htdocs/juneau.png}'/&gt;"</js>
+                       }
+               ),
+               staticFiles={<js>"htdocs:htdocs"</js>}
+       )
+       <jk>public abstract class</jk> RestServletDefault <jk>extends</jk> 
RestServlet {...}
+                               </p>
+                               <p>
+                                       The <js>"juneau.png"</js> image file is 
located in <code>org.apache.juneau.rest.htdocs</code> package and 
+                                       is served up via the 
<code>staticFiles</code> annotation (i.e. anything in the 
<code>org.apache.juneau.rest.htdocs</code> 
+                                       package is served up under the path 
<code>/servlet-path/htdocs</code>).  
+                                       <br>Then we just reference using a URI 
resolution variable <js>"$U{servlet:/htdocs/juneau.png}"</js>.
+                               </p>
+                               <p>
+                                       To change this image, you can extend 
the <l>RestServletDefault</l> class and simply override the annotations
+                                       pointing to your own icon.
+                               </p>
+                               <p class='bcode'>                       
+       <ja>@RestResource</ja>(
+               ...
+               htmldoc=<ja>@HtmlDoc</ja>(
+                       header={
+                               
<js>"&lt;h1&gt;$R{resourceTitle}&lt;/h1&gt;"</js>,
+                               
<js>"&lt;h2&gt;$R{methodSummary,resourceDescription}&lt;/h2&gt;"</js>,
+                               <js>"&lt;a 
href='http://my.project.org'&gt;"</js>
+                                       +<js>"&lt;img 
src='$U{servlet:/my-htdocs/my-project.png}' 
style='position:absolute;top:5;right:5;background-color:transparent;height:30px'/&gt;"</js>
+                               +<js>"&lt;/a&gt;"</js>
+                       },
+                       head={
+                               <jc>// Browser tab icon.</jc>
+                               <js>"&lt;link rel='icon' 
href='$U{servlet:/my-htdocs/my-project.png}'/&gt;"</js>
+                       }
+               ),
+               staticFiles={<js>"my-htdocs:my-htdocs"</js>}
+       )
+       <jk>public class</jk> MyResourceBaseClass <jk>extends</jk> 
RestServletDefault {...}
+                               </p>
+                               <p>
+                                       The footer icon shown is generated by a 
predefined widget:
+                               </p>
+                               <p class='bcode'>
+       <ja>@RestResource</ja>(
+               htmldoc=<ja>@HtmlDoc</ja>(
+                       widgets={
+                               PoweredByApache.<jk>class</jk>
+                       },
+                       footer=<js>"$W{PoweredByApache}"</js>
+               ),
+               ...
+       )
+       <jk>public class</jk> RootResources <jk>extends</jk> ResourceJenaGroup 
{...}
+                               </p>                    
+                               <p>
+                                       The widget definition is shown below:
+                               </p>
+                               <p class='bcode'>
+       <jk>public class</jk> PoweredByApache <jk>extends</jk> Widget {
+       
+               <jd>/**
+                * Returns an Apache image tag hyperlinked to 
<js>"http://apache.org";</js>
+                */</jd>
+               <ja>@Override</ja> <jc>/* Widget */</jc>
+               <jk>public</jk> String getHtml(RestRequest req) <jk>throws</jk> 
Exception {
+                       UriResolver r = req.getUriResolver();
+                       <jk>return</jk> <js>"&lt;a 
href='http://apache.org'&gt;&lt;img 
style='float:right;padding-right:20px;height:32px' 
src='"</js>+r.resolve(<js>"servlet:/htdocs/asf.png"</js>)+<js>"'&gt;"</js>;
+               }
+       }
+                               </p>
+                               <p>
+                                       To provide your own footer icon, simply 
define it in your own footer section:
+                               </p>
+                               <p class='bcode'>
+       <ja>@RestResource</ja>(
+               htmldoc=<ja>@HtmlDoc</ja>(
+                       footer=<js>"&lt;img 
style='float:right;padding-right:20px;height:32px' 
src='$U{servlet:/my-htdocs/my-project.png}'&gt;"</js>
+               ),
+               staticFiles={<js>"my-htdocs:my-htdocs"</js>}
+               ...
+       )
+       <jk>public class</jk> MyResourceBaseClass <jk>extends</jk> 
RestServletDefault {...}
+                               </p>
+                               <p>
+                                       Note how the "User Interface" is 
open-ended to pretty much lets you do whatever you want.
+                               </p>
                        </div>
 
                        <!-- 
========================================================================================================
 -->
                        <a id="juneau-rest-server.Stylesheets"></a>
                        <h4 class='topic' onclick='toggle(this)'>3.1.24.3 - 
Stylesheets</h4>
                        <div class='topic'>
-                               TODO
+                               <p>
+                                       The sample root page renders in the 
default "devops" look-and-feel:
+                               </p>
+                               <img class='bordered' 
src='doc-files/UiCustomization.1.png' style='width:800px'/>
+                               <p>
+                                       The sample root page provides a 
dropdown widget to try out the other default look-and-feels:
+                               </p>
+                               <img class='bordered' 
src='doc-files/Stylesheets.1.png'/>
+                               <p>
+                                       For example, the "light" look-and-feel:
+                               </p>
+                               <img class='bordered' 
src='doc-files/Stylesheets.2.png' style='width:800px'/>
+                               <p>
+                                       And the "dark" look-and-feel:
+                               </p>
+                               <img class='bordered' 
src='doc-files/Stylesheets.3.png' style='width:800px'/>
+                               <p>
+                                       The stylesheet URL is controlled by the 
{@link org.apache.juneau.rest.annotation.HtmlDoc#stylesheet() 
@HtmlDoc.stylesheet()} annotation.
+                                       <br>The {@link 
org.apache.juneau.rest.RestServletDefault} class defines the stylesheet served 
up as a static file:
+                               <p class='bcode'>
+       <ja>@RestResource</ja>(
+               htmldoc=<ja>@HtmlDoc</ja>(
+                       
stylesheet=<js>"$C{REST/stylesheet,servlet:/styles/devops.css}"</js>,
+               ),
+       
+               staticFiles={<js>"styles:styles"</js>}
+       )
+       <jk>public abstract class</jk> RestServletDefault <jk>extends</jk> 
RestServlet {...}
+                               </p>            
+                               <p>
+                                       The 
<js>"$C{REST/stylesheet,servlet:/styles/devops.css}"</js> variable says to use 
the URI defined
+                                       in your servlet's config file, if there 
is one, and to default to serving up the file
+                                       
<code>org/apache/juneau/rest/styles/devops.css</code>.
+                               </p>
+                               <p>
+                                       To provide your own stylesheet, simply 
override the stylesheet attribute and point to a different
+                                       file:   
+                               </p>
+                               <p class='bcode'>
+       <ja>@RestResource</ja>(
+               htmldoc=<ja>@HtmlDoc</ja>(
+                       stylesheet=<js>"servlet:/my-styles/my-style.css}"</js>,
+               ),
+               staticFiles={<js>"my-styles:my-styles"</js>}
+       )
+       <jk>public class</jk> MyResourceBaseClass <jk>extends</jk> 
RestServletDefault {...}
+                               </p>
+                               <p>
+                                       You can try out different stylesheets 
by passing in a <code>stylesheet</code> attribute in the request
+                                       URL.
+                                       <br>The example above show this in use.
+                               </p>
+                               <p>
+                                       In case you're curious about how the 
menu item works, it's defined via a widget:
+                               </p>
+                               <p class='bcode'>
+       <ja>@RestResource</ja>(
+               htmldoc=<ja>@HtmlDoc</ja>(
+                       widgets={
+                               PoweredByApache.<jk>class</jk>,
+                               ContentTypeMenuItem.<jk>class</jk>,
+                               StyleMenuItem.<jk>class</jk>
+                       },
+                       navlinks={
+                               <js>"options: ?method=OPTIONS"</js>,
+                               <js>"$W{ContentTypeMenuItem}"</js>,
+                               <js>"$W{StyleMenuItem}"</js>,
+                               <js>"source: 
$C{Source/gitHub}/org/apache/juneau/examples/rest/$R{servletClassSimple}.java"</js>
+                       },
+       )
+       <jk>public class</jk> RootResources <jk>extends</jk> ResourceJenaGroup 
{...}
+                               </p>
+                               <p>
+                                       The <l>StyleMenuItem</l> is a widget 
that extends from {@link org.apache.juneau.rest.widget.MenuItemWidget}, a
+                                       specialized widget for creating pop-up 
menus.
+                                       <br>In the case of 
<l>StyleMenuItem</l>, it's simply returning a list of links wrapped in a div 
tag:
+                               </p>
+                               <p class='bcode'>
+       <jk>import static</jk> org.apache.juneau.dto.html5.HtmlBuilder.*;
+
+       <jk>public class</jk> StyleMenuItem <jk>extends</jk> MenuItemWidget {
+       
+               <jk>private static final</jk> String[] 
<jsf>BUILT_IN_STYLES</jsf> = {<js>"devops"</js>, <js>"light"</js>, 
<js>"original"</js>, <js>"dark"</js>};
+       
+               <ja>@Override</ja> <jc>/* Widget */</jc>
+               <jk>public</jk> String getLabel(RestRequest req) {
+                       <jk>return</jk> <js>"styles"</js>;
+               }
+
+               <ja>@Override</ja> <jc>/* MenuItemWidget */</jc>
+               <jk>public</jk> Div getContent(RestRequest req) <jk>throws</jk> 
Exception {
+                       Div div = <jsm>div</jsm>();
+                       <jk>for</jk> (String s : <jsf>BUILT_IN_STYLES</jsf>) {
+                               java.net.URI uri = req.getUri(<jk>true</jk>, 
<jk>new</jk> AMap&lt;String,String&gt;().append(<js>"stylesheet"</js>, 
<js>"styles/"</js>+s+<js>".css"</js>));
+                               div.children(<jsm>a</jsm>(uri, s), 
<jsm>br</jsm>());
+                       }
+                       <jk>return</jk> div;
+               }
+       }
+                               </p>
                        </div>
                </div>
 
@@ -8385,7 +8612,8 @@
                <jd>/** Serializer for converting images to byte streams */</jd>
                <ja>@Produces</ja>(<js>"image/png,image/jpeg"</js>)
                <jk>public static class</jk> ImageSerializer <jk>extends</jk> 
OutputStreamSerializer {
-                       <ja>@Override</ja>
+               
+                       <ja>@Override</ja> <jc>/* Serializer */</jc>
                        <jk>public void</jk> serialize(Object o, OutputStream 
out, SerializerSession session) <jk>throws</jk> IOException, SerializeException 
{
                                RenderedImage image = (RenderedImage)o;
                                String mediaType = ctx.getMediaType();
@@ -8396,7 +8624,8 @@
                <jd>/** Parser for converting byte streams to images */</jd>
                <ja>@Consumes</ja>(<js>"image/png,image/jpeg"</js>)
                <jk>public static class</jk> ImageParser <jk>extends</jk> 
InputStreamParser {
-                       <ja>@Override</ja>
+               
+                       <ja>@Override</ja> <jc>/* Parser */</jc>
                        <jk>public</jk> &lt;T&gt; T parse(InputStream in, 
ClassMeta&lt;T&gt; type, ParserSession session) <jk>throws</jk> ParseException, 
IOException {
                                BufferedImage image = 
ImageIO.<jsm>read</jsm>(in);
                                <jk>return</jk> (T)image;
@@ -8434,19 +8663,19 @@
                <jk>private</jk> ServiceTracker <jf>httpServiceTracker</jf>;
                <jk>private</jk> BundleContext <jf>context</jf>;
        
-               <ja>@Override</ja>
+               <ja>@Override</ja> <jc>/* BundleActivator */</jc>
                <jk>public void</jk> start(BundleContext context) 
<jk>throws</jk> Exception {
                        <jk>this</jk>.<jf>context</jf> = context;
                        <jf>httpServiceTracker</jf> = <jk>new</jk> 
ServiceTracker(context, HttpService.<jk>class</jk>.getName(), <jk>this</jk>);
                        <jf>httpServiceTracker</jf>.open();
                }
        
-               <ja>@Override</ja>
+               <ja>@Override</ja> <jc>/* BundleActivator */</jc>
                <jk>public void</jk> stop(BundleContext context) 
<jk>throws</jk> Exception {
                        <jf>httpServiceTracker</jf>.close();
                }
        
-               <ja>@Override</ja>
+               <ja>@Override</ja> <jc>/* ServiceTrackerCustomizer */</jc>
                <jk>public</jk> Object addingService(ServiceReference 
reference) {
                        Object service = <jf>context</jf>.getService(reference);
        
@@ -8462,11 +8691,11 @@
                        <jk>return</jk> service;
                }
        
-               <ja>@Override</ja>
+               <ja>@Override</ja> <jc>/* ServiceTrackerCustomizer */</jc>
                <jk>public void</jk> modifiedService(ServiceReference 
reference, Object service) {
                }
        
-               <ja>@Override</ja>
+               <ja>@Override</ja> <jc>/* ServiceTrackerCustomizer */</jc>
                <jk>public void</jk> removedService(ServiceReference reference, 
Object service) {
                }
        }
@@ -8701,7 +8930,7 @@
                        interfaceClass.getClassLoader(),
                        <jk>new</jk> Class[] { interfaceClass },
                        <jk>new</jk> InvocationHandler() {
-                               <ja>@Override</ja>
+                               <ja>@Override</ja> <jc>/* InvocationHandler 
*/</jc>
                                <jk>public</jk> Object invoke(Object proxy, 
Method method, Object[] args) {
                                        <jk>try</jk> {
                                                String uri = 
<jf>remoteableServletUri</jf> + '/' + interfaceClass.getName() + '/' + 
ClassUtils.<jsm>getMethodSignature</jsm>(method);
@@ -9035,7 +9264,7 @@
                        <p>
                                Juneau is built as a veneer on top of the 
Servlet API, allowing you to use low-level Servlet APIs
                                whenever needed.
-                               This allows you to take advantage of the newest 
HTTP/2 features implemented in the new Servlet 4.0 
+                               <br>This allows you to take advantage of the 
newest HTTP/2 features implemented in the new Servlet 4.0 
                                specification.
                        </p>
                        <p>
@@ -9047,7 +9276,89 @@
                <a id="juneau-rest-server.PredefinedLabelBeans"></a>
                <h4 class='topic' onclick='toggle(this)'>3.1.35 - Predefined 
Label Beans</h4>
                <div class='topic'>
-                       TODO
+                       <p>
+                               The {@link org.apache.juneau.rest.labels} 
package contains some reusable beans that are useful for 
+                               creating linked items in HTML views.
+                       </p>
+                       <p>
+                               The {@link 
org.apache.juneau.rest.labels.ResourceDescription} class is a bean with 
name/description
+                               properties for labeling and linking to child 
resources.
+                               <br>The following examples is pulled from the 
REST examples:
+                       </p>
+                       <p class='bcode'>
+       <jk>public class</jk> PredefinedLabelsResource <jk>extends</jk> 
Resource {
+       
+               <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/"</js>)
+               <jk>public</jk> ResourceDescription[] getChildMethods() {
+                       <jk>return new</jk> ResourceDescription[] {
+                               <jk>new</jk> 
ResourceDescription(<js>"beanDescription"</js>, <js>"BeanDescription"</js>),
+                               <jk>new</jk> 
ResourceDescription(<js>"htmlLinks"</js>, <js>"HtmlLink"</js>)
+                       };
+               }
+       }
+                       </p>
+                       <p>
+                               It get rendered as a table of name/description 
columns with links to child methods:
+                       </p>
+                       <img class='bordered' 
src='doc-files/PredefinedLabelBeans.1.png' style='width:240px'/>
+                       <p>
+                               The internals of the class show it simply has 
two bean properties with a link annotation
+                               defined on the name property:
+                       </p>
+                       <p class='bcode'>
+       <jk>public class</jk> ResourceDescription {
+
+               <ja>@Html</ja>(link=<js>"servlet:/{name}"</js>)
+               <jk>public</jk> Object getName() {...}
+               
+               <jk>public</jk> Object getDescription() {...}
+       }
+                       </p>
+                       <p>
+                               The {@link 
org.apache.juneau.rest.labels.BeanDescription} class provides a simple view
+                               of a bean and it's properties.
+                       </p>
+                       <p class='bcode'>
+       <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, 
path=<js>"/beanDescription"</js>)
+       <jk>public</jk> BeanDescription getBeanDescription() {
+               <jk>return new</jk> BeanDescription(Person.<jk>class</jk>);
+       }       
+                       </p>
+                       <p>
+                               This example renders the following:
+                       </p>
+                       <img class='bordered' 
src='doc-files/PredefinedLabelBeans.2.png' style='width:584px'/>
+                       <p>
+                               The {@link 
org.apache.juneau.html.annotation.HtmlLink @HtmlLink} annotation can also be 
useful
+                               for rendering custom hyperlinks:
+                       </p>
+                       <p class='bcode'>
+       <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/htmlLinks"</js>)
+       <jk>public</jk> ALink[] htmlLinks() {
+               <jk>return new</jk> ALink[] {
+                       <jk>new</jk> ALink(<js>"apache"</js>, 
<js>"http://apache.org";</js>),
+                       <jk>new</jk> ALink(<js>"juneau"</js>, 
<js>"http://juneau.apache.org";</js>)
+               };
+       }
+       
+       <ja>@HtmlLink</ja>(nameProperty=<js>"n"</js>, hrefProperty=<js>"l"</js>)
+       <jk>public static class</jk> ALink {
+               <jk>public</jk> String <jf>n</jf>, <jf>l</jf>;
+               <jk>public</jk> ALink(String n, String l) {
+                       <jk>this</jk>.<jf>n</jf> = n;
+                       <jk>this</jk>.<jf>l</jf> = l;
+               }
+       }
+                       </p>                    
+                       <p>
+                               This example renders the following consisting 
of a list of hyperlinks:
+                       </p>
+                       <img class='bordered' 
src='doc-files/PredefinedLabelBeans.3.png' style='width:92px'/>
+                       
+                       <h5 class='section'>See Also:</h5>
+                       <ul>
+                               <li class='jf'>{@link 
org.apache.juneau.dto.LinkString}
+                       </ul>
                </div>
                
                <!-- 
========================================================================================================
 -->
@@ -11152,7 +11463,7 @@
                * [OPTIONS /*] 
                * View resource options 
                */</jd> 
-               <ja>@Override</ja> /* RestServletDefault */ 
+               <ja>@Override</ja> <jc>/* RestServletDefault */</jc> 
                <ja>@RestMethod</ja>(name=<jsf>OPTIONS</jsf>, 
path=<js>"/*"</js>) 
                <jk>public</jk> Swagger getOptions(RestRequest req) { 
                        <jk>return</jk> req.getSwagger(); 
@@ -12207,7 +12518,8 @@
                <jd>/** Serializer for converting images to byte streams */</jd>
                <ja>@Produces</ja>(<js>"image/png,image/jpeg"</js>)
                <jk>public static class</jk> ImageSerializer <jk>extends</jk> 
OutputStreamSerializer {
-                       <ja>@Override</ja>
+
+                       <ja>@Override</ja> <jc>/* Serializer */</jc>
                        <jk>public void</jk> serialize(Object o, OutputStream 
out, SerializerSession session) <jk>throws</jk> IOException, SerializeException 
{
                                RenderedImage image = (RenderedImage)o;
                                String mediaType = ctx.getMediaType();
@@ -12218,7 +12530,8 @@
                <jd>/** Parser for converting byte streams to images */</jd>
                <ja>@Consumes</ja>(<js>"image/png,image/jpeg"</js>)
                <jk>public static class</jk> ImageParser <jk>extends</jk> 
InputStreamParser {
-                       <ja>@Override</ja>
+
+                       <ja>@Override</ja> <jc>/* Parser */</jc>
                        <jk>public</jk> &lt;T&gt; T parse(InputStream in, 
ClassMeta&lt;T&gt; type, ParserSession session) <jk>throws</jk> ParseException, 
IOException {
                                BufferedImage image = 
ImageIO.<jsm>read</jsm>(in);
                                <jk>return</jk> (T)image;
diff --git a/juneau-doc/src/main/javadoc/resources/juneau-doc.css 
b/juneau-doc/src/main/javadoc/resources/juneau-doc.css
index 7fbf285..50d8478 100755
--- a/juneau-doc/src/main/javadoc/resources/juneau-doc.css
+++ b/juneau-doc/src/main/javadoc/resources/juneau-doc.css
@@ -125,7 +125,7 @@ h4.closed {
 
 div.topic { margin-left: 10px; }
 
-h6.figure {
+h5.figure {
        color: #2c4557;
        margin-left: 30px;
        margin-right: 30px;
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PredefinedLabelsResource.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PredefinedLabelsResource.java
new file mode 100644
index 0000000..e2c9548
--- /dev/null
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PredefinedLabelsResource.java
@@ -0,0 +1,77 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.examples.rest;
+
+import static org.apache.juneau.http.HttpMethodName.*;
+
+import org.apache.juneau.examples.addressbook.*;
+import org.apache.juneau.html.annotation.*;
+import org.apache.juneau.microservice.*;
+import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.labels.*;
+import org.apache.juneau.rest.widget.*;
+
+/**
+ * Sample REST resource for rendering predefined label beans.
+ */
+@RestResource(
+       path="/predefinedLabels",
+       title="Predefined Label Beans",
+       description="Shows examples of predefined label beans",
+       htmldoc=@HtmlDoc(
+               widgets={
+                       ContentTypeMenuItem.class,
+                       StyleMenuItem.class
+               },
+               navlinks={
+                       "up: request:/..",
+                       "options: servlet:/?method=OPTIONS",
+                       "$W{ContentTypeMenuItem}",
+                       "$W{StyleMenuItem}",
+                       "source: 
$C{Source/gitHub}/org/apache/juneau/examples/rest/$R{servletClassSimple}.java"
+               }
+       )
+)
+public class PredefinedLabelsResource extends Resource {
+       private static final long serialVersionUID = 1L;
+
+       @RestMethod(name=GET, path="/")
+       public ResourceDescription[] getChildMethods() throws Exception {
+               return new ResourceDescription[] {
+                       new ResourceDescription("beanDescription", 
"BeanDescription"),
+                       new ResourceDescription("htmlLinks", "HtmlLink")
+               };
+       }
+       
+       @RestMethod(name=GET, path="/beanDescription")
+       public BeanDescription getBeanDescription() throws Exception {
+               return new BeanDescription(Person.class);
+       }       
+       
+       @RestMethod(name=GET, path="/htmlLinks")
+       public ALink[] htmlLinks() throws Exception {
+               return new ALink[] {
+                       new ALink("apache", "http://apache.org";),
+                       new ALink("juneau", "http://juneau.apache.org";)
+               };
+       }
+       
+       @HtmlLink(nameProperty="n", hrefProperty="l")
+       public static class ALink {
+               public String n, l;
+               public ALink(String n, String l) {
+                       this.n = n;
+                       this.l = l;
+               }
+       }
+}
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
index f643c13..fcef063 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
@@ -76,6 +76,7 @@ import org.apache.juneau.rest.widget.*;
                ConfigResource.class,
                LogsResource.class,
                DockerRegistryResource.class,
+               PredefinedLabelsResource.class,
                DebugResource.class,
                ShutdownResource.class
        }
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
index 624fe69..535af3a 100644
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
+++ 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
@@ -50,8 +50,7 @@ import org.apache.juneau.svl.vars.*;
                navlinks={
                        "up: request:/..",
                        "options: servlet:/?method=OPTIONS"
-               },
-               stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}"
+               }
        ),
        config="$S{juneau.configFile}",
        serializers={
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/HtmlDocBuilder.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/HtmlDocBuilder.java
index 8efc7f4..54ebe99 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/HtmlDocBuilder.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/HtmlDocBuilder.java
@@ -31,7 +31,7 @@ import org.apache.juneau.utils.*;
  * by the {@link HtmlDocSerializer} class.
  * 
  * <p>
- * This class is instantiated through the following methods.
+ * This class is instantiated through the following methods:
  * <ul>
  *     <li class='jm'>{@link RestContextBuilder#getHtmlDocBuilder()} - Set 
values programmatically during servlet initialization.
  *     <li class='jm'>{@link RestResponse#getHtmlDocBuilder()} - Set values 
programmatically during a REST request.
@@ -81,22 +81,25 @@ public class HtmlDocBuilder {
         * Sets the HTML header section contents.
         * 
         * <p>
-        * The format of this value is HTML.
-        * 
-        * <p>
         * The page header normally contains the title and description, but 
this value can be used to override the contents
         * to be whatever you want.
         * 
-        * <p>
-        * A value of <js>"INHERIT"</js> means copy the values from the parent.
-        * <br>A value of <js>"NONE"</js> can be used to force no value.
-        * 
-        * <p>
-        * This field can contain variables (e.g. 
<js>"$L{my.localized.variable}"</js>).
-        * <br>See {@link RestContext#getVarResolver()} for the list of 
supported variables.
-        * 
-        * <p>
-        * This is the programmatic equivalent to the {@link HtmlDoc#header() 
@HtmlDoc.header()} annotation.
+        * <h5 class='section'>Notes:</h5>
+        * <ul class='spaced-list'>
+        *      <li>
+        *              The format of this value is HTML.
+        *      <li>
+        *              When a value is specified, the {@link 
#navlinks(Object...)} value will be ignored.
+        *      <li>
+        *              Supports <a class="doclink" 
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
+        *              (e.g. <js>"$L{my.localized.variable}"</js>).
+        *      <li>
+        *              A value of <js>"INHERIT"</js> means copy the values 
from the parent.
+        *      <li>
+        *              A value of <js>"NONE"</js> can be used to force no 
value.
+        *      <li>
+        *              This is the programmatic equivalent to the {@link 
HtmlDoc#header() @HtmlDoc.header()} annotation.
+        * </ul>
         * 
         * @param value
         *      The HTML header section contents.
@@ -117,25 +120,25 @@ public class HtmlDocBuilder {
         * Sets the links in the HTML nav section.
         * 
         * <p>
-        * The format of this value is a lax-JSON map of key/value pairs where 
the keys are the link text and the values are
-        * relative (to the servlet) or absolute URLs.
-        * 
-        * <p>
         * The page links are positioned immediately under the title and text.
         * 
-        * <p>
-        * This field can contain variables (e.g. 
<js>"$L{my.localized.variable}"</js>).
-        * <br>See {@link RestContext#getVarResolver()} for the list of 
supported variables.
-        * 
-        * <p>
-        * A value of <js>"INHERIT"</js> means copy the values from the parent.
-        * <br>A value of <js>"NONE"</js> can be used to force no value.
-        * 
-        * <p>
-        * This field can also use URIs of any support type in {@link 
UriResolver}.
-        * 
-        * <p>
-        * This is the programmatic equivalent to the {@link HtmlDoc#navlinks() 
@HtmlDoc.navlinks()} annotation.
+        * <h5 class='section'>Notes:</h5>
+        * <ul class='spaced-list'>
+        *      <li>
+        *              The format of this value is a lax-JSON map of key/value 
pairs where the keys are the link text and the values are
+        *              relative (to the servlet) or absolute URLs.
+        *      <li>
+        *              Supports <a class="doclink" 
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
+        *              (e.g. <js>"$L{my.localized.variable}"</js>).
+        *      <li>
+        *              Supports <a class="doclink" 
href="../../../../overview-summary.html#juneau-marshall.URIs">URI 
resolution</a> (e.g. <js>"servlet:/..."</js>, <js>"request:/..."</js>).
+        *      <li>
+        *              A value of <js>"INHERIT"</js> means copy the values 
from the parent.
+        *      <li>
+        *              A value of <js>"NONE"</js> can be used to force no 
value.
+        *      <li>
+        *              This is the programmatic equivalent to the {@link 
HtmlDoc#navlinks() @HtmlDoc.navlinks()} annotation.
+        * </ul>
         * 
         * @param value
         *      The HTML nav section links links.
@@ -155,27 +158,25 @@ public class HtmlDocBuilder {
         * Sets the HTML nav section contents.
         * 
         * <p>
-        * The format of this value is HTML.
-        * 
-        * <p>
         * The nav section of the page contains the links.
         * 
-        * <p>
-        * The format of this value is HTML.
         * 
-        * <p>
-        * When a value is specified, the {@link #navlinks(Object[])} value 
will be ignored.
-        * 
-        * <p>
-        * This field can contain variables (e.g. 
<js>"$L{my.localized.variable}"</js>).
-        * <br>See {@link RestContext#getVarResolver()} for the list of 
supported variables.
-        * 
-        * <p>
-        * A value of <js>"INHERIT"</js> means copy the values from the parent.
-        * <br>A value of <js>"NONE"</js> can be used to force no value.
-        * 
-        * <p>
-        * This is the programmatic equivalent to the {@link HtmlDoc#nav() 
@HtmlDoc.nav()} annotation.
+        * <h5 class='section'>Notes:</h5>
+        * <ul class='spaced-list'>
+        *      <li>
+        *              The format of this value is HTML.
+        *      <li>
+        *              Supports <a class="doclink" 
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
+        *              (e.g. <js>"$L{my.localized.variable}"</js>).
+        *      <li>
+        *              When a value is specified, the {@link 
#navlinks(Object[])} value will be ignored.
+        *      <li>
+        *              A value of <js>"INHERIT"</js> means copy the values 
from the parent.
+        *      <li>
+        *              A value of <js>"NONE"</js> can be used to force no 
value.
+        *      <li>
+        *              This is the programmatic equivalent to the {@link 
HtmlDoc#nav() @HtmlDoc.nav()} annotation.
+        * </ul>
         * 
         * @param value
         *      The HTML nav section contents.
@@ -196,21 +197,22 @@ public class HtmlDocBuilder {
         * Sets the HTML aside section contents.
         * 
         * <p>
-        * The format of this value is HTML.
-        * 
-        * <p>
         * The aside section typically floats on the right side of the page.
         * 
-        * <p>
-        * This field can contain variables (e.g. 
<js>"$L{my.localized.variable}"</js>).
-        * <br>See {@link RestContext#getVarResolver()} for the list of 
supported variables.
-        * 
-        * <p>
-        * A value of <js>"INHERIT"</js> means copy the values from the parent.
-        * <br>A value of <js>"NONE"</js> can be used to force no value.
-        * 
-        * <p>
-        * This is the programmatic equivalent to the {@link HtmlDoc#aside() 
@HtmlDoc.aside()} annotation.
+        * <h5 class='section'>Notes:</h5>
+        * <ul class='spaced-list'>
+        *      <li>
+        *              The format of this value is HTML.
+        *      <li>
+        *              Supports <a class="doclink" 
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
+        *              (e.g. <js>"$L{my.localized.variable}"</js>).
+        *      <li>
+        *              A value of <js>"INHERIT"</js> means copy the values 
from the parent.
+        *      <li>
+        *              A value of <js>"NONE"</js> can be used to force no 
value.
+        *      <li>
+        *              This is the programmatic equivalent to the {@link 
HtmlDoc#aside() @HtmlDoc.aside()} annotation.
+        * </ul>
         * 
         * @param value
         *      The HTML aside section contents.
@@ -231,21 +233,22 @@ public class HtmlDocBuilder {
         * Sets the HTML footer section contents.
         * 
         * <p>
-        * The format of this value is HTML.
-        * 
-        * <p>
         * The footer section typically floats on the bottom of the page.
         * 
-        * <p>
-        * This field can contain variables (e.g. 
<js>"$L{my.localized.variable}"</js>).
-        * <br>See {@link RestContext#getVarResolver()} for the list of 
supported variables.
-        * 
-        * <p>
-        * A value of <js>"INHERIT"</js> means copy the values from the parent.
-        * <br>A value of <js>"NONE"</js> can be used to force no value.
-        * 
-        * <p>
-        * This is the programmatic equivalent to the {@link HtmlDoc#footer() 
@HtmlDoc.footer()} annotation.
+        * <h5 class='section'>Notes:</h5>
+        * <ul class='spaced-list'>
+        *      <li>
+        *              The format of this value is HTML.
+        *      <li>
+        *              Supports <a class="doclink" 
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
+        *              (e.g. <js>"$L{my.localized.variable}"</js>).
+        *      <li>
+        *              A value of <js>"INHERIT"</js> means copy the values 
from the parent.
+        *      <li>
+        *              A value of <js>"NONE"</js> can be used to force no 
value.
+        *      <li>
+        *              This is the programmatic equivalent to the {@link 
HtmlDoc#footer() @HtmlDoc.footer()} annotation.
+        * </ul>
         * 
         * @param value
         *      The HTML footer section contents.
@@ -265,19 +268,20 @@ public class HtmlDocBuilder {
        /**
         * Sets the HTML CSS style section contents.
         * 
-        * <p>
-        * The format of this value is CSS.
-        * 
-        * <p>
-        * This field can contain variables (e.g. 
<js>"$L{my.localized.variable}"</js>).
-        * <br>See {@link RestContext#getVarResolver()} for the list of 
supported variables.
-        * 
-        * <p>
-        * A value of <js>"INHERIT"</js> means copy the values from the parent.
-        * <br>A value of <js>"NONE"</js> can be used to force no value.
-        * 
-        * <p>
-        * This is the programmatic equivalent to the {@link HtmlDoc#style() 
@HtmlDoc.style()} annotation.
+        * <h5 class='section'>Notes:</h5>
+        * <ul class='spaced-list'>
+        *      <li>
+        *              The format of this value is CSS.
+        *      <li>
+        *              Supports <a class="doclink" 
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
+        *              (e.g. <js>"$L{my.localized.variable}"</js>).
+        *      <li>
+        *              A value of <js>"INHERIT"</js> means copy the values 
from the parent.
+        *      <li>
+        *              A value of <js>"NONE"</js> can be used to force no 
value.
+        *      <li>
+        *              This is the programmatic equivalent to the {@link 
HtmlDoc#style() @HtmlDoc.style()} annotation.
+        * </ul>
         * 
         * @param value
         *      The HTML CSS style section contents.
@@ -298,21 +302,18 @@ public class HtmlDocBuilder {
         * Sets the CSS URL in the HTML CSS style section.
         * 
         * <p>
-        * The format of this value is a comma-delimited list of URLs.
-        * 
-        * <p>
         * Specifies the URL to the stylesheet to add as a link in the style 
tag in the header.
         * 
-        * <p>
-        * The format of this value is CSS.
-        * 
-        * <p>
-        * This field can contain variables (e.g. 
<js>"$L{my.localized.variable}"</js>) and can use URL protocols defined
-        * by {@link UriResolver}.
-        * <br>See {@link RestContext#getVarResolver()} for the list of 
supported variables.
-        * 
-        * <p>
-        * This is the programmatic equivalent to the {@link 
HtmlDoc#stylesheet() @HtmlDoc.stylesheet()} annotation.
+        * <h5 class='section'>Notes:</h5>
+        * <ul class='spaced-list'>
+        *      <li>
+        *              The format of this value is a comma-delimited list of 
URLs.
+        *      <li>
+        *              Supports <a class="doclink" 
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
+        *              (e.g. <js>"$L{my.localized.variable}"</js>).
+        *      <li>
+        *              This is the programmatic equivalent to the {@link 
HtmlDoc#stylesheet() @HtmlDoc.stylesheet()} annotation.
+        * </ul>
         * 
         * @param value
         *      The CSS URL in the HTML CSS style section.
@@ -332,19 +333,20 @@ public class HtmlDocBuilder {
        /**
         * Sets the HTML script section contents.
         * 
-        * <p>
-        * The format of this value is Javascript.
-        * 
-        * <p>
-        * This field can contain variables (e.g. 
<js>"$L{my.localized.variable}"</js>).
-        * <br>See {@link RestContext#getVarResolver()} for the list of 
supported variables.
-        * 
-        * <p>
-        * A value of <js>"INHERIT"</js> means copy the values from the parent.
-        * <br>A value of <js>"NONE"</js> can be used to force no value.
-        * 
-        * <p>
-        * This is the programmatic equivalent to the {@link HtmlDoc#script() 
@HtmlDoc.script()} annotation.
+        * <h5 class='section'>Notes:</h5>
+        * <ul class='spaced-list'>
+        *      <li>
+        *              The format of this value is Javascript.
+        *      <li>
+        *              Supports <a class="doclink" 
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
+        *              (e.g. <js>"$L{my.localized.variable}"</js>).
+        *      <li>
+        *              A value of <js>"INHERIT"</js> means copy the values 
from the parent.
+        *      <li>
+        *              A value of <js>"NONE"</js> can be used to force no 
value.
+        *      <li>
+        *              This is the programmatic equivalent to the {@link 
HtmlDoc#script() @HtmlDoc.script()} annotation.
+        * </ul>
         * 
         * @param value
         *      The HTML script section contents.
@@ -364,19 +366,20 @@ public class HtmlDocBuilder {
        /**
         * Sets the HTML head section contents.
         * 
-        * <p>
-        * The format of this value is HTML.
-        * 
-        * <p>
-        * This field can contain variables (e.g. 
<js>"$L{my.localized.variable}"</js>).
-        * <br>See {@link RestContext#getVarResolver()} for the list of 
supported variables.
-        * 
-        * <p>
-        * A value of <js>"INHERIT"</js> means copy the values from the parent.
-        * <br>A value of <js>"NONE"</js> can be used to force no value.
-        * 
-        * <p>
-        * This is the programmatic equivalent to the {@link HtmlDoc#head() 
@HtmlDoc.head()} annotation.
+        * <h5 class='section'>Notes:</h5>
+        * <ul class='spaced-list'>
+        *      <li>
+        *              The format of this value is HTML.
+        *      <li>
+        *              Supports <a class="doclink" 
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
+        *              (e.g. <js>"$L{my.localized.variable}"</js>).
+        *      <li>
+        *              A value of <js>"INHERIT"</js> means copy the values 
from the parent.
+        *      <li>
+        *              A value of <js>"NONE"</js> can be used to force no 
value.
+        *      <li>
+        *              This is the programmatic equivalent to the {@link 
HtmlDoc#head() @HtmlDoc.head()} annotation.
+        * </ul>
         * 
         * @param value
         *      The HTML head section contents.
@@ -395,8 +398,14 @@ public class HtmlDocBuilder {
        /**
         * Shorthand method for forcing the rendered HTML content to be no-wrap.
         * 
-        * <p>
-        * This is the programmatic equivalent to the {@link HtmlDoc#nowrap() 
@HtmlDoc.nowrap()} annotation.
+        * <h5 class='section'>Notes:</h5>
+        * <ul class='spaced-list'>
+        *      <li>
+        *              Supports <a class="doclink" 
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
+        *              (e.g. <js>"$L{my.localized.variable}"</js>).
+        *      <li>
+        *              This is the programmatic equivalent to the {@link 
HtmlDoc#nowrap() @HtmlDoc.nowrap()} annotation.
+        * </ul>
         * 
         * @param value The new nowrap setting.
         * @return This object (for method chaining).
@@ -408,9 +417,14 @@ public class HtmlDocBuilder {
        /**
         * Specifies the text to display when serializing an empty array or 
collection.
         * 
-        * <p>
-        * This is the programmatic equivalent to the {@link 
HtmlDoc#noResultsMessage() @HtmlDoc.noResultsMessage()}
-        * annotation.
+        * <h5 class='section'>Notes:</h5>
+        * <ul class='spaced-list'>
+        *      <li>
+        *              Supports <a class="doclink" 
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
+        *              (e.g. <js>"$L{my.localized.variable}"</js>).
+        *      <li>
+        *              This is the programmatic equivalent to the {@link 
HtmlDoc#noResultsMessage() @HtmlDoc.noResultsMessage()} annotation.
+        * </ul>
         * 
         * @param value The text to display when serializing an empty array or 
collection.
         * @return This object (for method chaining).
@@ -426,8 +440,14 @@ public class HtmlDocBuilder {
         * By default, uses {@link HtmlDocTemplateBasic} to render the 
contents, although you can provide your own custom
         * renderer or subclasses from the basic class to have full control 
over how the page is rendered.
         * 
-        * <p>
-        * This is the programmatic equivalent to the {@link HtmlDoc#template() 
@HtmlDoc.template()} annotation.
+        * <h5 class='section'>Notes:</h5>
+        * <ul class='spaced-list'>
+        *      <li>
+        *              Supports <a class="doclink" 
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
+        *              (e.g. <js>"$L{my.localized.variable}"</js>).
+        *      <li>
+        *              This is the programmatic equivalent to the {@link 
HtmlDoc#template() @HtmlDoc.template()} annotation.
+        * </ul>
         * 
         * @param value The HTML page template to use to render the HTML page.
         * @return This object (for method chaining).
@@ -443,8 +463,14 @@ public class HtmlDocBuilder {
         * By default, uses {@link HtmlDocTemplateBasic} to render the 
contents, although you can provide your own custom
         * renderer or subclasses from the basic class to have full control 
over how the page is rendered.
         * 
-        * <p>
-        * This is the programmatic equivalent to the {@link HtmlDoc#template() 
@HtmlDoc.template()} annotation.
+        * <h5 class='section'>Notes:</h5>
+        * <ul class='spaced-list'>
+        *      <li>
+        *              Supports <a class="doclink" 
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
+        *              (e.g. <js>"$L{my.localized.variable}"</js>).
+        *      <li>
+        *              This is the programmatic equivalent to the {@link 
HtmlDoc#template() @HtmlDoc.template()} annotation.
+        * </ul>
         * 
         * @param value The HTML page template to use to render the HTML page.
         * @return This object (for method chaining).
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index 51a36af..631bf80 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -2720,6 +2720,11 @@ public final class RestContext extends BeanContext {
         *      <li>
         *              Widgets are inherited from super classes, but can be 
overridden by reusing the widget name.
         * </ul>
+        * 
+        * <h5 class='section'>See Also:</h5>
+        * <ul>
+        *      <li class='link'><a class="doclink" 
href="../../../../overview-summary.html#juneau-rest-server.Widgets">Overview 
&gt; juneau-rest-server &gt; Widgets</a>
+        * </ul>
         */
        public static final String REST_widgets = PREFIX + "widgets.lo";
        
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServletDefault.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServletDefault.java
index f2d193e..3e716c6 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServletDefault.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServletDefault.java
@@ -199,7 +199,7 @@ import org.apache.juneau.xml.*;
                        "<h2>$R{methodSummary,resourceDescription}</h2>",
                        "<a href='http://juneau.apache.org'><img 
src='$U{servlet:/htdocs/juneau.png}' 
style='position:absolute;top:5;right:5;background-color:transparent;height:30px'/></a>"
                },
-               stylesheet="servlet:/styles/light.css",
+               stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}",
                head={
                        "<link rel='icon' 
href='$U{servlet:/htdocs/juneau.png}'/>"
                }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java
index a27e9f6..fee217f 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.rest.annotation;
 
-import org.apache.juneau.*;
 import org.apache.juneau.html.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.widget.*;
@@ -90,9 +89,6 @@ public @interface HtmlDoc {
         * Sets the HTML aside section contents.
         * 
         * <p>
-        * The format of this value is HTML.
-        * 
-        * <p>
         * The aside section typically floats on the right side of the page.
         * 
         * <h5 class='section'>Example:</h5>
@@ -109,19 +105,21 @@ public @interface HtmlDoc {
         * <h5 class='section'>Notes:</h5>
         * <ul class='spaced-list'>
         *      <li>
+        *              The format of this value is HTML.
+        *      <li>
         *              Supports <a class="doclink" 
href="../../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
         *              (e.g. <js>"$L{my.localized.variable}"</js>).
         *      <li>
         *              A value of <js>"NONE"</js> can be used to force no 
value.
         *      <li>
+        *              The parent value can be included by adding the literal 
<js>"INHERIT"</js> as a value.
+        *      <li>
         *              Multiple values are combined with newlines into a 
single string.
         *      <li>
         *              On methods, this value is inherited from the 
<ja>@HtmlDoc</ja> annotation on the servlet/resource class.
         *      <li>
         *              On servlet/resource classes, this value is inherited 
from the <ja>@HtmlDoc</ja> annotation on the
         *              parent class.
-        *      <li>
-        *              The parent value can be included by adding the literal 
<js>"INHERIT"</js> as a value.
         * </ul>
         * 
         * <h5 class='section'>See Also:</h5>
@@ -136,9 +134,6 @@ public @interface HtmlDoc {
         * Sets the HTML footer section contents.
         * 
         * <p>
-        * The format of this value is HTML.
-        * 
-        * <p>
         * The footer section typically floats on the bottom of the page.
         * 
         * <h5 class='section'>Example:</h5>
@@ -155,19 +150,21 @@ public @interface HtmlDoc {
         * <h5 class='section'>Notes:</h5>
         * <ul class='spaced-list'>
         *      <li>
+        *              The format of this value is HTML.
+        *      <li>
         *              Supports <a class="doclink" 
href="../../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
         *              (e.g. <js>"$L{my.localized.variable}"</js>).
         *      <li>
         *              A value of <js>"NONE"</js> can be used to force no 
value.
         *      <li>
+        *              The parent value can be included by adding the literal 
<js>"INHERIT"</js> as a value.
+        *      <li>
         *              Multiple values are combined with newlines into a 
single string.
         *      <li>
         *              On methods, this value is inherited from the 
<ja>@HtmlDoc</ja> annotation on the servlet/resource class.
         *      <li>
         *              On servlet/resource classes, this value is inherited 
from the <ja>@HtmlDoc</ja> annotation on the
         *              parent class.
-        *      <li>
-        *              The parent value can be included by adding the literal 
<js>"INHERIT"</js> as a value.
         * </ul>
         * 
         * <h5 class='section'>See Also:</h5>
@@ -181,9 +178,6 @@ public @interface HtmlDoc {
        /**
         * Adds arbitrary content to the HTML <xt>&lt;head&gt;</xt> element on 
the page.
         * 
-        * <p>
-        * The format of this value is HTML.
-        * 
         * <h5 class='section'>Example:</h5>
         * <p class='bcode'>
         *      <ja>@RestResource</ja>(
@@ -202,6 +196,8 @@ public @interface HtmlDoc {
         * <h5 class='section'>Notes:</h5>
         * <ul class='spaced-list'>
         *      <li>
+        *              The format of this value is HTML.
+        *      <li>
         *              Supports <a class="doclink" 
href="../../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
         *              (e.g. <js>"$L{my.localized.variable}"</js>).
         *      <li>
@@ -227,9 +223,6 @@ public @interface HtmlDoc {
         * Sets the HTML header section contents.
         * 
         * <p>
-        * The format of this value is HTML.
-        * 
-        * <p>
         * The page header normally contains the title and description, but 
this value can be used to override the contents
         * to be whatever you want.
         * 
@@ -247,8 +240,12 @@ public @interface HtmlDoc {
         * <h5 class='section'>Notes:</h5>
         * <ul class='spaced-list'>
         *      <li>
+        *              The format of this value is HTML.
+        *      <li>
         *              A value of <js>"NONE"</js> can be used to force no 
header.
         *      <li>
+        *              The parent value can be included by adding the literal 
<js>"INHERIT"</js> as a value.
+        *      <li>
         *              Supports <a class="doclink" 
href="../../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
         *              (e.g. <js>"$L{my.localized.variable}"</js>).
         *      <li>
@@ -258,8 +255,6 @@ public @interface HtmlDoc {
         *      <li>
         *              On servlet/resource classes, this value is inherited 
from the <ja>@HtmlDoc</ja> annotation on the
         *              parent class if not overridden.
-        *      <li>
-        *              The parent value can be included by adding the literal 
<js>"INHERIT"</js> as a value.
         * </ul>
         * 
         * <h5 class='section'>See Also:</h5>
@@ -274,14 +269,8 @@ public @interface HtmlDoc {
         * Sets the HTML nav section contents.
         * 
         * <p>
-        * The format of this value is HTML.
-        * 
-        * <p>
         * The nav section of the page contains the links.
         * 
-        * <p>
-        * The format of this value is HTML.
-        * 
         * <h5 class='section'>Example:</h5>
         * <p class='bcode'>
         *      <ja>@RestResource</ja>(
@@ -296,6 +285,8 @@ public @interface HtmlDoc {
         * <h5 class='section'>Notes:</h5>
         * <ul class='spaced-list'>
         *      <li>
+        *              The format of this value is HTML.
+        *      <li>
         *              When a value is specified, the {@link #navlinks()} 
value will be ignored.
         *      <li>
         *              Supports <a class="doclink" 
href="../../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
@@ -303,14 +294,14 @@ public @interface HtmlDoc {
         *      <li>
         *              A value of <js>"NONE"</js> can be used to force no 
value.
         *      <li>
+        *              The parent value can be included by adding the literal 
<js>"INHERIT"</js> as a value.
+        *      <li>
         *              Multiple values are combined with newlines into a 
single string.
         *      <li>
         *              On methods, this value is inherited from the 
<ja>@HtmlDoc</ja> annotation on the servlet/resource class.
         *      <li>
         *              On servlet/resource classes, this value is inherited 
from the <ja>@HtmlDoc</ja> annotation on the
         *              parent class.
-        *      <li>
-        *              The parent value can be included by adding the literal 
<js>"INHERIT"</js> as a value.
         * </ul>
         * 
         * <h5 class='section'>See Also:</h5>
@@ -325,6 +316,9 @@ public @interface HtmlDoc {
         * Sets the links in the HTML nav section.
         * 
         * <p>
+        * The page links are positioned immediately under the title and text.
+        * 
+        * <p>
         * The value is an array of strings with two possible values:
         * <ul>
         *      <li>A key-value pair representing a hyperlink label and href:
@@ -332,9 +326,6 @@ public @interface HtmlDoc {
         *      <li>Arbitrary HTML.
         * </ul>
         * 
-        * <p>
-        * The page links are positioned immediately under the title and text.
-        * 
         * <h5 class='section'>Example:</h5>
         * <p class='bcode'>
         *      <ja>@RestResource</ja>(
@@ -355,16 +346,16 @@ public @interface HtmlDoc {
         *      <li>
         *              A value of <js>"NONE"</js> can be used to force no 
value.
         *      <li>
-        *              This field can also use URIs of any support type in 
{@link UriResolver}.
+        *              The parent links can be included by adding the literal 
<js>"INHERIT"</js> as a value.
+        *              <br>Use the syntax <js>"key[index]: value"</js> or 
<js>"[index]: value"</js> to specify an index location
+        *              to place a link inside the list of parent links.
+        *      <li>
+        *              Supports <a class="doclink" 
href="../../../../../overview-summary.html#juneau-marshall.URIs">URI 
resolution</a> (e.g. <js>"servlet:/..."</js>, <js>"request:/..."</js>).
         *      <li>
         *              On methods, this value is inherited from the 
<ja>@HtmlDoc</ja> annotation on the servlet/resource class.
         *      <li>
         *              On servlet/resource classes, this value is inherited 
from the <ja>@HtmlDoc</ja> annotation on the
         *              parent class.
-        *      <li>
-        *              The parent links can be included by adding the literal 
<js>"INHERIT"</js> as a value.
-        *              <br>Use the syntax <js>"key[index]: value"</js> or 
<js>"[index]: value"</js> to specify an index location
-        *              to place a link inside the list of parent links.
         * </ul>
         * 
         * <h5 class='section'>See Also:</h5>
@@ -410,9 +401,6 @@ public @interface HtmlDoc {
        /**
         * Sets the HTML script section contents.
         * 
-        * <p>
-        * The format of this value is Javascript.
-        * 
         * <h5 class='section'>Example:</h5>
         * <p class='bcode'>
         *      <ja>@RestResource</ja>(
@@ -427,19 +415,21 @@ public @interface HtmlDoc {
         * <h5 class='section'>Notes:</h5>
         * <ul class='spaced-list'>
         *      <li>
+        *              The format of this value is Javascript.
+        *      <li>
         *              Supports <a class="doclink" 
href="../../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
         *              (e.g. <js>"$L{my.localized.variable}"</js>).
         *      <li>
         *              A value of <js>"NONE"</js> can be used to force no 
value.
         *      <li>
+        *              The parent value can be included by adding the literal 
<js>"INHERIT"</js> as a value.
+        *      <li>
         *              Multiple values are combined with newlines into a 
single string.
         *      <li>
         *              On methods, this value is inherited from the 
<ja>@HtmlDoc</ja> annotation on the servlet/resource class.
         *      <li>
         *              On servlet/resource classes, this value is inherited 
from the <ja>@HtmlDoc</ja> annotation on the
         *              parent class.
-        *      <li>
-        *              The parent value can be included by adding the literal 
<js>"INHERIT"</js> as a value.
         * </ul>
         * 
         * <h5 class='section'>See Also:</h5>
@@ -453,9 +443,6 @@ public @interface HtmlDoc {
        /**
         * Sets the HTML CSS style section contents.
         * 
-        * <p>
-        * The format of this value is CSS.
-        * 
         * <h5 class='section'>Example:</h5>
         * <p class='bcode'>
         *      <ja>@RestResource</ja>(
@@ -471,19 +458,21 @@ public @interface HtmlDoc {
         * <h5 class='section'>Notes:</h5>
         * <ul class='spaced-list'>
         *      <li>
+        *              The format of this value is CSS.
+        *      <li>
         *              Supports <a class="doclink" 
href="../../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
         *              (e.g. <js>"$L{my.localized.variable}"</js>).
         *      <li>
         *              A value of <js>"NONE"</js> can be used to force no 
value.
         *      <li>
+        *              The parent value can be included by adding the literal 
<js>"INHERIT"</js> as a value.
+        *      <li>
         *              Multiple values are combined with newlines into a 
single string.
         *      <li>
         *              On methods, this value is inherited from the 
<ja>@HtmlDoc</ja> annotation on the servlet/resource class.
         *      <li>
         *              On servlet/resource classes, this value is inherited 
from the <ja>@HtmlDoc</ja> annotation on the
         *              parent class.
-        *      <li>
-        *              The parent value can be included by adding the literal 
<js>"INHERIT"</js> as a value.
         * </ul>
         * 
         * <h5 class='section'>See Also:</h5>
@@ -498,14 +487,8 @@ public @interface HtmlDoc {
         * Sets the CSS URL in the HTML CSS style section.
         * 
         * <p>
-        * The format of this value is a URL.
-        * 
-        * <p>
         * Specifies the URL to the stylesheet to add as a link in the style 
tag in the header.
         * 
-        * <p>
-        * The format of this value is CSS.
-        * 
         * <h5 class='section'>Example:</h5>
         * <p class='bcode'>
         *      <ja>@RestResource</ja>(
@@ -518,6 +501,8 @@ public @interface HtmlDoc {
         * <h5 class='section'>Notes:</h5>
         * <ul class='spaced-list'>
         *      <li>
+        *              The format of this value is a URL.
+        *      <li>
         *              Supports <a class="doclink" 
href="../../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
 and request-time variables</a> 
         *              (e.g. <js>"$L{my.localized.variable}"</js>).
         *      <li>
@@ -567,13 +552,18 @@ public @interface HtmlDoc {
         * Defines widgets that can be used in conjunction with string 
variables of the form <js>"$W{name}"</js>to quickly
         * generate arbitrary replacement text.
         * 
+        * <p>
         * Widgets resolve the following variables:
-        * <ul>
-        *      <li><js>"$W{name}"</js> - Contents returned by {@link 
Widget#getHtml(RestRequest)}.
-        *      <li><js>"$W{name.script}"</js> - Contents returned by {@link 
Widget#getScript(RestRequest)}.
+        * 
+        * <ul class='spaced-list'>
+        *      <li>
+        *              <js>"$W{name}"</js> - Contents returned by {@link 
Widget#getHtml(RestRequest)}.
+        *      <li>
+        *              <js>"$W{name.script}"</js> - Contents returned by 
{@link Widget#getScript(RestRequest)}.
         *              <br>The script contents are automatically inserted into 
the <xt>&lt;head/script&gt;</xt> section
         *                       in the HTML page.
-        *      <li><js>"$W{name.style}"</js> - Contents returned by {@link 
Widget#getStyle(RestRequest)}.
+        *      <li>
+        *              <js>"$W{name.style}"</js> - Contents returned by {@link 
Widget#getStyle(RestRequest)}.
         *              <br>The styles contents are automatically inserted into 
the <xt>&lt;head/style&gt;</xt> section
         *                       in the HTML page.
         * </ul>
@@ -608,10 +598,7 @@ public @interface HtmlDoc {
         * 
         * <h5 class='section'>See Also:</h5>
         * <ul>
-        *      <li class='jf'>{@link RestContext#REST_widgets}
-        *      <li class='jm'>{@link RestContextBuilder#widgets(Class...)}
-        *      <li class='jm'>{@link RestContextBuilder#widgets(Widget...)}
-        *      <li class='jm'>{@link 
RestContextBuilder#widgets(boolean,Widget...)}
+        *      <li class='link'><a class="doclink" 
href="../../../../../overview-summary.html#juneau-rest-server.Widgets">Overview 
&gt; juneau-rest-server &gt; Widgets</a>
         * </ul>
         */
        Class<? extends Widget>[] widgets() default {};
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java
index e5cacfd..b181583 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java
@@ -423,7 +423,7 @@ public @interface RestMethod {
         * 
         * <h5 class='section'>See Also:</h5>
         * <ul>
-        *      <li class='jic'>{@link RestInfoProvider}
+        *      <li class='link'><a class="doclink" 
href="../../../../../overview-summary.html#juneau-rest-server.HtmlDocAnnotation">Overview
 &gt; juneau-rest-server &gt; @HtmlDoc</a>
         * </ul>
         */
        HtmlDoc htmldoc() default @HtmlDoc;
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
index 67f7de2..4cc0451 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
@@ -416,6 +416,11 @@ public @interface RestResource {
         *              )
         *      )
         * </p>
+        * 
+        * <h5 class='section'>See Also:</h5>
+        * <ul>
+        *      <li class='link'><a class="doclink" 
href="../../../../../overview-summary.html#juneau-rest-server.HtmlDocAnnotation">Overview
 &gt; juneau-rest-server &gt; @HtmlDoc</a>
+        * </ul>
         */
        HtmlDoc htmldoc() default @HtmlDoc;
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/BeanDescription.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/BeanDescription.java
index 8545d2c..080594d 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/BeanDescription.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/BeanDescription.java
@@ -47,6 +47,8 @@ public final class BeanDescription {
        public BeanDescription(Class<?> c) {
                type = c.getName();
                BeanMeta<?> bm = BeanContext.DEFAULT.getBeanMeta(c);
+               if (bm == null)
+                       throw new FormattedRuntimeException("Class ''{0}'' is 
not a valid bean.", c);
                properties = new 
BeanPropertyDescription[bm.getPropertyMetas().size()];
                int i = 0;
                for (BeanPropertyMeta pm : bm.getPropertyMetas())
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/NameDescription.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/NameDescription.java
index 8a981d0..b0e120a 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/NameDescription.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/NameDescription.java
@@ -58,9 +58,12 @@ public class NameDescription {
         * Sets the name field on this label to a new value.
         * 
         * @param name The new name.
+        * @return This object (for method chaining).
         */
-       public void setName(Object name) {
+       @BeanProperty
+       public NameDescription name(Object name) {
                this.name = name;
+               return this;
        }
 
        /**
@@ -76,8 +79,11 @@ public class NameDescription {
         * Sets the description field on this label to a new value.
         * 
         * @param description The new description.
+        * @return This object (for method chaining).
         */
-       public void setDescription(Object description) {
+       @BeanProperty
+       public NameDescription description(Object description) {
                this.description = description;
+               return this;
        }
 }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java
index 289b453..de20d66 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java
@@ -57,7 +57,7 @@ public class StyleMenuItem extends MenuItemWidget {
 
        private static final String[] BUILT_IN_STYLES = {"devops", "light", 
"original", "dark"};
 
-       @Override /* MenuItemWidget */
+       @Override /* Widget */
        public String getLabel(RestRequest req) {
                return "styles";
        }
@@ -65,7 +65,7 @@ public class StyleMenuItem extends MenuItemWidget {
         * Looks at the supported media types from the request and constructs a 
list of hyperlinks to render the data
         * as plain-text.
         */
-       @Override /* Widget */
+       @Override /* MenuItemWidget */
        public Div getContent(RestRequest req) throws Exception {
                Div div = div();
                for (String s : BUILT_IN_STYLES) {
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/Widget.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/Widget.java
index bfd707d..26ba538 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/Widget.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/Widget.java
@@ -25,9 +25,9 @@ import org.apache.juneau.utils.*;
  * <p>
  * Widgets are associated with resources through the following
  * <ul>
- *     <li>{@link HtmlDoc#widgets() @HtmlDoc.widgets}
- *     <li>{@link RestContextBuilder#widgets(Class...)}
- *     <li>{@link RestContextBuilder#widgets(Widget...)}
+ *     <li class='ja'>{@link HtmlDoc#widgets() @HtmlDoc.widgets}
+ *     <li class='jm'>{@link RestContextBuilder#widgets(Class...)}
+ *     <li class='jm'>{@link RestContextBuilder#widgets(Widget...)}
  * </ul>
  * 
  * <p>

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

Reply via email to