You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2022/06/24 08:26:41 UTC

[juneau-website] branch asf-site updated: Update website

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

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


The following commit(s) were added to refs/heads/asf-site by this push:
     new b439a2422 Update website
b439a2422 is described below

commit b439a242237506854de04970c234e1ac4505e341
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Fri Jun 24 04:26:04 2022 -0400

    Update website
---
 content/index.html         |  11 -
 templates/components.html  | 232 -------------------
 templates/config.html      | 169 --------------
 templates/dto.html         | 268 ----------------------
 templates/examples.html    | 131 -----------
 templates/index.html       |  11 -
 templates/marshall.html    | 557 ---------------------------------------------
 templates/petstore.html    | 555 --------------------------------------------
 templates/rest-client.html | 115 ----------
 templates/rest-server.html | 450 ------------------------------------
 10 files changed, 2499 deletions(-)

diff --git a/content/index.html b/content/index.html
index 8467adff6..2131a9d17 100644
--- a/content/index.html
+++ b/content/index.html
@@ -195,17 +195,6 @@
 	<nav>
 		<ul>
 			<li><a href='about.html' id='about' onclick="return select(this)">About</a>
-			<li><a href='components.html' id='components' onclick="return select(this)">Components</a>
-				<ul>
-					<li><a href='marshall.html' id='marshall' onclick="return select(this)">marshall</a>
-					<li><a href='dto.html' id='dto' onclick="return select(this)">dto</a>
-					<li><a href='config.html' id='config' onclick="return select(this)">config</a>
-					<li><a href='rest-server.html' id='rest-server' onclick="return select(this)">rest-server</a>
-					<li><a href='rest-client.html' id='rest-client' onclick="return select(this)">rest-client</a>
-					<li><a href='examples.html' id='examples' onclick="return select(this)">examples</a>
-					<li><a href='petstore.html' id='petstore' onclick="return select(this)">petstore</a>
-				</ul>
-			</li>
 			<li><a href='https://github.com/apache/juneau' target='_blank'>GitHub</a></li>
 			<li><a href='https://github.com/apache/juneau/wiki' target='_blank'>Wiki</a></li>
 			<li><a href='https://juneau.apache.org/site/apidocs-9.0-B1/overview-summary.html#overview.description' target='_blank'>Documentation</a></li>
diff --git a/templates/components.html b/templates/components.html
deleted file mode 100644
index 09e5721c8..000000000
--- a/templates/components.html
+++ /dev/null
@@ -1,232 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-	<!-- Google Tag Manager -->
-	<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
-	new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
-	j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
-	'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
-	})(window,document,'script','dataLayer','GTM-MT3PBTF');</script>
-	<!-- End Google Tag Manager -->
-
-	<style>
-		@import url("styles/juneau-code.css");
-		@import url("styles/juneau-doc.css");
-	</style>
-</head>
-<body>
-	<!-- Google Tag Manager (noscript) -->
-	<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MT3PBTF"
-	height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
-	<!-- End Google Tag Manager (noscript) -->	
-
-	<!-- =========================================================================================================== -->
-	<!-- === COMPONENTS ============================================================================================ -->
-	<!-- =========================================================================================================== -->
-	
-	<h5 class='toc'>Components</h5>
-	<div class='topic'>
-		<p>
-			We've strived to keep prerequisites to an absolute minimum in order to make adoption as easy as possible.
-		</p>
-		<p>
-			The library consists of the following artifacts found in the Maven group <code>"org.apache.juneau"</code>:
-		</p>
-		<table class='styled w800'>
-			<tr>
-				<th>Category</th><th>Maven Artifacts</th><th>Description</th><th>Prereqs</th>
-			</tr>
-			<tr class='dark bb'>
-				<td rowspan="5" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-core</td>
-				<td class='code'><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-marshall'>juneau-marshall</a></td>
-				<td>Serializers and parsers for:
-					<ul style='margin:0px 10px;'>
-						<li>JSON
-						<li>XML
-						<li>HTML
-						<li>UON
-						<li>URL-Encoding
-						<li>MessagePack
-						<li>OpenAPI
-						<li>SOAP/XML
-						<li>CSV
-						<li>BSON (coming soon)
-						<li>YAML (coming soon)
-						<li>Protobuf (coming soon)
-						<li>Amazon Ion (coming soon)
-					</ul>
-				</td>
-				<td>
-					<ul style='margin:0px 10px;'>
-						<li>Java 8
-					</ul>
-				</td>
-			</tr>
-			<tr class='dark bb'>
-				<td class='code'><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-marshall-rdf'>juneau-marshall-rdf</a></td>
-				<td>
-					Serializers and parsers for:
-					<ul style='margin:0px 10px;'>
-						<li>RDF/XML
-						<li>RDF/XML-Abbrev 
-						<li>N-Triple
-						<li>Turtle
-						<li>N3
-					</ul>				
-				</td>
-				<td>
-					<ul style='margin:0px 10px;'>
-						<li>Java 8
-						<li>Apache Jena 2.7.1
-					</ul>
-				</td>
-			</tr>
-			<tr class='dark bb'>
-				<td class='code'><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-dto'>juneau-dto</a></td>
-				<td>
-					Data Transfer Objects for:
-					<ul style='margin:0px 10px;'>
-						<li>HTML5
-						<li>Atom
-						<li>Cognos
-						<li>JSON-Schema
-						<li>Swagger 2.0
-					</ul>				
-				</td>
-				<td><ul style='margin:0px 10px;'><li>Java 8+</li></ul></td>
-			</tr>
-			<tr class='dark bb'>
-				<td class='code'><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-svl'>juneau-svl</a></td>
-				<td>
-					Simple Variable Language API
-				</td>
-				<td><ul style='margin:0px 10px;'><li>Java 8+</li></ul></td>
-			</tr>
-			<tr class='dark bb'>
-				<td class='code'><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-config'>juneau-config</a></td>
-				<td>
-					Configuration file API
-				</td>
-				<td><ul style='margin:0px 10px;'><li>Java 8+</li></ul></td>
-			</tr>
-			<tr class='light bb'>
-				<td rowspan="4" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-rest</td>
-				<td class='code'><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-rest-server'>juneau-rest-server</a></td>
-				<td>
-					REST Servlet API
-				</td>
-				<td>
-					<ul style='margin:0px 10px;'>
-						<li>Java 8
-						<li>Servlet 3.1+
-					</ul>
-				</td>
-			</tr>
-			<tr class='light bb'>
-				<td class='code'><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-rest-server-springboot'>juneau-rest-server-springboot</a></td>
-				<td>
-					Spring Boot integration support
-				</td>
-				<td>
-					<ul style='margin:0px 10px;'>
-						<li>Java 8+
-						<li>Spring Boot 2.0+
-					</ul>
-				</td>
-			</tr>
-			<tr class='light bb'>
-				<td class='code'><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-rest-server-jaxrs'>juneau-rest-server-jaxrs</a></td>
-				<td>
-					JAX-RS support
-				</td>
-				<td>
-					<ul style='margin:0px 10px;'>
-						<li>Java 8+
-						<li>JAX-RS 2.0
-					</ul>
-				</td>
-			</tr>
-			<tr class='light bb'>
-				<td class='code'><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-rest-client'>juneau-rest-client</a></td>
-				<td>
-					REST Client API
-				</td>
-				<td>
-					<ul style='margin:0px 10px;'>
-						<li>Java 8+
-						<li>Apache HttpClient 4.5+
-					</ul>
-				</td>
-			</tr>
-			<tr class='dark bb'>
-				<td rowspan="2" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-examples</td>
-				<td class='code'><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-examples-core'>juneau-examples-core</a></td>
-				<td>
-					Core code examples
-				</td>
-				<td></td>
-			</tr>
-			<tr class='dark bb'>
-				<td class='code'><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-examples-rest'>juneau-examples-rest</a></td>
-				<td>
-					REST code examples
-				</td>
-				<td></td>
-			</tr>
-			<tr class='light bb'>
-				<td rowspan="1" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-all</td>
-				<td class='code'><code>juneau-all</code></td>
-				<td>
-					Combination of the following:
-					<ul style='margin:0px 10px;'>
-						<li>juneau-marshall
-						<li>juneau-dto
-						<li>juneau-svl
-						<li>juneau-config
-						<li>juneau-rest-server
-						<li>juneau-rest-client
-					</ul>
-				</td>
-				<td>
-					<ul style='margin:0px 10px;'>
-						<li>Java 8+
-						<li>Servlet 3.1+
-						<li>Apache HttpClient 4.5+
-					</ul>
-				</td>
-			</tr>
-		</table>
-		
-		<p>
-			The current version of Juneau is <code>{@property juneauVersion}</code>.
-			The easiest way to pull in the library is through the following maven dependency:
-		</p>
-		<p class='bcode w800'>
-	<xt>&lt;dependency&gt;</xt>
-		<xt>&lt;groupId&gt;</xt>org.apache.juneau<xt>&lt;/groupId&gt;</xt>
-		<xt>&lt;artifactId&gt;</xt>juneau-all<xt>&lt;/artifactId&gt;</xt>
-		<xt>&lt;version&gt;</xt>{@property juneauVersion}<xt>&lt;/version&gt;</xt>
-	<xt>&lt;/dependency&gt;</xt>
-		</p>	
-		<p>
-			If you would like to work with the bleeding-edge code, you can access the <code>{@property juneauVersionNext}-SNAPSHOT</code>
-			version through the following repository:
-		</p>
-		<p class='bcode w800'>
-	<xt>&lt;pluginRepositories&gt;
-		&lt;pluginRepository&gt;
-			&lt;id&gt;<xv>apache.snapshots</xv>&lt;/id&gt;
-			&lt;url&gt;<xv>http://repository.apache.org/snapshots/</xv>&lt;/url&gt;
-			&lt;snapshots&gt;
-				&lt;enabled&gt;<xv>true</xv>&lt;/enabled&gt;
-				&lt;updatePolicy&gt;<xv>always</xv>&lt;/updatePolicy&gt;
-			&lt;/snapshots&gt;
-		&lt;/pluginRepository&gt;
-	&lt;/pluginRepositories&gt;</xt>
-		</p>	
-		<p>
-			Each of the components are also packaged as stand-alone OSGi modules.
-		</p>
-	</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/templates/config.html b/templates/config.html
deleted file mode 100644
index 5a6bf7223..000000000
--- a/templates/config.html
+++ /dev/null
@@ -1,169 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-	<!-- Google Tag Manager -->
-	<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
-	new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
-	j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
-	'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
-	})(window,document,'script','dataLayer','GTM-MT3PBTF');</script>
-	<!-- End Google Tag Manager -->
-
-	<style>
-		@import url("styles/juneau-code.css");
-		@import url("styles/juneau-doc.css");
-	</style>
-</head>
-<body>
-	<!-- Google Tag Manager (noscript) -->
-	<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MT3PBTF"
-	height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
-	<!-- End Google Tag Manager (noscript) -->	
-
-	<!-- ======================================================================================================= -->
-	<!-- === JUNEAU-CONFIG ===================================================================================== -->
-	<!-- ======================================================================================================= -->
-	
-	<h5 class='toc' id='juneau-config'>juneau-config</h5>
-	<div class='topic'>
-		<h5 class='figure'>Maven Dependency</h5>
-		<p class='bcode w500'>
-	<xt>&lt;dependency&gt;</xt>
-		<xt>&lt;groupId&gt;</xt>org.apache.juneau<xt>&lt;/groupId&gt;</xt>
-		<xt>&lt;artifactId&gt;</xt>juneau-config<xt>&lt;/artifactId&gt;</xt>
-		<xt>&lt;version&gt;</xt>{@property juneauVersion}<xt>&lt;/version&gt;</xt>
-	<xt>&lt;/dependency&gt;</xt>
-		</p>	
-	
-		<h5 class='figure'>Java Library</h5>
-		<p class='bcode w500'>
-	juneau-config-{@property juneauVersion}.jar 
-		</p>	
-	
-		<h5 class='figure'>OSGi Module</h5>
-		<p class='bcode w500'>
-	org.apache.juneau.config_{@property juneauVersion}.jar 
-		</p>	
-
-		<p>
-			The <code>juneau-config</code> module defines an API allows you to interact with INI-style configuration files using POJOs.  
-			It builds upon the marshalling and SVL APIs to provide sophisticated dynamic configuration files.
-		<p>
-		<p class='bcode w800'>
-	<cc>#--------------------------</cc>
-	<cc># My section</cc>
-	<cc>#--------------------------</cc>
-	<cs>[MySection]</cs>
-	
-	<cc># An integer</cc>
-	<ck>anInt</ck> = <cv>1</cv> 
-	
-	<cc># A boolean</cc>
-	<ck>aBoolean</ck> = <cv>true</cv>
-	
-	<cc># An int array</cc>
-	<ck>anIntArray</ck> = <cv>[1,2,3]</cv>
-	
-	<cc># A POJO that can be converted from a String</cc>
-	<ck>aURL</ck> = <cv>http://foo </cv>
-	
-	<cc># A POJO that can be converted from JSON</cc>
-	<ck>aBean</ck> = <cv>{foo:'bar',baz:123}</cv>
-	
-	<cc># A system property</cc>
-	<ck>locale</ck> = <cv>$S{java.locale, en_US}</cv>
-	
-	<cc># An environment variable</cc>
-	<ck>path</ck> = <cv>$E{PATH, unknown}</cv>
-	
-	<cc># A manifest file entry</cc>
-	<ck>mainClass</ck> = <cv>$MF{Main-Class}</cv>
-	
-	<cc># Another value in this config file</cc>
-	<ck>sameAsAnInt</ck> = <cv>$C{MySection/anInt}</cv>
-	
-	<cc># A command-line argument in the form "myarg=foo"</cc>
-	<ck>myArg</ck> = <cv>$ARG{myarg}</cv>
-	
-	<cc># The first command-line argument</cc>
-	<ck>firstArg</ck> = <cv>$ARG{0}</cv>
-
-	<cc># Look for system property, or env var if that doesn't exist, or command-line arg if that doesn't exist.</cc>
-	<ck>nested</ck> = <cv>$S{mySystemProperty,$E{MY_ENV_VAR,$ARG{0}}}</cv>
-
-	<cc># A POJO with embedded variables</cc>
-	<ck>aBean2</ck> = <cv>{foo:'$ARG{0}',baz:$C{MySection/anInt}}</cv>
-		</p>
-		<p>
-			The beauty of these files is that they're easy to read and modify, yet sophisticated enough to allow you to
-			store arbitrary-complex data structures and retrieve them as simple values or complex POJOs:
-		</p>
-		<p class='bcode w800'>
-	<jc>// Load our config file</jc>
-	Config <jv>config</jv> = Config.<jsm>create</jsm>().name(<js>"MyIniFile.cfg"</js>).build();
-	
-	<jk>int</jk> <jv>anInt</jv> = <jv>config</jv>.getInt(<js>"MySection/anInt"</js>); 
-	<jk>boolean</jk> <jv>aBoolean</jv> = <jv>config</jv>.getBoolean(<js>"MySection/aBoolean"</js>); 
-	<jk>int</jk>[] <jv>anIntArray</jv> = <jv>config</jv>.getObject(<js>"MySection/anIntArray"</js>, <jk>int</jk>[].<jk>class</jk>); 
-	URL <jv>aURL</jv> = <jv>config</jv>.getObject(<js>"MySection/aURL"</js>, URL.<jk>class</jk>); 
-	MyBean <jv>aBean</jv> = <jv>config</jv>.getObject(<js>"MySection/aBean"</js>, MyBean.<jk>class</jk>); 
-	Locale <jv>locale</jv> = <jv>config</jv>.getObject(<js>"MySection/locale"</js>, Locale.<jk>class</jk>); 
-	String <jv>path</jv> = <jv>config</jv>.getString(<js>"MySection/path"</js>); 
-	String <jv>mainClass</jv> = <jv>config</jv>.getString(<js>"MySection/mainClass"</js>); 
-	<jk>int</jk> <jv>sameAsAnInt</jv> = <jv>config</jv>.getInt(<js>"MySection/sameAsAnInt"</js>); 
-	String <jv>myArg</jv> = <jv>config</jv>.getString(<js>"MySection/myArg"</js>); 
-	String <jv>firstArg</jv> = <jv>config</jv>.getString(<js>"MySection/firstArg"</js>); 
-		</p>
-		<p>
-			One of the more powerful aspects of the REST servlets is that you can pull values directly from
-			config files by using the <js>"$C"</js> variable in annotations.
-			For example, the HTML stylesheet for your REST servlet can be defined in a config file like so:
-		</p>
-		<p class='bcode w800'>
-	<ja>@Rest</ja>(
-		path=<js>"/myResource"</js>,
-		config=<js>"$S{my.config.file}"</js>  <jc>// Path to config file (here pulled from a system property)</jc>
-	)
-	<ja>@HtmlDocConfig</ja>(
-		stylesheet=<js>"$C{MyResourceSettings/myStylesheet}"</js>  <jc>// Stylesheet location pulled from config file.</jc>
-	)
-	<jk>public class</jk> MyResource <jk>extends</jk> RestServlet {
-		</p>
-		<p>
-			Other features:
-		</p>
-		<ul class='spaced-list'>
-			<li>
-				Support for storing and retrieving any of the following data types:
-				<ul>
-					<li>Primitives
-					<li>POJOs
-					<li>Beans
-					<li>Arrays, Maps, and Collections of anything
-					<li>Binary data
-				</ul>
-			<li>
-				A listener API that allows you to, for example, reinitialize your REST resource if the config file 
-				changes, or listen for changes to particular sections or values.
-			<li>
-				Filesystem watcher integration allows configs to reflect changes on the file system in real-time.
-			<li>
-				Config files can be modified through the Config class (e.g. add/remove/modify sections and keys, add/remove comments and whitespace, etc...).
-				<br>When using these APIs, you <b>DO NOT</b> lose formatting in your existing configuration file.
-				All existing whitespace and comments are preserved for you!
-			<li>
-				Support for encoding of values for added security.
-			<li>
-				Config sections can be used to directly populate beans.
-			<li>
-				Config sections can be accessed and manipulated through Java interface proxies.
-			<li>
-				An extensible storage API allows you to write your own config storage location for files such as databases or the cloud.
-		</ul>
-		
-		<ul class='seealso'>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-config'>juneau-config</a>
-		</ul>
-	</div>	
-</body>
-</html>
\ No newline at end of file
diff --git a/templates/dto.html b/templates/dto.html
deleted file mode 100644
index d5cf8dab9..000000000
--- a/templates/dto.html
+++ /dev/null
@@ -1,268 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-	<!-- Google Tag Manager -->
-	<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
-	new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
-	j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
-	'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
-	})(window,document,'script','dataLayer','GTM-MT3PBTF');</script>
-	<!-- End Google Tag Manager -->
-
-	<style>
-		@import url("styles/juneau-code.css");
-		@import url("styles/juneau-doc.css");
-	</style>
-</head>
-<body>
-	<!-- Google Tag Manager (noscript) -->
-	<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MT3PBTF"
-	height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
-	<!-- End Google Tag Manager (noscript) -->	
-
-	<!-- ======================================================================================================= -->
-	<!-- === JUNEAU-DTO ======================================================================================== -->
-	<!-- ======================================================================================================= -->
-	
-	<h5 class='toc' id='juneau-dto'>juneau-dto</h5>
-	<div class='topic'>
-		<h5 class='figure'>Maven Dependency</h5>
-		<p class='bcode w500'>
-	<xt>&lt;dependency&gt;</xt>
-		<xt>&lt;groupId&gt;</xt>org.apache.juneau<xt>&lt;/groupId&gt;</xt>
-		<xt>&lt;artifactId&gt;</xt>juneau-dto<xt>&lt;/artifactId&gt;</xt>
-		<xt>&lt;version&gt;</xt>{@property juneauVersion}<xt>&lt;/version&gt;</xt>
-	<xt>&lt;/dependency&gt;</xt>
-		</p>	
-	
-		<h5 class='figure'>Java Library</h5>
-		<p class='bcode w500'>
-	juneau-dto-{@property juneauVersion}.jar 
-		</p>	
-	
-		<h5 class='figure'>OSGi Module</h5>
-		<p class='bcode w500'>
-	org.apache.juneau.dto_{@property juneauVersion}.jar 
-		</p>	
-
-		<p>
-			Data Transfer Object libraries are provided for a variety of languages that allow you to serialize commonly-used
-			documents.  
-		</p>
-		<ul>
-			<li>HTML5
-			<li>Atom
-			<li>Cognos
-			<li>JSON-Schema
-			<li>Swagger 2.0
-		</ul>				
-		<p>	
-			HTML5 documents and fragments can be constructed using the HTML5 DTOs and HTML or XML serializers:
-		</p>
-		<p class='bcode w800'>
-	<jk>import static</jk> org.apache.juneau.dto.html5.HtmlBuilder.*;
-		
-	Object <jv>myform</jv> =
-		<jsm>form</jsm>().action(<js>"/submit"</js>).method(<js>"POST"</js>)
-		.children(
-			<js>"Position (1-10000): "</js>, <jsm>input</jsm>(<js>"number"</js>).name(<js>"pos"</js>).value(1), <jsm>br</jsm>(),
-			<js>"Limit (1-10000): "</js>, <jsm>input</jsm>(<js>"number"</js>).name(<js>"limit"</js>).value(100), <jsm>br</jsm>(),
-			<jsm>button</jsm>(<js>"submit"</js>, <js>"Submit"</js>),
-			<jsm>button</jsm>(<js>"reset"</js>, <js>"Reset"</js>)
-		); 	
-
-	String <jv>html</jv> = HtmlSerializer.<jsf>DEFAULT</jsf>.serialize(<jv>myform</jv>);
-		</p>
-		<p class='bcode w800'><xt>
-	&lt;form <xa>action</xa>=<xs>'/submit'</xs> <xa>method</xa>=<xs>'POST'</xs>&gt;
-		<xv>Position (1-10000):</xv> &lt;input <xa>name</xa>=<xs>'pos'</xs> <xa>type</xa>=<xs>'number'</xs> <xa>value</xa>=<xs>'1'</xs>/&gt;&lt;br/&gt;
-		<xv>Limit (1-10000):</xv> &lt;input <xa>name</xa>=<xs>'pos'</xs> <xa>type</xa>=<xs>'number'</xs> <xa>value</xa>=<xs>'100'</xs>/&gt;&lt;br/&gt;
-		&lt;button <xa>type</xa>=<xs>'submit'</xs>&gt;<xv>Submit</xv>&lt;/button&gt;
-		&lt;button <xa>type</xa>=<xs>'reset'</xs>&gt;<xv>Reset</xv>&lt;/button&gt;			 
-	&lt;/form&gt;
-		</xt></p>
-		<p>
-			And you're not limited to just HTML.  The HTML5 beans are POJOs that can be serialized using any
-			of the serializers, such as lax JSON:
-		</p>
-		<p class='bcode w800'>
-	{
-		<jok>_type</jok>: <jov>'form'</jov>,
-		<jok>a</jok>: { <jok>action</jok>: <jov>'/submit'</jov>, <jok>method</jok>: <jov>'POST'</jov> },
-		<jok>c</jok>: [
-			<jov>'Position (1-10000): '</jov>,
-			{ <jok>_type</jok>: <jov>'input'</jov>, <jok>a</jok>: { <jok>type</jok>: <jov>'number'</jov>, <jok>name</jok>: <jov>'pos'</jov>, <jok>value</jok>: <jov>1</jov> } },
-			{ <jok>_type</jok>: <jov>'br'</jov> },
-			<jov>'Limit (1-10000): '</jov>,
-			{ <jok>_type</jok>: <jov>'input'</jov>, <jok>a</jok>: { <jok>type</jok>: <jov>'number'</jov>, <jok>name</jok>: <jov>'limit'</jov>, <jok>value</jok>: <jov>100</jov> } },
-			{ <jok>_type</jok>: <jov>'br'</jov> },
-			{ <jok>_type</jok>: <jov>'button'</jov>, <jok>a</jok>: { <jok>type</jok>: <jov>'submit'</jov> }, <jok>c</jok>: [ <jov>'Submit'</jov> ] },
-			{ <jok>_type</jok>: <jov>'button'</jov>, <jok>a</jok>: { <jok>type</jok>: <jov>'reset'</jov> }, <jok>c</jok>: [ <jov>'Reset'</jov> ] }
-		]
-	}			
-		</p>
-		
-		<p>	
-			ATOM feeds can be constructed using the ATOM DTOs and XML serializer:
-		</p>
-		<p class='bcode w800'>
-	<jk>import static</jk> org.apache.juneau.dto.atom.AtomBuilder.*;
-	
-	Feed <jv>feed</jv> = 
-		<jsm>feed</jsm>(<js>"tag:juneau.apache.org"</js>, <js>"Juneau ATOM specification"</js>, <js>"2016-01-02T03:04:05Z"</js>)
-		.subtitle(<jsm>text</jsm>(<js>"html"</js>).text(<js>"Describes &lt;em&gt;stuff&lt;/em&gt; about Juneau"</js>))
-		.links(
-			<jsm>link</jsm>(<js>"alternate"</js>, <js>"text/html"</js>, <js>"http://juneau.apache.org/"</js>).hreflang(<js>"en"</js>),
-			<jsm>link</jsm>(<js>"self"</js>, <js>"application/atom+xml"</js>, <js>"http://juneau.apache.org/feed.atom"</js>)
-		)
-		.rights(<js>"Copyright (c) 2016, Apache Foundation"</js>)
-		.entries(
-			<jsm>entry</jsm>(<js>"tag:juneau.sample.com,2013:1.2345"</js>, <js>"Juneau ATOM specification snapshot"</js>, <js>"2016-01-02T03:04:05Z"</js>)
-			.published(<js>"2016-01-02T03:04:05Z"</js>)
-			.content(
-				<jsm>content</jsm>(<js>"xhtml"</js>)
-				.lang(<js>"en"</js>)
-				.base(<js>"http://www.apache.org/"</js>)
-				.text(<js>"&lt;div&gt;&lt;p&gt;&lt;i&gt;[Update: Juneau supports ATOM.]&lt;/i&gt;&lt;/p&gt;&lt;/div&gt;"</js>)
-			)
-		);
-	
-	<jc>// Serialize to ATOM/XML</jc>
-	String <jv>atomXml</jv> = XmlSerializer.<jsf>DEFAULT</jsf>.serialize(<jv>feed</jv>);
-			</p>
-			<p class='bcode w800'>
-	<xt>&lt;feed&gt;</xt>
-		<xt>&lt;id&gt;</xt>
-			tag:juneau.apache.org
-		<xt>&lt;/id&gt;</xt>
-		<xt>&lt;link</xt> <xa>href</xa>=<xs>'http://juneau.apache.org/'</xs> <xa>rel</xa>=<xs>'alternate'</xs> <xa>type</xa>=<xs>'text/html'</xs> <xa>hreflang</xa>=<xs>'en'</xs>/<xt>&gt;</xt>
-		<xt>&lt;link</xt> <xa>href</xa>=<xs>'http://juneau.apache.org/feed.atom'</xs> <xa>rel</xa>=<xs>'self'</xs> <xa>type</xa>=<xs>'application/atom+xml'</xs>/<xt>&gt;</xt>
-		<xt>&lt;rights&gt;</xt>
-			Copyright (c) 2016, Apache Foundation
-		<xt>&lt;/rights&gt;</xt>
-		<xt>&lt;title</xt> <xa>type</xa>=<xs>'text'</xs>&gt;</xt>
-			Juneau ATOM specification
-		<xt>&lt;/title&gt;</xt>
-		<xt>&lt;updated&gt;</xt>2016-01-02T03:04:05Z<xt>&lt;/updated&gt;</xt>
-		<xt>&lt;subtitle</xt> <xa>type</xa>=<xs>'html'</xs><xt>&gt;</xt>
-			Describes &lt;em&gt;stuff&lt;/em&gt; about Juneau
-		<xt>&lt;/subtitle&gt;</xt>
-		<xt>&lt;entry&gt;</xt>
-			<xt>&lt;id&gt;</xt>
-				tag:juneau.apache.org
-			<xt>&lt;/id&gt;</xt>
-			<xt>&lt;title&gt;</xt>
-				Juneau ATOM specification snapshot
-			<xt>&lt;/title&gt;</xt>
-			<xt>&lt;updated&gt;</xt>2016-01-02T03:04:05Z<xt>&lt;/updated&gt;</xt>
-			<xt>&lt;content</xt> <xa>base</xa>=<xs>'http://www.apache.org/'</xs> <xa>lang</xa>=<xs>'en'</xs> <xa>type</xa>=<xs>'xhtml'</xs><xt>&gt;</xt>
-				<xt>&lt;div</xt> <xa>xmlns</xa>=<xs>"http://www.w3.org/1999/xhtml"</xs><xt>&gt;&lt;p&gt;&lt;i&gt;</xt>[Update: Juneau supports ATOM.]<xt>&lt;/i&gt;&lt;/p&gt;&lt;/div&gt;</xt>
-			<xt>&lt;/content&gt;</xt>
-			<xt>&lt;published&gt;</xt>2016-01-02T03:04:05Z<xt>&lt;/published&gt;</xt>
-		<xt>&lt;/entry&gt;</xt>
-	<xt>&lt;/feed&gt;</xt>		
-		</p>
-		<p>	
-			Swagger documents can be constructed using the Swagger DTOs and JSON serializer:
-		</p>
-		<p class='bcode w800'>
-	<jk>import static</jk> org.apache.juneau.dto.swagger.SwaggerBuilder.*;
-
-	Swagger <jv>swagger</jv> = <jsm>swagger</jsm>()
-		.swagger(<js>"2.0"</js>)
-		.info(
-			<jsm>info</jsm>(<js>"Swagger Petstore"</js>, <js>"1.0.0"</js>)
-				.description(<js>"This is a sample server Petstore server."</js>)
-				.termsOfService(<js>"http://swagger.io/terms/"</js>)
-				.contact(
-					<jsm>contact</jsm>().email(<js>"apiteam@swagger.io"</js>)
-				)
-				.license(
-					<jsm>license</jsm>(<js>"Apache 2.0"</js>).url(<js>"http://www.apache.org/licenses/LICENSE-2.0.html"</js>)
-				)
-		)
-		.path(<js>"/pet"</js>, <js>"post"</js>,
-			<jsm>operation</jsm>()
-				.tags(<js>"pet"</js>)
-				.summary(<js>"Add a new pet to the store"</js>)
-				.description(<js>""</js>)
-				.operationId(<js>"addPet"</js>)
-				.consumes(MediaType.<jsf>JSON</jsf>, MediaType.<jsf>XML</jsf>)
-				.produces(MediaType.<jsf>JSON</jsf>, MediaType.<jsf>XML</jsf>)
-				.parameters(
-					<jsm>parameterInfo</jsm>(<js>"body"</js>, <js>"body"</js>)
-						.description(<js>"Pet object that needs to be added to the store"</js>)
-						.required(<jk>true</jk>)
-				)
-				.response(405, <jsm>responseInfo</jsm>(<js>"Invalid input"</js>))
-		);
-
-	<jc>// Serialize to Swagger/JSON</jc>
-	String <jv>swaggerJson</jv> = JsonSerializer.<jsf>DEFAULT_READABLE</jsf>.serialize(<jv>swagger</jv>);
-		</p>
-		<p class='bcode w800'>
-	{
-		<jok>"swagger"</jok>: <jov>"2.0"</jov>,
-		<jok>"info"</jok>: {
-			<jok>"title"</jok>: <jov>"Swagger Petstore"</jov>,
-			<jok>"description"</jok>: <jov>"This is a sample server Petstore server."</jov>,
-			<jok>"version"</jok>: <jov>"1.0.0"</jov>,
-			<jok>"termsOfService"</jok>: <jov>"http://swagger.io/terms/"</jov>,
-			<jok>"contact"</jok>: {
-				<jok>"email"</jok>: <jov>"apiteam@swagger.io"</jov>
-			},
-			<jok>"license"</jok>: {
-				<jok>"name"</jok>: <jov>"Apache 2.0"</jov>,
-				<jok>"url"</jok>: <jov>"http://www.apache.org/licenses/LICENSE-2.0.html"</jov>
-			}
-		},
-		<jok>"paths"</jok>: {
-			<jok>"/pet"</jok>: {
-				<jok>"post"</jok>: {
-					<jok>"tags"</jok>: [
-						<jov>"pet"</jov>
-					],
-					<jok>"summary"</jok>: <jov>"Add a new pet to the store"</jov>,
-					<jok>"description"</jok>: <jov>""</jov>,
-					<jok>"operationId"</jok>: <jov>"addPet"</jov>,
-					<jok>"consumes"</jok>: [
-						<jov>"application/json"</jov>,
-						<jov>"text/xml"</jov>
-					],
-					<jok>"produces"</jok>: [
-						<jov>"application/json"</jov>,
-						<jov>"text/xml"</jov>
-					],
-					<jok>"parameters"</jok>: [
-						{
-							<jok>"in"</jok>: <jov>"body"</jov>,
-							<jok>"name"</jok>: <jov>"body"</jov>,
-							<jok>"description"</jok>: <jov>"Pet object that needs to be added to the store"</jov>,
-							<jok>"required"</jok>: <jov>true</jov>
-						}
-					],
-					<jok>"responses"</jok>: {
-						<jok>"405"</jok>: {
-							<jok>"description"</jok>: <jov>"Invalid input"</jov>
-						}
-					}
-				}
-			}
-		}
-	}		
-		</p>
-		<p>
-			Note that these DTOs can also be serialized to any of the other supported languages such as JSON or MessagePack!
-			And they can be parsed back into their original objects!
-		</p>
-		<p>
-			As a convenience, you can also simply call <code>toString()</code> on any of these DTOs and they will
-			be serialized directly to a string in the typical language (e.g. HTML5 beans to HTML, Swagger to JSON, etc...).
-		</p>
-		
-		<ul class='seealso'>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-dto'>juneau-dto</a>
-		</ul>
-	</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/templates/examples.html b/templates/examples.html
deleted file mode 100644
index fda57b536..000000000
--- a/templates/examples.html
+++ /dev/null
@@ -1,131 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-	<!-- Google Tag Manager -->
-	<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
-	new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
-	j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
-	'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
-	})(window,document,'script','dataLayer','GTM-MT3PBTF');</script>
-	<!-- End Google Tag Manager -->
-
-	<style>
-		@import url("styles/juneau-code.css");
-		@import url("styles/juneau-doc.css");
-	</style>
-</head>
-<body>
-	<!-- Google Tag Manager (noscript) -->
-	<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MT3PBTF"
-	height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
-	<!-- End Google Tag Manager (noscript) -->	
-	
-	<!-- ======================================================================================================= -->
-	<!-- === JUNEAU-EXAMPLES-CORE ============================================================================== -->
-	<!-- ======================================================================================================= -->
-
-	<h5 class='toc' id='juneau-examples-core'>juneau-examples-core</h5>
-	<div class='topic'>
-		<h5 class='figure'>Archive File</h5>
-		<p class='bcode w500'>
-	juneau-examples-core-{@property juneauVersion}.zip 
-		</p>	
-	
-		<p>
-			The <code>juneau-examples-core</code> project contains various code examples for using the core APIs. 
-		</p>
-	
-		<img class='bordered' src='images/juneau-examples-core.Installing.3.png' style='width:400px'>
-	
-		<ul class='seealso'>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-examples-core'>juneau-examples-core</a>
-		</ul>
-	</div>	
-	
-	<!-- ======================================================================================================= -->
-	<!-- === JUNEAU-EXAMPLES-REST ============================================================================== -->
-	<!-- ======================================================================================================= -->
-
-	<h5 class='toc' id='juneau-examples-rest'>juneau-examples-rest</h5>
-	<div class='topic'>
-		<h5 class='figure'>Archive File</h5>
-		<p class='bcode w500'>
-	juneau-examples-rest-{@property juneauVersion}.zip 
-		</p>	
-	
-		<p>
-			The <code>juneau-examples-rest</code> project includes various examples of REST resources written
-			using Juneau.
-		</p>
-		<p>
-			When running, it produces the following REST interface:
-		</p>
-		
-		<p class='bcode w800'>
-	http://localhost:10000
-		</p>			
-		<img class='bordered w800' src='images/juneau-examples-rest.RootResources.1.png'>
-	
-		<ul class='seealso'>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-examples-rest'>juneau-examples-rest</a>
-		</ul>
-	</div>	
-
-	<!-- ======================================================================================================= -->
-	<!-- === JUNEAU-EXAMPLES-REST-JETTY ======================================================================== -->
-	<!-- ======================================================================================================= -->
-
-	<h5 class='toc' id='juneau-examples-rest-jetty'>juneau-examples-rest-jetty</h5>
-	<div class='topic'>
-		<h5 class='figure'>Archive File</h5>
-		<p class='bcode w500'>
-	juneau-examples-rest-jetty-{@property juneauVersion}.zip 
-		</p>	
-	
-		<p>
-			The <code>juneau-examples-rest-jetty</code> project includes everything you need create a Samples REST 
-			microservice in an Eclipse workspace and build it as an executable jar.
-		</p>
-	
-		<img class='bordered' src='images/juneau-examples-rest-jetty.Installing.3.png' style='width:400px'>
-
-		<ul class='seealso'>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-examples-rest-jetty'>juneau-examples-rest-jetty</a>
-		</ul>
-	</div>	
-
-	<!-- ======================================================================================================= -->
-	<!-- === JUNEAU-EXAMPLES-REST-SPRINGBOOT =================================================================== -->
-	<!-- ======================================================================================================= -->
-
-	<h5 class='toc' id='juneau-examples-rest'>juneau-examples-rest-springboot</h5>
-	<div class='topic'>
-		<h5 class='figure'>Archive File</h5>
-		<p class='bcode w500'>
-	juneau-examples-rest-springboot{@property juneauVersion}.zip 
-		</p>	
-	
-		<p>
-			The <code>juneau-examples-rest-springboot</code> library contains the same examples as <code>juneau-examples-rest</code>
-			but also includes the following:
-		</p>
-		<ul class='spaced-list'>
-			<li>
-				A starter class for invoking the examples using Spring Boot.
-			<li>
-				A resource resolver for resolving REST resources as injectable beans.
-			<li>
-				A POM that extends from <code>spring-boot-starter-parent</code> that allows you to build a fully-shaded executable jar.
-			<li>
-				Configuration files for deploying the microservice to Heroku.
-		</ul>
-	
-		<img class='bordered' src='images/juneau-examples-rest-springboot.Installing.3.png' style='width:400px'>
-
-		<ul class='seealso'>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-examples-rest-springboot'>juneau-examples-rest-springboot</a>
-		</ul>
-	</div>	
-
-</body>
-</html>
\ No newline at end of file
diff --git a/templates/index.html b/templates/index.html
index cb8e4a450..11869ea0e 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -195,17 +195,6 @@
 	<nav>
 		<ul>
 			<li><a href='about.html' id='about' onclick="return select(this)">About</a>
-			<li><a href='components.html' id='components' onclick="return select(this)">Components</a>
-				<ul>
-					<li><a href='marshall.html' id='marshall' onclick="return select(this)">marshall</a>
-					<li><a href='dto.html' id='dto' onclick="return select(this)">dto</a>
-					<li><a href='config.html' id='config' onclick="return select(this)">config</a>
-					<li><a href='rest-server.html' id='rest-server' onclick="return select(this)">rest-server</a>
-					<li><a href='rest-client.html' id='rest-client' onclick="return select(this)">rest-client</a>
-					<li><a href='examples.html' id='examples' onclick="return select(this)">examples</a>
-					<li><a href='petstore.html' id='petstore' onclick="return select(this)">petstore</a>
-				</ul>
-			</li>
 			<li><a href='https://github.com/apache/juneau' target='_blank'>GitHub</a></li>
 			<li><a href='https://github.com/apache/juneau/wiki' target='_blank'>Wiki</a></li>
 			<li><a href='https://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#overview.description' target='_blank'>Documentation</a></li>
diff --git a/templates/marshall.html b/templates/marshall.html
deleted file mode 100644
index 52467be5f..000000000
--- a/templates/marshall.html
+++ /dev/null
@@ -1,557 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-	<!-- Google Tag Manager -->
-	<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
-	new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
-	j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
-	'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
-	})(window,document,'script','dataLayer','GTM-MT3PBTF');</script>
-	<!-- End Google Tag Manager -->
-
-	<style>
-		@import url("styles/juneau-code.css");
-		@import url("styles/juneau-doc.css");
-	</style>
-</head>
-<body>
-	<!-- Google Tag Manager (noscript) -->
-	<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MT3PBTF"
-	height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
-	<!-- End Google Tag Manager (noscript) -->	
-
-	<!-- ======================================================================================================= -->
-	<!-- === JUNEAU-MARSHALL =================================================================================== -->
-	<!-- ======================================================================================================= -->
-	
-	<h5 class='toc' id='juneau-marshall'>juneau-marshall</h5>
-	<div class='topic'>
-		<h5 class='figure'>Maven Dependency</h5>
-		<p class='bcode w500'>
-	<xt>&lt;dependency&gt;</xt>
-		<xt>&lt;groupId&gt;</xt>org.apache.juneau<xt>&lt;/groupId&gt;</xt>
-		<xt>&lt;artifactId&gt;</xt>juneau-marshall<xt>&lt;/artifactId&gt;</xt>
-		<xt>&lt;version&gt;</xt>{@property juneauVersion}<xt>&lt;/version&gt;</xt>
-	<xt>&lt;/dependency&gt;</xt>
-		</p>	
-	
-		<h5 class='figure'>Java Library</h5>
-		<p class='bcode w500'>
-	juneau-marshall-{@property juneauVersion}.jar 
-		</p>	
-	
-		<h5 class='figure'>OSGi Module</h5>
-		<p class='bcode w500'>
-	org.apache.juneau.marshall_{@property juneauVersion}.jar 
-		</p>	
-
-		<p>
-			The <code>juneau-marshall</code> library includes easy-to-use and highly customizable serializers and parsers
-			based around a common API.  
-		</p>
-		<p>
-			<a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#Glossaries.LanguageSupport'>Glossary &gt; Language Support</a>
-		</p>
-		<p>
-			Features include:
-		</p>
-		<ul class='spaced-list'>
-			<li>Serializers can send output directly to Writers, OutputStreams, Files, Strings, or byte arrays.
-			<li>Parsers can receive input directly from Readers, InputStreams, Files, Strings, or byte arrays.
-			<li>Parsers can reconstruct arbitrarily complex data structures consisting of maps, collections, beans, and other POJOs.
-			<li>Serializers and parsers do not use intermediate DOMs!  POJOs are serialized directly to streams and parsed back directly to POJOs, making them extremely efficient and fast.
-			<li>Supported languages are highly-customizable and powerful.  For example, JSON support includes:
-				<ul>
-					<li>Support for variants such as LAX syntax (unquoted attributes and single quotes).
-					<li>Support for embedded Javascript comments.
-					<li>Fully RFC1759 compliant.
-					<li>20% faster than Jackson.
-				</ul>
-		</ul>
-		<hr>
-		<p>
-			The default serializers can often be used to serialize POJOs in a single line of code:
-		</p>
-		<p class='bcode w800'>
-	<jc>// A simple bean</jc>
-	<jk>public class</jk> Person {
-		<jk>public</jk> String <jf>name</jf> = <js>"John Smith"</js>;
-		<jk>public int</jk> <jf>age</jf> = 21;
-	}
-	
-	Person <jv>person</jv> = <jk>new</jk> Person();  <jc>// An arbitrary POJO</jc>
-	
-	<jc>// Produces:
-	// "{name:'John Smith',age:21}"</jc>
-	String <jv>laxJson</jv> = SimpleJsonSerializer.<jsf>DEFAULT</jsf>.serialize(<jv>person</jv>);
-	
-	<jc>// Produces:
-	// "{"name":"John Smith","age":21}"</jc>
-	String <jv>strictJson</jv> = JsonSerializer.<jsf>DEFAULT</jsf>.serialize(<jv>person</jv>);
-	
-	<jc>// Produces:
-	// &lt;object&gt;
-	//   &lt;name&gt;John Smith&lt;/name&gt;
-	//   &lt;age&gt;21&lt;/age&gt;
-	// &lt;/object&gt;</jc>
-	String <jv>xml</jv> = XmlSerializer.<jsf>DEFAULT</jsf>.serialize(<jv>person</jv>);
-	
-	<jc>// Produces:
-	// &lt;table&gt;
-	//   &lt;tr&gt;&lt;td&gt;name&lt;/td&gt;&lt;td&gt;John Smith&lt;/td&gt;&lt;/tr&gt;
-	//   &lt;tr&gt;&lt;td&gt;age&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;/tr&gt;
-	// &lt;/table&gt;</jc>
-	String <jv>html</jv> = HtmlSerializer.<jsf>DEFAULT</jsf>.serialize(<jv>person</jv>);
-	
-	<jc>// Same as Html, but wraps it in HTML and BODY elements with page title/description/links:</jc>
-	String <jv>htmlDoc</jv> = HtmlDocSerializer.<jsf>DEFAULT</jsf>.serialize(<jv>person</jv>);
-
-	<jc>// Produces:
-	// name='John+Smith'&amp;age=21</jc>
-	String <jv>urlEncoding</jv> = UrlEncodingSerializer.<jsf>DEFAULT</jsf>.serialize(<jv>person</jv>);
-
-	<jc>// Produces:
-	// (name='John Smith',age=21)</jc>
-	String <jv>uon</jv> = UonSerializer.<jsf>DEFAULT</jsf>.serialize(<jv>person</jv>);
-
-	<jc>// Produces:
-	// 82 A4 name AA 4A John Smith 68 A3 age 15</jc>
-	<jk>byte</jk>[] <jv>messagePack</jv> = MsgPackSerializer.<jsf>DEFAULT</jsf>.serialize(<jv>person</jv>);
-		</p>
-		
-		<ul class='seealso'>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-marshall.Serializers'>juneau-marshall > Serializers</a>
-		</ul>
-		
-		<hr>
-
-		<p>
-			Parsing back into POJOs is equally simple for any of the supported languages shown above.  
-			Language fragments are also supported.
-		</p>
-		<p>
-			JSON parsing shown here:
-		</p>
-		<p class='bcode w800'>
-	<jc>// Use one of the predefined parsers.</jc>
-	ReaderParser <jv>parser</jv> = JsonParser.<jsf>DEFAULT</jsf>;
-	
-	<jc>// Parse a JSON object (creates a generic ObjectMap).</jc>
-	String <jv>json</jv> = <js>"{name:'John Smith',age:21}"</js>;
-	Map <jv>map</jv> = <jv>parser</jv>.parse(<jv>json</jv>, Map.<jk>class</jk>);
-	
-	<jc>// Parse a JSON string.</jc>
-	<jv>json</jv> = <js>"'foobar'"</js>;
-	String <jv>string</jv> = <jv>parser</jv>.parse(<jv>json</jv>, String.<jk>class</jk>);
-	
-	<jc>// Parse a JSON number as a Long or Float.</jc>
-	<jv>json</jv> = <js>"123"</js>;
-	Long <jv>_long</jv> = <jv>parser</jv>.parse(<jv>json</jv>, Long.<jk>class</jk>);
-	Float <jv>_float</jv> = <jv>parser</jv>.parse(<jv>json</jv>, Float.<jk>class</jk>);
-	
-	<jc>// Parse a JSON object as a bean.</jc>
-	<jv>json</jv> = <js>"{name:'John Smith',age:21}"</js>;
-	Person <jv>person</jv> = <jv>parser</jv>.parse(<jv>json</jv>, Person.<jk>class</jk>);
-	
-	<jc>// Parse a JSON object as a HashMap&lt;String,Person&gt;.</jc>
-	<jv>json</jv> = <js>"{a:{name:'John Smith',age:21},b:{name:'Joe Smith',age:42}}"</js>;
-	Map&lt;String,Person&gt; <jv>personMap</jv> = <jv>parser</jv>.parse(
-		<jv>json</jv>, 
-		HashMap.<jk>class</jk>, 
-		String.<jk>class</jk>, 
-		Person.<jk>class</jk>
-	);
-	
-	<jc>// Parse a JSON object as a HashMap&lt;String,LinkedList&lt;Person&gt;&gt;.</jc>
-	<jv>json</jv> = <js>"{a:[{name:'John Smith',age:21},{name:'Joe Smith',age:42}]}"</js>;
-	Map&lt;String,List&lt;Person&gt;&gt; <jv>personListMap</jv> = <jv>parser</jv>.parse(
-		<jv>json</jv>, 
-		HashMap.<jk>class</jk>, 
-		String.<jk>class</jk>, 
-		LinkedList.<jk>class</jk>, 
-		Person.<jk>class</jk>
-	);
-
-	<jc>// Parse a JSON array of integers as a Collection of Integers or int[] array.</jc>
-	<jv>json</jv> = <js>"[1,2,3]"</js>;
-	List&lt;Integer&gt; <jv>integerList</jv> = <jv>parser</jv>.parse(
-		<jv>json</jv>, 
-		LinkedList.<jk>class</jk>, 
-		Integer.<jk>class</jk>
-	);
-	<jk>int</jk>[] <jv>intList</jv> = <jv>parser</jv>.parse(
-		<jv>json</jv>, 
-		<jk>int</jk>[].<jk>class</jk>
-	);
-	
-	<jc>// Parse arbitrary input into ObjectMap or ObjectList objects 
-	// (similar to JSONObject/JSONArray but generalized for all languages).</jc>
-	<jv>json</jv> = <js>"{name:'John Smith',age:21}"</js>;
-	OMap <jv>oMap</jv> = <jv>parser</jv>.parse(<jv>json</jv>, OMap.<jk>class</jk>);
-	<jk>int</jk> age = <jv>oMap</jv>.getInt(<js>"age"</js>);
-	
-	<jv>json</jv> = <js>"[1,true,null]"</js>;
-	OList <jv>oList</jv> = <jv>parser</jv>.parse(<jv>json</jv>, ObjectList.<jk>class</jk>);  
-	<jk>boolean</jk> <jv>boolean</jv> = <jv>oList</jv>.getBoolean(1);
-		</p>
-
-		<ul class='seealso'>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-marshall.Parsers'>juneau-marshall > Parsers</a>
-		</ul>
-		<hr>
-		<p>
-			Marshalls are pairings of serializers and parsers in a single class for even simpler code:
-		</p>
-		<p class='bcode w800'>
-	Person <jv>person</jv> = <jk>new</jk> Person(); <jc>// An arbitrary POJO</jc>
-
-	<jc>// Serialize</jc>
-	String <jv>json</jv> = Json.<jsf>DEFAULT</jsf>.write(<jv>person</jv>);
-	String <jv>simpleJson</jv> = SimpleJson.<jsf>DEFAULT</jsf>.write(<jv>person</jv>);
-	String <jv>xml</jv> = Xml.<jsf>DEFAULT</jsf>.write(<jv>person</jv>);
-	String <jv>html</jv> = Html.<jsf>DEFAULT</jsf>.write(<jv>person</jv>);
-	String <jv>uon</jv> = Uon.<jsf>DEFAULT</jsf>.write(<jv>person</jv>);
-	String <jv>urlEncoding</jv> = UrlEncoding.<jsf>DEFAULT</jsf>.write(<jv>person</jv>);
-	String <jv>openapi</jv> = OpenApi.<jsf>DEFAULT</jsf>.write(<jv>person</jv>);
-	<jk>byte</jk>[] <jv>msgPack</jv> = MsgPack.<jsf>DEFAULT</jsf>.write(<jv>person</jv>);
-	String <jv>rdfXml</jv> = RdfXml.<jsf>DEFAULT</jsf>.write(<jv>person</jv>);
-	String <jv>rdfXmlAbbrev</jv> = RdfXmlAbbrev.<jsf>DEFAULT</jsf>.write(<jv>person</jv>);
-	String <jv>n3</jv> = N3.<jsf>DEFAULT</jsf>.write(<jv>person</jv>);
-	String <jv>nTuple</jv> = NTuple.<jsf>DEFAULT</jsf>.write(<jv>person</jv>);
-	String <jv>turtle</jv> = Turtle.<jsf>DEFAULT</jsf>.write(<jv>person</jv>);
-
-	<jc>// Parse</jc>
-	<jv>person</jv> = Json.<jsf>DEFAULT</jsf>.read(<jv>json</jv>, Person.<jk>class</jk>);
-	<jv>person</jv> = Xml.<jsf>DEFAULT</jsf>.read(<jv>xml</jv>, Person.<jk>class</jk>);
-	<jv>person</jv> = Html.<jsf>DEFAULT</jsf>.read(<jv>html</jv>, Person.<jk>class</jk>);
-	<jv>person</jv> = Uon.<jsf>DEFAULT</jsf>.read(<jv>uon</jv>, Person.<jk>class</jk>);
-	<jv>person</jv> = UrlEncoding.<jsf>DEFAULT</jsf>.read(<jv>urlEncoding</jv>, Person.<jk>class</jk>);
-	<jv>person</jv> = OpenApi.<jsf>DEFAULT</jsf>.read(<jv>openapi</jv>, Person.<jk>class</jk>);
-	<jv>person</jv> = MsgPack.<jsf>DEFAULT</jsf>.read(<jv>msgPack</jv>, Person.<jk>class</jk>);
-	<jv>person</jv> = RdfXml.<jsf>DEFAULT</jsf>.read(<jv>rdfXml</jv>, Person.<jk>class</jk>);
-	<jv>person</jv> = RdfXmlAbbrev.<jsf>DEFAULT</jsf>.read(<jv>rdfXmlAbbrev</jv>, Person.<jk>class</jk>);
-	<jv>person</jv> = N3.<jsf>DEFAULT</jsf>.read(<jv>n3</jv>, Person.<jk>class</jk>);
-	<jv>person</jv> = NTuple.<jsf>DEFAULT</jsf>.read(<jv>nTuple</jv>, Person.<jk>class</jk>);
-	<jv>person</jv> = Turtle.<jsf>DEFAULT</jsf>.read(<jv>turtle</jv>, Person.<jk>class</jk>);
-		</p>
-
-		<ul class='seealso'>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-marshall.Marshalls'>juneau-marshall > Marshalls</a>
-		</ul>
-	
-		<hr>
-
-		<p>
-			Serializers and parsers are builder-based.  Build from scratch or clone existing instances.  Lots of configuration options available for all the languages.
-		</p>
-		<p class='bcode w800'>
-	<jc>// Create a serializer from scratch programmatically using a builder.</jc>
-	JsonSerializer <jv>serializer</jv> = JsonSerializer.<jsm>create</jsm>()
-      .simple()                        <jc>// Simple mode</jc>
-      .sq()                            <jc>// Use single quotes</jc>
-      .swaps(                          <jc>// Swap unserializable classes with surrogate POJOs</jc>
-         IteratorSwap.<jk>class</jk>,           <jc>// Iterators swapped with lists</jc>
-         ByteArrayBase64Swap.<jk>class</jk>,    <jc>// byte[] swapped with base-64 encoded strings</jc>
-         CalendarSwap.ISO8601DT.<jk>class</jk>  <jc>// Calendars swapped with ISO8601-compliant strings</jc>
-       )
-      .timeZone(TimeZone.<jsf>GMT</jsf>)          <jc>// For timezone-specific serialization</jc>
-      .locale(Locale.<jsf>JAPAN</jsf>)            <jc>// For locale-specific serialization</jc>
-      .sortCollections()               
-      .sortProperties()                
-      .keepNullProperties()
-      .trimStrings()
-      .beanMethodVisibility(<jsf>PROTECTED</jsf>)     <jc>// Control which fields/methods are serialized</jc>
-      .dictionary(                        <jc>// Adds type variables for resolution during parsing</jc>
-         MyBeanA.<jk>class</jk>, 
-         MyBeanB.<jk>class</jk>
-      )
-      .debug()                         <jc>// Debug mode</jc>
-      .build();
-   
-	<jc>// Same as above, but using declarative named properties.</jc>
-	<jc>// This is how serializers and parsers are typically configured on REST servlets and clients.</jc>
-	JsonSerializer <jv>serializer</jv> = JsonSerializer.<jsm>create</jsm>()
-		.set(<jsf>JSON_simpleMode</jsf>, <jk>true</jk>) 
-		.set(<jsf>SERIALIZER_quoteChar</jsf>, <js>'\''</js>)
-		.appendTo(<jsf>BEAN_swaps</jsf>, IteratorSwap.<jk>class</jk>)
-		.appendTo(<jsf>BEAN_swaps</jsf>, ByteArrayBase64Swap.<jk>class</jk>)
-		.appendTo(<jsf>BEAN_swaps</jsf>, CalendarSwap.ISO8601DT.<jk>class</jk>)
-		.set(<jsf>BEAN_timeZone</jsf>, TimeZone.<jsf>GMT</jsf>)
-		.set(<jsf>BEAN_locale</jsf>, Locale.<jsf>JAPAN</jsf>)
-		.set(<jsf>SERIALIZER_sortCollections</jsf>, <jk>true</jk>)
-		.set(<jsf>BEAN_sortProperties</jsf>, <jk>true</jk>)
-		.set(<jsf>SERIALIZER_keepNullProperties</jsf>, <jk>true</jk>)
-		.set(<jsf>SERIALIZER_trimStrings</jsf>, <jk>true</jk>)
-		.set(<jsf>BEAN_beanMethodVisibility</jsf>, <jsf>PROTECTED</jsf>)
-		.appendTo(<jsf>BEAN_dictionary</jsf>, MyBeanA.<jk>class</jk>) 
-		.appendTo(<jsf>BEAN_dictionary</jsf>, MyBeanB.<jk>class</jk>)
-		.set(<jsf>BEAN_debug</jsf>, <jk>true</jk>)
-		.build();
-
-	<jc>// Clone an existing serializer and modify it to use single-quotes.</jc>
-	JsonSerializer <jv>serializer</jv> = JsonSerializer.<jsf>DEFAULT</jsf>.builder()
-		.sq()
-		.build();	
-		</p>
-		
-		<ul class='seealso'>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-marshall.ConfigurableProperties'>juneau-marshall > Configurable Properties</a>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#Glossaries.ConfigurableProperties'>Glossary > Configurable Properties</a>
-		</ul>
-		
-		<hr>
-		<p>
-			Many POJOs such as primitives, beans, collections, arrays, and classes with various known constructors and methods are serializable out-of-the-box.  
-			For other objects, "transforms" allow you to perform various mutations on them before serialization and after parsing.  
-		</p>
-		<ul class='spaced-list'>
-			<li>Transforms
-				<ul>
-					<li>Bean filters - Control how bean properties are handled (naming conventions, ordering, visibility,...).
-					<li>POJO swaps - Replace non-serializable POJOs with serializable equivalents.
-						<br>Predefined swaps provided for common cases: <code>ByteArrayBase64Swap</code>, 50+ variants of Calendar/Date swaps, <code>Enumeration/Iterator</code> swaps.
-				</ul>
-			<li>Annotations 
-				<br>Various annotations available for your POJO classes that are recognized by ALL serializers and parsers:  
-				<br><ja>@Bean</ja>, <ja>@Beanc</ja>, <ja>@Beanp</ja>, <ja>@BeanIgnore</ja>, <ja>@NameProperty</ja>, <ja>@ParentProperty</ja>
-				<br>
-				<br>Annotations also provided for language-specific behaviors where it makes sense:
-				<br><ja>@Json</ja>, <ja>@Html</ja>, <ja>@Xml</ja>, <ja>@UrlEncoding</ja>
-				<br>
-				<br>All annotations have programmatic equivalents when you don't have access to POJO source.
-				
-			<li>Swap methods
-				<br>By default, various instance and static methods and constructors are automatically detected and supported:
-				<br><code>valueOf(String)</code>, <code>parse(String)</code>, <code>parseString(String)</code>, <code>forName(String)</code>, <code>forString(String)</code>, 
-					<code>fromString(String)</code>, <code>T(String)</code>, <code>Object swap(BeanSession)</code>, <code>T unswap(BeanSession, T.class)</code>
-		</ul>
-	
-		<ul class='seealso'>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-marshall.PojoCategories'>juneau-marshall > POJO Categories</a>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#Glossaries.Annotations'>Glossary > Annotations</a>
-		</ul>
-	
-		<hr>
-		<p>
-			UON (URL-Encoded Object Notation) allows JSON-like data structures (OBJECT, ARRAY, NUMBER, BOOLEAN, STRING, NULL) in HTTP constructs (query parameters, form parameters,
-			headers, URL parts) without violating RFC2396.
-			This allows POJOs to be converted directly into these HTTP constructs which is not possible in other languages such as JSON.
-		</p>
-		<p class='bcode w800'>
-	(
-		id=1, 
-		name=<js>'John+Smith'</js>, 
-		uri=<js>http://sample/addressBook/person/1</js>, 
-		addressBookUri=<js>http://sample/addressBook</js>,
-		birthDate=<js>1946-08-12T00:00:00Z</js>,
-		addresses=@(
-			(
-				uri=<js>http://sample/addressBook/address/1</js>, 
-				personUri=<js>http://sample/addressBook/person/1</js>, 
-				id=<js>1</js>, 
-				street=<js>'100+Main+Street'</js>, 
-				city=<js>Anywhereville</js>, 
-				state=<js>NY</js>, 
-				zip=<js>12345</js>, 
-				isCurrent=<jk>true</jk>
-			)
-		)
-	)
-		</p>
-
-		<ul class='seealso'>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-marshall.UonDetails'>juneau-marshall > UON Details</a>
-		</ul>
-
-		<hr>
-		<p>
-			Lots of shortcuts are provided throughout the API to simplify tasks, and the APIs are often useful for debugging and logging purposes as well:
-		</p>
-		<p class='bcode w800'>
-	<jc>// Create JSON strings from scratch using fluent-style code.</jc>
-	String <jv>jsonObject</jv> = <jk>new</jk> OMap().append(<js>"foo"</js>,<js>"bar"</js>).toString(); 
-	String <jv>jsonArray</jv> = <jk>new</jk> OList().append(<js>"foo"</js>).append(123).append(<jk>null</jk>).toString(); 
-	
-	<jc>// Create maps and beans directly from JSON.</jc>
-	Map&lt;String,Object&gt; <jv>myMap</jv> = <jk>new</jk> OMap(<js>"{foo:'bar'}"</js>); 
-	List&lt;Object&gt; <jv>myList</jv> = <jk>new</jk> OList(<js>"['foo',123,null]"</js>); 
-
-	<jc>// Load a POJO from a JSON file.</jc>
-	MyPojo <jv>myPojo</jv> = JsonParser.<jsf>DEFAULT</jsf>.parse(<jk>new</jk> File(<js>"myPojo.json"</js>));
-
-	<jc>// Serialize POJOs and ignore exceptions (great for logging)</jc>
-	String <jv>json</jv> = SimpleJson.<jsf>DEFAULT</jsf>.toString(<jv>myPojo</jv>);
-	
-	<jc>// Dump a POJO to the console.</jc>
-	SimpleJson.<jsf>DEFAULT</jsf>.println(<jv>myPojo</jv>);
-	
-	String <jv>message</jv> = <jk>new</jk> StringMessage(<js>"My POJO in {0}: {1}"</js>, <js>"JSON"</js>, <jk>new</jk> StringObject(<jv>myPojo</jv>)).toString();
-	
-	<jc>// Create a 'REST-like' wrapper around a POJO.</jc>
-	<jc>// Allows you to manipulate POJO trees using URIs and GET/PUT/POST/DELETE commands.</jc>
-	PojoRest <jv>pojoRest</jv> = <jk>new</jk> PojoRest(<jv>myPojo</jv>);
-	<jv>pojoRest</jv>.get(String.<jk>class</jk>, <js>"addressBook/0/name"</js>);
-	<jv>pojoRest</jv>.put(<js>"addressBook/0/name"</js>, <js>"John Smith"</js>);
-		</p>
-
-		<ul class='seealso'>
-		<ul class='doctree'>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-marshall.ObjectMap'>juneau-marshall > ObjectMap and ObjectList</a>
-		</ul>
-
-		<hr>
-		<p>
-			<code>SerializerGroup</code> and <code>ParserGroup</code> classes allow serializers and parsers 
-			to be retrieved by W3C-compliant HTTP <code>Accept</code> and <code>Content-Type</code> values:
-		</p>
-		<p class='bcode w800'>
-	<jc>// Construct a new serializer group with configuration parameters that get applied to all serializers.</jc>
-	SerializerGroup <jv>serializerGroup</jv> = SerializerGroup.<jsm>create</jsm>()
-		.append(JsonSerializer.<jk>class</jk>, UrlEncodingSerializer.<jk>class</jk>);
-		.ws()   <jc>// or .setUseWhitespace(true) or .set(SERIALIZER_useWhitespace, true)</jc>
-		.swaps(CalendarSwap.ISO8601DT.<jk>class</jk>) <jc>// or .appendTo(BEAN_pojoSwaps, CalendarSwap.ISO8601DT.class)</jc>
-		.build();
-
-	<jc>// Find the appropriate serializer by Accept type and serialize our POJO to the specified writer.</jc>
-	<jc>// Fully RFC2616 compliant.</jc>
-	<jv>serializerGroup</jv>.getSerializer(<js>"text/invalid, text/json;q=0.8, text/*;q:0.6, *\/*;q=0.0"</js>)
-		.serialize(<jv>person</jv>, <jv>myWriter</jv>);
-		
-	<jc>// Construct a new parser group with configuration parameters that get applied to all parsers.</jc>
-	ParserGroup <jv>parserGroup</jv> = ParserGroup.<jsm>create</jsm>()
-		.append(JsonParser.<jk>class</jk>, UrlEncodingParser.<jk>class</jk>);
- 		.swaps(CalendarSwap.ISO8601DT.<jk>class</jk>) <jc>// or .appendTo(BEAN_pojoSwaps, CalendarSwap.ISO8601DT.class)</jc>
- 		.build();
-
-	Person <jv>person</jv> = <jv>parserGroup</jv>.getParser(<js>"text/json"</js>).parse(<jv>myReader</jv>, Person.<jk>class</jk>);
-		</p>
-		
-		<ul class='seealso'>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-marshall.Groups'>juneau-marshall > SerializerGroups and ParserGroups</a>
-		</ul>
-		<p>
-			The <code>org.apache.juneau.svl</code> package defines an API for a language called "Simple Variable Language".
-			In a nutshell, Simple Variable Language (or SVL) is text that contains variables of the form
-			<js>"$varName{varKey}"</js>.
-		</p>
-		<p>
-			Variables can be recursively nested within the varKey (e.g. <js>"$FOO{$BAR{xxx},$BAZ{xxx}}"</js>).
-			Variables can also return values that themselves contain more variables.
-		</p>
-		<p class='bcode w800'>
-	<jc>// Use the default variable resolver to resolve a string that contains $S (system property) variables</jc>
-	String <jv>myProperty</jv> = VarResolver.<jsf>DEFAULT</jsf>.resolve(<js>"The Java home directory is $S{java.home}"</js>);
-		</p>
-		<p>
-			The following shows how variables can be arbitrarily nested:
-		</p>
-		<p class='bcode w800'>
-	<jc>// Look up a property in the following order:
-	// 1) MYPROPERTY environment variable.
-	// 2) 'my.property' system property if environment variable not found.
-	// 3) 'not found' string if system property not found.</jc>
-	String <jv>myproperty</jv> = VarResolver.<jsf>DEFAULT</jsf>.resolve(<js>"$E{MYPROPERTY,$S{my.property,not found}}"</js>);
-	 	</p>
-		<p>
-			SVL is a large topic on it's own. 
-			It is used extensively in the ConfigFile, REST and Microservice APIs.
-		</p>
-		<p>
-			Plugging in your own variables is also easy.
-		</p>
-		
-		<ul class='seealso'>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-svl'>juneau-svl</a>
-		</ul>
-
-	</div>
-	
-	<!-- ======================================================================================================= -->
-	<!-- === JUNEAU-MARSHALL-RDF =============================================================================== -->
-	<!-- ======================================================================================================= -->
-	
-	<h5 class='toc' id='juneau-marshall-rdf'>juneau-marshall-rdf</h5>
-	<div class='topic'>
-		<h5 class='figure'>Maven Dependency</h5>
-		<p class='bcode w500'>
-	<xt>&lt;dependency&gt;</xt>
-		<xt>&lt;groupId&gt;</xt>org.apache.juneau<xt>&lt;/groupId&gt;</xt>
-		<xt>&lt;artifactId&gt;</xt>juneau-marshall-rdf<xt>&lt;/artifactId&gt;</xt>
-		<xt>&lt;version&gt;</xt>{@property juneauVersion}<xt>&lt;/version&gt;</xt>
-	<xt>&lt;/dependency&gt;</xt>
-		</p>	
-	
-		<h5 class='figure'>Java Library</h5>
-		<p class='bcode w500'>
-	juneau-marshall-rdf-{@property juneauVersion}.jar 
-		</p>	
-	
-		<h5 class='figure'>OSGi Module</h5>
-		<p class='bcode w500'>
-	org.apache.juneau.marshall.rdf_{@property juneauVersion}.jar 
-		</p>	
-
-		<p>
-			The <code>juneau-marshall-rdf</code> library provides additional serializers and parsers for RDF.
-			These rely on the Apache Jena library to provide support for the following languages:
-		</p>
-		<ul>
-			<li>RDF/XML
-			<li>RDF/XML-Abbrev 	
-			<li>N-Triple
-			<li>Turtle
-			<li>N3
-		</ul>				
-		<p>
-			The serializers and parsers work identically to those in <code>juneau-marshall</code>, but are
-			packaged separately so that you don't need to pull in the Jena dependency unless you need it.
-		</p>
-	
-		<p class='bcode w800'>
-	<jc>// A simple bean</jc>
-	<jk>public class</jk> Person {
-		<jk>public</jk> String <jf>name</jf> = <js>"This is RDF format."</js>;
-		<jk>public</jk> String <jf>id</jf> = <js>"foo"</js>;
-	}
-	
-	<jc>// Serialize a bean to various RDF languages</jc>
-	Person <jv>person</jv> = <jk>new</jk> Person();
-
-	<jc>// Produces:
-	// &lt;rdf:RDF
-	//  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-	//  xmlns:jp="http://www.apache.org/juneaubp/"
-	//  xmlns:j="http://www.apache.org/juneau/"&gt;
-	// 	&lt;rdf:Description&gt;
-	// 		&lt;jp:name&gt;This is RDF format.&lt;/jp:name&gt;
-	// 		&lt;jp:id&gt;foo&lt;/jp:id&gt;
-	// 	&lt;/rdf:Description&gt;
-	// &lt;/rdf:RDF&gt;</jc>
-	String <jv>rdfXml</jv> = RdfXmlAbbrevSerializer.<jsf>DEFAULT</jsf>.serialize(<jv>person</jv>);
-	
-	<jc>// Produces:
-	// @prefix jp:      &lt;http://www.apache.org/juneaubp/&gt; .
-	// @prefix j:       &lt;http://www.apache.org/juneau/&gt; .
-	//	[]    jp:id  "foo" ;
-	//	      jp:name "This is RDF format." .</jc>
-	String <jv>rdfN3</jv> = N3Serializer.<jsf>DEFAULT</jsf>.serialize(<jv>person</jv>);
-
-	<jc>// Produces:
-	// _:A3bf53c85X3aX157cf407e2dX3aXX2dX7ffd &lt;http://www.apache.org/juneaubp/name&gt; "This is RDF format." .
-	// _:A3bf53c85X3aX157cf407e2dX3aXX2dX7ffd &lt;http://www.apache.org/juneaubp/age&gt; "rdf" .</jc>
-	String <jv>rdfNTriple</jv> = NTripleSerializer.<jsf>DEFAULT</jsf>.serialize(<jv>person</jv>);
-
-	<jc>// Produces:
-	// @prefix jp:      &lt;http://www.apache.org/juneaubp/&gt; .
-	// @prefix j:       &lt;http://www.apache.org/juneau/&gt; .
-	//	[]    jp:id  "foo" ;
-	//	      jp:name "This is RDF format." .</jc>
-	String <jv>rdfTurtle</jv> = TurtleSerializer.<jsf>DEFAULT</jsf>.serialize(<jv>person</jv>);
-		</p>
-		
-		<ul class='seealso'>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-marshall-rdf'>juneau-marshall-rdf</a>
-		</ul>		
-	</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/templates/petstore.html b/templates/petstore.html
deleted file mode 100644
index d5896adab..000000000
--- a/templates/petstore.html
+++ /dev/null
@@ -1,555 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-	<!-- Google Tag Manager -->
-	<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
-	new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
-	j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
-	'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
-	})(window,document,'script','dataLayer','GTM-MT3PBTF');</script>
-	<!-- End Google Tag Manager -->
-
-	<style>
-		@import url("styles/juneau-code.css");
-		@import url("styles/juneau-doc.css");
-		@import url("../content/styles/juneau-code.css");
-		@import url("../content/styles/juneau-doc.css");
-		p { max-width: 800px;}
-	</style>
-</head>
-<body>
-	<!-- Google Tag Manager (noscript) -->
-	<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MT3PBTF"
-	height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
-	<!-- End Google Tag Manager (noscript) -->	
-
-<h2 class='topic'>PetStore Application</h2>
-<div class='topic'>
-	<p>
-		The <c>PetStore</c> application is an functional application meant to demonstrate using Juneau with other technologies
-		such as Spring Boot, Spring Data, Bootstrap, and Datatables to create fully-functional applications with end-to-end
-		REST integration support.  
-	</p>
-	<p>
-		What makes Juneau unique is the ability to create Java interfaces that behave just like RPC, but using REST
-		as the underlying protocol.  And the technology it not tied to any platform so it can be used in any environment
-		by simply pulling in Maven dependencies.  The server-side need only provide the ability to host a servlet.
-	</p>
-	<p>
-		Visit the <a class='doclink' href='https://github.com/apache/juneau-petstore'>GitHub project</a> hosting the application.
-	</p>
-	<p>
-		The project is broken down into the following subprojects:
-	</p>
-	<ul class='spaced-list'>
-		<li><c>juneau-petstore-api</c> - Contains the Java interface and DTOs for the petstore application.
-		<li><c>juneau-petstore-server</c> - Contains the server-side Java implementation of the petstore Java interface as a REST resource.
-		<li><c>juneau-petstore-client</c> - Contains the client-side Java proxy of the petstore Java interface.
-	</ul>
-
-	<h3 class='topic'>Running the Petstore App</h3>
-	<div class='topic'>
-		<ul class='spaced-list'>
-			<li>
-				Install <a class='doclink' href='https://docs.docker.com/install/'>docker</a> on your machine.
-			</li>
-			<li>
-				<p>
-					Clone the Petstore project on your machine.
-				</p>
-				<p class='bcode w800'>
-	git clone https://github.com/apache/juneau-petstore.git
-				</p>
-			</li>
-			<li>
-				<p>
-					Open terminal inside the project directory and run the below command to start the app.
-				</p>
-				<p class='bcode w800'>
-	docker build . -t petstore &amp;&amp; docker run -p 5000:5000 petstore
-				</p>
-			</li>
-		</ul>
-	</div>
-
-	<h3 class='topic'>juneau-petstore-api</h3>
-	<div class='topic'>
-		<p>
-			The <c>juneau-petstore-api</c> module contains the Java interface of our application and the DTOs that go along
-			with it.  These classes are meant to be shared between the server and client side code.
-		</p>
-		
-		<p>
-			The <c>PetStore</c> class is our primary class for defining our application.  It's a standard Java interface with 
-			annotations used to describe how the methods map to REST calls.
-		</p>
-		<h5 class='figure'>PetStore.java</h5>
-		<p class='bcode w800'> 
-	<ja>@Remote</ja>(path=<js>"/petstore"</js>)
-	<jk>public interface</jk> PetStore {
-	
-		<ja>@RemoteMethod</ja>(method=<jsf>GET</jsf>, path=<js>"/pet"</js>)
-		<jk>public</jk> Collection&lt;Pet&gt; getPets() <jk>throws</jk> NotAcceptable;
-	
-		<ja>@RemoteMethod</ja>(path=<js>"/pet/{petId}"</js>)
-		<jk>public</jk> Pet getPet(
-			<ja>@Path</ja>(
-				name=<js>"petId"</js>,
-				description=<js>"ID of pet to return"</js>,
-				example=<js>"123"</js>
-			)
-			<jk>long</jk> <jv>petId</jv>
-		) <jk>throws</jk> IdNotFound, NotAcceptable;
-	
-		<ja>@RemoteMethod</ja>(method=<jsf>POST</jsf>, path=<js>"/pet"</js>)
-		<jk>public long</jk> createPet(
-			<ja>@Body</ja>(
-				description=<js>"Pet object to add to the store"</js>
-			) CreatePet <jv>pet</jv>
-		) <jk>throws</jk> IdConflict, NotAcceptable, UnsupportedMediaType;
-	
-		...
-	}
-		</p>
-		<p>
-			<ja>@Remote</ja> and <ja>@RemoteMethod</ja> are client-side annotations used to map the method calls to REST
-			and will be describe in the client code section.
-		</p>
-		<p>
-			<ja>@Path</ja> and <ja>@Body</ja> are used by both the client and server side code to map to REST artifacts on both
-			sides.
-		</p>
-		<p>
-			Both sets of annotations are provided by pulling in the Juneau dependency below:
-		
-		<h5 class='figure'>Maven Dependency</h5>
-		<p class='bcode w500'>
-	<xt>&lt;dependency&gt;</xt>
-		<xt>&lt;groupId&gt;</xt>org.apache.juneau<xt>&lt;/groupId&gt;</xt>
-		<xt>&lt;artifactId&gt;</xt>juneau-marshall<xt>&lt;/artifactId&gt;</xt>
-		<xt>&lt;version&gt;</xt>8.1.0<xt>&lt;/version&gt;</xt>
-	<xt>&lt;/dependency&gt;</xt>
-		</p>	
-		<p>
-			The <c>Pet</c> class is a DTO that gets serialized over the REST connection.  It is also annotated with JPA annotations
-			so that they can easily be stored in a JPA datastore on the server side.
-		</p>
-		<h5 class='figure'>Pet.java</h5>
-		<p class='bcode w800'>
-	<ja>@Bean</ja>(typeName=<js>"Pet"</js>, fluentSetters=<jk>true</jk>, properties=<js>"id,species,name,tags,price,status"</js>)
-	<ja>@Entity</ja>(name=<js>"PetstorePet"</js>)
-	<jk>public class</jk> Pet {
-	
-		<ja>@Column @Id @GeneratedValue</ja>
-		<ja>@Schema</ja>(description=<js>"Unique identifier for this pet."</js>)
-		<ja>@Html</ja>(link=<js>"servlet:/pet/{id}"</js>)
-		<jk>private long</jk> <jf>id</jf>;
-	
-		<ja>@Column</ja>(length=50)
-		<ja>@Schema</ja>(description=<js>"Pet name."</js>, minLength=3, maxLength=50)
-		<jk>private</jk> String <jf>name</jf>;
-	
-		<ja>@Column</ja>
-		<ja>@Schema</ja>(description=<js>"Price of pet."</js>, maximum=<js>"999.99"</js>)
-		<ja>@Html</ja>(render=PriceRender.<jk>class</jk>)
-		<jk>private float</jk> <jf>price</jf>;
-	
-		...
-	}
-		</p>
-		<p>
-			The annotations here are a combination of Juneau annotations for controlling marshalling (<ja>@Bean</ja>, <ja>@Html</ja>) 
-			and documentation/validation (<ja>@Schema</ja>), and JPA annoations for database persistence (<ja>@Entity</ja>, <ja>@Column</ja>).
-		</p>
-		<div class='info'>
-			Most applications may choose to have separate classes for DTOs and JPA beans since you typically are not going to want
-			to expose server-side details to client-side code.  In these examples however they were combined into the same classes for brevity.
-		</div>
-	</div>
-	
-	<h3 class='topic'>juneau-petstore-client</h3>
-	<div class='topic'>
-		<p>
-			The <c>juneau-petstore-client</c> module contains a single <c>Main</c> class used to instantiate the proxy against
-			our remote REST interface using the Java interface described above.
-		</p>
-		
-		<h5 class='figure'>Main.java</h5>
-		<p class='bcode w800'>
-	<jk>public class</jk> Main {
-	
-		<jk>public static void</jk> main(String[] <jv>args</jv>) {
-	
-			<jc>// Create a RestClient with JSON serialization support.</jc>
-			RestClient <jv>restClient</jv> = RestClient.<jsm>create</jsm>().simpleJson().build();
-	
-			<jc>// Instantiate our proxy.</jc>
-			PetStore <jv>petStore</jv> = <jv>restClient</jv>.getRemote(PetStore.<jk>class</jk>, <js>"http://localhost:5000"</js>);
-
-			<jc>// Print out the pets in the store.</jc>
-			Collection&lt;Pet&gt; <jv>pets</jv> = <jv>petStore</jv>.getPets();
-
-			<jc>// Pretty-print them to STDOUT.</jc>
-			SimpleJson.<jsf>DEFAULT_READABLE</jsf>.println(<jv>pets</jv>);
-		}
-	}
-		</p>
-		<p>
-			Notice how little code is necessary to construct a remote proxy.
-		</p>
-	</div>
-	
-	<h3 class='topic'>juneau-petstore-server</h3>
-	<div class='topic'>
-		<p>
-			The <c>juneau-petstore-server</c> module contains all of the guts of the application.  It's a standard Spring Boot
-			application with Juneau integration support.
-		</p>
-		
-		<h5 class='figure'>App.java</h5>
-		<p class='bcode w800'>
-	<ja>@SpringBootApplication</ja>
-	<jk>public class</jk> App {
-	
-		<jk>public static void</jk> main(String[] <jv>args</jv>) {
-			<jk>new</jk> App().start(<jv>args</jv>);
-		}
-	
-		<jk>protected void</jk> start(String[] <jv>args</jv>) {
-			<jk>new</jk> SpringApplicationBuilder(App.<jk>class</jk>)
-				.initializers(<jk>new</jk> JuneauRestInitializer(App.<jk>class</jk>)) 
-				.run(<jv>args</jv>);
-		}
-	}
-		</p>
-		
-		<h5 class='figure'>AppConfiguration.java</h5>
-		<p class='bcode w800'>
-	<ja>@Configuration</ja>
-	<jk>public class</jk> AppConfiguration {
-	
-		<ja>@Bean</ja>
-		<jk>public</jk> PetStoreService petStoreService() {
-			<jk>return new</jk> PetStoreService();
-		}
-	
-		<ja>@Bean</ja>
-		<ja>@JuneauRestRoot</ja>
-		<jk>public</jk> RootResources rootResources() {
-			<jk>return new</jk> RootResources();
-		}
-	
-		<ja>@Bean</ja>
-		<jk>public</jk> PetStoreResource petStoreResource() {
-			<jk>return new</jk> PetStoreResource();
-		}
-	}
-		</p>
-		<p>
-			The <c>JuneauRestInitializer</c> is used to allow Juneau resource classes to reference child Spring beans.
-			It is only required if you wish to use injection on your child resources.
-		</p>
-		
-		<p>
-			The <c>RootResources</c> class is the top-level entry point into the REST API.  It allows us to group
-			child resources.  In our case though we only have one child resource...<c>PetStoreResource</c>:
-		</p>
-
-		<h5 class='figure'>RootResources.java</h5>
-		<p class='bcode w800'>
-	<ja>@Rest</ja>(
-		path=<js>"/*"</js>,
-		title=<js>"Root resources"</js>,
-		description=<js>"Example of a router resource page."</js>,
-		children={
-			PetStoreResource.<jk>class</jk>
-		}
-	)
-	<ja>@HtmlDocConfig</ja>(
-		widgets={
-			ContentTypeMenuItem.<jk>class</jk>,
-			ThemeMenuItem.<jk>class</jk>
-		},
-		navlinks={
-			<js>"options: ?method=OPTIONS"</js>,
-			<js>"$W{ContentTypeMenuItem}"</js>,
-			<js>"$W{ThemeMenuItem}"</js>,
-			<js>"source: $C{Source/gitHub}/org/apache/juneau/petstore/rest/$R{servletClassSimple}.java"</js>
-		},
-		aside={
-			<js>"&lt;div style='max-width:400px' class='text'&gt;"</js>,
-			<js>"	&lt;p&gt;This is an example of a 'router' page that serves as a jumping-off point to child resources.&lt;/p&gt;"</js>,
-			<js>"	&lt;p&gt;Resources can be nested arbitrarily deep through router pages.&lt;/p&gt;"</js>,
-			<js>"	&lt;p&gt;Note the &lt;span class='link'&gt;options&lt;/span&gt; link provided that lets you see the generated swagger doc for this page.&lt;/p&gt;"</js>,
-			<js>"	&lt;p&gt;Also note the &lt;span class='link'&gt;sources&lt;/span&gt; link on these pages to view the source code for the page.&lt;/p&gt;"</js>,
-			<js>"	&lt;p&gt;All content on pages in the UI are serialized POJOs.  In this case, it's a serialized array of beans with 2 properties, 'name' and 'description'.&lt;/p&gt;"</js>,
-			<js>"	&lt;p&gt;Other features (such as this aside) are added through annotations.&lt;/p&gt;"</js>,
-			<js>"&lt;/div&gt;"</js>
-		}
-	)
-	<ja>@SerializerConfig</ja>(
-		<jc>// For testing purposes, we want to use single quotes in all the serializers so it's easier to do simple
-		// String comparisons.
-		// You can apply any of the Serializer/Parser/BeanContext settings this way.</jc>
-		quoteChar=<js>"'"</js>
-	)
-	<jk>public class</jk> RootResources <jk>extends</jk> BasicRestServletGroup {
-		<jk>private static final long</jk> <jsf>serialVersionUID</jsf> = 1L;
-	}
-		</p>
-		<p>
-			This page renders as follows:
-		</p>
-		
-		<p class='bcode w800'>
-	http://localhost:5000
-		</p>			
-		<img class='bordered w800' src='petstore/RootResources.png'>
-		
-		<p>
-			The <c>PetStoreResource</c> class is the REST implementation of our <c>PetStore</c> interface.  
-		</p>
-		
-		<h5 class='figure'>PetStoreResource.java</h5>
-		<p class='bcode w800'>
-	<ja>@Rest</ja>(
-		path=<js>"/petstore"</js>,
-		title=<js>"Petstore application"</js>,
-		description={
-			<js>"This is a sample server Petstore server based on the Petstore sample at Swagger.io."</js>,
-			<js>"You can find out more about Swagger at http://swagger.io."</js>,
-		},
-		swagger=<ja>@ResourceSwagger</ja>(
-			version=<js>"1.0.0"</js>,
-			title=<js>"Swagger Petstore"</js>,
-			termsOfService=<js>"You are on your own."</js>,
-			contact=<ja>@Contact</ja>(
-				name=<js>"Juneau Development Team"</js>,
-				email=<js>"dev@juneau.apache.org"</js>,
-				url=<js>"http://juneau.apache.org"</js>
-			),
-			license=<ja>@License</ja>(
-				name=<js>"Apache 2.0"</js>,
-				url=<js>"http://www.apache.org/licenses/LICENSE-2.0.html"</js>
-			),
-			externalDocs=<ja>@ExternalDocs</ja>(
-				description=<js>"Find out more about Juneau"</js>,
-				url=<js>"http://juneau.apache.org"</js>
-			),
-			tags={
-				<ja>@Tag</ja>(
-					name=<js>"pet"</js>,
-					description=<js>"Everything about your Pets"</js>,
-					externalDocs=<ja>@ExternalDocs</ja>(
-						description=<js>"Find out more"</js>,
-						url=<js>"http://juneau.apache.org"</js>
-					)
-				),
-				<ja>@Tag</ja>(
-					name=<js>"store"</js>,
-					description=<js>"Access to Petstore orders"</js>
-				),
-				<ja>@Tag</ja>(
-					name=<js>"user"</js>,
-					description=<js>"Operations about user"</js>,
-					externalDocs=<ja>@ExternalDocs</ja>(
-						description=<js>"Find out more about our store"</js>,
-						url=<js>"http://juneau.apache.org"</js>
-					)
-				)
-			}
-		),
-		staticFiles={<js>"htdocs:/htdocs"</js>} 
-	)
-	<ja>@HtmlDocConfig</ja>(
-		widgets={
-			ContentTypeMenuItem.<jk>class</jk>,
-			ThemeMenuItem.<jk>class</jk>,
-		},
-		navlinks={
-			<js>"up: request:/.."</js>,
-			<js>"options: servlet:/?method=OPTIONS"</js>,
-			<js>"$W{ContentTypeMenuItem}"</js>,
-			<js>"$W{ThemeMenuItem}"</js>,
-			<js>"source: $C{Source/gitHub}/org/apache/juneau/petstore/rest/$R{servletClassSimple}.java"</js>
-		},
-		head={
-			<js>"&lt;link rel='icon' href='$U{servlet:/htdocs/cat.png}'/&gt;"</js>  <jc>// Add a cat icon to the page.</jc>
-		},
-		header={
-			<js>"&lt;h1&gt;$R{resourceTitle}&lt;/h1&gt;"</js>,
-			<js>"&lt;h2&gt;$R{methodSummary}&lt;/h2&gt;"</js>,
-			<js>"$C{PetStore/headerImage}"</js>
-		},
-		aside={
-			<js>"&lt;div style='max-width:400px' class='text'&gt;"</js>,
-			<js>"	&lt;p&gt;This page shows a standard nested REST resource.&lt;/p&gt;"</js>,
-			<js>"	&lt;p&gt;It shows how different properties can be rendered on the same bean in different views.&lt;/p&gt;"</js>,
-			<js>"	&lt;p&gt;It also shows examples of HtmlRender classes and @BeanProperty(format) annotations.&lt;/p&gt;"</js>,
-			<js>"	&lt;p&gt;It also shows how the Queryable converter and query widget can be used to create searchable interfaces.&lt;/p&gt;"</js>,
-			<js>"&lt;/div&gt;"</js>
-		},
-		stylesheet=<js>"servlet:/htdocs/themes/dark.css"</js>  <jc>// Use dark theme by default.</jc>
-	)
-	<jk>public class</jk> PetStoreResource <jk>extends</jk> BasicRest <jk>implements</jk> PetStore {
-	
-		<ja>@Inject</ja>
-		<jk>private</jk> PetStoreService <jf>store</jf>;
-	
-		<jd>/**
-		 * Navigation page
-		 *
-		 * @return Navigation page contents.
-		 */</jd>
-		<ja>@RestMethod</ja>(
-			name=<jsf>GET</jsf>,
-			path=<js>"/"</js>,
-			summary=<js>"Navigation page"</js>
-		)
-		<ja>@HtmlDocConfig</ja>(
-			style={
-				<js>"INHERIT"</js>,  <jc>// Flag for inheriting resource-level CSS.</jc>
-				<js>"body { "</js>,
-					<js>"background-image: url('petstore/htdocs/background.jpg'); "</js>,
-					<js>"background-color: black; "</js>,
-					<js>"background-size: cover; "</js>,
-					<js>"background-attachment: fixed; "</js>,
-				<js>"}"</js>
-			}
-		)
-		<jk>public</jk> ResourceDescriptions getTopPage() {
-			<jk>return new</jk> ResourceDescriptions()
-				.append(<js>"pet"</js>, <js>"All pets in the store"</js>)
-				.append(<js>"store"</js>, <js>"Orders and inventory"</js>)
-				.append(<js>"user"</js>, <js>"Petstore users"</js>)
-			;
-		}
-		
-		...
-		</p>		
-		<p>
-			Clicking the <c>petstore</c> link on the root page takes you to our PetStore resource:
-		</p>
-		<p class='bcode w800'>
-	http://localhost:5000/petstore
-		</p>			
-		<img class='bordered w800' src='petstore/PetStore.png'>
-	
-		<p>
-			The methods defined in our <c>PetStore</c> interface are implemented like so:
-		</p>		
-		<h5 class='figure'>PetStoreResource.java</h5>
-		<p class='bcode w800'>
-	<ja>@Override</ja> <jc>/* PetStore */</jc>
-	<ja>@RestMethod</ja>(
-		name=<jsf>GET</jsf>,
-		path=<js>"/pet"</js>,
-		summary=<js>"All pets in the store"</js>,
-		swagger=<ja>@MethodSwagger</ja>(
-			tags=<js>"pet"</js>,
-			parameters={
-				Queryable.<jsf>SWAGGER_PARAMS</jsf>  <jc>// Documents searching.</jc>
-			}
-		),
-		converters={Queryable.<jk>class</jk>}  <jc>// Searching support.</jc>
-	)
-	<ja>@BeanConfig</ja>(
-		bpx=<js>"Pet: tags,photo"</js>  <jc>// In this view, don't serialize tags/photos properties.</jc>
-	)
-	<jk>public</jk> Collection&lt;Pet&gt; getPets() <jk>throws</jk> NotAcceptable {
-		<jk>return</jk> <jf>store</jf>.getPets();
-	}
-
-	<ja>@Override</ja> <jc>/* PetStore */</jc>
-	<ja>@RestMethod</ja>(
-		name=<jsf>GET</jsf>,
-		path=<js>"/pet/{petId}"</js>,
-		summary=<js>"Find pet by ID"</js>,
-		description=<js>"Returns a single pet"</js>,
-		swagger=<ja>@MethodSwagger</ja>(
-			tags=<js>"pet"</js>
-		)
-	)
-	<jk>public</jk> Pet getPet(<jk>long</jk> <jv>petId</jv>) <jk>throws</jk> IdNotFound, NotAcceptable {
-		<jk>return</jk> <jf>store</jf>.getPet(<jv>petId</jv>);
-	}
-
-	<ja>@Override</ja> <jc>/* PetStore */</jc>
-	<ja>@RestMethod</ja>(
-		name=<jsf>POST</jsf>,
-		path=<js>"/pet"</js>,
-		summary=<js>"Add a new pet to the store"</js>,
-		swagger=<ja>@MethodSwagger</ja>(
-			tags=<js>"pet"</js>
-		),
-		roleGuard=<js>"ROLE_ADMIN || (ROLE_USER &amp;&amp; ROLE_WRITABLE)"</js>  <jc>// Restrict access to this method.</jc>
-	)
-	<jk>public long</jk> createPet(CreatePet <jv>pet</jv>) <jk>throws</jk> IdConflict, NotAcceptable, UnsupportedMediaType {
-		<jk>return</jk> <jf>store</jf>.create(<jv>pet</jv>).getId();
-	}
-	
-	...
-		</p>		
-		<p>
-			After running the <c>Main</c> method in the client code to populate the database, the page renders as follows:
-		</p>
-		<p class='bcode w800'>
-	http://localhost:5000/petstore/pet
-		</p>			
-		<img class='bordered w800' src='petstore/PetStore_pets.png'>
-	
-		<p>
-			The <l>OPTIONS</l> menu items takes you to the auto-generated Swagger UI for the application:
-		</p>
-		<p class='bcode w900'>
-	http://localhost:10000/petstore/pet?method=OPTIONS
-		</p>			
-		<img class='bordered w900' src='petstore/9a.png'>
-		<p>
-			Since we've defined tags on our annotations, the pet-related operations are all grouped under the <l>pet</l> tag:
-		</p>
-		<img class='bordered w900' src='petstore/9b.png'>
-		<p>
-			Information for all HTTP parts is automatically generated:
-		</p>
-		<img class='bordered w900' src='petstore/9h.png'>
-		<p>
-			The schema models for POJO models is available in the <l>Responses</l> section of an operation:
-		</p>
-		<img class='bordered w900' src='petstore/9c.png'>
-		<p>
-			Auto-generated examples are available for all supported languages:
-		</p>
-		<img class='bordered w900' src='petstore/9d.png'>
-		<p>
-			For example, <l>application/json+simple</l>:
-		</p>
-		<img class='bordered w900' src='petstore/9e.png'>
-		<p>
-			Examples can be derived in a number of ways.  In our case, we've defined a static method on our <l>Pet</l>
-			class annotated with <ja>@Example</ja>:
-		</p>
-		<h5 class='figure'>Pet.java</h5>
-		<p class='bcode w800'>
-	<ja>@Example</ja>
-	<jk>public static</jk> Pet example() {
-		<jk>return new</jk> Pet()
-			.id(123)
-			.species(Species.<jsf>DOG</jsf>)
-			.name(<js>"Doggie"</js>)
-			.tags(<js>"friendly"</js>,<js>"smart"</js>)
-			.status(PetStatus.<jsf>AVAILABLE</jsf>);
-	}
-		</p>
-		<p>
-			Similar functionality exists for request bodies as well:
-		</p>
-		<img class='bordered w900' src='petstore/9f.png'>
-		<p>
-			At the bottom of the page is a listing of the POJO models in the app:
-		</p>
-		<img class='bordered w900' src='petstore/9g.png'>
-		
-	</div>
-</div>
-</body>
diff --git a/templates/rest-client.html b/templates/rest-client.html
deleted file mode 100644
index 33a2d963f..000000000
--- a/templates/rest-client.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-	<!-- Google Tag Manager -->
-	<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
-	new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
-	j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
-	'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
-	})(window,document,'script','dataLayer','GTM-MT3PBTF');</script>
-	<!-- End Google Tag Manager -->
-
-	<style>
-		@import url("styles/juneau-code.css");
-		@import url("styles/juneau-doc.css");
-	</style>
-</head>
-<body>
-	<!-- Google Tag Manager (noscript) -->
-	<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MT3PBTF"
-	height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
-	<!-- End Google Tag Manager (noscript) -->	
-
-	<!-- ======================================================================================================= -->
-	<!-- === JUNEAU-REST-CLIENT ================================================================================ -->
-	<!-- ======================================================================================================= -->
-	
-	<h5 class='toc' id='juneau-rest-client'>juneau-rest-client</h5>
-	<div class='topic'>
-		<h5 class='figure'>Maven Dependency</h5>
-		<p class='bcode w500'>
-	<xt>&lt;dependency&gt;</xt>
-		<xt>&lt;groupId&gt;</xt>org.apache.juneau<xt>&lt;/groupId&gt;</xt>
-		<xt>&lt;artifactId&gt;</xt>juneau-rest-client<xt>&lt;/artifactId&gt;</xt>
-		<xt>&lt;version&gt;</xt>{@property juneauVersion}<xt>&lt;/version&gt;</xt>
-	<xt>&lt;/dependency&gt;</xt>
-		</p>	
-	
-		<h5 class='figure'>Java Library</h5>
-		<p class='bcode w500'>
-	juneau-rest-client-{@property juneauVersion}.jar 
-		</p>	
-	
-		<h5 class='figure'>OSGi Module</h5>
-		<p class='bcode w500'>
-	org.apache.juneau.rest.client_{@property juneauVersion}.jar 
-		</p>	
-
-		<p>
-			Built upon the feature-rich Apache HttpClient library, the Juneau RestClient API adds support for fluent-style
-			REST calls and the ability to perform marshalling of POJOs to and from HTTP parts.
-		</p>
-		
-		<h5 class='figure'>Example:</h5>
-		<p class='bcode w800'>
-	<jc>// Create a basic REST client with JSON support and download a bean.</jc>
-	MyBean <jv>bean</jv> = RestClient.<jsm>create</jsm>()
-		.simpleJson()
-		.build()
-		.get(<jsf>URI</jsf>)
-		.run()
-		.assertStatus().code().is(200)
-		.assertHeader(<js>"Content-Type"</js>).matchesSimple(<js>"application/json*"</js>)
-		.getBody().as(MyBean.<jk>class</jk>);
-		</p>
-		
-		<p>
-			Breaking apart the fluent call, we can see the classes being used:
-		</p>
-		
-		<p class='bcode w800'>
-	RestClientBuilder <jv>builder</jv> = RestClient.<jsm>create</jsm>().simpleJson();
-	RestClient <jv>client</jv> = <jv>builder</jv>.build();
-	RestRequest <jv>req</jv> = <jv>client</jv>.get(<jsf>URI</jsf>);
-	RestResponse <jv>res</jv> = <jv>req</jv>.run();
-	RestResponseStatusLineAssertion <jv>statusLineAssertion</jv> = <jv>res</jv>.assertStatus();
-	FluentIntegerAssertion&lt;RestResponse&gt; <jv>codeAssertion</jv> = <jv>statusLineAssertion</jv>.code();
-	<jv>res</jv> = <jv>codeAssertion</jv>.is(200);
-	FluentStringAssertion&lt;RestResponse&gt; <jv>headerAssertion</jv> = <jv>res</jv>.assertHeader(<js>"Content-Type"</js>);
-	<jv>res</jv> = <jv>headerAssertion</jv>.matchesSimple(<js>"application/json*"</js>);
-	RestResponseBody <jv>body</jv> = <jv>res</jv>.getBody();
-	MyBean <jv>bean</jv> = <jv>body</jv>.as(MyBean.<jk>class</jk>);
-		</p>
-		
-		<p>
-			It additionally provides support for creating remote proxy interfaces using REST as the transport medium.
-		</p>
-		
-		<h5 class='figure'>Example:</h5>
-		<p class='bcode w800'>
-	<jc>// Define a Remote proxy for interacting with a REST interface.</jc>
-	<ja>@Remote</ja>(path=<js>"/petstore"</js>)
-	<jk>public interface</jk> PetStore {
-	
-		<ja>@RemoteMethod</ja>(method=<jsf>POST</jsf>, path=<js>"/pets"</js>)
-		Pet addPet(
-			<ja>@Body</ja> CreatePet <jv>pet</jv>,
-			<ja>@Header</ja>(<js>"E-Tag"</js>) UUID <jv>etag</jv>,
-			<ja>@Query</ja>(<js>"debug"</js>) <jk>boolean</jk> <jv>debug</jv>
-		);
-	}
-
-	<jc>// Use a RestClient with default Simple JSON support.</jc>
-	RestClient <jv>client</jv> = RestClient.<jsm>create</jsm>().simpleJson().build();
-	
-	PetStore <jv>store</jv> = <jv>client</jv>.getRemote(PetStore.<jk>class</jk>, <js>"http://localhost:10000"</js>);
-	CreatePet <jv>createPet</jv> = <jk>new</jk> CreatePet(<js>"Fluffy"</js>, 9.99);
-	Pet <jv>pet</jv> = <jv>store</jv>.addPet(<jv>createPet</jv>, UUID.<jsm>randomUUID</jsm>(), <jk>true</jk>);
-		</p>
-	
-		<ul class='seealso'>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-rest-client'>juneau-rest-client</a>
-		</ul>
-	</div>	
-</body>
-</html>
\ No newline at end of file
diff --git a/templates/rest-server.html b/templates/rest-server.html
deleted file mode 100644
index 4e13fd8ca..000000000
--- a/templates/rest-server.html
+++ /dev/null
@@ -1,450 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-	<!-- Google Tag Manager -->
-	<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
-	new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
-	j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
-	'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
-	})(window,document,'script','dataLayer','GTM-MT3PBTF');</script>
-	<!-- End Google Tag Manager -->
-
-	<style>
-		@import url("styles/juneau-code.css");
-		@import url("styles/juneau-doc.css");
-	</style>
-</head>
-<body>
-	<!-- Google Tag Manager (noscript) -->
-	<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MT3PBTF"
-	height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
-	<!-- End Google Tag Manager (noscript) -->	
-
-	<!-- ======================================================================================================= -->
-	<!-- === JUNEAU-REST-SERVER ================================================================================ -->
-	<!-- ======================================================================================================= -->
-	
-	<h5 class='toc' id='juneau-rest-server'>juneau-rest-server</h5>
-	<div class='topic'>
-		<h5 class='figure'>Maven Dependency</h5>
-		<p class='bcode w500'>
-	<xt>&lt;dependency&gt;</xt>
-		<xt>&lt;groupId&gt;</xt>org.apache.juneau<xt>&lt;/groupId&gt;</xt>
-		<xt>&lt;artifactId&gt;</xt>juneau-rest-server<xt>&lt;/artifactId&gt;</xt>
-		<xt>&lt;version&gt;</xt>{@property juneauVersion}<xt>&lt;/version&gt;</xt>
-	<xt>&lt;/dependency&gt;</xt>
-		</p>	
-	
-		<h5 class='figure'>Java Library</h5>
-		<p class='bcode w500'>
-	juneau-rest-server-{@property juneauVersion}.jar 
-		</p>	
-	
-		<h5 class='figure'>OSGi Module</h5>
-		<p class='bcode w500'>
-	org.apache.juneau.rest.server_{@property juneauVersion}.jar 
-		</p>	
-
-		<p>
-			The REST server API builds upon the <code>SerializerGroup</code> and <code>ParserGroup</code> classes 
-			to provide annotated REST servlets that automatically negotiate the HTTP media types for you.
-			Developers simply work with requests, responses, headers, path variables, query parameters, and form data as POJOs.
-			It allows you to create sophisticated REST interfaces using tiny amounts of code.
-		</p>
-		<p>
-			The end goal is to provide simple and flexible yet sophisticated REST interfaces that allow POJOs to be automatically represented as 
-			different content types depending on whatever the particular need: 
-		</p>
-		<ul class='spaced-list'>
-			<li>HTML for viewing POJOs in easy-to-read format in a browser.
-			<li>JSON for interacting through Javascript.
-			<li>XML for interacting with other applications.
-			<li>RDF for interacting with triple stores.
-			<li>URL-Encoding for interacting through HTML forms.
-			<li>MessagePack for efficiently transmitting large amounts of data.
-		</ul>
-		<p>
-			A simple example that supports all languages:
-		</p>
-		<p class='bcode w800'>
-	<ja>@Rest</ja>(
-		path=<js>"/systemProperties"</js>,
-		title=<js>"System properties resource"</js>
-	)
-	<jk>public class</jk> SystemPropertiesResource <jk>extends</jk> BasicRestServlet {
-	
-		<ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/"</js>)
-		<jk>public</jk> Map getSystemProperties(<ja>@Query</ja>(<js>"sort"</js>) <jk>boolean</jk> <jv>sort</jv>) <jk>throws</jk> Throwable {
-			<jk>if</jk> (<jv>sort</jv>)
-				<jk>return new</jk> TreeMap(System.<jsm>getProperties</jsm>());
-			<jk>return</jk> System.<jsm>getProperties</jsm>();
-		}
-	
-		<ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/{propertyName}"</js>)
-		<jk>public</jk> String getSystemProperty(<ja>@Path</ja>(<js>"propertyName"</js>) String <jv>propertyName</jv>) <jk>throws</jk> Throwable {
-			<jk>return</jk> System.<jsm>getProperty</jsm>(<jv>propertyName</jv>);
-		}
-	
-		<ja>@RestMethod</ja>(name=<jsf>PUT</jsf>, path=<js>"/{propertyName}"</js>, guards=AdminGuard.<jk>class</jk>)
-		<jk>public</jk> String setSystemProperty(<ja>@Path</ja>(<js>"propertyName"</js>) String <jv>propertyName</jv>, <ja>@Body</ja> String <jv>value</jv>) {
-			System.<jsm>setProperty</jsm>(<jv>propertyName</jv>, <jv>value</jv>);
-			<jk>return</jk> <js>"OK"</js>;
-		}
-	
-		<ja>@RestMethod</ja>(name=<jsf>POST</jsf>, path=<js>"/"</js>, guards=AdminGuard.<jk>class</jk>)
-		<jk>public</jk> String setSystemProperties(<ja>@Body</ja> java.util.Properties <jv>newProperties</jv>) {
-			System.<jsm>setProperties</jsm>(<jv>newProperties</jv>);
-			<jk>return</jk> <js>"OK"</js>;
-		}
-	
-		<ja>@RestMethod</ja>(name=<jsf>DELETE</jsf>, path=<js>"/{propertyName}"</js>, guards=AdminGuard.<jk>class</jk>)
-		<jk>public</jk> String deleteSystemProperty(<ja>@Path</ja>(<js>"propertyName"</js>) String <jv>propertyName</jv>) {
-			System.<jsm>clearProperty</jsm>(<jv>propertyName</jv>);
-			<jk>return</jk> <js>"OK"</js>;
-		}
-	}
-		</p>
-		<br><br><hr>
-		<p>
-			The REST API is built on top of Servlets, making them easy to deploy in any JEE environment.  
-		</p>
-		<p>
-			REST Java methods can return any of the following objects:  
-			<br>POJOs, <ja>@Response</ja> annotated objects, <code>Readers</code>, <code>InputStreams</code>, <code>ZipFiles</code>, <code>Redirects</code>, <code>Streamables</code>, and <code>Writables</code>.
-		</p>
-		<p>
-			Or add your own handlers for other types.  
-		</p>
-		<p>
-			REST Java methods can be passed any of the following objects in any order:
-		</p>
-		<ul class='spaced-list'>
-			<li>Low-level request/response objects:
-				<br><code>HttpServletRequest</code>, <code>HttpServletResponse</code>, <code>RestRequest</code>, <code>RestResponse</code>.
-			<li>Intermediate-level objects:  
-				<br><code>RequestHeaders</code>, <code>RequestQuery</code>, <code>RequestFormData</code>, <code>RequestPathMatch</code>, <code>RequestBody</code>.
-			<li>All RFC 2616 request header objects:  
-				<br><code>Accept</code>, <code>AcceptLanguage</code>, <code>AcceptEncoding</code>...
-			<li>Annotated parameters:  
-				<br><ja>@Header</ja>, <ja>@Query</ja>, <ja>@FormData</ja>, <ja>@Path</ja>, <ja>@PathRemainder</ja>, <ja>@Body</ja>.  
-			<li>Other objects:  
-				<br><code>Locale</code>, <code>ResourceBundle</code>, <code>MessageBundle</code>, <code>InputStream</code>, <code>OutputStream</code>, <code>Reader</code>, <code>Writer</code>...
-			<li>User-defined parameter types.
-		</ul>
-		<p>
-			Automatic error handling is provided for a variety of conditions: 
-		</p>
-		<ul>
-			<li>Automatic 401 errors (Unauthorized) on failed guards.
-			<li>Automatic 404 errors (Not Found) on unmatched path patterns.
-			<li>Automatic 405 errors (Method Not Implemented) on unimplemented methods.
-			<li>Automatic 406 errors (Not Acceptable) when no matching serializer was found to handle the <l>Accept</l> header.
-			<li>Automatic 412 errors (Precondition Failed) when all matchers failed to match.
-			<li>Automatic 415 errors (Unsupported Media Type) when no matching parser was found was found to handle the <l>Content-Type</l> header.
-			<li>Automatic 500 errors on uncaught exceptions.
-			<li>Throw your own runtime RestException with HTTP status and response object. 
-		</ul>
-		<p>
-			Other features include: 
-		</p> 
-		<ul class='spaced-list'>
-			<li>Extremely simple debuggability using nothing more than your browser.
-			<li>Simplified localization support.
-			<li>Configurability through external INI files.
-			<li>Client-versioned responses (and other customizable heuristic matching APIs).
-			<li>Automatic statistics gathering.
-			<li>Define and use your own HTML stylesheets.
-			<li>Lots of up-to-date documentation and examples.
-			<li>MUCH MORE!....
-		</ul>
-		<br><hr>
-		<p>	
-			Navigable hierarchies of REST resources are easy to set up either programmatically or through annotations.
-		</p>
-		<p>
-			The following example is the <code>RootResources</code> class from the REST examples showing how to construct
-			a grouping of resources using the <code>children()</code> annotation:
-		</p>
-		<p class='bcode w800'>
-	<ja>@Rest</ja>(
-		path=<js>"/"</js>,
-		title=<js>"Root resources"</js>,
-		description=<js>"Example of a router resource page."</js>,
-		children={
-			HelloWorldResource.<jk>class</jk>,
-			PetStoreResource.<jk>class</jk>,
-			DtoExamples.<jk>class</jk>,
-			ConfigResource.<jk>class</jk>,
-			LogsResource.<jk>class</jk>,
-			ShutdownResource.<jk>class</jk>
-		}
-	)
-	<ja>@HtmlDocConfig</ja>(
-		links={
-			<js>"options: ?method=OPTIONS"</js>,
-			<js>"$W{ContentTypeMenuItem}"</js>,
-			<js>"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/RootResources.java"</js>
-		},
-		aside={
-			<js>"&lt;div style='max-width:400px' class='text'&gt;"</js>,
-			<js>"	&lt;p&gt;This is an example of a 'router' page that serves as a jumping-off point to child resources.&lt;/p&gt;"</js>,
-			<js>"	&lt;p&gt;Resources can be nested arbitrarily deep through router pages.&lt;/p&gt;"</js>,
-			<js>"	&lt;p&gt;Note the options link provided that lets you see the generated swagger doc for this page.&lt;/p&gt;"</js>,
-			<js>"	&lt;p&gt;Also note the source link on these pages to view the source code for the page.&lt;/p&gt;"</js>,
-			<js>"	&lt;p&gt;All content on pages in the UI are serialized POJOs.  In this case, it's a serialized array of beans with 2 properties, 'name' and 'description'.&lt;/p&gt;"</js>,
-			<js>"	&lt;p&gt;Other features (such as this aside) are added through annotations.&lt;/p&gt;"</js>,
-			<js>"&lt;/div&gt;"</js>
-		},
-		footer=<js>"$W{PoweredByApache}"</js>,
-		widgets={
-			PoweredByApache.<jk>class</jk>,
-			ContentTypeMenuItem.<jk>class</jk>
-		}
-	)
-	<jk>public class</jk> RootResources <jk>extends</jk> BasicRestServletGroup { <jc>/* No code needed! */</jc> }
-		</p>
-		<p>
-			The above resource when rendered in HTML shows how easy it is to discover and navigate to child resources using a browser:
-		</p>
-		<p class='bcode w800'>
-	http://localhost:10000
-		</p>
-		<img class='bordered w800' src='images/juneau-examples-rest.RootResources.1.png'>
-		<p>
-			Resources can be nested arbitrarily deep.  
-			The <ja>@Rest</ja> and <ja>@RestMethod</ja> annotations can be applied to any classes, not just
-			servlets.  The only requirement is that the top-level resource be a subclass of <code>RestServlet</code> as a hook into
-			the servlet container.
-		</p>
-		
-		<p>
-			The <code>juneau-examples-rest</code> project includes various other examples that highlight some of the 
-			capabilities of the REST servlet API.
-			<br>
-			For example, the <code>PetStoreResource</code> class shows some advanced features such as using POJO renders
-			and converters, and HTML widgets.
-		</p>
-		<p class='bcode w800'>
-	http://localhost:10000/petstore
-		</p>			
-		<img class='bordered w800' src='images/juneau-examples-rest.PetStoreResource.1.png'>
-		<p>
-			The beans being serialized are shown here:
-		</p>
-		<p class='bcode w800'>
-	<jc>// Our bean class.</jc>
-	<jk>public class</jk> Pet {
-
-		<ja>@Html</ja>(link=<js>"servlet:/{id}"</js>)  <jc>// Creates a hyperlink in HTML view.</jc>
-		<ja>@NameProperty</ja>                <jc>// Links the parent key to this bean.</jc>
-		<jk>public int</jk> <jf>id</jf>;
-
-		<jk>public</jk> String <jf>name</jf>;
-		<jk>public</jk> Kind <jf>kind</jf>;
-
-		<ja>@Beanp</ja>(format=<js>"$%.2f"</js>)  <jc>// Renders price in dollars.</jc>
-		<jk>public float</jk> <jf>price</jf>;
-
-		<ja>@Beanp</ja>(swap=DateSwap.<jsf>RFC2822D</jsf>.<jk>class</jk>)  <jc>// Renders dates in RFC2822 format.</jc>
-		<jk>public</jk> Date <jf>birthDate</jf>;
-
-		<jk>public int</jk> getAge() {
-			Calendar <jv>calendar</jv> = <jk>new</jk> GregorianCalendar();
-			<jv>calendar</jv>.setTime(<jf>birthDate</jf>);
-			<jk>return new</jk> GregorianCalendar().get(Calendar.<jsf>YEAR</jsf>) - <jv>calendar</jv>.get(Calendar.<jsf>YEAR</jsf>);
-		}
-	}
-
-	<ja>@Html</ja>(render=KindRender.<jk>class</jk>)  <jc>// Render as an icon in HTML.</jc>
-	<jk>public static enum</jk> Kind {
-		<jsf>CAT</jsf>, <jsf>DOG</jsf>, <jsf>BIRD</jsf>, <jsf>FISH</jsf>, <jsf>MOUSE</jsf>, <jsf>RABBIT</jsf>, <jsf>SNAKE</jsf>
-	}
-
-	<jk>public static class</jk> KindRender <jk>extends</jk> HtmlRender&lt;Kind&gt; {
-		<ja>@Override</ja>
-		<jk>public</jk> Object getContent(SerializerSession <jv>session</jv>, Kind <jv>value</jv>) {
-			<jk>return new</jk> Img().src(<js>"servlet:/htdocs/"</js>+<jv>value</jv>.toString().toLowerCase()+<js>".png"</js>);
-		}
-		<ja>@Override</ja>
-		<jk>public</jk> String getStyle(SerializerSession <jv>session</jv>, Kind <jv>value</jv>) {
-			<jk>return</jk> <js>"background-color:#FDF2E9"</js>;
-		}
-	}
-		</p>
-	
-		<p>
-			The <code>QUERY</code> menu item shows the capabilities of Converters which are post-processors that
-			work to filter POJOs after they've been returned by your Java method.
-			<br>
-			In this case, we're using the <code>Queryable</code> converter that allows us to perform search/view/sort/paging
-			against collections of beans:
-		</p>
-		<img class='bordered w800' src='images/juneau-examples-rest.PetStoreResource.2.png'>
-	
-		<p>
-			The drop-down menu items are implemented through "widgets" which allow you to embed arbitrary HTML, Javascript, 
-			and CSS in the HTML view of the page.
-		</p>
-		<p class='bcode w800'>
-	<ja>@RestMethod</ja>(
-		name=<jsf>GET</jsf>,
-		path=<js>"/"</js>,
-		summary=<js>"The complete list of pets in the store"</js>,
-
-		<jc>// Add our converter for POJO query support.</jc>
-		converters=Queryable.<jk>class</jk>
-	)
-	<ja>@HtmlDocConfig</ja>(
-		
-		<jc>// Add our menu items in the nav links.</jc>
-		links={
-			<js>"up: request:/.."</js>,
-			<js>"options: servlet:/?method=OPTIONS"</js>,
-			<js>"$W{QueryMenuItem}"</js>,
-			<js>"$W{ContentTypeMenuItem}"</js>,
-			<js>"$W{StyleMenuItem}"</js>,
-			<js>"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/PetStoreResource.java"</js>
-		},
-		
-		<jc>// Add 'query' and 'content-types' menu items.</jc>
-		widgets={
-			QueryMenuItem.<jk>class</jk>,
-			ContentTypeMenuItem.<jk>class</jk>,
-			StyleMenuItem.<jk>class</jk>
-		}
-	)
-	<jk>public</jk> Collection&lt;Pet&gt; getPets() {
-		</p>
-		
-		<p>
-			HTML views are highly customizable with abilities such as defining your own look-and-feel and even allowing
-			you to define your own templates.
-		</p>
-		<p>
-			For example, the PetStore page above rendered in one of the other predefined stylesheets:
-		</p>	
-		<h5 class='figure'>Light look-and-feel</h5>
-		<img class='bordered w800' src='images/juneau-examples-rest.PetStoreResource.3.png'>
-		<h5 class='figure'>Dark look-and-feel</h5>
-		<img class='bordered w800' src='images/juneau-examples-rest.PetStoreResource.4.png'>		
-		
-		<p>
-			Swagger UI is auto-generated and self-hosted through OPTIONS requests: 
-		</p>
-		<p class='bcode w900'>
-	http://localhost:10000/petstore?method=OPTIONS
-		</p>
-		<img class='bordered w900' src='images/juneau-examples-rest.PetStoreResource.9a.png'>
-		<br>		
-		<img class='bordered w900' src='images/juneau-examples-rest.PetStoreResource.9h.png'>
-		<br>		
-		<img class='bordered w900' src='images/juneau-examples-rest.PetStoreResource.9f.png'>		
-
-		<p>
-			Swagger contains auto-generated code examples for all supported languages:
-		</p>
-		<img class='bordered w900' src='images/juneau-examples-rest.PetStoreResource.9d.png'>
-		<br>		
-		<img class='bordered w900' src='images/juneau-examples-rest.PetStoreResource.9e.png'>		
-		
-		<ul class='seealso'>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-rest-server'>juneau-rest-server</a>
-		</ul>
-		
-	</div>
-
-	<!-- ======================================================================================================= -->
-	<!-- === JUNEAU-REST-SERVER-SPRINGBOOT ===================================================================== -->
-	<!-- ======================================================================================================= -->
-
-	<h5 class='toc' id='juneau-rest-server-springboot'>juneau-rest-server-springboot</h5>
-	<div class='topic'>
-		<h5 class='figure'>Maven Dependency</h5>
-		<p class='bcode w500'>
-	<xt>&lt;dependency&gt;</xt>
-		<xt>&lt;groupId&gt;</xt>org.apache.juneau<xt>&lt;/groupId&gt;</xt>
-		<xt>&lt;artifactId&gt;</xt>juneau-rest-server-springboot<xt>&lt;/artifactId&gt;</xt>
-		<xt>&lt;version&gt;</xt>{@property juneauVersion}<xt>&lt;/version&gt;</xt>
-	<xt>&lt;/dependency&gt;</xt>
-		</p>	
-	
-		<h5 class='figure'>Java Library</h5>
-		<p class='bcode w500'>
-	juneau-rest-server-springboot-{@property juneauVersion}.jar 
-		</p>	
-		
-		<h5 class='figure'>OSGi Module</h5>
-		<p class='bcode w500'>
-	org.apache.juneau.rest.server.springboot_{@property juneauVersion}.jar 
-		</p>	
-		
-		<p>
-			The <code>juneau-rest-server-springboot</code> library provides classes to make it easy to integrate
-			Juneau REST resources with Spring and Spring Boot.
-		</p>
-		
-		<h5 class='figure'>Example:</h5>
-		<p class='bcode w800'>
-	<ja>@SpringBootApplication</ja>
-	<ja>@Controller</ja>
-	<jk>public class</jk> App {
-	
-		<jk>public static void</jk> main(String[] <jv>args</jv>) {
-			<jk>new</jk> SpringApplicationBuilder(App.<jk>class</jk>)
-				.initializers(<jk>new</jk> JuneauRestInitializer(App.<jk>class</jk>))
-				.run(<jv>args</jv>);
-		}
-	
-		<jd>/** Our root resource */</jd>
-		<ja>@Bean @JuneauRestRoot</ja>
-		<jk>public</jk> RootResource getRootResource() {
-			<jk>return new</jk> RootResource();  <jc>// A subclass of RestServlet.</jc>
-		}
-	}
-		</p>
-		<p>
-			The initializer will search for Spring beans annotated with the <ja>@JuneauRestRoot</ja> annotation identifying it
-			as a top-level servlet to be deployed in the Spring Boot web container.
-		</p>
-		
-		<ul class='seealso'>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-rest-server-springboot'>juneau-rest-server-springboot</a>
-		</ul>
-	</div>
-
-	<!-- ======================================================================================================= -->
-	<!-- === JUNEAU-REST-SERVER-JAXRS ========================================================================== -->
-	<!-- ======================================================================================================= -->
-
-	<h5 class='toc' id='juneau-rest-server-jaxrs'>juneau-rest-server-jaxrs</h5>
-	<div class='topic'>
-		<h5 class='figure'>Maven Dependency</h5>
-		<p class='bcode w500'>
-	<xt>&lt;dependency&gt;</xt>
-		<xt>&lt;groupId&gt;</xt>org.apache.juneau<xt>&lt;/groupId&gt;</xt>
-		<xt>&lt;artifactId&gt;</xt>juneau-rest-server-jaxrs<xt>&lt;/artifactId&gt;</xt>
-		<xt>&lt;version&gt;</xt>{@property juneauVersion}<xt>&lt;/version&gt;</xt>
-	<xt>&lt;/dependency&gt;</xt>
-		</p>	
-	
-		<h5 class='figure'>Java Library</h5>
-		<p class='bcode w500'>
-	juneau-rest-server-jaxrs-{@property juneauVersion}.jar 
-		</p>	
-		
-		<h5 class='figure'>OSGi Module</h5>
-		<p class='bcode w500'>
-	org.apache.juneau.rest.server.jaxrs_{@property juneauVersion}.jar 
-		</p>	
-		
-		<p>
-			The <code>juneau-rest-server-jaxrs</code> module defines predefined <code>MessageBodyReader</code> and 
-			<code>MessageBodyWriter</code> implementations for using Juneau serializers and parsers in JAX-RS environments.
-		</p>	
-
-		<ul class='seealso'>
-			<li><a class='doclink' href='http://juneau.apache.org/site/apidocs-{@property juneauVersion}/overview-summary.html#juneau-rest-server-jaxrs'>juneau-rest-server-jaxrs</a>
-		</ul>
-	</div>
-</body>
-</html>
\ No newline at end of file