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/27 17:45:07 UTC

[juneau] branch master updated (890443c4f -> 0486b3189)

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

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


    from 890443c4f Add core common module.
     new 701eb031a Javadocs
     new 0486b3189 Javadocs

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../org/apache/juneau/assertions/AnyAssertion.java |    2 +-
 .../apache/juneau/assertions/ArrayAssertion.java   |    2 +-
 .../org/apache/juneau/assertions/Assertion.java    |    2 +-
 .../juneau/assertions/AssertionPredicate.java      |    2 +-
 .../juneau/assertions/AssertionPredicates.java     |    2 +-
 .../org/apache/juneau/assertions/Assertions.java   |   64 +-
 .../apache/juneau/assertions/BeanAssertion.java    |    2 +-
 .../juneau/assertions/BeanListAssertion.java       |    2 +-
 .../apache/juneau/assertions/BooleanAssertion.java |    2 +-
 .../juneau/assertions/ByteArrayAssertion.java      |    2 +-
 .../juneau/assertions/CollectionAssertion.java     |    2 +-
 .../juneau/assertions/ComparableAssertion.java     |    2 +-
 .../apache/juneau/assertions/DateAssertion.java    |    2 +-
 .../juneau/assertions/FluentAnyAssertion.java      |    2 +-
 .../juneau/assertions/FluentArrayAssertion.java    |    2 +-
 .../apache/juneau/assertions/FluentAssertion.java  |    2 +-
 .../juneau/assertions/FluentBeanAssertion.java     |    2 +-
 .../juneau/assertions/FluentBeanListAssertion.java |    2 +-
 .../juneau/assertions/FluentBooleanAssertion.java  |    2 +-
 .../assertions/FluentByteArrayAssertion.java       |    2 +-
 .../assertions/FluentCollectionAssertion.java      |    2 +-
 .../assertions/FluentComparableAssertion.java      |    2 +-
 .../juneau/assertions/FluentDateAssertion.java     |    2 +-
 .../juneau/assertions/FluentIntegerAssertion.java  |    2 +-
 .../juneau/assertions/FluentListAssertion.java     |    2 +-
 .../juneau/assertions/FluentLongAssertion.java     |    2 +-
 .../juneau/assertions/FluentMapAssertion.java      |    2 +-
 .../juneau/assertions/FluentObjectAssertion.java   |    2 +-
 .../assertions/FluentPrimitiveArrayAssertion.java  |    2 +-
 .../juneau/assertions/FluentStringAssertion.java   |    2 +-
 .../assertions/FluentStringListAssertion.java      |    2 +-
 .../assertions/FluentThrowableAssertion.java       |    2 +-
 .../juneau/assertions/FluentVersionAssertion.java  |    2 +-
 .../assertions/FluentZonedDateTimeAssertion.java   |    2 +-
 .../apache/juneau/assertions/IntegerAssertion.java |    2 +-
 .../apache/juneau/assertions/ListAssertion.java    |    2 +-
 .../apache/juneau/assertions/LongAssertion.java    |    2 +-
 .../org/apache/juneau/assertions/MapAssertion.java |    2 +-
 .../apache/juneau/assertions/ObjectAssertion.java  |    2 +-
 .../juneau/assertions/PrimitiveArrayAssertion.java |    2 +-
 .../apache/juneau/assertions/StringAssertion.java  |    2 +-
 .../juneau/assertions/StringListAssertion.java     |    2 +-
 .../juneau/assertions/ThrowableAssertion.java      |    2 +-
 .../java/org/apache/juneau/assertions/Verify.java  |    2 +-
 .../apache/juneau/assertions/VersionAssertion.java |    2 +-
 .../juneau/assertions/ZonedDateTimeAssertion.java  |    2 +-
 .../main/java/org/apache/juneau/utils/Snippet.java |    2 +-
 juneau-doc/docs/Topics/01.Overview/01.o.Core.html  |    2 +-
 ...uage.html => 21.jm.SimpleVariableLanguage.html} |    0
 .../01.jm.SvlVariables.html                        |    0
 .../02.jm.VarResolvers.html                        |    0
 .../03.jm.DefaultVarResolver.html                  |    0
 .../04.jm.SvlOtherNotes.html                       |    0
 .../{23.jm.Encoders.html => 22.jm.Encoders.html}   |    0
 ....jm.ObjectTools.html => 23.jm.ObjectTools.html} |    0
 ....jm.JsonDetails.html => 24.jm.JsonDetails.html} |    0
 .../01.jm.JsonMethodology.html                     |    0
 .../02.jm.JsonSerializers.html                     |    0
 .../03.jm.SimplifiedJson.html                      |    0
 .../04.jm.JsonParsers.html                         |    0
 .../05.jm.JsonAnnotation.html                      |    0
 ...maDetails.html => 25.jm.JsonSchemaDetails.html} |    0
 ...27.jm.XmlDetails.html => 26.jm.XmlDetails.html} |    0
 .../01.jm.XmlMethodology.html                      |    0
 .../02.jm.XmlSerializers.html                      |    0
 .../03.jm.XmlParsers.html                          |    0
 .../04.jm.XmlBeanTypeNameAnnotation.html           |    0
 .../05.jm.XmlChildNameAnnotation.html              |    0
 .../06.jm.XmlFormatAnnotation.html                 |    0
 .../07.jm.XmlNamespaces.html                       |    0
 ....jm.HtmlDetails.html => 27.jm.HtmlDetails.html} |    0
 .../01.jm.HtmlMethodology.html                     |    0
 .../02.jm.HtmlSerializers.html                     |    0
 .../03.jm.HtmlParsers.html                         |    0
 .../04.jm.HtmlAnnotation.html                      |    0
 .../05.jm.HtmlRenderAnnotation.html                |    0
 .../06.jm.HtmlDocSerializer.html                   |    0
 .../07.jm.BasicHtmlDocTemplate.html                |    0
 .../08.jm.HtmlCustomTemplates.html                 |    0
 ...29.jm.HtmlSchema.html => 28.jm.HtmlSchema.html} |    0
 ...30.jm.UonDetails.html => 29.jm.UonDetails.html} |    0
 .../01.jm.UonMethodology.html                      |    0
 .../02.jm.UonSerializers.html                      |    0
 .../03.jm.UonParsers.html                          |    0
 ...gDetails.html => 30.jm.UrlEncodingDetails.html} |    0
 .../01.jm.UrlEncMethodology.html                   |    0
 .../02.jm.UrlEncSerializers.html                   |    0
 .../03.jm.UrlEncParsers.html                       |    0
 .../04.jm.UrlEncodingAnnotation.html               |    0
 ...gPackDetails.html => 31.jm.MsgPackDetails.html} |    0
 .../01.jm.MsgPackSerializers.html                  |    0
 .../02.jm.MsgPackParsers.html                      |    0
 ...enApiDetails.html => 32.jm.OpenApiDetails.html} |    0
 .../01.jm.OpenApiMethodology.html                  |    0
 .../02.jm.OpenApiSerializers.html                  |    0
 .../03.jm.OpenApiParsers.html                      |    0
 ...BestPractices.html => 33.jm.BestPractices.html} |    0
 ...r-springboot.html => 06.juneau-assertions.html} |   13 +-
 .../01.ja.Overview.html}                           |    2 +-
 ...rest-common.html => 07.juneau-rest-common.html} |    0
 .../01.jrc.org.apache.juneau.http.html             |    0
 .../02.jrc.org.apache.juneau.http.annotation.html  |    0
 .../03.jrc.org.apache.juneau.http.header.html      |    0
 .../04.jrc.org.apache.juneau.http.part.html        |    0
 .../05.jrc.org.apache.juneau.http.entity.html      |    0
 .../06.jrc.org.apache.juneau.http.resource.html    |    0
 .../07.jrc.org.apache.juneau.http.response.html    |    0
 .../08.jrc.org.apache.juneau.http.remote.html      |    0
 ...rest-server.html => 08.juneau-rest-server.html} |    0
 .../01.jrs.Overview.html                           |    0
 .../02.jrs.AnnotatedClasses.html                   |    0
 .../01.jrs.PredefinedClasses.html                  |    0
 .../02.jrs.ChildResources.html                     |    0
 .../03.jrs.PathVariables.html                      |    0
 .../02.jrs.AnnotatedClasses/04.jrs.Deployment.html |    0
 .../05.jrs.LifecycleHooks.html                     |    0
 .../03.jrs.RestOpAnnotatedMethods.html             |    0
 .../01.jrs.InferredHttpMethodsAndPaths.html        |    0
 .../02.jrs.JavaMethodParameters.html               |    0
 .../03.jrs.JavaMethodReturnTypes.html              |    0
 .../04.jrs.JavaMethodThrowableTypes.html           |    0
 .../05.jrs.PathPatterns.html                       |    0
 .../06.jrs.Matchers.html                           |    0
 .../07.jrs.OverloadingHttpMethods.html             |    0
 .../08.jrs.AdditionalInformation.html              |    0
 .../04.jrs.HttpParts.html                          |    0
 .../04.jrs.HttpParts/01.jrs.PartMarshallers.html   |    0
 .../02.jrs.HttpPartAnnotations.html                |    0
 .../04.jrs.HttpParts/03.jrs.DefaultParts.html      |    0
 .../04.jrs.HttpParts/04.jrs.RequestBeans.html      |    0
 .../04.jrs.HttpParts/05.jrs.ResponseBeans.html     |    0
 .../04.jrs.HttpParts/06.jrs.HttpPartApis.html      |    0
 .../05.jrs.Marshalling.html                        |    0
 .../06.jrs.HandlingFormPosts.html                  |    0
 .../07.jrs.Guards.html                             |    0
 .../08.jrs.Converters.html                         |    0
 .../09.jrs.LocalizedMessages.html                  |    0
 .../10.jrs.Encoders.html                           |    0
 .../11.jrs.ConfigurationFiles.html                 |    0
 .../12.jrs.SvlVariables.html                       |    0
 .../13.jrs.StaticFiles.html                        |    0
 .../14.jrs.ClientVersioning.html                   |    0
 .../15.jrs.Swagger.html                            |    0
 .../01.jrs.BasicRestServletSwagger.html            |    0
 .../15.jrs.Swagger/02.jrs.BasicSwaggerInfo.html    |    0
 .../15.jrs.Swagger/03.jrs.SwaggerTags.html         |    0
 .../15.jrs.Swagger/04.jrs.SwaggerOperations.html   |    0
 .../15.jrs.Swagger/05.jrs.SwaggerParameters.html   |    0
 .../15.jrs.Swagger/06.jrs.SwaggerResponses.html    |    0
 .../15.jrs.Swagger/07.jrs.SwaggerModels.html       |    0
 .../15.jrs.Swagger/08.jrs.SwaggerStylesheet.html   |    0
 .../doc-files/jrs.Swagger.Models.1.png             |  Bin
 .../doc-files/jrs.Swagger.Models.2.png             |  Bin
 .../doc-files/jrs.Swagger.Models.3.png             |  Bin
 .../doc-files/jrs.Swagger.Operations.1.png         |  Bin
 .../doc-files/jrs.Swagger.Operations.2.png         |  Bin
 .../doc-files/jrs.Swagger.Operations.3.png         |  Bin
 .../doc-files/jrs.Swagger.Parameters.2.png         |  Bin
 .../16.jrs.ExecutionStatistics.html                |    0
 .../17.jrs.HtmlDocAnnotation.html                  |    0
 .../01.jrs.HtmlUIvsDI.html                         |    0
 .../02.jrs.HtmlWidgets.html                        |    0
 .../03.jrs.HtmlPredefinedWidgets.html              |    0
 .../04.jrs.HtmlUiCustomization.html                |    0
 .../05.jrs.HtmlStylesheets.html                    |    0
 .../jrs.HtmlDocAnnotation.PredefinedWidgets.1.png  |  Bin
 .../jrs.HtmlDocAnnotation.PredefinedWidgets.2.png  |  Bin
 .../jrs.HtmlDocAnnotation.PredefinedWidgets.3.png  |  Bin
 .../jrs.HtmlDocAnnotation.PredefinedWidgets.4.png  |  Bin
 .../18.jrs.LoggingAndDebugging.html                |    0
 .../19.jrs.HttpStatusCodes.html                    |    0
 .../20.jrs.BuiltInParameters.html                  |    0
 .../21.jrs.UsingWithOsgi.html                      |    0
 .../22.jrs.RestContext.html                        |    0
 .../23.jrs.RestOpContext.html                      |    0
 .../24.jrs.ResponseProcessors.html                 |    0
 .../25.jrs.RestRpc.html                            |    0
 .../26.jrs.SerializingUris.html                    |    0
 .../27.jrs.UtilityBeans.html                       |    0
 .../28.jrs.HtmlBeans.html                          |    0
 .../29.jrs.OtherNotes.html                         |    0
 .../01.jrs.Log4j.html                              |    0
 .../doc-files/jrs.ExecutionStatistics.1.png        |  Bin
 .../doc-files/jrs.ExecutionStatistics.2.png        |  Bin
 .../doc-files/jrs.HelloWorldExample.1.png          |  Bin
 .../doc-files/jrs.HtmlBeans.div.json.png           |  Bin
 .../doc-files/jrs.HtmlBeans.div.png                |  Bin
 .../doc-files/jrs.HtmlBeans.form.json.png          |  Bin
 .../doc-files/jrs.HtmlBeans.form.png               |  Bin
 .../doc-files/jrs.HtmlBeans.json.png               |  Bin
 .../doc-files/jrs.HtmlBeans.png                    |  Bin
 .../doc-files/jrs.HtmlBeans.table.json.png         |  Bin
 .../doc-files/jrs.HtmlBeans.table.png              |  Bin
 .../doc-files/jrs.Overview.HelloWorldResource.png  |  Bin
 .../doc-files/jrs.Overview.RootResources.json.png  |  Bin
 .../doc-files/jrs.Overview.RootResources.png       |  Bin
 .../doc-files/jrs.RouterPages.1.png                |  Bin
 .../doc-files/jrs.Stylesheets.0.png                |  Bin
 .../doc-files/jrs.Stylesheets.1.png                |  Bin
 .../doc-files/jrs.Stylesheets.2.png                |  Bin
 .../doc-files/jrs.Stylesheets.3.png                |  Bin
 .../doc-files/jrs.Swagger.1.png                    |  Bin
 .../doc-files/jrs.Swagger.2.png                    |  Bin
 .../doc-files/jrs.Swagger.3.png                    |  Bin
 .../doc-files/jrs.Swagger.4.png                    |  Bin
 .../doc-files/jrs.Swagger.5.png                    |  Bin
 .../doc-files/jrs.UiCustomization.1.png            |  Bin
 .../jrs.UtilityBeans.BeanDescription.json.png      |  Bin
 .../doc-files/jrs.UtilityBeans.BeanDescription.png |  Bin
 .../doc-files/jrs.UtilityBeans.Hyperlink.json.png  |  Bin
 .../doc-files/jrs.UtilityBeans.Hyperlink.png       |  Bin
 .../doc-files/jrs.UtilityBeans.json.png            |  Bin
 .../doc-files/jrs.UtilityBeans.png                 |  Bin
 .../doc-files/jrs.restRPC.1.png                    |  Bin
 .../doc-files/jrs.restRPC.2.png                    |  Bin
 .../doc-files/jrs.restRPC.3.png                    |  Bin
 .../doc-files/jrs.restRPC.4.png                    |  Bin
 .../doc-files/jrs.restRPC.5.png                    |  Bin
 .../doc-files/jrs.restRPC.6.png                    |  Bin
 .../doc-files/jrs.restRPC.7.png                    |  Bin
 .../doc-files/jrs.restRPC.8.png                    |  Bin
 .../doc-files/jrs.restRPC.9.png                    |  Bin
 ...ver-rdf.html => 09.juneau-rest-server-rdf.html} |    0
 ...jaxrs.html => 10.juneau-rest-server-jaxrs.html} |    0
 .../01.jrsj.BaseProvider.html                      |    0
 ....html => 11.juneau-rest-server-springboot.html} |    0
 .../01.jrss.Overview.html                          |    0
 .../doc-files/jrss.Overview.HelloWorldResource.png |  Bin
 .../doc-files/jrss.Overview.RootResources.json.png |  Bin
 .../doc-files/jrss.Overview.RootResources.png      |  Bin
 ...rest-client.html => 12.juneau-rest-client.html} |    0
 .../01.jrc.PojoMarshalling.html                    |    0
 .../02.jrc.RequestParts.html                       |    0
 .../03.jrc.RequestContent.html                     |    0
 .../04.jrc.ResponseStatus.html                     |    0
 .../05.jrc.ResponseHeaders.html                    |    0
 .../06.jrc.ResponseContent.html                    |    0
 .../07.jrc.CustomCallHandlers.html                 |    0
 .../08.jrc.Interceptors.html                       |    0
 .../09.jrc.Proxies.html                            |    0
 .../09.jrc.Proxies/01.jrc.Remote.html              |    0
 .../09.jrc.Proxies/02.jrc.RemoteMethod.html        |    0
 .../09.jrc.Proxies/03.jrc.Content.html             |    0
 .../09.jrc.Proxies/04.jrc.FormData.html            |    0
 .../09.jrc.Proxies/05.jrc.Query.html               |    0
 .../09.jrc.Proxies/06.jrc.Header.html              |    0
 .../09.jrc.Proxies/07.jrc.Path.html                |    0
 .../09.jrc.Proxies/08.jrc.Request.html             |    0
 .../09.jrc.Proxies/09.jrc.Response.html            |    0
 .../10.jrc.DualPurposeInterfaces.html              |    0
 .../10.jrc.LoggingAndDebugging.html                |    0
 .../11.jrc.CustomizingHttpClient.html              |    0
 .../12.jrc.ExtendingRestClient.html                |    0
 .../13.jrc.Authentication.html                     |    0
 .../01.jrc.AuthenticationBASIC.html                |    0
 .../02.jrc.AuthenticationForm.html                 |    0
 .../03.jrc.AuthenticationOIDC.html                 |    0
 ...eau-rest-mock.html => 13.juneau-rest-mock.html} |    0
 .../01.jrm.MockRestClient.html                     |    0
 ...-core.html => 14.juneau-microservice-core.html} |    0
 .../01.jmc.Overview.html                           |    0
 .../02.jmc.LifecycleMethods.html                   |    0
 .../03.jmc.Args.html                               |    0
 .../04.jmc.Manifest.html                           |    0
 .../05.jmc.Config.html                             |    0
 .../06.jmc.SystemProperties.html                   |    0
 .../07.jmc.VarResolver.html                        |    0
 .../08.jmc.ConsoleCommands.html                    |    0
 .../09.jmc.Listeners.html                          |    0
 ...etty.html => 15.juneau-microservice-jetty.html} |    0
 .../01.jmj.Overview.html                           |    0
 .../02.jmj.LifecycleMethods.html                   |    0
 .../03.jmj.ResourceClasses.html                    |    0
 .../04.jmj.PredefinedResourceClasses.html          |    0
 .../05.jmj.Config.html                             |    0
 .../06.jmj.JettyXml.html                           |    0
 .../07.jmj.UiCustomization.html                    |    0
 .../08.jmj.Extending.html                          |    0
 .../doc-files/jmj.ResourceClasses.1.png            |  Bin
 .../doc-files/jmj.Running.1.png                    |  Bin
 .../doc-files/jmj.UiCustomization.1.png            |  Bin
 ...oservice.html => 16.my-jetty-microservice.html} |    0
 .../01.mjm.Installing.html                         |    0
 .../02.mjm.Running.html                            |    0
 .../03.mjm.Building.html                           |    0
 .../doc-files/mjm.Installing.1.png                 |  Bin
 .../doc-files/mjm.Installing.2.png                 |  Bin
 .../doc-files/mjm.Installing.3.png                 |  Bin
 .../doc-files/mjm.Running.1.png                    |  Bin
 ...ice.html => 17.my-springboot-microservice.html} |    0
 .../01.msm.Installing.html                         |    0
 .../02.msm.Running.html                            |    0
 .../03.msm.Building.html                           |    0
 .../doc-files/msm.Installing.1.png                 |  Bin
 .../doc-files/msm.Installing.2.png                 |  Bin
 .../doc-files/msm.Installing.3.png                 |  Bin
 .../doc-files/msm.Running.1.png                    |  Bin
 ...uneau-petstore.html => 18.juneau-petstore.html} |    0
 .../01.jp.RunningTheApp.html                       |    0
 .../02.jp.juneau-petstore-api.html                 |    0
 .../03.jp.juneau-petstore-client.html              |    0
 .../04.jp.juneau-petstore-server.html              |    0
 .../doc-files/9a.png                               |  Bin
 .../doc-files/9b.png                               |  Bin
 .../doc-files/9c.png                               |  Bin
 .../doc-files/9d.png                               |  Bin
 .../doc-files/9e.png                               |  Bin
 .../doc-files/9f.png                               |  Bin
 .../doc-files/9g.png                               |  Bin
 .../doc-files/9h.png                               |  Bin
 .../doc-files/PetStore.png                         |  Bin
 .../doc-files/PetStore_pets.png                    |  Bin
 .../doc-files/RootResources.png                    |  Bin
 .../{18.Glossaries.html => 19.Glossaries.html}     |    0
 .../01.g.LanguageSupport.html                      |    0
 .../02.g.Annotations.html                          |    0
 .../Topics/{19.Security.html => 20.Security.html}  |    0
 .../01.s.Marshall.html                             |    0
 .../{19.Security => 20.Security}/02.s.Svl.html     |    0
 .../{19.Security => 20.Security}/03.s.Rest.html    |    0
 juneau-doc/src/main/javadoc/overview.html          | 1585 ++++++++++----------
 juneau-doc/src/main/javadoc/resources/docs.txt     |    3 +-
 .../src/main/javadoc/resources/fragments/toc.html  |    5 +-
 .../assertion/FluentResponseBodyAssertion.java     |    2 +-
 .../assertion/FluentResponseHeaderAssertion.java   |    2 +-
 .../FluentResponseStatusLineAssertion.java         |    2 +-
 .../assertions/FluentProtocolVersionAssertion.java |    2 +-
 .../assertions/FluentRequestContentAssertion.java  |    2 +-
 .../FluentRequestFormParamAssertion.java           |    2 +-
 .../assertions/FluentRequestHeaderAssertion.java   |    2 +-
 .../assertions/FluentRequestLineAssertion.java     |    2 +-
 .../FluentRequestQueryParamAssertion.java          |    2 +-
 332 files changed, 912 insertions(+), 872 deletions(-)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{22.jm.SimpleVariableLanguage.html => 21.jm.SimpleVariableLanguage.html} (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{22.jm.SimpleVariableLanguage => 21.jm.SimpleVariableLanguage}/01.jm.SvlVariables.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{22.jm.SimpleVariableLanguage => 21.jm.SimpleVariableLanguage}/02.jm.VarResolvers.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{22.jm.SimpleVariableLanguage => 21.jm.SimpleVariableLanguage}/03.jm.DefaultVarResolver.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{22.jm.SimpleVariableLanguage => 21.jm.SimpleVariableLanguage}/04.jm.SvlOtherNotes.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{23.jm.Encoders.html => 22.jm.Encoders.html} (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{24.jm.ObjectTools.html => 23.jm.ObjectTools.html} (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{25.jm.JsonDetails.html => 24.jm.JsonDetails.html} (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{25.jm.JsonDetails => 24.jm.JsonDetails}/01.jm.JsonMethodology.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{25.jm.JsonDetails => 24.jm.JsonDetails}/02.jm.JsonSerializers.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{25.jm.JsonDetails => 24.jm.JsonDetails}/03.jm.SimplifiedJson.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{25.jm.JsonDetails => 24.jm.JsonDetails}/04.jm.JsonParsers.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{25.jm.JsonDetails => 24.jm.JsonDetails}/05.jm.JsonAnnotation.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{26.jm.JsonSchemaDetails.html => 25.jm.JsonSchemaDetails.html} (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{27.jm.XmlDetails.html => 26.jm.XmlDetails.html} (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{27.jm.XmlDetails => 26.jm.XmlDetails}/01.jm.XmlMethodology.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{27.jm.XmlDetails => 26.jm.XmlDetails}/02.jm.XmlSerializers.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{27.jm.XmlDetails => 26.jm.XmlDetails}/03.jm.XmlParsers.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{27.jm.XmlDetails => 26.jm.XmlDetails}/04.jm.XmlBeanTypeNameAnnotation.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{27.jm.XmlDetails => 26.jm.XmlDetails}/05.jm.XmlChildNameAnnotation.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{27.jm.XmlDetails => 26.jm.XmlDetails}/06.jm.XmlFormatAnnotation.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{27.jm.XmlDetails => 26.jm.XmlDetails}/07.jm.XmlNamespaces.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{28.jm.HtmlDetails.html => 27.jm.HtmlDetails.html} (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{28.jm.HtmlDetails => 27.jm.HtmlDetails}/01.jm.HtmlMethodology.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{28.jm.HtmlDetails => 27.jm.HtmlDetails}/02.jm.HtmlSerializers.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{28.jm.HtmlDetails => 27.jm.HtmlDetails}/03.jm.HtmlParsers.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{28.jm.HtmlDetails => 27.jm.HtmlDetails}/04.jm.HtmlAnnotation.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{28.jm.HtmlDetails => 27.jm.HtmlDetails}/05.jm.HtmlRenderAnnotation.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{28.jm.HtmlDetails => 27.jm.HtmlDetails}/06.jm.HtmlDocSerializer.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{28.jm.HtmlDetails => 27.jm.HtmlDetails}/07.jm.BasicHtmlDocTemplate.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{28.jm.HtmlDetails => 27.jm.HtmlDetails}/08.jm.HtmlCustomTemplates.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{29.jm.HtmlSchema.html => 28.jm.HtmlSchema.html} (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{30.jm.UonDetails.html => 29.jm.UonDetails.html} (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{30.jm.UonDetails => 29.jm.UonDetails}/01.jm.UonMethodology.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{30.jm.UonDetails => 29.jm.UonDetails}/02.jm.UonSerializers.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{30.jm.UonDetails => 29.jm.UonDetails}/03.jm.UonParsers.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{31.jm.UrlEncodingDetails.html => 30.jm.UrlEncodingDetails.html} (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{31.jm.UrlEncodingDetails => 30.jm.UrlEncodingDetails}/01.jm.UrlEncMethodology.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{31.jm.UrlEncodingDetails => 30.jm.UrlEncodingDetails}/02.jm.UrlEncSerializers.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{31.jm.UrlEncodingDetails => 30.jm.UrlEncodingDetails}/03.jm.UrlEncParsers.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{31.jm.UrlEncodingDetails => 30.jm.UrlEncodingDetails}/04.jm.UrlEncodingAnnotation.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{32.jm.MsgPackDetails.html => 31.jm.MsgPackDetails.html} (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{32.jm.MsgPackDetails => 31.jm.MsgPackDetails}/01.jm.MsgPackSerializers.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{32.jm.MsgPackDetails => 31.jm.MsgPackDetails}/02.jm.MsgPackParsers.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{33.jm.OpenApiDetails.html => 32.jm.OpenApiDetails.html} (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{33.jm.OpenApiDetails => 32.jm.OpenApiDetails}/01.jm.OpenApiMethodology.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{33.jm.OpenApiDetails => 32.jm.OpenApiDetails}/02.jm.OpenApiSerializers.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{33.jm.OpenApiDetails => 32.jm.OpenApiDetails}/03.jm.OpenApiParsers.html (100%)
 rename juneau-doc/docs/Topics/02.juneau-marshall/{34.jm.BestPractices.html => 33.jm.BestPractices.html} (100%)
 copy juneau-doc/docs/Topics/{10.juneau-rest-server-springboot.html => 06.juneau-assertions.html} (75%)
 rename juneau-doc/docs/Topics/{02.juneau-marshall/21.jm.FluentAssertions.html => 06.juneau-assertions/01.ja.Overview.html} (99%)
 rename juneau-doc/docs/Topics/{06.juneau-rest-common.html => 07.juneau-rest-common.html} (100%)
 rename juneau-doc/docs/Topics/{06.juneau-rest-common => 07.juneau-rest-common}/01.jrc.org.apache.juneau.http.html (100%)
 rename juneau-doc/docs/Topics/{06.juneau-rest-common => 07.juneau-rest-common}/02.jrc.org.apache.juneau.http.annotation.html (100%)
 rename juneau-doc/docs/Topics/{06.juneau-rest-common => 07.juneau-rest-common}/03.jrc.org.apache.juneau.http.header.html (100%)
 rename juneau-doc/docs/Topics/{06.juneau-rest-common => 07.juneau-rest-common}/04.jrc.org.apache.juneau.http.part.html (100%)
 rename juneau-doc/docs/Topics/{06.juneau-rest-common => 07.juneau-rest-common}/05.jrc.org.apache.juneau.http.entity.html (100%)
 rename juneau-doc/docs/Topics/{06.juneau-rest-common => 07.juneau-rest-common}/06.jrc.org.apache.juneau.http.resource.html (100%)
 rename juneau-doc/docs/Topics/{06.juneau-rest-common => 07.juneau-rest-common}/07.jrc.org.apache.juneau.http.response.html (100%)
 rename juneau-doc/docs/Topics/{06.juneau-rest-common => 07.juneau-rest-common}/08.jrc.org.apache.juneau.http.remote.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server.html => 08.juneau-rest-server.html} (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/01.jrs.Overview.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/02.jrs.AnnotatedClasses.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/02.jrs.AnnotatedClasses/01.jrs.PredefinedClasses.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/02.jrs.AnnotatedClasses/02.jrs.ChildResources.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/02.jrs.AnnotatedClasses/03.jrs.PathVariables.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/02.jrs.AnnotatedClasses/04.jrs.Deployment.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/02.jrs.AnnotatedClasses/05.jrs.LifecycleHooks.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/03.jrs.RestOpAnnotatedMethods.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/03.jrs.RestOpAnnotatedMethods/01.jrs.InferredHttpMethodsAndPaths.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/03.jrs.RestOpAnnotatedMethods/02.jrs.JavaMethodParameters.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/03.jrs.RestOpAnnotatedMethods/03.jrs.JavaMethodReturnTypes.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/03.jrs.RestOpAnnotatedMethods/04.jrs.JavaMethodThrowableTypes.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/03.jrs.RestOpAnnotatedMethods/05.jrs.PathPatterns.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/03.jrs.RestOpAnnotatedMethods/06.jrs.Matchers.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/03.jrs.RestOpAnnotatedMethods/07.jrs.OverloadingHttpMethods.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/03.jrs.RestOpAnnotatedMethods/08.jrs.AdditionalInformation.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/04.jrs.HttpParts.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/04.jrs.HttpParts/01.jrs.PartMarshallers.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/04.jrs.HttpParts/02.jrs.HttpPartAnnotations.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/04.jrs.HttpParts/03.jrs.DefaultParts.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/04.jrs.HttpParts/04.jrs.RequestBeans.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/04.jrs.HttpParts/05.jrs.ResponseBeans.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/04.jrs.HttpParts/06.jrs.HttpPartApis.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/05.jrs.Marshalling.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/06.jrs.HandlingFormPosts.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/07.jrs.Guards.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/08.jrs.Converters.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/09.jrs.LocalizedMessages.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/10.jrs.Encoders.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/11.jrs.ConfigurationFiles.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/12.jrs.SvlVariables.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/13.jrs.StaticFiles.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/14.jrs.ClientVersioning.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/15.jrs.Swagger.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/15.jrs.Swagger/01.jrs.BasicRestServletSwagger.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/15.jrs.Swagger/02.jrs.BasicSwaggerInfo.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/15.jrs.Swagger/03.jrs.SwaggerTags.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/15.jrs.Swagger/04.jrs.SwaggerOperations.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/15.jrs.Swagger/05.jrs.SwaggerParameters.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/15.jrs.Swagger/06.jrs.SwaggerResponses.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/15.jrs.Swagger/07.jrs.SwaggerModels.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/15.jrs.Swagger/08.jrs.SwaggerStylesheet.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/15.jrs.Swagger/doc-files/jrs.Swagger.Models.1.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/15.jrs.Swagger/doc-files/jrs.Swagger.Models.2.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/15.jrs.Swagger/doc-files/jrs.Swagger.Models.3.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/15.jrs.Swagger/doc-files/jrs.Swagger.Operations.1.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/15.jrs.Swagger/doc-files/jrs.Swagger.Operations.2.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/15.jrs.Swagger/doc-files/jrs.Swagger.Operations.3.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/15.jrs.Swagger/doc-files/jrs.Swagger.Parameters.2.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/16.jrs.ExecutionStatistics.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/17.jrs.HtmlDocAnnotation.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/17.jrs.HtmlDocAnnotation/01.jrs.HtmlUIvsDI.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/17.jrs.HtmlDocAnnotation/02.jrs.HtmlWidgets.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/17.jrs.HtmlDocAnnotation/03.jrs.HtmlPredefinedWidgets.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/17.jrs.HtmlDocAnnotation/04.jrs.HtmlUiCustomization.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/17.jrs.HtmlDocAnnotation/05.jrs.HtmlStylesheets.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/17.jrs.HtmlDocAnnotation/doc-files/jrs.HtmlDocAnnotation.PredefinedWidgets.1.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/17.jrs.HtmlDocAnnotation/doc-files/jrs.HtmlDocAnnotation.PredefinedWidgets.2.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/17.jrs.HtmlDocAnnotation/doc-files/jrs.HtmlDocAnnotation.PredefinedWidgets.3.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/17.jrs.HtmlDocAnnotation/doc-files/jrs.HtmlDocAnnotation.PredefinedWidgets.4.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/18.jrs.LoggingAndDebugging.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/19.jrs.HttpStatusCodes.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/20.jrs.BuiltInParameters.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/21.jrs.UsingWithOsgi.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/22.jrs.RestContext.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/23.jrs.RestOpContext.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/24.jrs.ResponseProcessors.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/25.jrs.RestRpc.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/26.jrs.SerializingUris.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/27.jrs.UtilityBeans.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/28.jrs.HtmlBeans.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/29.jrs.OtherNotes.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/32.jrs.LoggingAndErrorHandling/01.jrs.Log4j.html (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.ExecutionStatistics.1.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.ExecutionStatistics.2.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.HelloWorldExample.1.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.HtmlBeans.div.json.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.HtmlBeans.div.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.HtmlBeans.form.json.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.HtmlBeans.form.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.HtmlBeans.json.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.HtmlBeans.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.HtmlBeans.table.json.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.HtmlBeans.table.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.Overview.HelloWorldResource.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.Overview.RootResources.json.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.Overview.RootResources.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.RouterPages.1.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.Stylesheets.0.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.Stylesheets.1.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.Stylesheets.2.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.Stylesheets.3.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.Swagger.1.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.Swagger.2.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.Swagger.3.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.Swagger.4.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.Swagger.5.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.UiCustomization.1.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.UtilityBeans.BeanDescription.json.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.UtilityBeans.BeanDescription.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.UtilityBeans.Hyperlink.json.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.UtilityBeans.Hyperlink.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.UtilityBeans.json.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.UtilityBeans.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.restRPC.1.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.restRPC.2.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.restRPC.3.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.restRPC.4.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.restRPC.5.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.restRPC.6.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.restRPC.7.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.restRPC.8.png (100%)
 rename juneau-doc/docs/Topics/{07.juneau-rest-server => 08.juneau-rest-server}/doc-files/jrs.restRPC.9.png (100%)
 rename juneau-doc/docs/Topics/{08.juneau-rest-server-rdf.html => 09.juneau-rest-server-rdf.html} (100%)
 rename juneau-doc/docs/Topics/{09.juneau-rest-server-jaxrs.html => 10.juneau-rest-server-jaxrs.html} (100%)
 rename juneau-doc/docs/Topics/{09.juneau-rest-server-jaxrs => 10.juneau-rest-server-jaxrs}/01.jrsj.BaseProvider.html (100%)
 rename juneau-doc/docs/Topics/{10.juneau-rest-server-springboot.html => 11.juneau-rest-server-springboot.html} (100%)
 rename juneau-doc/docs/Topics/{10.juneau-rest-server-springboot => 11.juneau-rest-server-springboot}/01.jrss.Overview.html (100%)
 rename juneau-doc/docs/Topics/{10.juneau-rest-server-springboot => 11.juneau-rest-server-springboot}/doc-files/jrss.Overview.HelloWorldResource.png (100%)
 rename juneau-doc/docs/Topics/{10.juneau-rest-server-springboot => 11.juneau-rest-server-springboot}/doc-files/jrss.Overview.RootResources.json.png (100%)
 rename juneau-doc/docs/Topics/{10.juneau-rest-server-springboot => 11.juneau-rest-server-springboot}/doc-files/jrss.Overview.RootResources.png (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client.html => 12.juneau-rest-client.html} (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/01.jrc.PojoMarshalling.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/02.jrc.RequestParts.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/03.jrc.RequestContent.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/04.jrc.ResponseStatus.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/05.jrc.ResponseHeaders.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/06.jrc.ResponseContent.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/07.jrc.CustomCallHandlers.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/08.jrc.Interceptors.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/09.jrc.Proxies.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/09.jrc.Proxies/01.jrc.Remote.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/09.jrc.Proxies/02.jrc.RemoteMethod.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/09.jrc.Proxies/03.jrc.Content.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/09.jrc.Proxies/04.jrc.FormData.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/09.jrc.Proxies/05.jrc.Query.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/09.jrc.Proxies/06.jrc.Header.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/09.jrc.Proxies/07.jrc.Path.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/09.jrc.Proxies/08.jrc.Request.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/09.jrc.Proxies/09.jrc.Response.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/09.jrc.Proxies/10.jrc.DualPurposeInterfaces.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/10.jrc.LoggingAndDebugging.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/11.jrc.CustomizingHttpClient.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/12.jrc.ExtendingRestClient.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/13.jrc.Authentication.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/13.jrc.Authentication/01.jrc.AuthenticationBASIC.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/13.jrc.Authentication/02.jrc.AuthenticationForm.html (100%)
 rename juneau-doc/docs/Topics/{11.juneau-rest-client => 12.juneau-rest-client}/13.jrc.Authentication/03.jrc.AuthenticationOIDC.html (100%)
 rename juneau-doc/docs/Topics/{12.juneau-rest-mock.html => 13.juneau-rest-mock.html} (100%)
 rename juneau-doc/docs/Topics/{12.juneau-rest-mock => 13.juneau-rest-mock}/01.jrm.MockRestClient.html (100%)
 rename juneau-doc/docs/Topics/{13.juneau-microservice-core.html => 14.juneau-microservice-core.html} (100%)
 rename juneau-doc/docs/Topics/{13.juneau-microservice-core => 14.juneau-microservice-core}/01.jmc.Overview.html (100%)
 rename juneau-doc/docs/Topics/{13.juneau-microservice-core => 14.juneau-microservice-core}/02.jmc.LifecycleMethods.html (100%)
 rename juneau-doc/docs/Topics/{13.juneau-microservice-core => 14.juneau-microservice-core}/03.jmc.Args.html (100%)
 rename juneau-doc/docs/Topics/{13.juneau-microservice-core => 14.juneau-microservice-core}/04.jmc.Manifest.html (100%)
 rename juneau-doc/docs/Topics/{13.juneau-microservice-core => 14.juneau-microservice-core}/05.jmc.Config.html (100%)
 rename juneau-doc/docs/Topics/{13.juneau-microservice-core => 14.juneau-microservice-core}/06.jmc.SystemProperties.html (100%)
 rename juneau-doc/docs/Topics/{13.juneau-microservice-core => 14.juneau-microservice-core}/07.jmc.VarResolver.html (100%)
 rename juneau-doc/docs/Topics/{13.juneau-microservice-core => 14.juneau-microservice-core}/08.jmc.ConsoleCommands.html (100%)
 rename juneau-doc/docs/Topics/{13.juneau-microservice-core => 14.juneau-microservice-core}/09.jmc.Listeners.html (100%)
 rename juneau-doc/docs/Topics/{14.juneau-microservice-jetty.html => 15.juneau-microservice-jetty.html} (100%)
 rename juneau-doc/docs/Topics/{14.juneau-microservice-jetty => 15.juneau-microservice-jetty}/01.jmj.Overview.html (100%)
 rename juneau-doc/docs/Topics/{14.juneau-microservice-jetty => 15.juneau-microservice-jetty}/02.jmj.LifecycleMethods.html (100%)
 rename juneau-doc/docs/Topics/{14.juneau-microservice-jetty => 15.juneau-microservice-jetty}/03.jmj.ResourceClasses.html (100%)
 rename juneau-doc/docs/Topics/{14.juneau-microservice-jetty => 15.juneau-microservice-jetty}/04.jmj.PredefinedResourceClasses.html (100%)
 rename juneau-doc/docs/Topics/{14.juneau-microservice-jetty => 15.juneau-microservice-jetty}/05.jmj.Config.html (100%)
 rename juneau-doc/docs/Topics/{14.juneau-microservice-jetty => 15.juneau-microservice-jetty}/06.jmj.JettyXml.html (100%)
 rename juneau-doc/docs/Topics/{14.juneau-microservice-jetty => 15.juneau-microservice-jetty}/07.jmj.UiCustomization.html (100%)
 rename juneau-doc/docs/Topics/{14.juneau-microservice-jetty => 15.juneau-microservice-jetty}/08.jmj.Extending.html (100%)
 rename juneau-doc/docs/Topics/{14.juneau-microservice-jetty => 15.juneau-microservice-jetty}/doc-files/jmj.ResourceClasses.1.png (100%)
 rename juneau-doc/docs/Topics/{14.juneau-microservice-jetty => 15.juneau-microservice-jetty}/doc-files/jmj.Running.1.png (100%)
 rename juneau-doc/docs/Topics/{14.juneau-microservice-jetty => 15.juneau-microservice-jetty}/doc-files/jmj.UiCustomization.1.png (100%)
 rename juneau-doc/docs/Topics/{15.my-jetty-microservice.html => 16.my-jetty-microservice.html} (100%)
 rename juneau-doc/docs/Topics/{15.my-jetty-microservice => 16.my-jetty-microservice}/01.mjm.Installing.html (100%)
 rename juneau-doc/docs/Topics/{15.my-jetty-microservice => 16.my-jetty-microservice}/02.mjm.Running.html (100%)
 rename juneau-doc/docs/Topics/{15.my-jetty-microservice => 16.my-jetty-microservice}/03.mjm.Building.html (100%)
 rename juneau-doc/docs/Topics/{15.my-jetty-microservice => 16.my-jetty-microservice}/doc-files/mjm.Installing.1.png (100%)
 rename juneau-doc/docs/Topics/{15.my-jetty-microservice => 16.my-jetty-microservice}/doc-files/mjm.Installing.2.png (100%)
 rename juneau-doc/docs/Topics/{15.my-jetty-microservice => 16.my-jetty-microservice}/doc-files/mjm.Installing.3.png (100%)
 rename juneau-doc/docs/Topics/{15.my-jetty-microservice => 16.my-jetty-microservice}/doc-files/mjm.Running.1.png (100%)
 rename juneau-doc/docs/Topics/{16.my-springboot-microservice.html => 17.my-springboot-microservice.html} (100%)
 rename juneau-doc/docs/Topics/{16.my-springboot-microservice => 17.my-springboot-microservice}/01.msm.Installing.html (100%)
 rename juneau-doc/docs/Topics/{16.my-springboot-microservice => 17.my-springboot-microservice}/02.msm.Running.html (100%)
 rename juneau-doc/docs/Topics/{16.my-springboot-microservice => 17.my-springboot-microservice}/03.msm.Building.html (100%)
 rename juneau-doc/docs/Topics/{16.my-springboot-microservice => 17.my-springboot-microservice}/doc-files/msm.Installing.1.png (100%)
 rename juneau-doc/docs/Topics/{16.my-springboot-microservice => 17.my-springboot-microservice}/doc-files/msm.Installing.2.png (100%)
 rename juneau-doc/docs/Topics/{16.my-springboot-microservice => 17.my-springboot-microservice}/doc-files/msm.Installing.3.png (100%)
 rename juneau-doc/docs/Topics/{16.my-springboot-microservice => 17.my-springboot-microservice}/doc-files/msm.Running.1.png (100%)
 rename juneau-doc/docs/Topics/{17.juneau-petstore.html => 18.juneau-petstore.html} (100%)
 rename juneau-doc/docs/Topics/{17.juneau-petstore => 18.juneau-petstore}/01.jp.RunningTheApp.html (100%)
 rename juneau-doc/docs/Topics/{17.juneau-petstore => 18.juneau-petstore}/02.jp.juneau-petstore-api.html (100%)
 rename juneau-doc/docs/Topics/{17.juneau-petstore => 18.juneau-petstore}/03.jp.juneau-petstore-client.html (100%)
 rename juneau-doc/docs/Topics/{17.juneau-petstore => 18.juneau-petstore}/04.jp.juneau-petstore-server.html (100%)
 rename juneau-doc/docs/Topics/{17.juneau-petstore => 18.juneau-petstore}/doc-files/9a.png (100%)
 rename juneau-doc/docs/Topics/{17.juneau-petstore => 18.juneau-petstore}/doc-files/9b.png (100%)
 rename juneau-doc/docs/Topics/{17.juneau-petstore => 18.juneau-petstore}/doc-files/9c.png (100%)
 rename juneau-doc/docs/Topics/{17.juneau-petstore => 18.juneau-petstore}/doc-files/9d.png (100%)
 rename juneau-doc/docs/Topics/{17.juneau-petstore => 18.juneau-petstore}/doc-files/9e.png (100%)
 rename juneau-doc/docs/Topics/{17.juneau-petstore => 18.juneau-petstore}/doc-files/9f.png (100%)
 rename juneau-doc/docs/Topics/{17.juneau-petstore => 18.juneau-petstore}/doc-files/9g.png (100%)
 rename juneau-doc/docs/Topics/{17.juneau-petstore => 18.juneau-petstore}/doc-files/9h.png (100%)
 rename juneau-doc/docs/Topics/{17.juneau-petstore => 18.juneau-petstore}/doc-files/PetStore.png (100%)
 rename juneau-doc/docs/Topics/{17.juneau-petstore => 18.juneau-petstore}/doc-files/PetStore_pets.png (100%)
 rename juneau-doc/docs/Topics/{17.juneau-petstore => 18.juneau-petstore}/doc-files/RootResources.png (100%)
 rename juneau-doc/docs/Topics/{18.Glossaries.html => 19.Glossaries.html} (100%)
 rename juneau-doc/docs/Topics/{18.Glossaries => 19.Glossaries}/01.g.LanguageSupport.html (100%)
 rename juneau-doc/docs/Topics/{18.Glossaries => 19.Glossaries}/02.g.Annotations.html (100%)
 rename juneau-doc/docs/Topics/{19.Security.html => 20.Security.html} (100%)
 rename juneau-doc/docs/Topics/{19.Security => 20.Security}/01.s.Marshall.html (100%)
 rename juneau-doc/docs/Topics/{19.Security => 20.Security}/02.s.Svl.html (100%)
 rename juneau-doc/docs/Topics/{19.Security => 20.Security}/03.s.Rest.html (100%)


[juneau] 02/02: Javadocs

Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 0486b31897e5f1bf3ba34950b41e158253abf1ab
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Mon Jun 27 13:44:46 2022 -0400

    Javadocs
---
 .../21.jm.SimpleVariableLanguage.html              |  69 ++
 .../01.jm.SvlVariables.html                        | 207 ++++++
 .../02.jm.VarResolvers.html                        |  70 ++
 .../03.jm.DefaultVarResolver.html                  |  39 ++
 .../04.jm.SvlOtherNotes.html                       |  34 +
 .../Topics/02.juneau-marshall/22.jm.Encoders.html  |  80 +++
 .../02.juneau-marshall/23.jm.ObjectTools.html      | 343 ++++++++++
 .../02.juneau-marshall/24.jm.JsonDetails.html      |  97 +++
 .../24.jm.JsonDetails/01.jm.JsonMethodology.html   |  89 +++
 .../24.jm.JsonDetails/02.jm.JsonSerializers.html   |  68 ++
 .../24.jm.JsonDetails/03.jm.SimplifiedJson.html    |  79 +++
 .../24.jm.JsonDetails/04.jm.JsonParsers.html       |  73 +++
 .../24.jm.JsonDetails/05.jm.JsonAnnotation.html    |  67 ++
 .../25.jm.JsonSchemaDetails.html                   | 110 ++++
 .../02.juneau-marshall/26.jm.XmlDetails.html       |  92 +++
 .../26.jm.XmlDetails/01.jm.XmlMethodology.html     | 419 ++++++++++++
 .../26.jm.XmlDetails/02.jm.XmlSerializers.html     |  72 ++
 .../26.jm.XmlDetails/03.jm.XmlParsers.html         |  57 ++
 .../04.jm.XmlBeanTypeNameAnnotation.html           | 496 ++++++++++++++
 .../05.jm.XmlChildNameAnnotation.html              | 102 +++
 .../06.jm.XmlFormatAnnotation.html                 | 722 +++++++++++++++++++++
 .../26.jm.XmlDetails/07.jm.XmlNamespaces.html      | 184 ++++++
 .../02.juneau-marshall/27.jm.HtmlDetails.html      |  26 +
 .../27.jm.HtmlDetails/01.jm.HtmlMethodology.html   | 526 +++++++++++++++
 .../27.jm.HtmlDetails/02.jm.HtmlSerializers.html   |  76 +++
 .../27.jm.HtmlDetails/03.jm.HtmlParsers.html       |  58 ++
 .../27.jm.HtmlDetails/04.jm.HtmlAnnotation.html    |  75 +++
 .../05.jm.HtmlRenderAnnotation.html                | 120 ++++
 .../27.jm.HtmlDetails/06.jm.HtmlDocSerializer.html |  92 +++
 .../07.jm.BasicHtmlDocTemplate.html                |  52 ++
 .../08.jm.HtmlCustomTemplates.html                 |  34 +
 .../02.juneau-marshall/28.jm.HtmlSchema.html       | 197 ++++++
 .../02.juneau-marshall/29.jm.UonDetails.html       |  87 +++
 .../29.jm.UonDetails/01.jm.UonMethodology.html     |  76 +++
 .../29.jm.UonDetails/02.jm.UonSerializers.html     |  63 ++
 .../29.jm.UonDetails/03.jm.UonParsers.html         |  58 ++
 .../30.jm.UrlEncodingDetails.html                  |  85 +++
 .../01.jm.UrlEncMethodology.html                   |  76 +++
 .../02.jm.UrlEncSerializers.html                   |  68 ++
 .../03.jm.UrlEncParsers.html                       |  61 ++
 .../04.jm.UrlEncodingAnnotation.html               |  36 +
 .../02.juneau-marshall/31.jm.MsgPackDetails.html   |  27 +
 .../01.jm.MsgPackSerializers.html                  |  61 ++
 .../31.jm.MsgPackDetails/02.jm.MsgPackParsers.html |  57 ++
 .../02.juneau-marshall/32.jm.OpenApiDetails.html   |  49 ++
 .../01.jm.OpenApiMethodology.html                  | 159 +++++
 .../02.jm.OpenApiSerializers.html                  | 527 +++++++++++++++
 .../32.jm.OpenApiDetails/03.jm.OpenApiParsers.html | 368 +++++++++++
 .../02.juneau-marshall/33.jm.BestPractices.html    |  42 ++
 juneau-doc/docs/Topics/07.juneau-rest-common.html  |  59 ++
 .../01.jrc.org.apache.juneau.http.html             | 297 +++++++++
 .../02.jrc.org.apache.juneau.http.annotation.html  |  47 ++
 .../03.jrc.org.apache.juneau.http.header.html      | 250 +++++++
 .../04.jrc.org.apache.juneau.http.part.html        | 164 +++++
 .../05.jrc.org.apache.juneau.http.entity.html      |  74 +++
 .../06.jrc.org.apache.juneau.http.resource.html    |  87 +++
 .../07.jrc.org.apache.juneau.http.response.html    | 146 +++++
 .../08.jrc.org.apache.juneau.http.remote.html      |  33 +
 juneau-doc/docs/Topics/08.juneau-rest-server.html  | 133 ++++
 .../08.juneau-rest-server/01.jrs.Overview.html     | 155 +++++
 .../02.jrs.AnnotatedClasses.html                   |  90 +++
 .../01.jrs.PredefinedClasses.html                  | 214 ++++++
 .../02.jrs.ChildResources.html                     |  55 ++
 .../03.jrs.PathVariables.html                      |  43 ++
 .../02.jrs.AnnotatedClasses/04.jrs.Deployment.html |  73 +++
 .../05.jrs.LifecycleHooks.html                     |  81 +++
 .../03.jrs.RestOpAnnotatedMethods.html             |  85 +++
 .../01.jrs.InferredHttpMethodsAndPaths.html        |  76 +++
 .../02.jrs.JavaMethodParameters.html               | 188 ++++++
 .../03.jrs.JavaMethodReturnTypes.html              | 154 +++++
 .../04.jrs.JavaMethodThrowableTypes.html           | 103 +++
 .../05.jrs.PathPatterns.html                       | 105 +++
 .../06.jrs.Matchers.html                           |  72 ++
 .../07.jrs.OverloadingHttpMethods.html             |  42 ++
 .../08.jrs.AdditionalInformation.html              |  32 +
 .../08.juneau-rest-server/04.jrs.HttpParts.html    |  79 +++
 .../04.jrs.HttpParts/01.jrs.PartMarshallers.html   |  71 ++
 .../02.jrs.HttpPartAnnotations.html                | 465 +++++++++++++
 .../04.jrs.HttpParts/03.jrs.DefaultParts.html      | 114 ++++
 .../04.jrs.HttpParts/04.jrs.RequestBeans.html      | 107 +++
 .../04.jrs.HttpParts/05.jrs.ResponseBeans.html     | 115 ++++
 .../04.jrs.HttpParts/06.jrs.HttpPartApis.html      |  56 ++
 .../08.juneau-rest-server/05.jrs.Marshalling.html  | 176 +++++
 .../06.jrs.HandlingFormPosts.html                  | 162 +++++
 .../08.juneau-rest-server/07.jrs.Guards.html       | 121 ++++
 .../08.juneau-rest-server/08.jrs.Converters.html   |  71 ++
 .../09.jrs.LocalizedMessages.html                  | 107 +++
 .../08.juneau-rest-server/10.jrs.Encoders.html     |  43 ++
 .../11.jrs.ConfigurationFiles.html                 | 202 ++++++
 .../08.juneau-rest-server/12.jrs.SvlVariables.html | 300 +++++++++
 .../08.juneau-rest-server/13.jrs.StaticFiles.html  |  72 ++
 .../14.jrs.ClientVersioning.html                   |  68 ++
 .../08.juneau-rest-server/15.jrs.Swagger.html      |  31 +
 .../01.jrs.BasicRestServletSwagger.html            |  63 ++
 .../15.jrs.Swagger/02.jrs.BasicSwaggerInfo.html    | 179 +++++
 .../15.jrs.Swagger/03.jrs.SwaggerTags.html         | 113 ++++
 .../15.jrs.Swagger/04.jrs.SwaggerOperations.html   |  56 ++
 .../15.jrs.Swagger/05.jrs.SwaggerParameters.html   | 156 +++++
 .../15.jrs.Swagger/06.jrs.SwaggerResponses.html    |  57 ++
 .../15.jrs.Swagger/07.jrs.SwaggerModels.html       | 105 +++
 .../15.jrs.Swagger/08.jrs.SwaggerStylesheet.html   |  27 +
 .../doc-files/jrs.Swagger.Models.1.png             | Bin 0 -> 176855 bytes
 .../doc-files/jrs.Swagger.Models.2.png             | Bin 0 -> 131057 bytes
 .../doc-files/jrs.Swagger.Models.3.png             | Bin 0 -> 252827 bytes
 .../doc-files/jrs.Swagger.Operations.1.png         | Bin 0 -> 168211 bytes
 .../doc-files/jrs.Swagger.Operations.2.png         | Bin 0 -> 226271 bytes
 .../doc-files/jrs.Swagger.Operations.3.png         | Bin 0 -> 303830 bytes
 .../doc-files/jrs.Swagger.Parameters.2.png         | Bin 0 -> 138574 bytes
 .../16.jrs.ExecutionStatistics.html                |  60 ++
 .../17.jrs.HtmlDocAnnotation.html                  | 144 ++++
 .../01.jrs.HtmlUIvsDI.html                         |  59 ++
 .../02.jrs.HtmlWidgets.html                        | 101 +++
 .../03.jrs.HtmlPredefinedWidgets.html              | 252 +++++++
 .../04.jrs.HtmlUiCustomization.html                | 139 ++++
 .../05.jrs.HtmlStylesheets.html                    | 121 ++++
 .../jrs.HtmlDocAnnotation.PredefinedWidgets.1.png  | Bin 0 -> 269258 bytes
 .../jrs.HtmlDocAnnotation.PredefinedWidgets.2.png  | Bin 0 -> 138885 bytes
 .../jrs.HtmlDocAnnotation.PredefinedWidgets.3.png  | Bin 0 -> 343271 bytes
 .../jrs.HtmlDocAnnotation.PredefinedWidgets.4.png  | Bin 0 -> 5081 bytes
 .../18.jrs.LoggingAndDebugging.html                | 234 +++++++
 .../19.jrs.HttpStatusCodes.html                    |  81 +++
 .../20.jrs.BuiltInParameters.html                  |  78 +++
 .../21.jrs.UsingWithOsgi.html                      |  80 +++
 .../08.juneau-rest-server/22.jrs.RestContext.html  | 159 +++++
 .../23.jrs.RestOpContext.html                      |  91 +++
 .../24.jrs.ResponseProcessors.html                 |  84 +++
 .../08.juneau-rest-server/25.jrs.RestRpc.html      | 343 ++++++++++
 .../26.jrs.SerializingUris.html                    |  99 +++
 .../08.juneau-rest-server/27.jrs.UtilityBeans.html | 130 ++++
 .../08.juneau-rest-server/28.jrs.HtmlBeans.html    | 126 ++++
 .../08.juneau-rest-server/29.jrs.OtherNotes.html   |  29 +
 .../01.jrs.Log4j.html                              |  36 +
 .../doc-files/jrs.ExecutionStatistics.1.png        | Bin 0 -> 161323 bytes
 .../doc-files/jrs.ExecutionStatistics.2.png        | Bin 0 -> 69823 bytes
 .../doc-files/jrs.HelloWorldExample.1.png          | Bin 0 -> 73686 bytes
 .../doc-files/jrs.HtmlBeans.div.json.png           | Bin 0 -> 76677 bytes
 .../doc-files/jrs.HtmlBeans.div.png                | Bin 0 -> 64941 bytes
 .../doc-files/jrs.HtmlBeans.form.json.png          | Bin 0 -> 141793 bytes
 .../doc-files/jrs.HtmlBeans.form.png               | Bin 0 -> 75720 bytes
 .../doc-files/jrs.HtmlBeans.json.png               | Bin 0 -> 80462 bytes
 .../doc-files/jrs.HtmlBeans.png                    | Bin 0 -> 92212 bytes
 .../doc-files/jrs.HtmlBeans.table.json.png         | Bin 0 -> 79407 bytes
 .../doc-files/jrs.HtmlBeans.table.png              | Bin 0 -> 65106 bytes
 .../doc-files/jrs.Overview.HelloWorldResource.png  | Bin 0 -> 71127 bytes
 .../doc-files/jrs.Overview.RootResources.json.png  | Bin 0 -> 122559 bytes
 .../doc-files/jrs.Overview.RootResources.png       | Bin 0 -> 193666 bytes
 .../doc-files/jrs.RouterPages.1.png                | Bin 0 -> 224036 bytes
 .../doc-files/jrs.Stylesheets.0.png                | Bin 0 -> 233293 bytes
 .../doc-files/jrs.Stylesheets.1.png                | Bin 0 -> 26898 bytes
 .../doc-files/jrs.Stylesheets.2.png                | Bin 0 -> 334340 bytes
 .../doc-files/jrs.Stylesheets.3.png                | Bin 0 -> 298163 bytes
 .../doc-files/jrs.Swagger.1.png                    | Bin 0 -> 174380 bytes
 .../doc-files/jrs.Swagger.2.png                    | Bin 0 -> 194455 bytes
 .../doc-files/jrs.Swagger.3.png                    | Bin 0 -> 79498 bytes
 .../doc-files/jrs.Swagger.4.png                    | Bin 0 -> 99968 bytes
 .../doc-files/jrs.Swagger.5.png                    | Bin 0 -> 63056 bytes
 .../doc-files/jrs.UiCustomization.1.png            | Bin 0 -> 267773 bytes
 .../jrs.UtilityBeans.BeanDescription.json.png      | Bin 0 -> 118047 bytes
 .../doc-files/jrs.UtilityBeans.BeanDescription.png | Bin 0 -> 123915 bytes
 .../doc-files/jrs.UtilityBeans.Hyperlink.json.png  | Bin 0 -> 52285 bytes
 .../doc-files/jrs.UtilityBeans.Hyperlink.png       | Bin 0 -> 74561 bytes
 .../doc-files/jrs.UtilityBeans.json.png            | Bin 0 -> 85771 bytes
 .../doc-files/jrs.UtilityBeans.png                 | Bin 0 -> 105911 bytes
 .../doc-files/jrs.restRPC.1.png                    | Bin 0 -> 231550 bytes
 .../doc-files/jrs.restRPC.2.png                    | Bin 0 -> 130661 bytes
 .../doc-files/jrs.restRPC.3.png                    | Bin 0 -> 170873 bytes
 .../doc-files/jrs.restRPC.4.png                    | Bin 0 -> 96014 bytes
 .../doc-files/jrs.restRPC.5.png                    | Bin 0 -> 62998 bytes
 .../doc-files/jrs.restRPC.6.png                    | Bin 0 -> 158415 bytes
 .../doc-files/jrs.restRPC.7.png                    | Bin 0 -> 110931 bytes
 .../doc-files/jrs.restRPC.8.png                    | Bin 0 -> 122164 bytes
 .../doc-files/jrs.restRPC.9.png                    | Bin 0 -> 114351 bytes
 .../docs/Topics/09.juneau-rest-server-rdf.html     |  43 ++
 .../docs/Topics/10.juneau-rest-server-jaxrs.html   |  43 ++
 .../01.jrsj.BaseProvider.html                      |  80 +++
 .../Topics/11.juneau-rest-server-springboot.html   |  42 ++
 .../01.jrss.Overview.html                          | 165 +++++
 .../doc-files/jrss.Overview.HelloWorldResource.png | Bin 0 -> 76244 bytes
 .../doc-files/jrss.Overview.RootResources.json.png | Bin 0 -> 121600 bytes
 .../doc-files/jrss.Overview.RootResources.png      | Bin 0 -> 195239 bytes
 juneau-doc/docs/Topics/12.juneau-rest-client.html  | 181 ++++++
 .../01.jrc.PojoMarshalling.html                    | 120 ++++
 .../12.juneau-rest-client/02.jrc.RequestParts.html | 108 +++
 .../03.jrc.RequestContent.html                     |  81 +++
 .../04.jrc.ResponseStatus.html                     |  77 +++
 .../05.jrc.ResponseHeaders.html                    | 123 ++++
 .../06.jrc.ResponseContent.html                    | 149 +++++
 .../07.jrc.CustomCallHandlers.html                 |  68 ++
 .../12.juneau-rest-client/08.jrc.Interceptors.html |  68 ++
 .../12.juneau-rest-client/09.jrc.Proxies.html      | 115 ++++
 .../09.jrc.Proxies/01.jrc.Remote.html              | 170 +++++
 .../09.jrc.Proxies/02.jrc.RemoteMethod.html        | 171 +++++
 .../09.jrc.Proxies/03.jrc.Content.html             | 122 ++++
 .../09.jrc.Proxies/04.jrc.FormData.html            | 100 +++
 .../09.jrc.Proxies/05.jrc.Query.html               | 103 +++
 .../09.jrc.Proxies/06.jrc.Header.html              |  89 +++
 .../09.jrc.Proxies/07.jrc.Path.html                |  88 +++
 .../09.jrc.Proxies/08.jrc.Request.html             | 133 ++++
 .../09.jrc.Proxies/09.jrc.Response.html            |  77 +++
 .../10.jrc.DualPurposeInterfaces.html              | 117 ++++
 .../10.jrc.LoggingAndDebugging.html                |  98 +++
 .../11.jrc.CustomizingHttpClient.html              |  51 ++
 .../12.jrc.ExtendingRestClient.html                |  47 ++
 .../13.jrc.Authentication.html                     |  26 +
 .../01.jrc.AuthenticationBASIC.html                |  42 ++
 .../02.jrc.AuthenticationForm.html                 | 103 +++
 .../03.jrc.AuthenticationOIDC.html                 | 141 ++++
 juneau-doc/docs/Topics/13.juneau-rest-mock.html    |  44 ++
 .../13.juneau-rest-mock/01.jrm.MockRestClient.html | 220 +++++++
 .../docs/Topics/14.juneau-microservice-core.html   |  60 ++
 .../01.jmc.Overview.html                           |  72 ++
 .../02.jmc.LifecycleMethods.html                   | 100 +++
 .../14.juneau-microservice-core/03.jmc.Args.html   |  91 +++
 .../04.jmc.Manifest.html                           |  76 +++
 .../14.juneau-microservice-core/05.jmc.Config.html | 144 ++++
 .../06.jmc.SystemProperties.html                   |  43 ++
 .../07.jmc.VarResolver.html                        |  62 ++
 .../08.jmc.ConsoleCommands.html                    | 104 +++
 .../09.jmc.Listeners.html                          |  72 ++
 .../docs/Topics/15.juneau-microservice-jetty.html  |  47 ++
 .../01.jmj.Overview.html                           |  65 ++
 .../02.jmj.LifecycleMethods.html                   | 110 ++++
 .../03.jmj.ResourceClasses.html                    | 156 +++++
 .../04.jmj.PredefinedResourceClasses.html          |  34 +
 .../05.jmj.Config.html                             | 222 +++++++
 .../06.jmj.JettyXml.html                           | 101 +++
 .../07.jmj.UiCustomization.html                    | 125 ++++
 .../08.jmj.Extending.html                          |  92 +++
 .../doc-files/jmj.ResourceClasses.1.png            | Bin 0 -> 42699 bytes
 .../doc-files/jmj.Running.1.png                    | Bin 0 -> 67578 bytes
 .../doc-files/jmj.UiCustomization.1.png            | Bin 0 -> 56726 bytes
 .../docs/Topics/16.my-jetty-microservice.html      |  36 +
 .../01.mjm.Installing.html                         | 270 ++++++++
 .../16.my-jetty-microservice/02.mjm.Running.html   |  49 ++
 .../16.my-jetty-microservice/03.mjm.Building.html  |  60 ++
 .../doc-files/mjm.Installing.1.png                 | Bin 0 -> 84524 bytes
 .../doc-files/mjm.Installing.2.png                 | Bin 0 -> 159036 bytes
 .../doc-files/mjm.Installing.3.png                 | Bin 0 -> 93366 bytes
 .../doc-files/mjm.Running.1.png                    | Bin 0 -> 67578 bytes
 .../docs/Topics/17.my-springboot-microservice.html |  35 +
 .../01.msm.Installing.html                         | 146 +++++
 .../02.msm.Running.html                            |  48 ++
 .../03.msm.Building.html                           |  57 ++
 .../doc-files/msm.Installing.1.png                 | Bin 0 -> 84524 bytes
 .../doc-files/msm.Installing.2.png                 | Bin 0 -> 162034 bytes
 .../doc-files/msm.Installing.3.png                 | Bin 0 -> 97545 bytes
 .../doc-files/msm.Running.1.png                    | Bin 0 -> 67578 bytes
 juneau-doc/docs/Topics/18.juneau-petstore.html     |  39 ++
 .../18.juneau-petstore/01.jp.RunningTheApp.html    |  45 ++
 .../02.jp.juneau-petstore-api.html                 | 219 +++++++
 .../03.jp.juneau-petstore-client.html              |  47 ++
 .../04.jp.juneau-petstore-server.html              | 363 +++++++++++
 .../Topics/18.juneau-petstore/doc-files/9a.png     | Bin 0 -> 221670 bytes
 .../Topics/18.juneau-petstore/doc-files/9b.png     | Bin 0 -> 146792 bytes
 .../Topics/18.juneau-petstore/doc-files/9c.png     | Bin 0 -> 226731 bytes
 .../Topics/18.juneau-petstore/doc-files/9d.png     | Bin 0 -> 234305 bytes
 .../Topics/18.juneau-petstore/doc-files/9e.png     | Bin 0 -> 110349 bytes
 .../Topics/18.juneau-petstore/doc-files/9f.png     | Bin 0 -> 185344 bytes
 .../Topics/18.juneau-petstore/doc-files/9g.png     | Bin 0 -> 140337 bytes
 .../Topics/18.juneau-petstore/doc-files/9h.png     | Bin 0 -> 116711 bytes
 .../18.juneau-petstore/doc-files/PetStore.png      | Bin 0 -> 838280 bytes
 .../18.juneau-petstore/doc-files/PetStore_pets.png | Bin 0 -> 233639 bytes
 .../18.juneau-petstore/doc-files/RootResources.png | Bin 0 -> 184725 bytes
 juneau-doc/docs/Topics/19.Glossaries.html          |  21 +
 .../Topics/19.Glossaries/01.g.LanguageSupport.html | 150 +++++
 .../Topics/19.Glossaries/02.g.Annotations.html     | 336 ++++++++++
 juneau-doc/docs/Topics/20.Security.html            |  26 +
 .../docs/Topics/20.Security/01.s.Marshall.html     |  86 +++
 juneau-doc/docs/Topics/20.Security/02.s.Svl.html   |  63 ++
 juneau-doc/docs/Topics/20.Security/03.s.Rest.html  |  30 +
 270 files changed, 22452 insertions(+)

diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/21.jm.SimpleVariableLanguage.html b/juneau-doc/docs/Topics/02.juneau-marshall/21.jm.SimpleVariableLanguage.html
new file mode 100644
index 000000000..454203ddd
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/21.jm.SimpleVariableLanguage.html
@@ -0,0 +1,69 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'Simple Variable Language'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.svl} packages 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>.
+		It is used extensively in the Config, REST and Microservice APIs.
+	</p>
+	<p>
+		Most variables can be recursively nested within the varKey (e.g. <js>"$FOO{$BAR{xxx},$BAZ{xxx}}"</js>)
+		and can return values that themselves contain more variables.
+	</p>
+	<p>
+		The {@link oaj.svl.VarResolver} class is used to resolve variables.
+		The {@link oaj.svl.VarResolver#DEFAULT} resolver is a reusable instance of this class 
+		configured with the following basic variables:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.svl.vars.SystemPropertiesVar} - <c>$S{key[,default]}</c>
+		<li class='jc'>{@link oaj.svl.vars.EnvVariablesVar} - <c>$E{key[,default]}</c>
+	</ul>
+	<p>
+		The following logic variables are also provided:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.svl.vars.IfVar} - <c>$IF{arg,then[,else]}</c>
+		<li class='jc'>{@link oaj.svl.vars.SwitchVar} - <c>$SW{arg,pattern1:then1[,pattern2:then2...]}</c>
+		<li class='jc'>{@link oaj.svl.vars.CoalesceVar} - <c>$CO{arg1[,arg2...]}</c>
+		<li class='jc'>{@link oaj.svl.vars.PatternMatchVar} - <c>$PM{arg,pattern}</c> 
+		<li class='jc'>{@link oaj.svl.vars.PatternReplaceVar} - <c>$PR{arg,pattern,replace}</c> 
+		<li class='jc'>{@link oaj.svl.vars.PatternExtractVar} - <c>$PE{arg,pattern,groupIndex}</c> 
+		<li class='jc'>{@link oaj.svl.vars.NotEmptyVar} - <c>$NE{arg}</c>
+		<li class='jc'>{@link oaj.svl.vars.UpperCaseVar} - <c>$UC{arg}</c>
+		<li class='jc'>{@link oaj.svl.vars.LowerCaseVar} - <c>$LC{arg}</c>
+		<li class='jc'>{@link oaj.svl.vars.LenVar} - <c>$LN{arg[,delimiter]}</c>
+		<li class='jc'>{@link oaj.svl.vars.SubstringVar} - <c>$ST{arg,start[,end]}</c>
+	</ul>
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+		|	<jc>// Use the default variable resolver to resolve a string that contains 
+		|	// $S (system property) variables.</jc>
+		|	String <jv>property</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='bjava'>
+		|	<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>property</jv> = VarResolver.<jsf>DEFAULT</jsf>.resolve(<js>"$E{MYPROPERTY,$S{my.property,not found}}"</js>);
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/21.jm.SimpleVariableLanguage/01.jm.SvlVariables.html b/juneau-doc/docs/Topics/02.juneau-marshall/21.jm.SimpleVariableLanguage/01.jm.SvlVariables.html
new file mode 100644
index 000000000..e51464bbf
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/21.jm.SimpleVariableLanguage/01.jm.SvlVariables.html
@@ -0,0 +1,207 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'SVL Variables', updated:'8.0.0,8.1.0'}
+
+<div class='topic'>
+	<p>
+		Variables are defined through the {@link oaj.svl.Var} API.
+		The API comes with several predefined variables and is easily extensible.
+	</p>
+	<p>
+		The following is an example of a variable that performs URL-Encoding on strings.
+	</p>
+	<p class='bjava'>
+		|	<jc>// First create our var.</jc>
+		|	<jk>public class</jk> UrlEncodeVar <jk>extends</jk> SimpleVar {
+		|		
+		|		<jc>// Must have a no-arg constructor!</jc>
+		|		<jk>public</jk> UrlEncodeVar() {
+		|			<jk>super</jk>(<js>"UE"</js>);
+		|		}	
+		|		
+		|		<jc>// The method we must implement</jc>
+		|		<ja>@Override</ja>
+		|		<jk>public</jk> String resolve(VarResolverSession <jv>session</jv>, String <jv>key</jv>) {
+		|			<jk>return</jk> URLEncoder.<jsm>encode</jsm>(<jv>key</jv>, <js>"UTF-8"</js>);
+		|		}
+		|	}
+		|	
+		|	<jc>// Next create a var resolver that extends the existing DEFAULT resolver
+		|	// that supports resolving system properties.</jc>
+		|	VarResolver <jv>varResolver</jv> = VarResolver.<jsf>DEFAULT</jsf>
+		|		.copy()
+		|		.vars(UrlEncodeVar.<jk>class</jk>)
+		|		.build();
+		|	
+		|	<jc>// Retrieve a system property and URL-encode it if necessary.</jc>
+		|	String <jv>myProperty</jv> = <jv>varResolver</jv>.resolve(<js>"$UE{$S{my.property}}"</js>);
+	</p>
+	<p>
+		The following shows the class hierarchy of the {@link oaj.svl.Var} class:
+	</p>  
+	<ul class='javatree'>
+		<li class='jac'>{@link oaj.svl.Var} - Superclass of all vars.
+			<ul>
+				<li class='jac'>{@link oaj.svl.SimpleVar} - Superclass of all vars that return strings.
+					<ul>
+						<li class='jac'>{@link oaj.svl.DefaultingVar} - Variables that define a default value if the resolve method returns null.
+							<ul>
+								<li class='jac'>{@link oaj.svl.MapVar} - Variables that pull values from maps.
+							</ul>
+						</li>
+						<li class='jac'>{@link oaj.svl.MultipartVar} - Variables that consist of 2 or more comma-delimited arguments.
+					</ul>
+				</li>
+				<li class='jac'>{@link oaj.svl.StreamedVar} - Superclass of all vars that stream their value to writers.
+			</ul>
+		</li>
+	</ul>
+	<p>
+		The following is the list of default variables defined in all modules:
+	</p>
+	<table class='styled w800'>
+		<tr>
+			<th>Module</th><th>Class</th><th>Pattern</th>
+		</tr>
+		<tr class='dark'>
+			<td rowspan='16' style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-svl</td>
+			<td>{@link oaj.svl.vars.EnvVariablesVar}</td>
+			<td class='code'>$E{key[,default]}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oaj.svl.vars.SystemPropertiesVar}</td>
+			<td class='code'>$S{key[,default]}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oaj.svl.vars.ArgsVar}</td>
+			<td class='code'>$A{key[,default]}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oaj.svl.vars.ManifestFileVar}</td>
+			<td class='code'>$MF{key[,default]}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oaj.svl.vars.IfVar}</td>
+			<td class='code'>$IF{arg,then[,else]}</td>
+		</tr>
+		<tr class='dark dd'>
+			<td>{@link oaj.svl.vars.SwitchVar}</td>
+			<td class='code'>$SW{arg,pattern1:then1[,pattern2:then2...]}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oaj.svl.vars.CoalesceVar}</td>
+			<td class='code'>$CO{arg1[,arg2...]}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oaj.svl.vars.PatternMatchVar}</td>
+			<td class='code'>$PM{arg,pattern}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oaj.svl.vars.PatternReplaceVar}</td>
+			<td class='code'>$PR{arg,pattern,replace}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oaj.svl.vars.PatternExtractVar}</td>
+			<td class='code'>$PE{arg,pattern,groupdIndex}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oaj.svl.vars.NotEmptyVar}</td>
+			<td class='code'>$NE{arg}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oaj.svl.vars.UpperCaseVar}</td>
+			<td class='code'>$UC{arg}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oaj.svl.vars.LowerCaseVar}</td>
+			<td class='code'>$LC{arg}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oaj.svl.vars.LenVar}</td>
+			<td class='code'>$LN{arg[,delimiter]}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oaj.svl.vars.SubstringVar}</td>
+			<td class='code'>$ST{arg,start[,end]}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oaj.html.HtmlWidgetVar}</td>
+			<td class='code'>$W{name}</td>
+		</tr>
+		<tr class='light dd'>
+			<td rowspan='1' style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-config</td>
+			<td>{@link oaj.config.vars.ConfigVar}</td>
+			<td class='code'>$C{key[,default]}</td>
+		</tr>
+		<tr class='dark'>
+			<td rowspan='15' style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-rest-server</td>
+			<td>{@link oajr.vars.FileVar}</td>
+			<td class='code'>$F{path[,default]}}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oajr.vars.ServletInitParamVar}</td>
+			<td class='code'>$I{name[,default]}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oajr.vars.LocalizationVar}</td>
+			<td class='code'>$L{key[,args...]}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oajr.vars.RequestAttributeVar}</td>
+			<td class='code'>$RA{key1[,key2...]}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oajr.vars.RequestFormDataVar}</td>
+			<td class='code'>$RF{key1[,key2...]}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oajr.vars.RequestHeaderVar}</td>
+			<td class='code'>$RH{key1[,key2...]}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oajr.vars.RequestPathVar}</td>
+			<td class='code'>$RP{key1[,key2...]}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oajr.vars.RequestQueryVar}</td>
+			<td class='code'>$RQ{key1[,key2...]}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oajr.vars.RequestSwaggerVar}</td>
+			<td class='code'>$RS{key}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oajr.vars.RequestVar}</td>
+			<td class='code'>$R{key1[,key2...]}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oajr.vars.SerializedRequestAttrVar}</td>
+			<td class='code'>$SA{contentType,key[,default]}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oajr.vars.SwaggerVar}</td>
+			<td class='code'>$SS{key1[,key2...]}</td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oajr.vars.UrlVar}</td>
+			<td class='code'>$U{uri}></td>
+		</tr>
+		<tr class='dark'>
+			<td>{@link oajr.vars.UrlEncodeVar}</td>
+			<td class='code'>$UE{uriPart}</td>
+		</tr>
+	</table>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/21.jm.SimpleVariableLanguage/02.jm.VarResolvers.html b/juneau-doc/docs/Topics/02.juneau-marshall/21.jm.SimpleVariableLanguage/02.jm.VarResolvers.html
new file mode 100644
index 000000000..6fd490eab
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/21.jm.SimpleVariableLanguage/02.jm.VarResolvers.html
@@ -0,0 +1,70 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'VarResolvers and VarResolverSessions', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The main class for performing variable resolution is {@link oaj.svl.VarResolver}.
+		Two methods are provided for resolving variables:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.svl.VarResolver}
+			<ul>
+				<li class='jm'>{@link oaj.svl.VarResolver#resolve(String) resolve(String)} 
+					- Resolves variables and returns the results as a simple string.
+				<li class='jm'>{@link oaj.svl.VarResolver#resolveTo(String,Writer) resolveTo(String,Writer)} 
+					- Resolves variables and sends results to a writer.
+			</ul>
+		</li>
+	</ul>
+	<p>
+		Var resolvers can rely on the existence of other objects.
+		For example, {@link oaj.config.vars.ConfigVar} relies on the existence of a {@link oaj.config.Config}.
+		This is accomplished through the following method:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.svl.VarResolver.Builder} 
+			<ul>
+				<li class='jm'>{@link oaj.svl.VarResolver.Builder#bean(Class,Object) bean(Class&lt;T&gt;, T)} - Specify a bean for all sessions.
+			</ul>
+		</li>
+		<li class='jc'>{@link oaj.svl.VarResolverSession}
+			<ul>
+				<li class='jm'>{@link oaj.svl.VarResolverSession#bean(Class,Object) bean(Class&lt;T&gt;, T)} - Specify a bean for this session.
+			</ul>
+		</li>
+	</ul>
+	<p>
+		Beans are accessible through the following method:
+	</p>
+	<ul class='javatree'>
+		<li class='jm'>{@link oaj.svl.VarResolverSession#getBean(Class)}
+	</ul>
+	<p>
+		Var resolvers can be cloned and extended by using the {@link oaj.svl.VarResolver#copy()} method.
+		Cloning a resolver will copy it's {@link oaj.svl.Var} class names and context objects.
+	</p>
+	
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+		|	<jc>// Create a resolver that copies the default resolver and adds $C and $A vars.</jc>
+		|	VarResolver <jv>myVarResolver</jv> = VarResolver
+		|		.<jsf>DEFAULT</jsf>
+		|		.copy()
+		|		.vars(ConfigVar.<jk>class</jk>, ArgsVar.<jk>class</jk>)
+		|		.build();
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/21.jm.SimpleVariableLanguage/03.jm.DefaultVarResolver.html b/juneau-doc/docs/Topics/02.juneau-marshall/21.jm.SimpleVariableLanguage/03.jm.DefaultVarResolver.html
new file mode 100644
index 000000000..9966f4b4b
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/21.jm.SimpleVariableLanguage/03.jm.DefaultVarResolver.html
@@ -0,0 +1,39 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'VarResolver.DEFAULT', created:'8.1.0'}
+
+<div class='topic'>
+	<p>
+		{@link oaj.svl.VarResolver#DEFAULT} is a reusable variable resolver with default support for the following variables:
+	</p>
+	<ul>
+		<li><c>$S{key[,default]}</c> - {@link oaj.svl.vars.SystemPropertiesVar}
+		<li><c>$E{key[,default]}</c> - {@link oaj.svl.vars.EnvVariablesVar}
+		<li><c>$A{key[,default]}</c> - {@link oaj.svl.vars.ArgsVar}
+		<li><c>$MF{key[,default]}</c> - {@link oaj.svl.vars.ManifestFileVar}
+		<li><c>$SW{stringArg,pattern:thenValue[,pattern:thenValue...]}</c> - {@link oaj.svl.vars.SwitchVar}
+		<li><c>$IF{arg,then[,else]}</c> - {@link oaj.svl.vars.IfVar}
+		<li><c>$CO{arg[,arg2...]}</c> - {@link oaj.svl.vars.CoalesceVar}
+		<li><c>$PM{arg,pattern}</c> - {@link oaj.svl.vars.PatternMatchVar}
+		<li><c>$PR{stringArg,pattern,replace}</c>- {@link oaj.svl.vars.PatternReplaceVar}
+		<li><c>$PE{arg,pattern,groupIndex}</c> - {@link oaj.svl.vars.PatternExtractVar}
+		<li><c>$UC{arg}</c> - {@link oaj.svl.vars.UpperCaseVar}
+		<li><c>$LC{arg}</c> - {@link oaj.svl.vars.LowerCaseVar}
+		<li><c>$NE{arg}</c> - {@link oaj.svl.vars.NotEmptyVar}
+		<li><c>$LN{arg[,delimiter]}</c> - {@link oaj.svl.vars.LenVar}
+		<li><c>$ST{arg,start[,end]}</c> - {@link oaj.svl.vars.SubstringVar}
+	</ul>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/21.jm.SimpleVariableLanguage/04.jm.SvlOtherNotes.html b/juneau-doc/docs/Topics/02.juneau-marshall/21.jm.SimpleVariableLanguage/04.jm.SvlOtherNotes.html
new file mode 100644
index 000000000..4aa268f3e
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/21.jm.SimpleVariableLanguage/04.jm.SvlOtherNotes.html
@@ -0,0 +1,34 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'Other Notes'}
+
+<div class='topic'>
+	<ul class='spaced-list'>
+		<li>
+			The escape character <js>'\'</js> can be used when necessary to escape the following characters: 
+			<c>$ , { }</c>
+		<li>
+			<b>WARNING:</b>  It is possible to cause {@link java.lang.StackOverflowError StackOverflowErrors} if 
+			your nested variables result in a recursive loop (e.g. the environment variable 
+			<c>'MYPROPERTY'</c> has the value <c>'$E{MYPROPERTY}'</c>).
+			So don't do that!
+		<li>
+			As a general rule, this class tries to be as efficient as possible by not creating new strings when not 
+			needed.
+			<br>For example, calling the resolve method on a string that doesn't contain variables (e.g. 
+			<c>resolver.resolve(<js>"foobar"</js>)</c>) will simply be a no-op and return the same string.
+	</ul>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/22.jm.Encoders.html b/juneau-doc/docs/Topics/02.juneau-marshall/22.jm.Encoders.html
new file mode 100644
index 000000000..fa7690e02
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/22.jm.Encoders.html
@@ -0,0 +1,80 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'Encoders', created:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.encoders} package defines an API for handling encoding-based matching
+		of <c>Accept-Encoding</c>/<c>Content-Encoding</c> HTTP headers.  It consists of the following classes:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.encoders.EncoderSet}
+		<li class='jcc'>{@link oaj.encoders.Encoder}
+		<ul>
+			<li class='jc'>{@link oaj.encoders.IdentityEncoder}
+			<li class='jc'>{@link oaj.encoders.GzipEncoder}
+		</ul>
+	</ul>
+	<h5 class='topic'>EncoderSet</h5>
+	<p>
+		The {@link oaj.encoders.EncoderSet} class represents the set of {@link Encoder encoders} keyed by codings.
+		It maintains a set of encoders and the codings that they can handle.
+ 		The {@link oaj.encoders.EncoderSet#getEncoderMatch(String) getEncoderMatch(String)} and {@link oaj.encoders.EncoderSet#getEncoder(String)} 
+ 		methods are then used to find appropriate encoders for specific <c>Accept-Encoding</c> and <c>Content-Encoding</c> header values.
+	</p>
+	
+	<h5 class='topic'>Match ordering</h5>
+	<p>
+		Encoders are tried in the order they appear in the set.  The {@link oaj.encoders.EncoderSet.Builder#add(Class...)} / {@link oaj.encoders.EncoderSet.Builder#add(Encoder...)}
+		methods prepend the values to the list to allow them the opportunity to override encoders already in the list.
+	</p>
+	<p>
+		For example, calling <code>builder.add(E1.<jk>class</jk>,E2.<jk>class</jk>).add(E3.<jk>class</jk>,
+		E4.<jk>class</jk>)</code> will result in the order <c>E3, E4, E1, E2</c>.
+	</p>
+	
+	<h5 class='section'>Example:</h5>
+	<p class='bjava'>
+	|	<jc>// Create an encoder group with support for gzip compression.</jc>
+	|	EncoderSet <jv>encoders</jv> = EncoderSet
+	|		.<jsm>create</jsm>()
+	|		.add(GzipEncoder.<jk>class</jk>)
+	|		.build();
+	|
+	|	<jc>// Should return "gzip"</jc>
+	|	String <jv>matchedCoding</jv> = <jv>encoders</jv>.findMatch(<js>"compress;q=1.0, gzip;q=0.8, identity;q=0.5, *;q=0"</js>);
+	|
+	|	<jc>// Get the encoder</jc>
+	|	Encoder <jv>encoder</jv> = <jv>encoders</jv>.getEncoder(<jv>matchedCoding</jv>);
+	</p>
+
+	<h5 class='topic'>Encoder API</h5>
+	<p>
+		The {@link oaj.encoders.Encoder} interface is used for enabling decompression on requests and compression on responses, such as support for GZIP compression.
+		It is used to wrap input and output streams within compression/decompression streams.
+	</p>
+	<ul class='javatree'>
+		<li class='jac'>{@link oaj.encoders.Encoder}
+		<ul class='javatreec'>
+			<li class='jm'>{@link oaj.encoders.Encoder#getCodings() getCodings()}
+			<li class='jm'>{@link oaj.encoders.Encoder#getInputStream(InputStream) getInputStream(InputStream)}
+			<li class='jm'>{@link oaj.encoders.Encoder#getOutputStream(OutputStream) getOutputStream(OutputStream)}
+		</ul>
+	</ul>
+	<p>
+		Encoders are registered with <c>RestServlets</c> through the <ja>@Rest(encoders)</ja> annotation.
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/23.jm.ObjectTools.html b/juneau-doc/docs/Topics/02.juneau-marshall/23.jm.ObjectTools.html
new file mode 100644
index 000000000..a480d443e
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/23.jm.ObjectTools.html
@@ -0,0 +1,343 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'Object Tools', created:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.objecttools} package defines convenience utility classes for accessing
+		and manipulating POJOs.  It consists of the following classes:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.objecttools.ObjectRest}
+		<li class='jc'>{@link oaj.objecttools.ObjectSearcher}
+		<li class='jc'>{@link oaj.objecttools.ObjectSorter}
+		<li class='jc'>{@link oaj.objecttools.ObjectViewer}
+		<li class='jc'>{@link oaj.objecttools.ObjectPaginator}
+		<li class='jc'>{@link oaj.objecttools.ObjectIntrospector}
+		<li class='jc'>{@link oaj.objecttools.ObjectMerger}
+	</ul>
+	
+	<h5 class='topic'>ObjectRest</h5>
+	<p>
+		The {@link oaj.objecttools.ObjectRest} class provides the ability to perform standard REST operations (GET, PUT, POST, DELETE) against nodes in a POJO model.
+		Nodes in the POJO model are addressed using URLs.
+	</p>
+	<p>
+		A POJO model is defined as a tree model where nodes consist of consisting of the following:
+	</p>
+	<ul class='spaced-list'>
+		<li>
+			{@link Map Maps} and Java beans representing JSON objects.
+		<li>
+			{@link Collection Collections} and arrays representing JSON arrays.
+		<li>
+			Java beans.
+	</ul>
+	<p>
+		Leaves of the tree can be any type of object.
+	</p>
+	<p>
+		Use {@link oaj.objecttools.ObjectRest#get(String) get()} to retrieve an element from a JSON tree.
+		<br>Use {@link oaj.objecttools.ObjectRest#put(String,Object) put()} to create (or overwrite) an element in a JSON tree.
+		<br>Use {@link oaj.objecttools.ObjectRest#post(String,Object) post()} to add an element to a list in a JSON tree.
+		<br>Use {@link oaj.objecttools.ObjectRest#delete(String) delete()} to remove an element from a JSON tree.
+	</p>
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+	|	<jc>// Construct an unstructured POJO model</jc>
+	|	JsonMap <jv>map</jv> = JsonMap.<jsm>ofJson</jsm>(<js>""</js>
+	|		+ <js>"{"</js>
+	|		+ <js>"	name:'John Smith', "</js>
+	|		+ <js>"	address:{ "</js>
+	|		+ <js>"		streetAddress:'21 2nd Street', "</js>
+	|		+ <js>"		city:'New York', "</js>
+	|		+ <js>"		state:'NY', "</js>
+	|		+ <js>"		postalCode:10021 "</js>
+	|		+ <js>"	}, "</js>
+	|		+ <js>"	phoneNumbers:[ "</js>
+	|		+ <js>"		'212 555-1111', "</js>
+	|		+ <js>"		'212 555-2222' "</js>
+	|		+ <js>"	], "</js>
+	|		+ <js>"	additionalInfo:null, "</js>
+	|		+ <js>"	remote:false, "</js>
+	|		+ <js>"	height:62.4, "</js>
+	|		+ <js>"	'fico score':' &gt; 640' "</js>
+	|		+ <js>"} "</js>
+	|	);
+	|
+	|	<jc>// Wrap Map inside an ObjectRest object</jc>
+	|	ObjectRest <jv>johnSmith</jv> = ObjectRest.<jsm>create</jsm>(<jv>map</jv>);
+	|
+	|	<jc>// Get a simple value at the top level</jc>
+	|	<jc>// "John Smith"</jc>
+	|	String <jv>name</jv> = <jv>johnSmith</jv>.getString(<js>"name"</js>);
+	|
+	|	<jc>// Change a simple value at the top level</jc>
+	|	<jv>johnSmith</jv>.put(<js>"name"</js>, <js>"The late John Smith"</js>);
+	|
+	|	<jc>// Get a simple value at a deep level</jc>
+	|	<jc>// "21 2nd Street"</jc>
+	|	String <jv>streetAddress</jv> = <jv>johnSmith</jv>.getString(<js>"address/streetAddress"</js>);
+	|
+	|	<jc>// Set a simple value at a deep level</jc>
+	|	<jv>johnSmith</jv>.put(<js>"address/streetAddress"</js>, <js>"101 Cemetery Way"</js>);
+	|
+	|	<jc>// Get entries in a list</jc>
+	|	<jc>// "212 555-1111"</jc>
+	|	String <jv>firstPhoneNumber</jv> = <jv>johnSmith</jv>.getString(<js>"phoneNumbers/0"</js>);
+	|
+	|	<jc>// Add entries to a list</jc>
+	|	<jv>johnSmith</jv>.post(<js>"phoneNumbers"</js>, <js>"212 555-3333"</js>);
+	|
+	|	<jc>// Delete entries from a model</jc>
+	|	<jv>johnSmith</jv>.delete(<js>"fico score"</js>);
+	|
+	|	<jc>// Add entirely new structures to the tree</jc>
+	|	JsonMap <jv>medicalInfo</jv> = JsonMap.<jsm>ofJson</jsm>(<js>""</js>
+	|		+ <js>"{"</js>
+	|		+ <js>"	currentStatus: 'deceased',"</js>
+	|		+ <js>"	health: 'non-existent',"</js>
+	|		+ <js>"	creditWorthiness: 'not good'"</js>
+	|		+ <js>"}"</js>
+	|	);
+	|	<jv>johnSmith</jv>.put(<js>"additionalInfo/medicalInfo"</js>, <jv>medicalInfo</jv>);
+	</p>
+
+	<p>
+		In the special case of collections/arrays of maps/beans, a special XPath-like selector notation can be used in lieu
+		of index numbers on GET requests to return a map/bean with a specified attribute value.
+		<br>The syntax is {@code @attr=val}, where attr is the attribute name on the child map, and val is the matching value.
+	</p>
+	
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+	|	<jc>// Get map/bean with name attribute value of 'foo' from a list of items</jc>
+	|	Map <jv>map</jv> = <jv>objectRest</jv>.getMap(<js>"/items/@name=foo"</js>);
+	</p>
+	<ul class='notes'>
+		<li class='note'>This class is used in the {@link oajr.converter.Traversable} REST response converter.
+	</ul>
+	
+	<h5 class='topic'>ObjectSearcher</h5>
+	<p>
+		The {@link oaj.objecttools.ObjectSearcher} class is designed to provide searches across arrays and collections of maps or beans.
+		It allows you to quickly filter beans and maps using simple yet sophisticated search arguments.
+	</p>
+	
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'> 
+	|	MyBean[] <jv>arrayOfBeans</jv> = ...;
+	|	ObjectSearcher <jv>searcher</jv> = ObjectSearcher.<jsm>create</jsm>();
+	|	
+	|	<jc>// Returns a list of beans whose 'foo' property is 'X' and 'bar' property is 'Y'.</jc>		
+	|	List&lt;MyBean&gt; <jv>result</jv> = <jv>searcher</jv>.run(<jv>arrayOfBeans</jv>, <js>"foo=X,bar=Y"</js>);  
+	</p>
+	<p>
+		The tool can be used against the following data types:
+	</p>
+	<ul>
+		<li>Arrays/collections of maps or beans.
+	</ul>
+	<p>
+		The default searcher is configured with the following matcher factories that provides the capabilities of matching
+		against various data types.  This list is extensible:
+	</p>
+	<ul class='javatreec'>
+		<li class='jc'>{@link oaj.objecttools.StringMatcherFactory}
+		<li class='jc'>{@link oaj.objecttools.NumberMatcherFactory}
+		<li class='jc'>{@link oaj.objecttools.TimeMatcherFactory}
+	</ul>
+	<p>
+		The {@link oaj.objecttools.StringMatcherFactory} class provides searching based on the following patterns:
+	</p>
+	<ul>
+		<li><js>"property=foo"</js> - Simple full word match
+		<li><js>"property=fo*"</js>, <js>"property=?ar"</js> - Meta-character matching
+		<li><js>"property=foo bar"</js>(implicit), <js>"property=^foo ^bar"</js>(explicit) - Multiple OR'ed patterns
+		<li><js>"property=+fo* +*ar"</js> - Multiple AND'ed patterns
+		<li><js>"property=fo* -bar"</js> - Negative patterns
+		<li><js>"property='foo bar'"</js> - Patterns with whitespace
+		<li><js>"property=foo\\'bar"</js> - Patterns with single-quotes
+		<li><js>"property=/foo\\s+bar"</js> - Regular expression match
+	</ul>
+	<p>
+		The {@link oaj.objecttools.NumberMatcherFactory} class provides searching based on the following patterns:
+	</p>
+	<ul>
+		<li><js>"property=1"</js> - A single number
+		<li><js>"property=1 2"</js> - Multiple OR'ed numbers
+		<li><js>"property=-1 -2"</js> - Multiple OR'ed negative numbers
+		<li><js>"property=1-2"</js>,<js>"property=-2--1"</js>  - A range of numbers (whitespace ignored)
+		<li><js>"property=1-2 4-5"</js> - Multiple OR'ed ranges
+		<li><js>"property=&lt;1"</js>,<js>"property=&lt;=1"</js>,<js>"property=&gt;1"</js>,<js>"property=&gt;=1"</js> - Open-ended ranges
+		<li><js>"property=!1"</js>,<js>"property=!1-2"</js> - Negation
+	</ul>
+	<p>
+		The {@link oaj.objecttools.TimeMatcherFactory} class provides searching based on the following patterns:
+	</p>
+	<ul>
+		<li><js>"property=2011"</js> - A single year
+		<li><js>"property=2011 2013 2015"</js> - Multiple years
+		<li><js>"property=2011-01"</js> - A single month
+		<li><js>"property=2011-01-01"</js> - A single day
+		<li><js>"property=2011-01-01T12"</js> - A single hour
+		<li><js>"property=2011-01-01T12:30"</js> - A single minute
+		<li><js>"property=2011-01-01T12:30:45"</js> - A single second
+		<li><js>"property=&gt;2011"</js>,<js>"property=&gt;=2011"</js>,<js>"property=&lt;2011"</js>,<js>"property=&lt;=2011"</js> - Open-ended ranges
+		<li><js>"property=&gt;2011"</js>,<js>"property=&gt;=2011"</js>,<js>"property=&lt;2011"</js>,<js>"property=&lt;=2011"</js> - Open-ended ranges
+		<li><js>"property=2011 - 2013-06-30"</js> - Closed ranges
+	</ul>
+	<ul class='notes'>
+		<li class='note'>This class is used in the {@link oajr.converter.Queryable} REST response converter.
+	</ul>
+
+	<h5 class='topic'>ObjectSorter</h5>
+	<p>
+		The {@link oaj.objecttools.ObjectSorter} class is designed to sort arrays and collections of maps or beans.
+	</p>
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'> 
+	|	MyBean[] <jv>arrayOfBeans</jv> = ...;
+	|	ObjectSorter <jv>sorter</jv> = ObjectSorter.<jsm>create</jsm>();
+	|	
+	|	<jc>// Returns a list of beans sorted accordingly.</jc>		
+	|	List&lt;MyBean&gt; <jv>result</jv> = <jv>sorter</jv>.run(<jv>arrayOfBeans</jv>, <js>"foo,bar-"</js>);  
+	</p>
+	<p>
+		The tool can be used against the following data types:
+	</p>
+	<ul>
+		<li>Arrays/collections of maps or beans.
+	</ul>
+	<p>
+		The arguments are a simple comma-delimited list of property names optionally suffixed with <js>'+'</js> and <js>'-'</js> to 
+		denote ascending/descending order.
+	</p>
+	<ul class='notes'>
+		<li class='note'>This class is used in the {@link oajr.converter.Queryable} REST response converter.
+	</ul>
+	
+	<h5 class='topic'>ObjectViewer</h5>
+	<p>
+		The {@link oaj.objecttools.ObjectViewer} class is designed to extract properties from collections of maps or beans.
+	</p>
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'> 
+	|	MyBean[] <jv>arrayOfBeans</jv> = ...;
+	|	ObjectViewer <jv>viewer</jv> = ObjectViewer.<jsm>create</jsm>();
+
+	|	<jc>// Returns the 'foo' and 'bar' properties extracted into a list of maps.</jc>		
+	|	List&lt;Map&gt; <jv>result</jv> = <jv>viewer</jv>.run(<jv>arrayOfBeans</jv>, <js>"foo,bar"</js>);  
+	</p>
+	<p>
+		The tool can be used against the following data types:
+	</p>
+	<ul>
+		<li>Arrays/collections of maps or beans.
+		<li>Singular maps or beans.
+	</ul>
+	<ul class='notes'>
+		<li class='note'>This class is used in the {@link oajr.converter.Queryable} REST response converter.
+	</ul>
+	
+	<h5 class='topic'>ObjectPaginator</h5>
+	<p>
+		The {@link oaj.objecttools.ObjectPaginator} class is designed to extract sublists from arrays/collections of maps or beans.
+	</p>
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'> 
+	|	MyBean[] <jv>arrayOfBeans</jv> = ...;
+	|	ObjectPaginator <jv>paginator</jv> = ObjectPaginator.<jsm>create</jsm>();
+	|	
+	|	<jc>// Returns all rows from 100 to 110.</jc>		
+	|	List&lt;MyBean&gt; <jv>result</jv> = <jv>paginator</jv>.run(<jv>arrayOfBeans</jv>, 100, 10);  
+	</p>
+	<p>
+		The tool can be used against the following data types:
+	</p>
+	<ul>
+		<li>Arrays/collections of maps or beans.
+	</ul>
+	<ul class='notes'>
+		<li class='note'>This class is used in the {@link oajr.converter.Queryable} REST response converter.
+	</ul>
+
+	<h5 class='topic'>ObjectIntrospector</h5>
+	<p>
+		The {@link oaj.objecttools.ObjectIntrospector} class is used to invoke methods on {@code Objects} using arguments in serialized form.
+	</p>
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+	|	String <jv>string1</jv> = <js>"foobar"</js>;
+	|	String <jv>string2</jv> = ObjectIntrospector
+	|		.create(<jv>string</jv>)
+	|		.invoke(String.<jk>class</jk>, <js>"substring(int,int)"</js>, <js>"[3,6]"</js>);  <jc>// "bar"</jc>
+	</p>
+	<p>
+		The arguments passed to the identified method are POJOs serialized in JSON format.  Arbitrarily complex arguments can be passed
+		in as arguments.
+	</p>
+	<ul class='notes'>
+		<li class='note'>This class is used in the {@link oajr.converter.Introspectable} REST response converter.
+		<li class='warn'>This is an extremely powerful but potentially dangerous tool.  Use wisely.
+	</ul>
+	
+	<h5 class='topic'>ObjectMerger</h5>
+	<p>
+		The {@link oaj.objecttools.ObjectMerger} class is used for merging POJOs behind a single interface.
+		This is particularly useful in cases where you want to define beans with 'default' values.
+	</p>
+	<p>
+		For example, given the following bean classes:
+	</p>
+
+	<p class='bjava'>
+	|	<jk>public interface</jk> IA {
+	|		String getX();
+	|		<jk>void</jk> setX(String <jv>x</jv>);
+	|	}
+	|
+	|	<jk>public class</jk> A <jk>implements</jk> IA {
+	|		<jk>private</jk> String <jf>x</jf>;
+	|
+	|		<jk>public</jk> A(String <jv>x</jv>) {
+	|			<jk>this</jk>.<jf>x</jf> = <jv>x</jv>;
+	|		}
+	|
+	|		<jk>public</jk> String getX() {
+	|			<jk>return</jk> <jf>x</jf>;
+	|		}
+	|
+	|		<jk>public void</jk> setX(String <jv>x</jv>) {
+	|			<jk>this</jk>.<jf>x</jf> = <jv>x</jv>;
+	|		}
+	|	}
+	</p>
+	<p>
+		The getters will be called in order until the first non-null value is returned:
+ 	</p>
+	<p class='bjava'>
+	|	<jv>merge</jv> = ObjectMerger.<jsm>merger</jsm>(IA.<jk>class</jk>, <jk>new</jk> A(<js>"1"</js>), <jk>new</jk> A(<js>"2"</js>));
+	|	<jsm>assertEquals</jsm>(<js>"1"</js>, <jv>merge</jv>.getX());
+	|
+	|	<jv>merge</jv> = ObjectMerger.<jsm>merger</jsm>(IA.<jk>class</jk>, <jk>new</jk> A(<jk>null</jk>), <jk>new</jk> A(<js>"2"</js>));
+	|	<jsm>assertEquals</jsm>(<js>"2"</js>, <jv>merge</jv>.getX());
+	|
+	|	<jv>merge</jv> = ObjectMerger.<jsm>merger</jsm>(IA.<jk>class</jk>, <jk>new</jk> A(<jk>null</jk>), <jk>new</jk> A(<jk>null</jk>));
+	|	<jsm>assertEquals</jsm>(<jk>null</jk>, <jv>merge</jv>.getX());
+	</p>
+	
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.JsonDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.JsonDetails.html
new file mode 100644
index 000000000..3bce8b863
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.JsonDetails.html
@@ -0,0 +1,97 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'JSON Details'}
+
+<div class='topic'>
+	<p>
+		Juneau supports converting arbitrary POJOs to and from JSON using ultra-efficient serializers and parsers.
+		The JSON serializer converts POJOs directly to JSON without the need for intermediate DOM objects using a 
+		highly-efficient state machine.
+		Likewise, the JSON parser creates POJOs directly from JSON without the need for intermediate DOM objects. 
+	</p>
+	<p>
+		The following example shows JSON for a typical bean:
+	</p>
+	<h5 class='figure'>Sample Beans</h5>
+	<p class='bjava'>
+		|	<jk>public class</jk> Person {
+		|		
+		|		<jc>// Bean properties</jc>
+		|		<jk>public</jk> String <jf>name</jf>;
+		|		<ja>@Swap</ja>(TemporalCalendarSwap.IsoInstant.<jk>class</jk>) <jk>public</jk> Calendar <jf>birthDate</jf>;
+		|		<jk>public</jk> List&lt;Address&gt; <jf>addresses</jf>; 
+		|	
+		|		<jc>// Getters/setters omitted</jc>
+		|	}
+		|	
+		|	<jk>public class</jk> Address {
+		|
+		|		<jc>// Bean properties</jc>
+		|		<jk>public</jk> String <jf>street</jf>, <jf>city</jf>;
+		|		<jk>public</jk> StateEnum <jf>state</jf>;
+		|		<jk>public int</jk> <jf>zip</jf>;
+		|		<jk>public boolean</jk> <jf>isCurrent</jf>;
+		|
+		|		<jc>// Getters/setters omitted</jc>
+		|	}	
+	</p>
+	<h5 class='figure'>Sample Code</h5>
+	<p class='bjava'>
+		|	Person <jv>person</jv> = <jk>new</jk> Person()
+		|		.name(<js>"John Smith"</js>)
+		|		.birthDate(<js>"1946-08-12T00:00:00Z"</js>)
+		|		.addresses(
+		|			<jk>new</jk> Address() 
+		|				.street(<js>"100 Main Street"</js>)
+		|				.city(<js>"Anywhereville"</js>)
+		|				.state(<jsf>NY</jsf>)
+		|				.zip(12345)
+		|				.isCurrent(<jk>true</jk>);
+		|		);
+	</p>
+	<h5 class='figure'>Normal JSON</h5>
+	<p class='bjson'>
+		|	{
+		|		<js>"name"</js>: <js>"John Smith"</js>, 
+		|		<js>"birthDate"</js>: <js>"1946-08-12T00:00:00Z"</js>, 
+		|		<js>"addresses"</js>: [
+		|			{
+		|				<js>"street"</js>: <js>"100 Main Street"</js>, 
+		|				<js>"city"</js>: <js>"Anywhereville"</js>, 
+		|				<js>"state"</js>: <js>"NY"</js>, 
+		|				<js>"zip"</js>: 12345, 
+		|				<js>"isCurrent"</js>: <jk>true</jk>
+		|			}
+		|		]
+		|	} 
+	</p>
+	<h5 class='figure'>Simplified JSON</h5>
+	<p class='bjson'>
+		|	{
+		|		name: <js>'John Smith'</js>, 
+		|		birthDate: <js>'1946-08-12T00:00:00Z'</js>, 
+		|		addresses: [
+		|			{
+		|				street: <js>'100 Main Street'</js>, 
+		|				city: <js>'Anywhereville'</js>, 
+		|				state: <js>'NY'</js>, 
+		|				zip: 12345, 
+		|				isCurrent: <jk>true</jk>
+		|			}
+		|		]
+		|	} 
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.JsonDetails/01.jm.JsonMethodology.html b/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.JsonDetails/01.jm.JsonMethodology.html
new file mode 100644
index 000000000..2c9920c8f
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.JsonDetails/01.jm.JsonMethodology.html
@@ -0,0 +1,89 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'JSON Methodology'}
+
+<div class='topic'>
+	<p>
+		The JSON data type produced depends on the Java object type being serialized.
+	</p>
+	<ul class='spaced-list'>
+		<li>
+			Primitives and primitive objects are converted to JSON primitives.
+		<li>
+			Beans and Maps are converted to JSON objects.
+		<li>
+			Collections and arrays are converted to JSON arrays.
+		<li>
+			Anything else is converted to JSON strings.
+	</ul>
+	
+	<h5 class='figure'>Data type conversions:</h5>
+	<table class='styled w800'>
+		<tr>
+			<th>POJO type</th>
+			<th>JSON type</th>
+			<th>Example</th>
+			<th>Serialized form</th>
+		</tr>
+		<tr>
+			<td>String</td>
+			<td>String</td>
+			<td><c>serialize(<js>"foobar"</js>);</c></td>
+			<td><c><js>'foobar'</js></c>
+		</tr>
+		<tr>
+			<td>Number</td>
+			<td>Number</td>
+			<td><c>serialize(123);</c></td>
+			<td><c>123</c>
+		</tr>
+		<tr>
+			<td>Boolean</td>
+			<td>Boolean</td>
+			<td><c>serialize(<jk>true</jk>);</c></td>
+			<td><c><jk>true</jk></c>
+		</tr>
+		<tr>
+			<td>Null</td>
+			<td>Null</td>
+			<td><c>serialize(<jk>null</jk>);</c></td>
+			<td><c><jk>null</jk></c>
+		</tr>
+		<tr>
+			<td>Beans with properties of any type on this list</td>
+			<td>Object</td>
+			<td><c>serialize(<jk>new</jk> MyBean());</c></td>
+			<td><c>{p1:<js>'val1'</js>,p2:<jk>true</jk>}</c>
+		</tr>
+		<tr>
+			<td>Maps with values of any type on this list</td>
+			<td>Object</td>
+			<td><c>serialize(<jk>new</jk> TreeMap());</c></td>
+			<td><c>{key1:<js>'val1'</js>,key2:<jk>true</jk>}</c>
+		</tr>
+		<tr>
+			<td>Collections and arrays of any type on this list</td>
+			<td>Array</td>
+			<td><c>serialize(<jk>new</jk> Object[]{1,<js>"foo"</js>,<jk>true</jk>});</c></td>
+			<td><c>[1,<js>'foo'</js>,<jk>true</jk>]</c>
+		</tr>
+	</table>
+	<p>
+		In addition, swaps can be used to convert non-serializable POJOs into serializable forms, such as converting 
+		<c>Calendar</c> object to ISO8601 strings, or <c><jk>byte</jk>[]</c> arrays to Base-64 
+		encoded strings.
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.JsonDetails/02.jm.JsonSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.JsonDetails/02.jm.JsonSerializers.html
new file mode 100644
index 000000000..121dbe047
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.JsonDetails/02.jm.JsonSerializers.html
@@ -0,0 +1,68 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'JSON Serializers', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.json.JsonSerializer} class is used to serialize POJOs into JSON.
+	</p>	
+	<p>
+		The class hierarchy for the builder of this serializer is:
+	</p>
+	<ul class='javatree'>
+		<li class='jac'>{@link oaj.Context.Builder}
+			<ul>
+				<li class='jac'>{@link oaj.BeanContextable.Builder}
+					<ul>
+						<li class='jac'>{@link oaj.BeanTraverseContext.Builder}
+							<ul>
+								<li class='jac'>{@link oaj.serializer.Serializer.Builder}
+									<ul>
+										<li class='jac'>{@link oaj.serializer.WriterSerializer.Builder}
+											<ul>
+												<li class='jc'>{@link oaj.json.JsonSerializer.Builder}
+											</ul>
+										</li>
+									</ul>
+								</li>
+							</ul>
+						</li>
+					</ul>
+				</li>
+			</ul>
+		</li>
+	</ul>
+	<p>
+		Refer to the builder javadocs for configurable settings.
+	</p>
+	<p>
+		The following pre-configured serializers are provided for convenience:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.json.JsonSerializer}
+			<ul class='javatreec'>
+				<li class='jf'>{@link oaj.json.JsonSerializer#DEFAULT DEFAULT}
+				<li class='jf'>{@link oaj.json.JsonSerializer#DEFAULT_READABLE DEFAULT_READABLE}
+			</ul>
+		</li>
+		<li class='jc'>{@link oaj.json.SimpleJsonSerializer}
+			<ul class='javatreec'>
+				<li class='jf'>{@link oaj.json.SimpleJsonSerializer#DEFAULT DEFAULT}
+				<li class='jf'>{@link oaj.json.SimpleJsonSerializer#DEFAULT_READABLE DEFAULT_READABLE}
+			</ul>
+		</li>
+	</ul>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.JsonDetails/03.jm.SimplifiedJson.html b/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.JsonDetails/03.jm.SimplifiedJson.html
new file mode 100644
index 000000000..15d9bdab4
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.JsonDetails/03.jm.SimplifiedJson.html
@@ -0,0 +1,79 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'Simplified JSON', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.json.SimpleJsonSerializer} class can be used to serialized POJOs into Simplified JSON notation.
+	</p>
+	<p>
+		Simplified JSON is identical to JSON except for the following:
+	</p>
+	<ul class='spaced-list'>
+		<li>JSON attributes are only quoted when necessary.
+		<li>Uses single-quotes for quoting.
+	</ul>
+	<h5 class='figure'>Examples:</h5>
+	<p class='bjava'>
+		|	<jc>// Some free-form JSON.</jc>
+		|	JsonMap <jv>map</jv> = JsonMap.<jsm>of</jsm>(
+		|		<js>"foo"</js>, <js>"x1"</js>,
+		|		<js>"_bar"</js>, <js>"x2"</js>,
+		|		<js>" baz "</js>, <js>"x3"</js>,
+		|		<js>"123"</js>, <js>"x4"</js>,
+		|		<js>"return"</js>, <js>"x5"</js>,
+		|		<js>""</js>, <js>"x6"</js>
+		|	);
+	</p>
+	<p class='bjson'>
+		|	<joc>// Serialized to standard JSON</joc>
+		|	{
+		|		<jok>"foo"</jok>: <jov>"x1"</jov>,
+		|		<jok>"_bar"</jok>: <jov>"x2"</jov>,
+		|		<jok>" baz "</jok>: <jov>"x3"</jov>,
+		|		<jok>"123"</jok>: <jov>"x4"</jov>,
+		|		<jok>"return"</jok>: <jov>"x5"</jov>,
+		|		<jok>""</jok>: <jov>"x6"</jov>
+		|	}
+	</p>	 		
+	<p class='bjson'>
+		|	<joc>// Serialized to simplified JSON</joc>
+		|	{
+		|		<jok>foo</jok>: <jov>'x1'</jov>,
+		|		<jok>_bar</jok>: <jov>'x2'</jov>,
+		|		<jok>' baz '</jok>: <jov>'x3'</jov>,  <joc>// Quoted due to embedded spaces.</joc>
+		|		<jok>'123'</jok>: <jov>'x4'</jov>,    <joc>// Quoted to prevent confusion with number.</joc>
+		|		<jok>'return'</jok>: <jov>'x5'</jov>, <joc>// Quoted because it's a keyword.</joc>
+		|		<jok>''</jok>: <jov>'x6'</jov>        <joc>// Quoted because it's an empty string.</joc>
+		|	}
+	</p>
+	<p>
+		The advantage to simplified JSON is you can represent it in a Java String in minimal form with minimal escaping.
+		This is particularly useful in cases such as unit testing where you can easily validate POJOs by simplifying them to Simplified JSON and do a simple string comparison.
+	</p>
+	<p class='bjava'>
+		|	WriterSerializer <jv>serializer</jv> = SimpleJsonSerializer.<jsf>DEFAULT</jsf>;
+		|	<jsm>assertEquals</jsm>(<js>"{foo:'bar',baz:123}"</js>, <jv>serializer</jv>.toString(<jv>myPojo</jv>));
+	</p>			
+	
+	<ul class='seealso'>
+		<li class='jc'>{@link oaj.json.JsonSerializer.Builder}
+			<ul class='javatreec'>
+				<li class='jm'>{@link oaj.json.JsonSerializer.Builder#simpleMode() simpleMode()}
+			</ul>
+		</li>
+	</ul>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.JsonDetails/04.jm.JsonParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.JsonDetails/04.jm.JsonParsers.html
new file mode 100644
index 000000000..fcb7d1fd7
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.JsonDetails/04.jm.JsonParsers.html
@@ -0,0 +1,73 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'JSON Parsers', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.json.JsonParser} class is used to parse JSON into POJOs.
+	</p>	
+	<p>
+		The class hierarchy for the builder of this parser is:
+	</p>
+	<ul class='javatree'>
+		<li class='jac'>{@link oaj.Context.Builder}
+			<ul>
+				<li class='jac'>{@link oaj.BeanContextable.Builder}
+					<ul>
+						<li class='jac'>{@link oaj.parser.Parser.Builder}
+							<ul>
+								<li class='jac'>{@link oaj.parser.ReaderParser.Builder}
+									<ul>
+										<li class='jc'>{@link oaj.json.JsonParser.Builder}
+									</ul>
+								</li>
+							</ul>
+						</li>
+					</ul>
+				</li>
+			</ul>
+		</li>
+	</ul>
+	<p>
+		Refer to the builder javadocs for configurable settings.
+	</p>
+	<p>
+		The following pre-configured parsers are provided for convenience:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.json.JsonParser}
+			<ul class='javatreec'>
+				<li class='jf'>{@link oaj.json.JsonParser#DEFAULT DEFAULT}
+				<li class='jf'>{@link oaj.json.JsonParser#DEFAULT_STRICT DEFAULT_STRICT}
+			</ul>
+		</li>
+	</ul>
+	<p>
+		The JSON parser supports ALL valid JSON, including:
+	</p>
+	<ul class='spaced-list'>
+		<li>
+			Javascript comments.
+		<li>
+			Single or double quoted values.
+		<li>
+			Quoted (strict) or unquoted (non-strict) attributes.
+		<li>
+			JSON fragments (such as string, numeric, or boolean primitive values).
+		<li>
+			Concatenated strings. 
+	</ul>	
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.JsonDetails/05.jm.JsonAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.JsonDetails/05.jm.JsonAnnotation.html
new file mode 100644
index 000000000..3cac89c7f
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.JsonDetails/05.jm.JsonAnnotation.html
@@ -0,0 +1,67 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'@Json Annotation'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.json.annotation.Json @Json} annotation
+		is used to override the behavior of {@link oaj.json.JsonSerializer} on individual bean classes or properties.
+	</p>
+	<p>
+		The annotation can be applied to beans as well as other objects serialized to other types (e.g. strings).
+	</p>
+	<ul class='javatree'>
+		<li class='ja'>{@link oaj.json.annotation.Json}
+			<ul class='javatreec'>
+				<li class='jma'>{@link oaj.json.annotation.Json#wrapperAttr() wrapperAttr}
+			</ul>
+		</li>
+	</ul>		
+	<p>
+		The {@link oaj.json.annotation.Json#wrapperAttr() @Json(wrapperAttr)} annotation
+		can be used to wrap beans inside a JSON object with a specified attribute name.
+	</p>		
+	<h5 class='figure'>Example:</h5>
+	<p class='bbjavacode w800'>
+		|	<ja>@Json</ja>(wrapperAttr=<js>"personBean"</js>)
+		|	<jk>public class</jk> Person {
+		|		<jk>public</jk> String <jf>name</jf> = <js>"John Smith"</js>;
+		|	}
+	</p>
+	<p>
+		The following shows the JSON representation with and without the annotation present:
+	</p>
+	<table class='styled w800'>
+		<tr>
+			<th>Without annotation</th>
+			<th>With annotation</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	{
+				|		<jok>name</jok>: <jov>'John Smith'</jov>
+				|	}
+			</td>
+			<td class='code'>
+				|	{
+				|		<jok>personBean</jok>: {
+				|			<jok>name</jok>: <jov>'John Smith'</jov>
+				|		}
+				|	}
+			</td>
+		</tr>
+	</table>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonSchemaDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonSchemaDetails.html
new file mode 100644
index 000000000..86a44c0f1
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonSchemaDetails.html
@@ -0,0 +1,110 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'JSON-Schema Support'}
+
+<div class='topic'>
+	<p>
+		Juneau provides the {@link oaj.json.JsonSchemaSerializer} class for generating JSON-Schema 
+		documents that describe the output generated by the {@link oaj.json.JsonSerializer} class.
+		This class shares the same properties as <c>JsonSerializer</c>.
+		For convenience the {@link oaj.json.JsonSerializer#getSchemaSerializer()} method has been 
+		added for creating instances of schema serializers from the regular serializer instance.
+	</p>
+	<h5 class='figure'>Sample Beans</h5>
+	<p class='bjava'>
+		|	<jk>public class</jk> Person {
+		|		
+		|		<jc>// Bean properties</jc>
+		|		<jk>public</jk> String <jf>name</jf>;
+		|		<jk>public</jk> Calendar <jf>birthDate</jf>;
+		|		<jk>public</jk> List&lt;Address&gt; <jf>addresses</jf>; 
+		|	
+		|		<jc>// Getters/setters omitted</jc>
+		|	}
+		|	
+		|	<jk>public class</jk> Address {
+		|
+		|		<jc>// Bean properties</jc>
+		|		<jk>public</jk> String <jf>street</jf>, <jf>city</jf>;
+		|		<jk>public</jk> StateEnum <jf>state</jf>;
+		|		<jk>public int</jk> <jf>zip</jf>;
+		|		<jk>public boolean</jk> <jf>isCurrent</jf>;
+		|
+		|		<jc>// Getters/setters omitted</jc>
+		|	}	
+	</p>
+	<p>
+		The code for creating our POJO model and generating JSON-Schema is shown below:
+	</p>
+	<p class='bjava'>
+		|	<jc>// Get the one of the default schema serializers.</jc>
+		|	JsonSchemaSerializer <jv>serializer</jv> = JsonSchemaSerializer.<jsf>DEFAULT_SIMPLE_READABLE</jsf>;
+		|	
+		|	<jc>// Get the JSON Schema for the POJO.</jc>
+		|	String <jv>jsonSchema</jv> = <jv>serializer</jv>.serialize(<jk>new</jk> Person());
+		|
+		|	<jc>// This also works.</jc>
+		|	<jv>jsonSchema</jv> = <jv>serializer</jv>.serialize(Person.<jk>class</jk>);
+	</p>
+	
+	<h5 class='figure'>JSON Schema</h5>
+	<p class='bjson'>
+		|	{
+		|		<jok>type: <jov>'object'</jov>, 
+		|		<jok>description</jok>: <jov>'org.apache.juneau.sample.Person'</jov>, 
+		|		<jok>properties</jok>: {
+		|			<jok>name</jok>: {
+		|				<jok>type</jok>: <jov>'string'</jov>, 
+		|				<jok>description</jok>: <jov>'java.lang.String'</jov>
+		|			}, 
+		|			<jok>birthDate</jok>: {
+		|				<jok>type</jok>: <jov>'string'</jov>, 
+		|				<jok>description</jok>: <jov>'java.util.Calendar'</jov>
+		|			}, 
+		|			<jok>addresses</jok>: {
+		|				<jok>type</jok>: <jov>'array'</jov>, 
+		|				<jok>description</jok>: <jov>'java.util.LinkedList&lt;org.apache.juneau.sample.Address&gt;'</jov>, 
+		|				<jok>items</jok>: {
+		|					<jok>type</jok>: <jov>'object'</jov>, 
+		|					<jok>description</jok>: <jov>'org.apache.juneau.sample.Address'</jov>, 
+		|					<jok>properties</jok>: {
+		|						<jok>street</jok>: {
+		|							<jok>type</jok>: <jov>'string'</jov>, 
+		|							<jok>description</jok>: <jov>'java.lang.String'</jov>
+		|						}, 
+		|						<jok>city</jok>: {
+		|							<jok>type</jok>: <jov>'string'</jov>, 
+		|							<jok>description</jok>: <jov>'java.lang.String'</jov>
+		|						}, 
+		|						<jok>state</jok>: {
+		|							<jok>type</jok>: <jov>'string'</jov>, 
+		|							<jok>description</jok>: <jov>'java.lang.String'</jov>
+		|						}, 
+		|						<jok>zip</jok>: {
+		|							<jok>type</jok>: <jov>'number'</jov>, 
+		|							<jok>description</jok>: <jov>'int'</jov>
+		|						}, 
+		|						<jok>isCurrent</jok>: {
+		|							<jok>type</jok>: <jov>'boolean'</jov>, 
+		|							<jok>description</jok>: <jov>'boolean'</jov>
+		|						}
+		|					}
+		|				}
+		|			}
+		|		}
+		|	}
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails.html
new file mode 100644
index 000000000..9a042b202
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails.html
@@ -0,0 +1,92 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'XML Details'}
+
+<div class='topic'>
+	<p>
+		Juneau supports converting arbitrary POJOs to and from XML using ultra-efficient serializers and parsers.
+		The XML serializer converts POJOs directly to XML without the need for intermediate DOM objects.
+		Likewise, the XML parser uses a STaX parser and creates POJOs directly without intermediate DOM objects. 
+	</p>
+	<p>
+		Unlike frameworks such as JAXB, Juneau does not require POJO classes to be annotated to produce and consume 
+		XML.
+		However, several XML annotations are provided for handling namespaces and fine-tuning the format of the XML produced.
+	</p>
+	<p>
+		The following example shows XML for a typical bean:
+	</p>
+	<h5 class='figure'>Sample Beans</h5>
+	<p class='bjava'>
+		|	<ja>@Bean</ja>(typeName=<js>"person"</js>)
+		|	<jk>public class</jk> Person {
+		|		
+		|		<jc>// Bean properties</jc>
+		|		<jk>public</jk> String <jf>name</jf>;
+		|		<ja>@Swap</ja>(TemporalCalendarSwap.IsoInstant.<jk>class</jk>) <jk>public</jk> Calendar <jf>birthDate</jf>;
+		|		<jk>public</jk> List&lt;Address&gt; <jf>addresses</jf>; 
+		|	
+		|		<jc>// Getters/setters omitted</jc>
+		|	}
+		|	
+		|	<ja>@Bean</ja>(typeName=<js>"address"</js>)
+		|	<jk>public class</jk> Address {
+		|
+		|		<jc>// Bean properties</jc>
+		|		<jk>public</jk> String <jf>street</jf>, <jf>city</jf>;
+		|		<jk>public</jk> StateEnum <jf>state</jf>;
+		|		<jk>public int</jk> <jf>zip</jf>;
+		|		<jk>public boolean</jk> <jf>isCurrent</jf>;
+		|
+		|		<jc>// Getters/setters omitted</jc>
+		|	}	
+	</p>
+	<h5 class='figure'>Sample Code</h5>
+	<p class='bjava'>
+		|	Person <jv>person</jv> = <jk>new</jk> Person()
+		|		.name(<js>"John Smith"</js>)
+		|		.birthDate(<js>"1946-08-12T00:00:00Z"</js>)
+		|		.addresses(
+		|			<jk>new</jk> Address() 
+		|				.street(<js>"100 Main Street"</js>)
+		|				.city(<js>"Anywhereville"</js>)
+		|				.state(<jsf>NY</jsf>)
+		|				.zip(12345)
+		|				.isCurrent(<jk>true</jk>);
+		|		);
+	</p>
+	<h5 class='figure'>Normal XML:</h5>
+	<p class='bxml'>
+		|	<xt>&lt;person&gt;</xt>
+		|		<xt>&lt;name&gt;</xt>John Smith<xt>&lt;/name&gt;</xt>
+		|		<xt>&lt;birthDate&gt;</xt>1946-08-12T04:00:00Z<xt>&lt;/birthDate&gt;</xt>
+		|		<xt>&lt;addresses&gt;</xt>
+		|			<xt>&lt;address&gt;</xt>
+		|				<xt>&lt;street&gt;</xt>100 Main Street<xt>&lt;/street&gt;</xt>
+		|				<xt>&lt;city&gt;</xt>Anywhereville<xt>&lt;/city&gt;</xt>
+		|				<xt>&lt;state&gt;</xt>NY<xt>&lt;/state&gt;</xt>
+		|				<xt>&lt;zip&gt;</xt>12345<xt>&lt;/zip&gt;</xt>
+		|				<xt>&lt;isCurrent&gt;</xt>true<xt>&lt;/isCurrent&gt;</xt>
+		|			<xt>&lt;/address&gt;</xt>
+		|		<xt>&lt;/addresses&gt;</xt>
+		|	<xt>&lt;/person&gt;</xt>
+	</p>
+	<p>
+		Juneau produces JSON-equivalent XML, meaning any valid JSON document can be losslessly converted into an XML 
+		equivalent.
+		In fact, all of the Juneau serializers and parsers are built upon this JSON-equivalence.
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/01.jm.XmlMethodology.html b/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/01.jm.XmlMethodology.html
new file mode 100644
index 000000000..f05d96ca3
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/01.jm.XmlMethodology.html
@@ -0,0 +1,419 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'XML Methodology'}
+
+<div class='topic'>
+	<p>
+		The following examples show how different data types are represented in XML.
+		They mirror how the data structures are represented in JSON.
+	
+	<h5 class='topic'>Simple types</h5>
+	<p>
+		The representation of loose (not a direct bean property value) simple types are shown below:
+	</p>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>XML</th>
+		</tr>
+		<tr>
+			<td>string</td>
+			<td class='code'><js>'foo'</js></td>
+			<td class='code'><xt>&lt;string&gt;</xt>foo<xt>&lt;/string&gt;</xt></td>
+		</tr>
+		<tr>
+			<td>boolean</td>
+			<td class='code'><jk>true</jk></td>
+			<td class='code'><xt>&lt;boolean&gt;</xt>true<xt>&lt;/boolean&gt;</xt></td>
+		</tr>
+		<tr>
+			<td>integer</td>
+			<td class='code'>123</td>
+			<td class='code'><xt>&lt;number&gt;</xt>123<xt>&lt;/number&gt;</xt></td>
+		</tr>
+		<tr>
+			<td>float</td>
+			<td class='code'>1.23</td>
+			<td class='code'><xt>&lt;number&gt;</xt>1.23<xt>&lt;/number&gt;</xt></td>
+		</tr>
+		<tr>
+			<td>null</td>
+			<td class='code'><jk>null</jk></td>
+			<td class='code'><xt>&lt;null/&gt;</xt></td>
+		</tr>
+	</table>
+	
+	<h5 class='topic'>Maps</h5>
+	<p>
+		Loose maps and beans use the element <xt>&lt;object&gt;</xt> for encapsulation.
+	</p>
+	<p>
+		<xa>_type</xa> attributes are added to bean properties or map entries if the type cannot be inferred 
+		through reflection (e.g. an <c>Object</c> or superclass/interface value type).
+	</p>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>XML</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	Map&lt;String,String&gt;
+			</td>
+			<td class='code'>
+				|	{
+				|		k1: <js>'v1'</js>
+				|		k2: <jk>null</jk>
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;k1&gt;<xv>v1</xv>&lt;/k1&gt;
+				|		&lt;k2 <xa>_type</xa>=<xs>'null'</xs>/&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	Map&lt;String,Number&gt;
+			</td>
+			<td class='code'>
+				|	{
+				|		k1: 123,
+				|		k2: 1.23,
+				|		k3: <jk>null</jk>
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;k1&gt;<xv>123</xv>&lt;/k1&gt;
+				|		&lt;k2&gt;<xv>1.23</xv>&lt;/k2&gt;
+				|		&lt;k3 <xa>_type</xa>=<xs>'null'</xs>/&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	Map&lt;String,Object&gt;
+			</td>
+			<td class='code'>
+				|	{
+				|		k1: <js>'v1'</js>
+				|		k2: 123,
+				|		k3: 1.23,
+				|		k4: <jk>true</jk>,
+				|		k5: <jk>null</jk>
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;k1&gt;<xv>v1</xv>&lt;/k1&gt;
+				|		&lt;k2 <xa>_type</xa>=<xs>'number'</xs>&gt;<xv>123</xv>&lt;/k2&gt;
+				|		&lt;k3 <xa>_type</xa>=<xs>'number'</xs>&gt;<xv>1.23</xv>&lt;/k3&gt;
+				|		&lt;k4 <xa>_type</xa>=<xs>'boolean'</xs>&gt;<xv>true</xv>&lt;/k4&gt;
+				|		&lt;k5 <xa>_type</xa>=<xs>'null'</xs>/&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+		</tr>
+	</table>
+
+	<h5 class='topic'>Arrays</h5>
+	<p>
+		Loose collections and arrays use the element <xt>&lt;array&gt;</xt> for encapsulation.
+	</p>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>XML</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	String[]
+			</td>
+			<td class='code'>
+				|	[
+				|		<js>'foo'</js>
+				|		<jk>null</jk>
+				|	]
+			</td>
+			<td class='code'><xt>
+				|	&lt;array&gt;
+				|		&lt;string&gt;<xv>foo</xv>&lt;/string&gt;
+				|		&lt;null/&gt;
+				|	&lt;/array&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	Number[]
+			</td>
+			<td class='code'>
+				|	[
+				|		123,
+				|		1.23,
+				|		<jk>null</jk>
+				|	]
+			</td>
+			<td class='code'><xt>
+				|	&lt;array&gt;
+				|		&lt;number&gt;<xv>123</xv>&lt;/number&gt;
+				|		&lt;number&gt;<xv>1.23</xv>&lt;/number&gt;
+				|		&lt;null/&gt;
+				|	&lt;/array&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	Object[]
+			</td>
+			<td class='code'>
+				|	[
+				|		<js>'foo'</js>,
+				|		123,
+				|		1.23,
+				|		<jk>true</jk>,
+				|		<jk>null</jk>
+				|	]
+			</td>
+			<td class='code'><xt>
+				|	&lt;array&gt;
+				|		&lt;string&gt;<xv>foo</xv>&lt;/string&gt;
+				|		&lt;number&gt;<xv>123</xv>&lt;/number&gt;
+				|		&lt;number&gt;<xv>1.23</xv>&lt;/number&gt;
+				|		&lt;boolean&gt;<xv>true</xv>&lt;/boolean&gt;
+				|		&lt;null/&gt;
+				|	&lt;/array&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	String[][]
+			</td>
+			<td class='code'>
+				|	[
+				|		[<js>'foo'</js>, <jk>null</jk>],
+				|		<jk>null</jk>,
+				|	]
+			</td>
+			<td class='code'><xt>
+				|	&lt;array&gt;
+				|		&lt;array&gt;
+				|			&lt;string&gt;<xv>foo</xv>&lt;/string&gt;
+				|			&lt;null/&gt;
+				|		&lt;/array&gt;
+				|		&lt;null/&gt;
+				|	&lt;/array&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<jk>int</jk>[]
+			</td>
+			<td class='code'>
+				|	[
+				|		123
+				|	]
+			</td>
+			<td class='code'><xt>
+				|	&lt;array&gt;
+				|		&lt;number&gt;<xv>123</xv>&lt;/number&gt;
+				|	&lt;/array&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<jk>boolean</jk>[]
+			</td>
+			<td class='code'>
+				|	[
+				|		<jk>true</jk>
+				|	]
+			</td>
+			<td class='code'><xt>
+				|	&lt;array&gt;
+				|		&lt;boolean&gt;<xv>true</xv>&lt;/boolean&gt;
+				|	&lt;/array&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	List&lt;String&gt;
+			</td>
+			<td class='code'>
+				|	[
+				|		<js>'foo'</js>
+				|		<jk>null</jk>
+				|	]
+			</td>
+			<td class='code'><xt>
+				|	&lt;array&gt;
+				|		&lt;string&gt;<xv>foo</xv>&lt;/string&gt;
+				|		&lt;null/&gt;
+				|	&lt;/array&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	List&lt;Number&gt;
+			</td>
+			<td class='code'>
+				|	[
+				|		123,
+				|		1.23,
+				|		<jk>null</jk>
+				|	]
+			</td>
+			<td class='code'><xt>
+				|	&lt;array&gt;
+				|		&lt;number&gt;<xv>123</xv>&lt;/number&gt;
+				|		&lt;number&gt;<xv>1.23</xv>&lt;/number&gt;
+				|		&lt;null/&gt;
+				|	&lt;/array&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	List&lt;Object&gt;
+			</td>
+			<td class='code'>
+				|	[
+				|		<js>'foo'</js>,
+				|		123,
+				|		1.23,
+				|		<jk>true</jk>,
+				|		<jk>null</jk>
+				|	]
+			</td>
+			<td class='code'><xt>
+				|	&lt;array&gt;
+				|		&lt;string&gt;<xv>foo</xv>&lt;/string&gt;
+				|		&lt;number&gt;<xv>123</xv>&lt;/number&gt;
+				|		&lt;number&gt;<xv>1.23</xv>&lt;/number&gt;
+				|		&lt;boolean&gt;<xv>true</xv>&lt;/boolean&gt;
+				|		&lt;null/&gt;
+				|	&lt;/array&gt;
+			</xt></td>
+		</tr>
+	</table>
+	
+	<h5 class='topic'>Beans</h5>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>XML</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<jk>class</jk> MyBean {
+				|		<jk>public</jk> String <jf>a</jf>;
+				|		<jk>public</jk> <jk>int</jk> <jf>b</jf>;
+				|		<jk>public</jk> Object <jf>c</jf>;  <jc>// String value</jc>
+				|		<jk>public</jk> Object <jf>d</jf>;  <jc>// Integer value</jc>  	
+				|		<jk>public</jk> MyBean2 <jf>e</jf>;  
+				|		<jk>public</jk> String[] <jf>f</jf>;  
+				|	 	<jk>public</jk> <jk>int</jk>[] <jf>g</jf>;  	
+				|	}
+				|	<jk>class</jk> MyBean2 {
+				|		String <jf>h</jf>;  
+				|	}
+			</td>
+			<td class='code'>
+				|	{
+				|		<jok>a</jok>: <jov>'foo'</jov>,
+				|		<jok>b</jok>: <jov>123</jov>,
+				|		<jok>c</jok>: <jov>'bar'</jov>,
+				|		<jok>d</jok>: <jov>456</jov>,
+				|		<jok>e</jok>: {
+				|			<jok>h</jok>: <jov>'baz'</jov>
+				|		}
+				|		<jok>f</jok>: [<jov>'qux'</jov>]
+				|		<jok>g</jok>: [<jov>789</jov>]
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;a&gt;<xv>foo</xv>&lt;/a&gt;
+				|		&lt;b&gt;<xv>123</xv>&lt;/b&gt;
+				|		&lt;c&gt;<xv>bar</xv>&lt;/c&gt;
+				|		&lt;d <xa>_type</xa>=<xs>'number'</xs>&gt;<xv>456</xv>&lt;/d&gt;
+				|		&lt;e&gt;
+				|			&lt;h&gt;<xv>baz</xv>&lt;/h&gt;
+				|		&lt;/e&gt;
+				|		&lt;f&gt;
+				|			&lt;string&gt;<xv>qux</xv>&lt;/string&gt;
+				|		&lt;/f&gt;
+				|		&lt;g&gt;
+				|			&lt;number&gt;<xv>789</xv>&lt;/number&gt;
+				|		&lt;/g&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+		</tr>
+	</table>
+	
+	<h5 class='topic'>Beans with Map properties</h5>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>XML</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<jk>class</jk> MyBean {
+				|		<jk>public</jk> Map&lt;String,String&gt; <jf>a</jf>;
+				|		<jk>public</jk> Map&lt;String,Number&gt; <jf>b</jf>;
+				|		<jk>public</jk> Map&lt;String,Object&gt; <jf>c</jf>; 
+				|	}
+			</td>
+			<td class='code'>
+				|	{
+				|		<jok>a</jok>: {
+				|			<jok>k1</jok>: <jov>'foo'</jov>
+				|		},
+				|		<jok>b</jok>: {
+				|			<jok>k2</jok>: <jov>123</jov>
+				|		},
+				|		<jok>c</jok>: {
+				|			<jok>k3</jok>: <jov>'bar'</jov>,
+				|			<jok>k4</jok>: <jov>456</jov>,
+				|			<jok>k5</jok>: <jov>true</jov>,
+				|			<jok>k6</jok>: <jov>null</jov>
+				|		}
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;a&gt;
+				|			&lt;k1&gt;<xv>foo</xv>&lt;/k1&gt;
+				|		&lt;/a&gt;
+				|		&lt;b&gt;
+				|			&lt;k2&gt;<xv>123</xv>&lt;/k2&gt;
+				|		&lt;/b&gt;
+				|		&lt;c&gt;
+				|			&lt;k3&gt;<xv>bar</xv>&lt;/k3&gt;
+				|			&lt;k4 <xa>_type</xa>=<xs>'number'</xs>&gt;<xv>456</xv>&lt;/k4&gt;
+				|			&lt;k5 <xa>_type</xa>=<xs>'boolean'</xs>&gt;<xv>true</xv>&lt;/k5&gt;
+				|			&lt;k6 <xa>_type</xa>=<xs>'null'</xs>/&gt;
+				|		&lt;/c&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+		</tr>
+	</table>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/02.jm.XmlSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/02.jm.XmlSerializers.html
new file mode 100644
index 000000000..ffdcaff39
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/02.jm.XmlSerializers.html
@@ -0,0 +1,72 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'XML Serializers', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.xml.XmlSerializer} class is used to serialize POJOs into XML.
+	</p>	
+	<p>
+		The {@link oaj.xml.XmlDocSerializer} class is the same, but serializes a <xt>&lt;?xml?&gt;</xt> header 
+		at the top of the file.
+	</p>
+	<p>
+		The class hierarchy for the builder of this serializer is:
+	</p>
+	<ul class='javatree'>
+		<li class='jac'>{@link oaj.Context.Builder}
+			<ul>
+				<li class='jac'>{@link oaj.BeanContextable.Builder}
+					<ul>
+						<li class='jac'>{@link oaj.BeanTraverseContext.Builder}
+							<ul>
+								<li class='jac'>{@link oaj.serializer.Serializer.Builder}
+									<ul>
+										<li class='jac'>{@link oaj.serializer.WriterSerializer.Builder}
+											<ul>
+												<li class='jc'>{@link oaj.xml.XmlSerializer.Builder}
+											</ul>
+										</li>
+									</ul>
+								</li>
+							</ul>
+						</li>
+					</ul>
+				</li>
+			</ul>
+		</li>
+	</ul>
+	<p>
+		Refer to the builder javadocs for configurable settings.
+	</p>
+	<p>
+		The following pre-configured serializers are provided for convenience:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.xml.XmlSerializer}
+			<ul class='javatreec'>
+				<li class='jf'>{@link oaj.xml.XmlSerializer#DEFAULT DEFAULT}
+				<li class='jf'>{@link oaj.xml.XmlSerializer#DEFAULT_JUNEAU_NAMESPACE DEFAULT_JUNEAU_NAMESPACE}
+				<li class='jf'>{@link oaj.xml.XmlSerializer#DEFAULT_NS DEFAULT_NS}
+				<li class='jf'>{@link oaj.xml.XmlSerializer#DEFAULT_NS_SQ DEFAULT_NS_SQ}
+				<li class='jf'>{@link oaj.xml.XmlSerializer#DEFAULT_NS_SQ_READABLE DEFAULT_NS_SQ_READABLE}
+				<li class='jf'>{@link oaj.xml.XmlSerializer#DEFAULT_SQ DEFAULT_SQ}
+				<li class='jf'>{@link oaj.xml.XmlSerializer#DEFAULT_SQ_READABLE DEFAULT_SQ_READABLE}
+				<li class='jf'>{@link oaj.xml.XmlSerializer#DEFAULT_XS_NAMESPACE DEFAULT_XS_NAMESPACE}				
+			</ul>
+		</li>
+	</ul>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/03.jm.XmlParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/03.jm.XmlParsers.html
new file mode 100644
index 000000000..8ceb8124b
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/03.jm.XmlParsers.html
@@ -0,0 +1,57 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'XML Parsers', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.xml.XmlParser} class is used to parse XML into POJOs.
+	</p>	
+	<p>
+		The class hierarchy for the builder of this parser is:
+	</p>
+	<ul class='javatree'>
+		<li class='jac'>{@link oaj.Context.Builder}
+			<ul>
+				<li class='jac'>{@link oaj.BeanContextable.Builder}
+					<ul>
+						<li class='jac'>{@link oaj.parser.Parser.Builder}
+							<ul>
+								<li class='jac'>{@link oaj.parser.ReaderParser.Builder}
+									<ul>
+										<li class='jc'>{@link oaj.xml.XmlParser.Builder}
+									</ul>
+								</li>
+							</ul>
+						</li>
+					</ul>
+				</li>
+			</ul>
+		</li>
+	</ul>
+	<p>
+		Refer to the builder javadocs for configurable settings.
+	</p>
+	<p>
+		The following pre-configured parsers are provided for convenience:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.xml.XmlParser}
+			<ul class='javatreec'>
+				<li class='jf'>{@link oaj.xml.XmlParser#DEFAULT DEFAULT}
+			</ul>
+		</li>
+	</ul>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/04.jm.XmlBeanTypeNameAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/04.jm.XmlBeanTypeNameAnnotation.html
new file mode 100644
index 000000000..d57913edf
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/04.jm.XmlBeanTypeNameAnnotation.html
@@ -0,0 +1,496 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'@Bean(typeName) Annotation'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.annotation.Bean#typeName() @Bean(typeName)} annotation can be used to 
+		override the Juneau default name on bean elements. 
+		Types names serve two distinct purposes:
+	</p>
+	<ol>
+		<li>To override the element name.
+		<li>To serve as a class identifier so that the bean class can be inferred during parsing if it
+			cannot automatically be inferred through reflection.
+	</ol>
+	
+	<h5 class='figure'>Example</h5>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>Without annotation</th>
+			<th>With annotation</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)
+				|	<jk>class</jk> MyBean {
+				|		<jk>public</jk> String <jf>a</jf>;
+				|		<jk>public int</jk> <jf>b</jf>;
+				|	}	
+			</td>
+			<td class='code'>
+				|	{
+				|		a: <js>'foo'</js>,
+				|		b: 123
+				|	}
+			</td>
+			<td class='code'><xt>
+				|&lt;object&gt;
+				|	&lt;a&gt;<xv>foo</xv>&lt;/id&gt;
+				|	&lt;b&gt;<xv>123</xv>&lt;/name&gt;
+				|&lt;/object&gt;
+			</xt></td>
+			<td class='code'><xt>
+				|	&lt;X&gt;
+				|		&lt;a&gt;<xv>foo</xv>&lt;/id&gt;
+				|		&lt;b&gt;<xv>123</xv>&lt;/name&gt;
+				|	&lt;/X&gt;
+			</xt></td>
+		</tr>
+	</table>
+	<p>
+		On bean properties, a <xa>_type</xa> attribute will be added if a type name is present and the bean 
+		class cannot be inferred through reflection.
+	</p>
+	<p>
+		In the following example, a type attribute is used on property 'b' but not property 'a' since
+		'b' is of type <c>Object</c> and therefore the bean class cannot be inferred.
+	</p>
+	
+	<h5 class='figure'>Example</h5>
+	<table class='styled w800'>
+		<tr>
+			<th>Java</th>
+			<th>Without annotation</th>
+			<th>With annotation</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<jk>class</jk> MyBean {
+				|		<jk>public</jk> BeanX <jf>a</jf> = <jk>new</jk> BeanX();
+				|		<jk>public</jk> Object <jf>b</jf> = <jk>new</jk> BeanX();
+				|	}
+				|	
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)
+				|	<jk>class</jk> BeanX {
+				|		<jk>public</jk> String <jf>fx</jf> = <js>"foo"</js>;
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;a&gt;
+				|			&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
+				|		&lt;/a&gt;
+				|		&lt;b&gt;
+				|			&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
+				|		&lt;/b&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;a&gt;
+				|			&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
+				|		&lt;/a&gt;
+				|		&lt;b <xa>_type</xa>=<xs>'X'</xs>&gt;
+				|			&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
+				|		&lt;/b&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+		</tr>
+	</table>
+	<div class='info'>
+		<c>string</c>, <c>number</c>, <c>boolean</c>, <c>object</c>, 
+		<c>array</c>, and <c>null</c> are reserved keywords that cannot be used as type names.
+	</div>
+	<p>
+		Beans with type names are often used in conjunction with the 
+		{@link oaj.annotation.Bean#dictionary() @Bean(dictionary)} and 
+		{@link oaj.annotation.Beanp#dictionary() @Beanp(dictionary)} 
+		annotations so that the beans can be resolved at parse time.  
+		These annotations are not necessary during serialization, but are needed during parsing in order to 
+		resolve the bean types.
+	</p>
+	<p>
+		The following examples show how type names are used under various circumstances.  
+	</p>
+	<p>
+		Pay special attention to when <xa>_type</xa> attributes are and are not used.
+	</p>
+	
+	<h5 class='figure'>Examples</h5>
+	<table class='styled w800'>
+		<tr>
+			<th>Java</th>
+			<th>XML</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(dictionary={BeanX.<jk>class</jk>})
+				|	<jk>class</jk> BeanWithArrayPropertiesWithTypeNames {
+				|		<jk>public</jk> BeanX[] <jf>b1</jf> = <jk>new</jk> BeanX[]{ 
+				|			<jk>new</jk> BeanX() 
+				|		};
+				|		<jk>public</jk> Object[] <jf>b2</jf> = <jk>new</jk> BeanX[]{ 
+				|			<jk>new</jk> BeanX() 
+				|		};
+				|		<jk>public</jk> Object[] <jf>b3</jf> = <jk>new</jk> Object[]{ 
+				|			<jk>new</jk> BeanX() 
+				|		};
+				|	}
+			</td>				
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;b1&gt;
+				|			&lt;X&gt;
+				|				&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
+				|			&lt;/X&gt;
+				|		&lt;/b1&gt;
+				|		&lt;b2&gt;
+				|			&lt;X&gt;
+				|				&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
+				|			&lt;/X&gt;
+				|		&lt;/b2&gt;
+				|		&lt;b3&gt;
+				|			&lt;X&gt;
+				|				&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
+				|			&lt;/X&gt;
+				|		&lt;/b3&gt;
+				|	&lt;/object&gt;
+			</xt></td>				
+		</tr>				
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(dictionary={BeanX.<jk>class</jk>})
+				|	<jk>class</jk> BeanWith2dArrayPropertiesWithTypeNames {
+				|		<jk>public</jk> BeanX[][] <jf>b1</jf> = <jk>new</jk> BeanX[][]{{
+				|			<jk>new</jk> BeanX()
+				|		}};
+				|		<jk>public</jk> Object[][] <jf>b2</jf> = <jk>new</jk> BeanX[][]{{
+				|			<jk>new</jk> BeanX()
+				|		}};
+				|		<jk>public</jk> Object[][] <jf>b3</jf> = <jk>new</jk> Object[][]{{
+				|			<jk>new</jk> BeanX()
+				|		}};
+				|	}
+			</td>				
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;b1&gt;
+				|			&lt;array&gt;
+				|				&lt;X&gt;
+				|					&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
+				|				&lt;/X&gt;
+				|			&lt;/array&gt;
+				|		&lt;/b1&gt;
+				|		&lt;b2&gt;
+				|			&lt;array&gt;
+				|				&lt;X&gt;
+				|					&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
+				|				&lt;/X&gt;
+				|			&lt;/array&gt;
+				|		&lt;/b2&gt;
+				|		&lt;b3&gt;
+				|			&lt;array&gt;
+				|				&lt;X&gt;
+				|					&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
+				|				&lt;/X&gt;
+				|			&lt;/array&gt;
+				|		&lt;/b3&gt;
+				|	&lt;/object&gt;
+			</xt></td>				
+		</tr>		
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(dictionary={BeanX.<jk>class</jk>})
+				|	<jk>class</jk> BeanWithMapPropertiesWithTypeNames {
+				|		<jk>public</jk> Map&lt;String,BeanX&gt; <jf>b1</jf> = <jk>new</jk> HashMap&lt;&gt;() {{ 
+				|			put(<js>"k1"</js>, <jk>new</jk> BeanX()); 
+				|		}};
+				|		<jk>public</jk> Map&lt;String,Object&gt; <jf>b2</jf> = <jk>new</jk> HashMap&lt;&gt;() {{
+				|			put(<js>"k2"</js>, <jk>new</jk> BeanX());
+				|		}}
+				|	}
+			</td>				
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;b1&gt;
+				|			&lt;k1&gt;
+				|				&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
+				|			&lt;/k1&gt;
+				|		&lt;/b1&gt;
+				|		&lt;b2&gt;
+				|			&lt;k2 <xa>_type</xa>=<xs>'X'</xs>&gt;
+				|				&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
+				|			&lt;/k2&gt;
+				|		&lt;/b2&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+		</tr>
+	</table>
+	<p>
+		Bean type names are also used for resolution when abstract fields are used.
+		The following examples show how they are used in a variety of circumstances.
+	</p>
+	<table class='styled w800'>
+		<tr>
+			<th>Java</th>
+			<th>XML</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(dictionary={A.<jk>class</jk>})
+				|	<jk>class</jk> BeanWithAbstractFields {
+				|		<jk>public</jk> A <jf>a</jf> = <jk>new</jk> A();
+				|		<jk>public</jk> IA <jf>ia</jf> = <jk>new</jk> A();
+				|		<jk>public</jk> AA <jf>aa</jf> = <jk>new</jk> A();
+				|		<jk>public</jk> Object <jf>o</jf> = <jk>new</jk> A();
+				|	}
+				|	
+				|	<jk>interface</jk> IA {}
+				|	
+				|	<jk>abstract class</jk> AA <jk>implements</jk> IA {}
+				|
+				|	<ja>@Bean</ja>(typeName=<js>"A"</js>)
+				|	<jk>class</jk> A <jk>extends</jk> AA {
+				|		<jk>public</jk> String <jf>fa</jf> = <js>"foo"</js>;
+				|	}
+			</td>				
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;a&gt;
+				|			&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|		&lt;/a&gt;
+				|		&lt;ia <xa>_type</xa>=<xs>'A'</xs>&gt;
+				|			&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|		&lt;/ia&gt;
+				|		&lt;aa <xa>_type</xa>=<xs>'A'</xs>&gt;
+				|			&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|		&lt;/aa&gt;
+				|		&lt;o <xa>_type</xa>=<xs>'A'</xs>&gt;
+				|			&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|		&lt;/o&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(dictionary={A.<jk>class</jk>})
+				|	<jk>class</jk> BeanWithAbstractArrayFields {
+				|		<jk>public</jk> A[] <jf>a</jf> = <jk>new</jk> A[]{<jk>new</jk> A()};
+				|		<jk>public</jk> IA[] <jf>ia1</jf> = <jk>new</jk> A[]{<jk>new</jk> A()};
+				|		<jk>public</jk> IA[] <jf>ia2</jf> = <jk>new</jk> IA[]{<jk>new</jk> A()};
+				|		<jk>public</jk> AA[] <jf>aa1</jf> = <jk>new</jk> A[]{<jk>new</jk> A()};
+				|		<jk>public</jk> AA[] <jf>aa2</jf> = <jk>new</jk> AA[]{<jk>new</jk> A()};
+				|		<jk>public</jk> Object[] <jf>o1</jf> = <jk>new</jk> A[]{<jk>new</jk> A()};
+				|		<jk>public</jk> Object[] <jf>o2</jf> = <jk>new</jk> Object[]{<jk>new</jk> A()};
+				|	}
+			</td>				
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;a&gt;
+				|			&lt;A&gt;
+				|				&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|			&lt;/A&gt;
+				|		&lt;/a&gt;
+				|		&lt;ia1&gt;
+				|			&lt;A&gt;
+				|				&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|			&lt;/A&gt;
+				|		&lt;/ia1&gt;
+				|		&lt;ia2&gt;
+				|			&lt;A&gt;
+				|				&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|			&lt;/A&gt;
+				|		&lt;/ia2&gt;
+				|		&lt;aa1&gt;
+				|			&lt;A&gt;
+				|				&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|			&lt;/A&gt;
+				|		&lt;/aa1&gt;
+				|		&lt;aa2&gt;
+				|			&lt;A&gt;
+				|				&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|			&lt;/A&gt;
+				|		&lt;/aa2&gt;
+				|		&lt;o1&gt;
+				|			&lt;A&gt;
+				|				&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|			&lt;/A&gt;
+				|		&lt;/o1&gt;
+				|		&lt;o2&gt;
+				|			&lt;A&gt;
+				|				&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|			&lt;/A&gt;
+				|		&lt;/o2&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(dictionary={A.<jk>class</jk>})
+				|	<jk>class</jk> BeanWithAbstractMapFields {
+				|		<jk>public</jk> Map&lt;String,A&gt; <jf>a</jf> = <jk>new</jk> HashMap&lt;&gt;() {{
+				|			put(<js>"k1"</js>, <jk>new</jk> A());
+				|		}};
+				|		<jk>public</jk> Map&lt;String,AA&gt; <jf>b</jf> = <jk>new</jk> HashMap&lt;&gt;() {{
+				|			put(<js>"k2"</js>, <jk>new</jk> A());
+				|		}};
+				|		<jk>public</jk> Map&lt;String,Object&gt; <jf>c</jf> = <jk>new</jk> HashMap&lt;&gt;() {{
+				|			put(<js>"k3"</js>, <jk>new</jk> A());
+				|		}};
+				|	}
+			</td>				
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;a&gt;
+				|			&lt;k1&gt;
+				|				&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|			&lt;/k1&gt;
+				|		&lt;/a&gt;
+				|		&lt;b&gt;
+				|			&lt;k2 <xa>_type</xa>=<xs>'A'</xs>&gt;
+				|				&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|			&lt;/k2&gt;
+				|		&lt;/b&gt;
+				|		&lt;c&gt;
+				|			&lt;k3 <xa>_type</xa>=<xs>'A'</xs>&gt;
+				|				&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|			&lt;/k3&gt;
+				|		&lt;/c&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(dictionary={A.<jk>class</jk>})
+				|	<jk>class</jk> BeanWithAbstractMapArrayFields {
+				|		<jk>public</jk> Map&lt;String,A[]&gt; <jf>a</jf> = <jk>new</jk> LinkedHashMap&lt;&gt;() {{
+				|			put(<js>"a1"</js>, <jk>new</jk> A[]{<jk>new</jk> A()});
+				|		}};
+				|		<jk>public</jk> Map&lt;String,IA[]&gt; <jf>ia</jf> = <jk>new</jk> LinkedHashMap&lt;&gt;() {{
+				|			put(<js>"ia1"</js>, <jk>new</jk> A[]{<jk>new</jk> A()});
+				|			put(<js>"ia2"</js>, <jk>new</jk> IA[]{<jk>new</jk> A()});
+				|		}};
+				|		<jk>public</jk> Map&lt;String,AA[]&gt; <jf>aa</jf> = <jk>new</jk> LinkedHashMap&lt;&gt;() {{
+				|			put(<js>"aa1"</js>, <jk>new</jk> A[]{<jk>new</jk> A()});
+				|			put(<js>"aa2"</js>, <jk>new</jk> AA[]{<jk>new</jk> A()});
+				|		}};
+				|		<jk>public</jk> Map&lt;String,Object[]&gt; <jf>o</jf> = <jk>new</jk> LinkedHashMap&lt;&gt;() {{
+				|			put(<js>"o1"</js>, <jk>new</jk> A[]{<jk>new</jk> A()});
+				|			put(<js>"o2"</js>, <jk>new</jk> AA[]{<jk>new</jk> A()});
+				|		}};
+				|	}
+			</td>				
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;a&gt;
+				|			&lt;a1&gt;
+				|				&lt;A&gt;
+				|					&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|				&lt;/A&gt;
+				|			&lt;/a1&gt;
+				|		&lt;/a&gt;
+				|		&lt;ia&gt;
+				|			&lt;ia1&gt;
+				|				&lt;A&gt;
+				|					&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|				&lt;/A&gt;
+				|			&lt;/ia1&gt;
+				|			&lt;ia2&gt;
+				|				&lt;A&gt;
+				|					&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|				&lt;/A&gt;
+				|			&lt;/ia2&gt;
+				|		&lt;/ia&gt;
+				|		&lt;aa&gt;
+				|			&lt;aa1&gt;
+				|				&lt;A&gt;
+				|					&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|				&lt;/A&gt;
+				|			&lt;/aa1&gt;
+				|			&lt;aa2&gt;
+				|				&lt;A&gt;
+				|					&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|				&lt;/A&gt;
+				|			&lt;/aa2&gt;
+				|		&lt;/aa&gt;
+				|		&lt;o&gt;
+				|			&lt;o1&gt;
+				|				&lt;A&gt;
+				|					&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|				&lt;/A&gt;
+				|			&lt;/o1&gt;
+				|			&lt;o2&gt;
+				|				&lt;A&gt;
+				|					&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
+				|				&lt;/A&gt;
+				|			&lt;/o2&gt;
+				|		&lt;/o&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+		</tr>
+	</table>
+	<p>
+		On a side note, characters that cannot be represented in XML 1.0 are encoded using a simple encoding.
+		Note in the examples below, some characters such as <js>'\n'</js>, <js>'\t</js>', and <js>'\r'</js>
+		can be represented as XML entities when used in text but not in element names.  Other characters such as
+		<js>'\b'</js> and <js>'\f'</js> cannot be encoded in XML 1.0 at all without inventing our own notation.
+		Whitespace characters in element names are encoded as well as whitespace end characters in text.
+	</p>
+	<table class='styled w800'>
+		<tr>
+			<th>Java</th>
+			<th>XML</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<jk>class</jk> BeanWithSpecialCharacters {
+				|		<jk>public</jk> String <jf>a</jf> = <js>"  \b\f\n\t\r  "</js>;
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;a&gt;<xv>_x0020_ _x0008__x000C_&amp;#x000a;&amp;#x0009;&amp;#x000d; _x0020_</xv>&lt;/a&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"  \b\f\n\t\r  "</js>)
+				|	<jk>class</jk> BeanWithNamesWithSpecialCharacters {
+				|		<ja>@Beanp</ja>(name=<js>"  \b\f\n\t\r  "</js>)
+				|		<jk>public</jk> String <jf>a</jf> = <js>"  \b\f\n\t\r  "</js>;
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;_x0020__x0020__x0008__x000C__x000A__x0009__x000D__x0020__x0020_&gt;
+				|		&lt;_x0020__x0020__x0008__x000C__x000A__x0009__x000D__x0020__x0020_&gt;
+				|			<xv>_x0020_ _x0008__x000C_&amp;#x000a;&amp;#x0009;&amp;#x000d; _x0020_</xv>
+				|		&lt;/_x0020__x0020__x0008__x000C__x000A__x0009__x000D__x0020__x0020_&gt;
+				|	&lt;/_x0020__x0020__x0008__x000C__x000A__x0009__x000D__x0020__x0020_&gt;
+			</xt></td>
+		</tr>
+	</table>
+	<p>
+		While it's true that these characters CAN be represented in XML 1.1, it's impossible to parse XML 1.1 
+		text in Java without the XML containing an XML declaration.
+		Unfortunately, this, and the uselessness of the 
+		{@link javax.xml.stream.XMLInputFactory#IS_REPLACING_ENTITY_REFERENCES} setting in Java
+		forced us to make some hard design decisions that may not be the most elegant.
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/05.jm.XmlChildNameAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/05.jm.XmlChildNameAnnotation.html
new file mode 100644
index 000000000..64e172851
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/05.jm.XmlChildNameAnnotation.html
@@ -0,0 +1,102 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'@Xml(childName) Annotation'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.xml.annotation.Xml#childName() @Xml(childName)} annotation can be used to 
+		specify the name of XML child elements for bean properties of type collection or array.
+	</p>
+	
+	<h5 class='figure'>Example</h5>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>Without annotation</th>
+			<th>With annotation</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(childName=<js>"X"</js>)
+				|		<jk>public</jk> String[] <jf>a</jf>;
+				|		<ja>@Xml</ja>(childName=<js>"Y"</js>)
+				|		<jk>public int</jk>[] <jf>b</jf>;
+				|	}
+			</td>
+			<td class='code'>
+				|	{
+				|		a: [<js>'foo'</js>,<js>'bar'</js>],
+				|		b: [123,456]
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;a&gt;
+				|			&lt;string&gt;<xv>foo</xv>&lt;/string&gt;
+				|			&lt;string&gt;<xv>bar</xv>&lt;/string&gt;
+				|		&lt;/a&gt;
+				|		&lt;b&gt;
+				|			&lt;number&gt;<xv>123</xv>&lt;/number&gt;
+				|			&lt;number&gt;<xv>456</xv>&lt;/number&gt;
+				|		&lt;/b&gt;
+				|	&lt;/object&gt;
+		</xt></td>
+		<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;a&gt;
+				|			&lt;X&gt;<xv>foo</xv>&lt;/X&gt;
+				|			&lt;X&gt;<xv>bar</xv>&lt;/X&gt;
+				|		&lt;/a&gt;
+				|		&lt;b&gt;
+				|			&lt;Y&gt;<xv>123</xv>&lt;/Y&gt;
+				|			&lt;Y&gt;<xv>456</xv>&lt;/Y&gt;
+				|		&lt;/b&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(childName=<js>"child"</js>)
+				|		<jk>public int</jk>[] <jf>a</jf>;
+				|	}
+			</td>
+			<td class='code'>
+				|	{
+				|		a: [123,456]
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;a&gt;
+				|			&lt;string&gt;<xv>foo</xv>&lt;/string&gt;
+				|			&lt;string&gt;<xv>bar</xv>&lt;/string&gt;
+				|		&lt;/a&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;a&gt;
+				|			&lt;child&gt;<xv>foo</xv>&lt;/child&gt;
+				|			&lt;child&gt;<xv>bar</xv>&lt;/child&gt;
+				|		&lt;/a&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+		</tr>
+	</table>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/06.jm.XmlFormatAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/06.jm.XmlFormatAnnotation.html
new file mode 100644
index 000000000..60ce06287
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/06.jm.XmlFormatAnnotation.html
@@ -0,0 +1,722 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'@Xml(format) Annotation'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.xml.annotation.Xml#format() @Xml(format)} annotation can be used to tweak 
+		the XML format of a POJO.
+		The value is set to an enum value of type {@link oaj.xml.annotation.XmlFormat}.
+		This annotation can be applied to both classes and bean properties.
+	</p>
+	<p>
+		The {@link oaj.xml.annotation.XmlFormat#ATTR} format can be applied to bean properties to 
+		serialize them as XML attributes instead of elements.
+		Note that this only supports properties of simple types (e.g. strings, numbers, booleans).
+	</p>
+	
+	<h5 class='figure'>Example</h5>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>Without annotation</th>
+			<th>With annotation</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>ATTR</jsf>)
+				|		<jk>public</jk> String <jf>a</jf>;
+				|	}
+			</td>
+			<td class='code'>
+				|	{
+				|		a: <js>'foo'</js>
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;a&gt;<xv>foo</xv>&lt;/a&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+			<td class='code'><xt>
+				|	&lt;object <xa>a</xa>=<xs>'foo'</xs>/&gt;
+			</xt></td>
+		</tr>
+	</table>
+	<p>
+		The {@link oaj.xml.annotation.XmlFormat#ATTRS} format can be applied to bean classes to 
+		force all bean properties to be serialized as XML attributes instead of child elements.
+	</p>
+	
+	<h5 class='figure'>Example</h5>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>Without annotation</th>
+			<th>With annotation</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Xml</ja>(format=XmlFormat.<jsf>ATTRS</jsf>)
+				|	<jk>class</jk> MyBean {
+				|		<jk>public</jk> String <jf>a</jf>;
+				|		<jk>public int</jk> <jf>b</jf>;
+				|	}
+			</td>
+			<td class='code'>
+				|	{
+				|		a: <js>'foo'</js>,
+				|		b: 123
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;a&gt;<xv>foo</xv>&lt;/a&gt;
+				|		&lt;b&gt;<xv>123</xv>&lt;/b&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+			<td class='code'><xt>
+				|	&lt;object <xa>a</xa>=<xs>'foo'</xs> <xa>b</xa>=<xs>'123'</xs>/&gt;
+			</xt></td>
+		</tr>
+	</table>
+	<p>
+		The {@link oaj.xml.annotation.XmlFormat#ELEMENT} format can be applied to bean properties 
+		to override the {@link oaj.xml.annotation.XmlFormat#ATTRS} format applied on the bean 
+		class.
+	</p>
+	
+	<h5 class='figure'>Example</h5>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>Without annotation</th>
+			<th>With annotation</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Xml</ja>(format=XmlFormat.<jsf>ATTRS</jsf>)
+				|	<jk>class</jk> MyBean {
+				|		<jk>public</jk> String <jf>a</jf>;
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>ELEMENT</jsf>)
+				|		<jk>public int</jk> <jf>b</jf>;
+				|	}
+			</td>
+			<td class='code'>
+				|	{
+				|		a: <js>'foo'</js>,
+				|		b: 123
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;a&gt;<xv>foo</xv>&lt;/a&gt;
+				|		&lt;b&gt;<xv>123</xv>&lt;/b&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+			<td class='code'><xt>
+				|	&lt;object <xa>a</xa>=<xs>'foo'</xs></xs>&gt;
+				|		&lt;b&gt;<xv>123</xv>&lt;/b&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+		</tr>
+	</table>
+	<p>
+		The {@link oaj.xml.annotation.XmlFormat#ATTRS} format can be applied to a single bean 
+		property of type <c>Map&lt;String,Object&gt;</c> to denote arbitrary XML attribute values on the 
+		element.
+		These can be mixed with other {@link oaj.xml.annotation.XmlFormat#ATTR} annotated 
+		properties, but there must not be an overlap in bean property names and map keys. 
+	</p>
+	
+	<h5 class='figure'>Example</h5>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>Without annotation</th>
+			<th>With annotation</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>ATTRS</jsf>)
+				|		<jk>public</jk> Map&lt;String,Object&gt; <jf>a</jf>;
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>ATTR</jsf>)
+				|		<jk>public int</jk> <jf>b</jf>;
+				|	}
+			</td>
+			<td class='code'>
+				|	{
+				|		<jok>a</jok>: {
+				|			<jok>k1</jok>: <jov>'foo'</jov>, 
+				|			<jok>k2</jok>: <jov>123</jov>, 
+				|		},
+				|		<jok>b</jok>: <jov>456</jov>
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;a&gt;
+				|			&lt;k1&gt;<xv>foo</xv>&lt;/k1&gt;
+				|			&lt;k2 <xa>_type</xa>=<xs>'number'</xs>&gt;<xv>123</xv>&lt;/k2&gt;
+				|		&lt;/a&gt;
+				|		&lt;b&gt;<xv>456</xv>&lt;/b&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+			<td class='code'><xt>
+				|	&lt;object <xa>k1</xa>=<xs>'foo'</xs> <xa>k2</xa>=<xs>'123'</xs> <xa>b</xa>=<xs>'456'</xs>/&gt;
+			</xt></td>
+		</tr>
+	</table>
+	<p>
+		The {@link oaj.xml.annotation.XmlFormat#COLLAPSED} format can be applied to bean properties
+		of type array/Collection.
+		This causes the child objects to be serialized directly inside the bean element.
+		This format must be used in conjunction with {@link oaj.xml.annotation.Xml#childName() @Xml(childName)}
+		to differentiate which collection the values came from if you plan on parsing the output back into beans.
+		Note that child names must not conflict with other property names.
+	</p>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>Without annotation</th>
+			<th>With annotation</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(childName=<js>"A"</js>,format=XmlFormat.<jsf>COLLAPSED</jsf>)
+				|		<jk>public</jk> String[] <jf>a</jf>;
+				|		<ja>@Xml</ja>(childName=<js>"B"</js>,format=XmlFormat.<jsf>COLLAPSED</jsf>)
+				|		<jk>public int</jk>[] <jf>b</jf>;
+				|	}
+			</td>
+			<td class='code'>
+				|	{
+				|		a: [<js>'foo'</js>,<js>'bar'</js>],
+				|		b: [123,456]
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;a&gt;
+				|			&lt;string&gt;<xv>foo</xv>&lt;/string&gt;
+				|			&lt;string&gt;<xv>bar</xv>&lt;/string&gt;
+				|		&lt;/a&gt;
+				|		&lt;b&gt;
+				|			&lt;number&gt;<xv>123</xv>&lt;/number&gt;
+				|			&lt;number&gt;<xv>456</xv>&lt;/number&gt;
+				|		&lt;/b&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;A&gt;<xv>foo</xv>&lt;/A&gt;
+				|		&lt;A&gt;<xv>bar</xv>&lt;/A&gt;
+				|		&lt;B&gt;<xv>123</xv>&lt;/B&gt;
+				|		&lt;B&gt;<xv>456</xv>&lt;/B&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+		</tr>
+	</table>
+	<p>
+		The {@link oaj.xml.annotation.XmlFormat#ELEMENTS} format can be applied to a single bean 
+		property of either a simple type or array/Collection.
+		It allows free-form child elements to be formed.
+		All other properties on the bean MUST be serialized as attributes.
+	</p>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>With annotation</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>ATTR</jsf>)
+				|		<jk>public</jk> String <jf>a</jf>;
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>ELEMENTS</jsf>)
+				|		<jk>public</jk> String <jf>b</jf>;
+				|	}
+			</td>
+			<td class='code'>
+				|	{
+				|		a: <js>'foo'</js>,
+				|		b: <js>'bar'</js>
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;object <xa>a</xa>=<xs>'foo'</xs>&gt;
+				|		&lt;string&gt;<xv>bar</xv>&lt;/string&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>ATTR</jsf>)
+				|		<jk>public</jk> String <jf>a</jf>;
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>ELEMENTS</jsf>)
+				|		<jk>public</jk> Object[] <jf>b</jf>;
+				|	}
+			</td>
+			<td class='code'>
+				|	{
+				|		a: <js>'foo'</js>,
+				|		b: [
+				|			<js>'bar'</js>, 
+				|			<js>'baz'</js>, 
+				|			123, 
+				|			<jk>true</jk>,
+				|			<jk>null</jk>
+				|		]
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;object <xa>a</xa>=<xs>'foo'</xs>&gt;
+				|		&lt;string&gt;<xv>bar</xv>&lt;/string&gt;
+				|		&lt;string&gt;<xv>baz</xv>&lt;/string&gt;
+				|		&lt;number&gt;<xv>123</xv>&lt;/number&gt;
+				|		&lt;boolean&gt;<xv>true</xv>&lt;/boolean&gt;
+				|		&lt;null/&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+		</tr>
+	</table>
+	<p>
+		The {@link oaj.xml.annotation.XmlFormat#MIXED} format is similar to 
+		{@link oaj.xml.annotation.XmlFormat#ELEMENTS} except elements names on primitive types 
+		(string/number/boolean/null) are stripped from the output.
+		This format particularly useful when combined with bean dictionaries to produce mixed content.  
+		The bean dictionary isn't used during serialization, but it is needed during parsing to resolve bean 
+		types.
+	</p>
+	<p>
+		The {@link oaj.xml.annotation.XmlFormat#MIXED_PWS} format identical to 
+		{@link oaj.xml.annotation.XmlFormat#MIXED} except whitespace characters are preserved in 
+		the output.  
+	</p>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>Without annotations</th>
+			<th>With annotations</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED</jsf>)
+				|		<ja>@Beanp</ja>(dictionary={MyBeanX.<jk>class</jk>, MyBeanY.<jk>class</jk>})	
+				|		<jk>public</jk> Object[] <jf>a</jf>;
+				|	}
+				|	
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBeanX {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>ATTR</jsf>)
+				|		<jk>public</jk> String <jf>b</jf>;
+				|	}
+				|	
+				|	<ja>@Bean</ja>(typeName=<js>"Y"</js>)	
+				|	<jk>class</jk> MyBeanY {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>ATTR</jsf>)
+				|		<jk>public</jk> String <jf>c</jf>;
+				|	}
+			</td>
+			<td class='code'>
+				|	{
+				|		a: [
+				|			<js>'foo'</js>,
+				|			{ _type:<js>'X'</js>, b:<js>'bar'</js> }
+				|			<js>'baz'</js>,
+				|			{ _type:<js>'Y'</js>, b:<js>'qux'</js> },
+				|			<js>'quux'</js>
+				|		]
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;a&gt;
+				|			&lt;string&gt;<xv>foo</xv>&lt;/string&gt;
+				|			&lt;object&gt;
+				|				&lt;b&gt;<xv>bar</xv>&lt;/b&gt;
+				|			&lt;/object&gt;
+				|			&lt;string&gt;<xv>baz</xv>&lt;/string&gt;
+				|			&lt;object&gt;
+				|				&lt;b&gt;<xv>qux</xv>&lt;/b&gt;
+				|			&lt;/object&gt;
+				|			&lt;string&gt;<xv>quux</xv>&lt;/string&gt;
+				|		&lt;/a&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+			<td class='code'><xt>
+				|	&lt;object&gt;<xv>foo</xv>&lt;X <xa>b</xa>=<xs>'bar'</xs>/&gt;<xv>baz</xv>&lt;Y <xa>c</xa>=<xs>'qux'</xs>/&gt;<xv>quux</xv>&lt;/object&gt;
+			</xt></td>
+		</tr>
+	</table>
+	<p>
+		Whitespace (tabs and newlines) are not added to MIXED child nodes in readable-output mode. 
+		This helps ensures strings in the serialized output can be losslessly parsed back into their original 
+		forms when they contain whitespace characters.
+		If the {@link javax.xml.stream.XMLInputFactory#IS_REPLACING_ENTITY_REFERENCES} setting was not useless 
+		in Java, we could support lossless readable XML for MIXED content.  
+		But as of Java 8, it still does not work. 
+	</p>
+	<p>
+		XML suffers from other deficiencies as well that affect MIXED content.  
+		For example, <xt>&lt;X&gt;&lt;/X&gt;</xt> and <xt>&lt;X/&gt;</xt> are equivalent in XML and 
+		indistinguishable by the Java XML parsers.  
+		This makes it impossible to differentiate between an empty element and an element containing an empty 
+		string.  
+		This causes empty strings to get lost in translation. 
+		To alleviate this, we use the constructs <js>"_xE000_"</js> to represent an empty string, and 
+		<js>"_x0020_"</js> to represent leading and trailing spaces.
+	</p>
+	<p>
+		The examples below show how whitespace is handled under various circumstances:
+	</p>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>XML</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT</jsf>)
+				|		<jk>public</jk> String <jf>a</jf> = <jk>null</jk>;
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;X/&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT</jsf>)
+				|		<jk>public</jk> String <jf>a</jf> = <js>""</js>;
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;X&gt;<xv>_xE000_</xv>&lt;/X&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT</jsf>)
+				|		<jk>public</jk> String <jf>a</jf> = <js>" "</js>;
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;X&gt;<xv>_x0020_</xv>&lt;/X&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT</jsf>)
+				|		<jk>public</jk> String <jf>a</jf> = <js>"  "</js>;
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;X&gt;<xv>_x0020__x0020_</xv>&lt;/X&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT</jsf>)
+				|		<jk>public</jk> String <jf>a</jf> = <js>"  foobar  "</js>;
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;X&gt;<xv>_x0020_ foobar _x0020_</xv>&lt;/X&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT_PWS</jsf>)
+				|		<jk>public</jk> String <jf>a</jf> = <jk>null</jk>;
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;X/&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT_PWS</jsf>)
+				|		<jk>public</jk> String <jf>a</jf> = <js>""</js>;
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;X&gt;<xv>_xE000_</xv>&lt;/X&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT_PWS</jsf>)
+				|		<jk>public</jk> String <jf>a</jf> = <js>" "</js>;
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;X&gt;<xv> </xv>&lt;/X&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT_PWS</jsf>)
+				|		<jk>public</jk> String <jf>a</jf> = <js>"  "</js>;
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;X&gt;<xv>  </xv>&lt;/X&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT_PWS</jsf>)
+				|		<jk>public</jk> String <jf>a</jf> = <js>"  foobar  "</js>;
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;X&gt;<xv>  foobar  </xv>&lt;/X&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED</jsf>)
+				|		<jk>public</jk> String[] <jf>a</jf> = <jk>null</jk>;
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;X/&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED</jsf>)
+				|		<jk>public</jk> String[] <jf>a</jf> = {<js>""</js>};
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;X&gt;<xv>_xE000_</xv>&lt;/X&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED</jsf>)
+				|		<jk>public</jk> String[] <jf>a</jf> = {<js>" "</js>};
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;X&gt;<xv>_x0020_</xv>&lt;/X&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED</jsf>)
+				|		<jk>public</jk> String[] <jf>a</jf> = {<js>"  "</js>};
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;X&gt;<xv>_x0020__x0020_</xv>&lt;/X&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED</jsf>)
+				|		<jk>public</jk> String[] <jf>a</jf> = {<js>"  foobar  "</js>};
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;X&gt;<xv>_x0020_ foobar _x0020_</xv>&lt;/X&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED_PWS</jsf>)
+				|		<jk>public</jk> String[] <jf>a</jf> = <jk>null</jk>;
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;X/&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED_PWS</jsf>)
+				|		<jk>public</jk> String[] <jf>a</jf> = {<js>""</js>};
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;X&gt;<xv>_xE000_</xv>&lt;/X&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED_PWS</jsf>)
+				|		<jk>public</jk> String[] <jf>a</jf> = {<js>" "</js>};
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;X&gt;<xv> </xv>&lt;/X&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED_PWS</jsf>)
+				|		<jk>public</jk> String[] <jf>a</jf> = {<js>"  "</js>};
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;X&gt;<xv>  </xv>&lt;/X&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED_PWS</jsf>)
+				|		<jk>public</jk> String[] <jf>a</jf> = {<js>"  foobar  "</js>};
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;X&gt;<xv>  foobar  </xv>&lt;/X&gt;
+			</xt></td>
+		</tr>
+	</table>
+	
+	<p>
+		It should be noted that when using <jsf>MIXED</jsf>, you are not guaranteed to parse back the exact 
+		same content since side-by-side strings in the content will end up concatenated when parsed.
+	</p>
+	<p>
+		The {@link oaj.xml.annotation.XmlFormat#TEXT} format is similar to 
+		{@link oaj.xml.annotation.XmlFormat#MIXED} except it's meant for solitary objects that 
+		get serialized as simple child text nodes.
+		Any object that can be serialize to a <c>String</c> can be used.
+		The {@link oaj.xml.annotation.XmlFormat#TEXT_PWS} is the same except whitespace is 
+		preserved in the output.
+	</p>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>Without annotations</th>
+			<th>With annotations</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT</jsf>)
+				|		<jk>public</jk> String <jf>a</jf>;
+				|	}
+			</td>
+			<td class='code'>
+				|	{
+				|		a: <js>'foo'</js>
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;object&gt;
+				|		&lt;a&gt;<xv>foo</xv>&lt;/a&gt;
+				|	&lt;/object&gt;
+			</xt></td>
+			<td class='code'><xt>
+				|	&lt;object&gt;<xv>foo</xv>&lt;/object&gt;
+			</xt></td>
+		</tr>
+	</table>
+	<p>
+		The {@link oaj.xml.annotation.XmlFormat#XMLTEXT} format is similar to 
+		{@link oaj.xml.annotation.XmlFormat#TEXT} except it's meant for strings containing XML 
+		that should be serialized as-is to the document.
+		Any object that can be serialize to a <c>String</c> can be used.
+		During parsing, the element content gets parsed with the rest of the document and then re-serialized to 
+		XML before being set as the property value.  
+		This process may not be perfect (e.g. double quotes may be replaced by single quotes, etc...).
+	</p>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>With TEXT annotation</th>
+			<th>With XMLTEXT annotation</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<jk>class</jk> MyBean {
+				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>XMLTEXT</jsf>)
+				|		<jk>public</jk> String <jf>a</jf>;
+				|	}
+			</td>
+			<td class='code'>
+				|	{
+				|		a: <js>'Some &lt;b&gt;XML&lt;/b&gt; text'</js>
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;object&gt;<xv>Some &amp;lt;b&amp;gt;XML&amp;lt;/b&amp;gt; text</xv>&lt;/object&gt;
+			</xt></td>
+			<td class='code'><xt>
+				|	&lt;object&gt;<xv>Some <xt>&lt;b&gt;</xt>XML<xt>&lt;/b&gt;</xt> text</xv>&lt;/object&gt;
+			</xt></td>
+		</tr>
+	</table>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/07.jm.XmlNamespaces.html b/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/07.jm.XmlNamespaces.html
new file mode 100644
index 000000000..0693e4bd8
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.XmlDetails/07.jm.XmlNamespaces.html
@@ -0,0 +1,184 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'Namespaces'}
+
+<div class='topic'>
+	<p>
+		Let's go back to the example of our original <c>Person</c> bean class, but add some namespace annotations:
+	</p>
+	<h5 class='figure'>Sample Beans</h5>
+	<p class='bjava'>
+		|	<ja>@Xml</ja>(prefix=<js>"per"</js>)
+		|	<ja>@Bean</ja>(typeName=<js>"person"</js>)
+		|	<jk>public class</jk> Person {
+		|		
+		|		<jc>// Bean properties</jc>
+		|		<jk>public</jk> String <jf>name</jf>;
+		|		<ja>@Swap</ja>(TemporalCalendarSwap.IsoInstant.<jk>class</jk>) <jk>public</jk> Calendar <jf>birthDate</jf>;
+		|		<jk>public</jk> List&lt;Address&gt; <jf>addresses</jf>; 
+		|	
+		|		<jc>// Getters/setters omitted</jc>
+		|	}
+		|	
+		|	<ja>@Xml</ja>(prefix=<js>"addr"</js>)
+		|	<ja>@Bean</ja>(typeName=<js>"address"</js>)
+		|	<jk>public class</jk> Address {
+		|
+		|		<jc>// Bean properties</jc>
+		|		<ja>@Xml</ja>(prefix=<js>"mail"</js>) <jk>public</jk> String <jf>street</jf>, <jf>city</jf>;
+		|		<ja>@Xml</ja>(prefix=<js>"mail"</js>) <jk>public</jk> StateEnum <jf>state</jf>;
+		|		<ja>@Xml</ja>(prefix=<js>"mail"</js>) <jk>public int</jk> <jf>zip</jf>;
+		|		<jk>public boolean</jk> <jf>isCurrent</jf>;
+		|
+		|		<jc>// Getters/setters omitted</jc>
+		|	}	
+	</p>
+	<p>
+		The namespace URLs can either be defined as part of the {@link oaj.xml.annotation.Xml @Xml}
+		annotation, or can be defined at the package level with the {@link oaj.xml.annotation.XmlSchema @XmlSchema}
+		annotation.
+		Below shows it defined at the package level:
+	</p>
+	<h5 class='figure'>package-info.java</h5>
+	<p class='bjava'>
+		|	<ja>@XmlSchema</ja>(
+		|		prefix=<js>"ab"</js>,  <jc>// Default namespace</jc>
+		|		xmlNs={
+		|			<ja>@XmlNs</ja>(prefix=<js>"ab"</js>, namespaceURI=<js>"http://www.apache.org/addressBook/"</js>),
+		|			<ja>@XmlNs</ja>(prefix=<js>"per"</js>, namespaceURI=<js>"http://www.apache.org/person/"</js>),
+		|			<ja>@XmlNs</ja>(prefix=<js>"addr"</js>, namespaceURI=<js>"http://www.apache.org/address/"</js>),
+		|			<ja>@XmlNs</ja>(prefix=<js>"mail"</js>, namespaceURI=<js>"http://www.apache.org/mail/"</js>)
+		|		}
+		|	)
+		|	<jk>package</jk> org.apache.juneau.examples.addressbook;
+	</p>		
+	<h5 class='figure'>Sample Code</h5>
+	<p class='bjava'>
+		|	Person <jv>person</jv> = <jk>new</jk> Person()
+		|		.name(<js>"John Smith"</js>)
+		|		.birthDate(<js>"1946-08-12T00:00:00Z"</js>)
+		|		.addresses(
+		|			<jk>new</jk> Address() 
+		|				.street(<js>"100 Main Street"</js>)
+		|				.city(<js>"Anywhereville"</js>)
+		|				.state(<jsf>NY</jsf>)
+		|				.zip(12345)
+		|				.isCurrent(<jk>true</jk>);
+		|		);
+		|
+		|	<jc>// Create a new serializer with readable output, this time with namespaces enabled.</jc>
+		|	<jc>// Note that this is identical to XmlSerializer.DEFAULT_NS_SQ_READABLE.</jc>
+		|	XmlSerializer <jv>serializer</jv> = XmlSerializer.<jsm>create</jsm>().ns().ws().sq().build();
+		|	
+		|	String <jv>xml</jv> = <jv>serializer</jv>.serialize(p);
+	</p>
+	<p>
+		Now when we run this code, we'll see namespaces added to our output:
+	</p>
+	<p class='bxml'>
+		|	<xt>&lt;per:person&gt;</xt>
+		|		<xt>&lt;per:name&gt;</xt>John Smith<xt>&lt;/per:name&gt;</xt>
+		|		<xt>&lt;per:birthDate&gt;</xt>1946-08-12T04:00:00Z<xt>&lt;/per:birthDate&gt;</xt>
+		|		<xt>&lt;per:addresses&gt;</xt>
+		|			<xt>&lt;addr:address&gt;</xt>
+		|				<xt>&lt;mail:street&gt;</xt>100 Main Street<xt>&lt;/mail:street&gt;</xt>
+		|				<xt>&lt;mail:city&gt;</xt>Anywhereville<xt>&lt;/mail:city&gt;</xt>
+		|				<xt>&lt;mail:state&gt;</xt>NY<xt>&lt;/mail:state&gt;</xt>
+		|				<xt>&lt;mail:zip&gt;</xt>12345<xt>&lt;/mail:zip&gt;</xt>
+		|				<xt>&lt;addr:isCurrent&gt;</xt>true<xt>&lt;/addr:isCurrent&gt;</xt>
+		|			<xt>&lt;/addr:address&gt;</xt>
+		|		<xt>&lt;/per:addresses&gt;</xt>
+		|	<xt>&lt;/per:person&gt;</xt>
+	</p>
+	<p>
+		Enabling the {@del oaj.xml.XmlSerializer#XML_addNamespaceUrisToRoot} setting results
+		in the namespace URLs being added to the root node:
+	</p>
+	<p class='bxml'>
+		|	<xt>&lt;per:person</xt>
+		|			<xa>xmlns</xa>=<xs>'http://www.apache.org/2013/Juneau'</xs> 
+		|			<xa>xmlns:per</xa>=<xs>'http://www.apache.org/person/'</xs>
+		|			<xa>xmlns:addr</xa>=<xs>'http://www.apache.org/address/'</xs>
+		|			<xa>xmlns:mail</xa>=<xs>'http://www.apache.org/mail/'</xs>
+		|		<xt>&gt;</xt>
+		|		<xt>&lt;per:name&gt;</xt>John Smith<xt>&lt;/per:name&gt;</xt>
+		|		<xt>&lt;per:birthDate&gt;</xt>1946-08-12T04:00:00Z<xt>&lt;/per:birthDate&gt;</xt>
+		|		<xt>&lt;per:addresses&gt;</xt>
+		|			<xt>&lt;addr:address&gt;</xt>
+		|				<xt>&lt;mail:street&gt;</xt>100 Main Street<xt>&lt;/mail:street&gt;</xt>
+		|				<xt>&lt;mail:city&gt;</xt>Anywhereville<xt>&lt;/mail:city&gt;</xt>
+		|				<xt>&lt;mail:state&gt;</xt>NY<xt>&lt;/mail:state&gt;</xt>
+		|				<xt>&lt;mail:zip&gt;</xt>12345<xt>&lt;/mail:zip&gt;</xt>
+		|				<xt>&lt;addr:isCurrent&gt;</xt>true<xt>&lt;/addr:isCurrent&gt;</xt>
+		|			<xt>&lt;/addr:address&gt;</xt>
+		|		<xt>&lt;/per:addresses&gt;</xt>
+		|	<xt>&lt;/per:person&gt;</xt>
+	</p>
+	<p>
+		We can simplify the output by setting the default namespace on the serializer so that all the elements do 
+		not need to be prefixed:
+	</p>
+	<p class='bjava'>
+		|	<jc>// Create a new serializer with readable output, this time with namespaces enabled.</jc>
+		|	XmlSerializer <jv>serializer</jv> = XmlSerializer.<jsm>create</jsm>().ws().sq().ns()
+		|		.defaultNamespaceUri(<js>"http://www.apache.org/person/"</js>)
+			.build();
+		|</p>
+	<p>
+		This produces the following equivalent where the elements don't need prefixes since they're already in the 
+		default document namespace:
+	</p>
+	<p class='bxml'>
+		|	<xt>&lt;person</xt>
+		|			<xa>xmlns:juneau</xa>=<xs>'http://www.apache.org/2013/Juneau'</xs> 
+		|			<xa>xmlns</xa>=<xs>'http://www.apache.org/person/'</xs>
+		|			<xa>xmlns:addr</xa>=<xs>'http://www.apache.org/address/'</xs>
+		|			<xa>xmlns:mail</xa>=<xs>'http://www.apache.org/mail/'</xs>
+		|		<xt>&gt;</xt>
+		|		<xt>&lt;name&gt;</xt>John Smith<xt>&lt;/name&gt;</xt>
+		|		<xt>&lt;birthDate&gt;</xt>1946-08-12T04:00:00Z<xt>&lt;/birthDate&gt;</xt>
+		|		<xt>&lt;addresses&gt;</xt>
+		|			<xt>&lt;addr:address&gt;</xt>
+		|				<xt>&lt;mail:street&gt;</xt>100 Main Street<xt>&lt;/mail:street&gt;</xt>
+		|				<xt>&lt;mail:city&gt;</xt>Anywhereville<xt>&lt;/mail:city&gt;</xt>
+		|				<xt>&lt;mail:state&gt;</xt>NY<xt>&lt;/mail:state&gt;</xt>
+		|				<xt>&lt;mail:zip&gt;</xt>12345<xt>&lt;/mail:zip&gt;</xt>
+		|				<xt>&lt;addr:isCurrent&gt;</xt>true<xt>&lt;/addr:isCurrent&gt;</xt>
+		|			<xt>&lt;/addr:address&gt;</xt>
+		|		<xt>&lt;/addresses&gt;</xt>
+		|	<xt>&lt;/person&gt;</xt>
+	</p>
+	<p>
+		By default, the XML serializer class will make a first-pass over the data structure to look for namespaces 
+		defined on classes and bean properties.
+		In high-performance environments, you may want to consider disabling auto-detection and providing your 
+		own explicit list of namespaces to the serializer to avoid this scanning step using 
+		{@link oaj.xml.XmlSerializer.Builder#disableAutoDetectNamespaces()}.
+	</p>
+	<p>
+		The following code will produce the same output as before, but will perform slightly better since it 
+		avoids this pre-scan step.
+	</p>
+	<p class='bjava'>
+		|	<jc>// Create a new serializer with readable output, this time with namespaces enabled.</jc>
+		|	XmlSerializer <jv>serializer</jv> = XmlSerializer.<jsm>create</jsm>()
+		|		.ws()
+		|		.sq()
+		|		.autoDetectNamespaces(<jk>false</jk>)
+		|		.namespaces(<js>"{per:'http://www.apache.org/person/'}"</js>)
+		|		.build();
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails.html
new file mode 100644
index 000000000..83b1e4624
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails.html
@@ -0,0 +1,26 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'HTML Details'}
+
+<div class='topic'>
+	<p>
+		Juneau supports converting arbitrary POJOs to and from HTML.
+		Built on top of the existing XML parser, it also uses a STaX parser and creates POJOs directly without intermediate DOM objects.
+	</p>
+	<p>
+		The primary use case for HTML serialization is rendering POJOs in easy-to-read format in REST interfaces.
+	</p>		
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/01.jm.HtmlMethodology.html b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/01.jm.HtmlMethodology.html
new file mode 100644
index 000000000..bef7b7de1
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/01.jm.HtmlMethodology.html
@@ -0,0 +1,526 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'HTML Methodology'}
+
+<div class='topic'>
+	<p>
+		The following examples show how different data types are represented in HTML.
+		They mirror how the data structures are represented in JSON.
+	</p>
+	
+	<h5 class='topic'>Simple types</h5>
+	<p>
+		The representation for simple types mirror those produced by the XML serializer.
+		Tags are added to help differentiate data types when they cannot be inferred through reflection.
+		These tags are ignored by browsers and treated as plain text.
+	</p>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>HTML</th>
+		</tr>
+		<tr>
+			<td>string</td>
+			<td class='code'><js>'foo'</js></td>
+			<td class='code'><xt>&lt;string&gt;</xt>foo<xt>&lt;/string&gt;</xt></td>
+		</tr>
+		<tr>
+			<td>boolean</td>
+			<td class='code'><jk>true</jk></td>
+			<td class='code'><xt>&lt;boolean&gt;</xt>true<xt>&lt;/boolean&gt;</xt></td>
+		</tr>
+		<tr>
+			<td>integer</td>
+			<td class='code'>123</td>
+			<td class='code'><xt>&lt;number&gt;</xt>123<xt>&lt;/number&gt;</xt></td>
+		</tr>
+		<tr>
+			<td>float</td>
+			<td class='code'>1.23</td>
+			<td class='code'><xt>&lt;number&gt;</xt>1.23<xt>&lt;/number&gt;</xt></td>
+		</tr>
+		<tr>
+			<td>null</td>
+			<td class='code'><jk>null</jk></td>
+			<td class='code'><xt>&lt;null/&gt;</xt></td>
+		</tr>
+	</table>
+	
+	<h5 class='topic'>Maps</h5>
+	<p>
+		Maps and beans are represented as tables.
+	</p>
+	<p>
+		The <xa>_type</xa> attribute is added to differentiate between objects (maps/beans) and arrays 
+		(arrays/collections).
+	</p>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>HTML</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	Map&lt;String,String&gt;
+			</td>
+			<td class='code'>
+				|	{
+				|		k1: <js>'v1'</js>
+				|		k2: <jk>null</jk>
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
+				|		&lt;tr&gt;
+				|			&lt;td&gt;<xv>k1</xv>&lt;/td&gt;
+				|			&lt;td&gt;<xv>v1</xv>&lt;/td&gt;
+				|		&lt;/tr&gt;
+				|		&lt;tr&gt;
+				|			&lt;td&gt;<xv>k2</xv>&lt;/td&gt;
+				|			&lt;td&gt;&lt;null/&gt;&lt;/td&gt;
+				|		&lt;/tr&gt;
+				|	&lt;/table&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	Map&lt;String,Number&gt;
+			</td>
+			<td class='code'>
+				|	{
+				|		k1: 123,
+				|		k2: 1.23,
+				|		k3: <jk>null</jk>
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
+				|		&lt;tr&gt;
+				|			&lt;td&gt;<xv>k1</xv>&lt;/td&gt;
+				|			&lt;td&gt;<xv>123</xv>&lt;/td&gt;
+				|		&lt;/tr&gt;
+				|		&lt;tr&gt;
+				|			&lt;td&gt;<xv>k2</xv>&lt;/td&gt;
+				|			&lt;td&gt;<xv>1.23</xv>&lt;/td&gt;
+				|		&lt;/tr&gt;
+				|		&lt;tr&gt;
+				|			&lt;td&gt;<xv>k3</xv>&lt;/td&gt;
+				|			&lt;td&gt;&lt;null/&gt;&lt;/td&gt;
+				|		&lt;/tr&gt;
+				|	&lt;/table&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	Map&lt;String,Object&gt;
+			</td>
+			<td class='code'>
+				|	{
+				|		k1: <js>'v1'</js>
+				|		k2: 123,
+				|		k3: 1.23,
+				|		k4: <jk>true</jk>,
+				|		k5: <jk>null</jk>
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
+				|		&lt;tr&gt;
+				|			&lt;td&gt;<xv>k1</xv>&lt;/td&gt;
+				|			&lt;td&gt;<xv>v1</xv>&lt;/td&gt;
+				|		&lt;/tr&gt;
+				|		&lt;tr&gt;
+				|			&lt;td&gt;<xv>k2</xv>&lt;/td&gt;
+				|			&lt;td&gt;&lt;number&gt;<xv>123</xv>&lt;/number&gt;&lt;/td&gt;
+				|		&lt;/tr&gt;
+				|		&lt;tr&gt;
+				|			&lt;td&gt;<xv>k3</xv>&lt;/td&gt;
+				|			&lt;td&gt;&lt;number&gt;<xv>1.23</xv>&lt;/number&gt;&lt;/td&gt;
+				|		&lt;/tr&gt;
+				|		&lt;tr&gt;
+				|			&lt;td&gt;<xv>k4</xv>&lt;/td&gt;
+				|			&lt;td&gt;&lt;boolean&gt;<xv>true</xv>&lt;/boolean&gt;&lt;/td&gt;
+				|		&lt;/tr&gt;
+				|		&lt;tr&gt;
+				|			&lt;td&gt;<xv>k5</xv>&lt;/td&gt;
+				|			&lt;td&gt;&lt;null/&gt;&lt;/td&gt;
+				|		&lt;/tr&gt;
+				|	&lt;/table&gt;
+			</xt></td>
+		</tr>
+	</table>
+	
+	<h5 class='topic'>Arrays</h5>
+	<p>
+		Collections and arrays are represented as ordered lists.
+	</p>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>HTML</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	String[]
+			</td>
+			<td class='code'>
+				|	[
+				|		<js>'foo'</js>
+				|		<jk>null</jk>
+				|	]
+			</td>
+			<td class='code'><xt>
+				|	&lt;ul&gt;
+				|		&lt;li&gt;<xv>foo</xv>&lt;/li&gt;
+				|		&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
+				|	&lt;/ul&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	Number[]
+			</td>
+			<td class='code'>
+				|	[
+				|		123,
+				|		1.23,
+				|		<jk>null</jk>
+				|	]
+			</td>
+			<td class='code'><xt>
+				|	&lt;ul&gt;
+				|		&lt;li&gt;<xv>123</xv>&lt;/li&gt;
+				|		&lt;li&gt;<xv>1.23</xv>&lt;/li&gt;
+				|		&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
+				|	&lt;/ul&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	Object[]
+			</td>
+			<td class='code'>
+				|	[
+				|		<js>'foo'</js>,
+				|		123,
+				|		1.23,
+				|		<jk>true</jk>,
+				|		<jk>null</jk>
+				|	]
+			</td>
+			<td class='code'><xt>
+				|	&lt;ul&gt;
+				|		&lt;li&gt;<xv>foo</xv>&lt;/li&gt;
+				|		&lt;li&gt;&lt;number&gt;<xv>123</xv>&lt;/number&gt;&lt;/li&gt;
+				|		&lt;li&gt;&lt;number&gt;<xv>1.23</xv>&lt;/number&gt;&lt;/li&gt;
+				|		&lt;li&gt;&lt;boolean&gt;<xv>true</xv>&lt;/boolean&gt;&lt;/li&gt;
+				|		&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
+				|	&lt;/ul&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	String[][]
+			</td>
+			<td class='code'>
+				|	[
+				|		[<js>'foo'</js>, <jk>null</jk>],
+				|		<jk>null</jk>,
+				|	]
+			</td>
+			<td class='code'><xt>
+				|	&lt;ul&gt;
+				|		&lt;li&gt;
+				|			&lt;ul&gt;
+				|				&lt;li&gt;<xv>foo</xv>&lt;/li&gt;
+				|				&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
+				|			&lt;/ul&gt;
+				|		&lt;/li&gt;
+				|		&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
+				|	&lt;/ul&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<jk>int</jk>[]
+			</td>
+			<td class='code'>
+				|	[
+				|		123
+				|	]
+			</td>
+			<td class='code'><xt>
+				|	&lt;ul&gt;
+				|		&lt;li&gt;<xv>123</xv>&lt;/li&gt;
+				|	&lt;/ul&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<jk>boolean</jk>[]
+			</td>
+			<td class='code'>
+				|	[
+				|		<jk>true</jk>
+				|	]
+			</td>
+			<td class='code'><xt>
+				|	&lt;ul&gt;
+				|		&lt;li&gt;<xv>true</xv>&lt;/li&gt;
+				|	&lt;/ul&gt;
+			</xt></td>
+		</tr>
+	</table>
+	
+	<h5 class='topic'>Collections</h5>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>HTML</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	List&lt;String&gt;
+			</td>
+			<td class='code'>
+				|	[
+				|		<js>'foo'</js>
+				|		<jk>null</jk>
+				|	]
+			</td>
+			<td class='code'><xt>
+				|	&lt;ul&gt;
+				|		&lt;li&gt;<xv>foo</xv>&lt;/li&gt;
+				|		&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
+				|	&lt;/ul&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	List&lt;Number&gt;
+			</td>
+			<td class='code'>
+				|	[
+				|		123,
+				|		1.23,
+				|		<jk>null</jk>
+				|	]
+			</td>
+			<td class='code'><xt>
+				|	&lt;ul&gt;
+				|		&lt;li&gt;<xv>123</xv>&lt;/li&gt;
+				|		&lt;li&gt;<xv>1.23</xv>&lt;/li&gt;
+				|		&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
+				|	&lt;/ul&gt;
+			</xt></td>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	List&lt;Object&gt;
+			</td>
+			<td class='code'>
+				|	[
+				|		<js>'foo'</js>,
+				|		123,
+				|		1.23,
+				|		<jk>true</jk>,
+				|		<jk>null</jk>
+				|	]
+			</td>
+			<td class='code'><xt>
+				|	&lt;ul&gt;
+				|		&lt;li&gt;<xv>foo</xv>&lt;/li&gt;
+				|		&lt;li&gt;&lt;number&gt;<xv>123</xv>&lt;/number&gt;&lt;/li&gt;
+				|		&lt;li&gt;&lt;number&gt;<xv>1.23</xv>&lt;/number&gt;&lt;/li&gt;
+				|		&lt;li&gt;&lt;boolean&gt;<xv>true</xv>&lt;/boolean&gt;&lt;/li&gt;
+				|		&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
+				|	&lt;/ul&gt;
+			</xt></td>
+		</tr>
+	</table>
+	
+	<h5 class='topic'>Beans</h5>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>HTML</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<jk>class</jk> MyBean {
+				|		<jk>public</jk> String <jf>a</jf>;
+				|		<jk>public</jk> <jk>int</jk> <jf>b</jf>;
+				|		<jk>public</jk> Object <jf>c</jf>;  <jc>// String value</jc>
+				|		<jk>public</jk> Object <jf>d</jf>;  <jc>// Integer value</jc>  	
+				|		<jk>public</jk> MyBean2 <jf>e</jf>;  
+				|		<jk>public</jk> String[] <jf>f</jf>;  
+				|	 	<jk>public</jk> <jk>int</jk>[] <jf>g</jf>;  	
+				|	}
+				|	<jk>class</jk> MyBean2 {
+				|		String <jf>h</jf>;  
+				|	}
+			</td>
+			<td class='code'>
+				|	{
+				|		<jok>a</jok>: <jov>'foo'</jov>,
+				|		<jok>b</jok>: <jov>123</jov>,
+				|		<jok>c</jok>: <jov>'bar'</jov>,
+				|		<jok>d</jok>: <jov>456</jov>,
+				|		<jok>e</jok>: {
+				|			<jok>h</jok>: <jov>'baz'</jov>
+				|		}
+				|		<jok>f</jok>: [<jov>'qux'</jov>]
+				|		<jok>g</jok>: [<jov>789</jov>]
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
+				|		&lt;tr&gt;
+				|			&lt;td&gt;<xv>a</xv>&lt;/td&gt;
+				|			&lt;td&gt;<xv>foo</xv>&lt;/td&gt;
+				|		&lt;/tr&gt;
+				|		&lt;tr&gt;
+				|			&lt;td&gt;<xv>b</xv>&lt;/td&gt;
+				|			&lt;td&gt;<xv>123</xv>&lt;/td&gt;
+				|		&lt;/tr&gt;
+				|		&lt;tr&gt;
+				|			&lt;td&gt;<xv>c</xv>&lt;/td&gt;
+				|			&lt;td&gt;<xv>bar</xv>&lt;/td&gt;
+				|		&lt;/tr&gt;
+				|		&lt;tr&gt;
+				|			&lt;td&gt;<xv>d</xv>&lt;/td&gt;
+				|			&lt;td&gt;&lt;number&gt;<xv>456</xv>&lt;/number&gt;&lt;/td&gt;
+				|		&lt;/tr&gt;
+				|		&lt;tr&gt;
+				|			&lt;td&gt;<xv>e</xv>&lt;/td&gt;
+				|			&lt;td&gt;
+				|				&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
+				|					&lt;tr&gt;
+				|						&lt;td&gt;<xv>h</xv>&lt;/td&gt;
+				|						&lt;td&gt;<xv>qux</xv>&lt;/td&gt;
+				|					&lt;/tr&gt;
+				|				&lt;/table&gt;
+				|			&lt;/td&gt;
+				|		&lt;/tr&gt;
+				|		&lt;tr&gt;
+				|			&lt;td&gt;<xv>f</xv>&lt;/td&gt;
+				|			&lt;td&gt;
+				|				&lt;ul&gt;
+				|					&lt;li&gt;<xv>baz</xv>&lt;/li&gt;
+				|				&lt;/ul&gt;
+				|			&lt;/td&gt;
+				|		&lt;/tr&gt;
+				|		&lt;tr&gt;
+				|			&lt;td&gt;<xv>g</xv>&lt;/td&gt;
+				|			&lt;td&gt;
+				|				&lt;ul&gt;
+				|					&lt;li&gt;<xv>789</xv>&lt;/li&gt;
+				|				&lt;/ul&gt;
+				|			&lt;/td&gt;
+				|		&lt;/tr&gt;
+				|	&lt;/table&gt;
+			</xt></td>
+		</tr>
+	</table>
+	
+	<h5 class='topic'>Beans with Map properties</h5>
+	<table class='styled w800'>
+		<tr>
+			<th>Data type</th>
+			<th>JSON example</th>
+			<th>HTML</th>
+		</tr>
+		<tr>
+			<td class='code'>
+				|	<jk>class</jk> MyBean {
+				|		<jk>public</jk> Map&lt;String,String&gt; <jf>a</jf>;
+				|		<jk>public</jk> Map&lt;String,Number&gt; <jf>b</jf>;
+				|		<jk>public</jk> Map&lt;String,Object&gt; <jf>c</jf>; 
+				|	}
+			</td>
+			<td class='code'>
+				|	{
+				|		<jok>a</jok>: {
+				|			<jok>k1</jok>: <jov>'foo'</jov>
+				|		},
+				|		<jok>b</jok>: {
+				|			<jok>k2</jok>: <jov>123</jov>
+				|		},
+				|		<jok>c</jok>: {
+				|			<jok>k3</jok>: <jov>'bar'</jov>,
+				|			<jok>k4</jok>: <jov>456</jov>,
+				|			<jok>k5</jok>: <jov>true</jov>,
+				|			<jok>k6</jok>: <jov>null</jov>
+				|		}
+				|	}
+			</td>
+			<td class='code'><xt>
+				|	&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
+				|		&lt;tr&gt;
+				|			&lt;td&gt;<xv>a</xv>&lt;/td&gt;
+				|			&lt;td&gt;
+				|				&lt;table _type='object'&gt;
+				|					&lt;tr&gt;
+				|						&lt;td&gt;<xv>k1</xv>&lt;/td&gt;
+				|						&lt;td&gt;<xv>foo</xv>&lt;/td&gt;
+					|				&lt;/tr&gt;
+				|				&lt;/table&gt;
+				|			&lt;/td&gt;
+				|		&lt;/tr&gt;
+				|		&lt;tr&gt;
+				|			&lt;td&gt;<xv>b</xv>&lt;/td&gt;
+				|			&lt;td&gt;
+				|				&lt;table _type='object'&gt;
+				|					&lt;tr&gt;
+				|						&lt;td&gt;<xv>k2</xv>&lt;/td&gt;
+				|						&lt;td&gt;<xv>123</xv>&lt;/td&gt;
+				|					&lt;/tr&gt;
+				|				&lt;/table&gt;
+				|			&lt;/td&gt;
+				|		&lt;/tr&gt;
+				|		&lt;tr&gt;
+				|			&lt;td&gt;<xv>c</xv>&lt;/td&gt;
+				|			&lt;td&gt;
+				|				&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
+				|					&lt;tr&gt;
+				|						&lt;td&gt;<xv>k3</xv>&lt;/td&gt;
+				|						&lt;td&gt;<xv>bar</xv>&lt;/td&gt;
+				|					&lt;/tr&gt;
+				|					&lt;tr&gt;
+				|						&lt;td&gt;<xv>k4</xv>&lt;/td&gt;
+				|						&lt;td&gt;&lt;number&gt;<xv>456</xv>&lt;/number&gt;&lt;/td&gt;
+				|					&lt;/tr&gt;
+				|					&lt;tr&gt;
+				|						&lt;td&gt;<xv>k5</xv>&lt;/td&gt;
+				|						&lt;td&gt;&lt;boolean&gt;<xv>true</xv>&lt;/boolean&gt;&lt;/td&gt;
+				|					&lt;/tr&gt;
+				|					&lt;tr&gt;
+				|						&lt;td&gt;<xv>k6</xv>&lt;/td&gt;
+				|						&lt;td&gt;&lt;null/&gt;&lt;/td&gt;
+				|					&lt;/tr&gt;
+				|				&lt;/table&gt;
+				|			&lt;/td&gt;
+				|		&lt;/tr&gt;
+				|	&lt;/table&gt;
+			</xt></td>
+		</tr>
+	</table>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/02.jm.HtmlSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/02.jm.HtmlSerializers.html
new file mode 100644
index 000000000..ae5a6a344
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/02.jm.HtmlSerializers.html
@@ -0,0 +1,76 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'HTML Serializers', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.html.HtmlSerializer} class is used to serialize POJOs into HTML.
+	</p>	
+	<p>
+		The {@link oaj.html.HtmlDocSerializer} class is the same, but wraps the serialized POJO
+		inside a document template consisting of header, nav, aside, and footer sections.
+	</p>
+	<p>
+		The class hierarchy for the builder of this serializer is:
+	</p>
+	<ul class='javatree'>
+		<li class='jac'>{@link oaj.Context.Builder}
+			<ul>
+				<li class='jac'>{@link oaj.BeanContextable.Builder}
+					<ul>
+						<li class='jac'>{@link oaj.BeanTraverseContext.Builder}
+							<ul>
+								<li class='jac'>{@link oaj.serializer.Serializer.Builder}
+									<ul>
+										<li class='jac'>{@link oaj.serializer.WriterSerializer.Builder}
+											<ul>
+												<li class='jc'>{@link oaj.xml.XmlSerializer.Builder}
+													<ul>
+														<li class='jc'>{@link oaj.html.HtmlSerializer.Builder}
+													</ul>
+												</li>
+											</ul>
+										</li>
+									</ul>
+								</li>
+							</ul>
+						</li>
+					</ul>
+				</li>
+			</ul>
+		</li>
+	</ul>
+	<p>
+		Refer to the builder javadocs for configurable settings.
+	</p>
+	<p>
+		The following pre-configured serializers are provided for convenience:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.html.HtmlSerializer}
+			<ul class='javatreec'>
+				<li class='jf'>{@link oaj.html.HtmlSerializer#DEFAULT }
+				<li class='jf'>{@link oaj.html.HtmlSerializer#DEFAULT_SQ }
+				<li class='jf'>{@link oaj.html.HtmlSerializer#DEFAULT_SQ_READABLE }
+			</ul>
+		</li>
+		<li class='jc'>{@link oaj.html.HtmlDocSerializer}
+			<ul class='javatreec'>
+				<li class='jf'>{@link oaj.html.HtmlDocSerializer#DEFAULT }
+			</ul>
+		</li>
+	</ul>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/03.jm.HtmlParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/03.jm.HtmlParsers.html
new file mode 100644
index 000000000..c8b90775a
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/03.jm.HtmlParsers.html
@@ -0,0 +1,58 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'HTML Parsers', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.html.HtmlParser} class is used to parse HTML into POJOs.
+		They can also parse the contents produced by {@link oaj.html.HtmlDocSerializer}.
+	</p>	
+	<p>
+		The class hierarchy for the builder of this parser is:
+	</p>
+	<ul class='javatree'>
+		<li class='jac'>{@link oaj.Context.Builder}
+			<ul>
+				<li class='jac'>{@link oaj.BeanContextable.Builder}
+					<ul>
+						<li class='jac'>{@link oaj.parser.Parser.Builder}
+							<ul>
+								<li class='jac'>{@link oaj.parser.ReaderParser.Builder}
+									<ul>
+										<li class='jc'>{@link oaj.html.HtmlParser.Builder}
+									</ul>
+								</li>
+							</ul>
+						</li>
+					</ul>
+				</li>
+			</ul>
+		</li>
+	</ul>
+	<p>
+		Refer to the builder javadocs for configurable settings.
+	</p>
+	<p>
+		The following pre-configured parsers are provided for convenience:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.html.HtmlParser}
+			<ul class='javatreec'>
+				<li class='jf'>{@link oaj.html.HtmlParser#DEFAULT DEFAULT}
+			</ul>
+		</li>
+	</ul>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/04.jm.HtmlAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/04.jm.HtmlAnnotation.html
new file mode 100644
index 000000000..b70801b78
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/04.jm.HtmlAnnotation.html
@@ -0,0 +1,75 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'@Html Annotation'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.html.annotation.Html @Html} annotation can be used to customize how POJOs are serialized to HTML on a per-class/field/method basis.
+	</p>
+	<ul class='javatree'>
+		<li class='ja'>{@link oaj.html.annotation.Html}
+			<ul class='javatreec'>
+				<li class='jma'>{@link oaj.html.annotation.Html#anchorText() anchorText}
+				<li class='jma'>{@link oaj.html.annotation.Html#format() format}
+				<li class='jma'>{@link oaj.html.annotation.Html#link() link}
+				<li class='jma'>{@link oaj.html.annotation.Html#noTableHeaders() noTableHeaders}
+				<li class='jma'>{@link oaj.html.annotation.Html#noTables() noTables}
+				<li class='jma'>{@link oaj.html.annotation.Html#render() render}
+			</ul>
+		</li>
+	</ul>		
+	<p>
+		The {@link oaj.html.annotation.Html#link @Html(link)} annotation adds a hyperlink to a bean property when rendered as HTML.
+	</p>
+	
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+		|	<jk>public class</jk> FileSpace {
+		|		<jc>// Add a hyperlink to this bean property.</jc>
+		|		<ja>@Html</ja>(link=<js>"servlet:/drive/{drive}"</js>)
+		|		<jk>public</jk> String getDrive() {...}
+		|	}			
+	</p>
+	<p>
+		The {@link oaj.html.annotation.Html#anchorText @Html(anchorText)} annotation is used to specify the anchor text of a hyperlink.
+	</p>
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+		|	<jc>// Produces &lt;a ...&gt;CLICK ME!&lt;/a&gt; when serialized to HTML.</jc>
+		|	<jk>public class</jk> FileSpace {
+		|		<jc>// Add a hyperlink to this bean property.</jc>
+		|		<ja>@Html</ja>(link=<js>"servlet:/drive/{drive}"</js>, anchorText=<js>"CLICK ME!"</js>)
+		|		<jk>public</jk> String getDrive() {...}
+		|	}			
+	</p>
+	<p>
+		The {@link oaj.html.annotation.Html#format @Html(format)} annotation is used to specify what format to use for HTML elements.
+		For example, the HTML beans defined in the {@link oaj.dto.html5} package use <c>format=<jsf>XML</jsf></c> so that
+		the beans get serialized as standard XML:
+	</p>
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+		|	<jc>// Parent class of all HTML DTO beans.</jc>
+		|	<ja>@Html</ja>(format=<jsf>XML</jsf>)	
+		|	<jk>public abstract class</jk> HtmlElement {...}
+	</p>
+	<p>
+		The {@link oaj.html.annotation.Html#noTableHeaders @Html(noTableHeaders)} annotation is used to prevent beans from being serialized with table headers.
+	</p>
+	<p>
+		The {@link oaj.html.annotation.Html#noTables @Html(noTables)} annotation is used to force beans to be serialized as trees instead of tables
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/05.jm.HtmlRenderAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/05.jm.HtmlRenderAnnotation.html
new file mode 100644
index 000000000..67ac51d60
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/05.jm.HtmlRenderAnnotation.html
@@ -0,0 +1,120 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'@Html(render) Annotation'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.html.annotation.Html#render @Html(render)} annotation allows for custom rendering of bean property values when serialized as HTML. 
+		Using this class, you can alter the CSS style and HTML content of the bean property.
+	</p>
+	<p>
+		The following example shows two render classes that customize the appearance of the <c>pctFull</c> and
+		<c>status</c> columns in the code below:
+	</p>
+	<p class='bjava'>
+		|	<jk>import static</jk> org.apache.juneau.dto.html5.HtmlBuilder.*;	
+		|			
+		|	<jc>// Our bean class</jc>
+		|	<jk>public class</jk> FileSpace {
+		|
+		|		<jk>private final</jk> String <jf>drive</jf>;
+		|		<jk>private final long</jk> <jf>total</jf>, <jf>available</jf>;
+		|
+		|		<jk>public</jk> FileSpace(String <jv>drive</jv>, <jk>long</jk> <jv>total</jv>, <jk>long</jk> <jv>available</jv>) {
+		|			<jk>this</jk>.<jf>drive</jf> = <jv>drive</jv>;
+		|			<jk>this</jk>.<jf>total</jf> = <jv>total</jv>;
+		|			<jk>this</jk>.<jf>available</jf> = <jv>available</jv>;
+		|		}
+		|
+		|		<ja>@Html</ja>(link=<js>"drive/{drive}"</js>)
+		|		<jk>public</jk> String getDrive() {
+		|			<jk>return</jk> <jf>drive</jf>;
+		|		}
+		|
+		|		<jk>public long</jk> getTotal() {
+		|			<jk>return</jk> <jf>total</jf>;
+		|		}
+		|
+		|		<jk>public long</jk> getAvailable() {
+		|			<jk>return</jk> <jf>available</jf>;
+		|		}
+		|
+		|		<ja>@Html</ja>(render=FileSpacePctRender.<jk>class</jk>)
+		|		<jk>public float</jk> getPctFull() {
+		|			<jk>return</jk> ((100 * <jf>available</jf>) / <jf>total</jf>);
+		|		}
+		|
+		|		<ja>@Html</ja>(render=FileSpaceStatusRender.<jk>class</jk>)
+		|		<jk>public</jk> FileSpaceStatus getStatus() {
+		|			<jk>float</jk> <jv>pf</jv> = getPctFull();
+		|			<jk>if</jk> (<jv>pf</jv> &lt; 80)
+		|				<jk>return</jk> FileSpaceStatus.<jsf>OK</jsf>;
+		|			<jk>if</jk> (<jv>pf</jv> &lt; 90)
+		|				<jk>return</jk> FileSpaceStatus.<jsf>WARNING</jsf>;
+		|			<jk>return</jk> FileSpaceStatus.<jsf>SEVERE</jsf>;
+		|		}
+		|	}
+	</p>
+	<p class='bjava'>
+		|	<jc>// Possible values for the getStatus() method</jc>
+		|	<jk>public enum</jk> FileSpaceStatus {
+		|		<jsf>OK</jsf>, <jsf>WARNING</jsf>, <jsf>SEVERE</jsf>;
+		|	}
+	</p>
+	<p class='bjava'>
+		|	<jc>// Custom render for getPctFull() method</jc>
+		|	<jk>public class</jk> FileSpacePctRender <jk>extends</jk> HtmlRender&lt;Float&gt; {
+		|
+		|		<ja>@Override</ja>
+		|		<jk>public</jk> String getStyle(SerializerSession <jv>session</jv>, Float <jv>value</jv>) {
+		|			<jk>if</jk> (<jv>value</jv> &lt; 80)
+		|				<jk>return</jk> <js>"background-color:lightgreen;text-align:center"</js>;
+		|			<jk>if</jk> (<jv>value</jv> &lt; 90)
+		|				<jk>return</jk> <js>"background-color:yellow;text-align:center"</js>;
+		|			<jk>return</jk> <js>"background-color:red;text-align:center;border:;animation:color_change 0.5s infinite alternate"</js>;
+		|		}
+		|
+		|		<ja>@Override</ja>
+		|		<jk>public</jk> Object getContent(SerializerSession <jv>session</jv>, Float <jv>value</jv>) {
+		|			<jk>if</jk> (<jv>value</jv> >= 90)
+		|				<jk>return</jk> <jsm>div</jsm>(
+		|					String.<jsm>format</jsm>(<js>"%.0f%%"</js>, <jv>value</jv>),
+		|					<jsm>style</jsm>(<js>"@keyframes color_change { from { background-color: red; } to { background-color: yellow; }"</js>)
+		|				);
+		|			<jk>return</jk> String.<jsm>format</jsm>(<js>"%.0f%%"</js>, <jv>value</jv>);
+		|		}
+		|	}
+	</p>
+	<p class='bjava'>
+		|	<jc>// Custom render for getStatus() method</jc>
+		|	<jk>public class</jk> FileSpaceStatusRender <jk>extends</jk> HtmlRender&lt;FileSpaceStatus&gt; {
+		|
+		|		<ja>@Override</ja>
+		|		<jk>public</jk> String getStyle(SerializerSession <jv>session</jv>, FileSpaceStatus <jv>value</jv>) {
+		|			<jk>return</jk> <js>"text-align:center"</js>;
+		|		}
+		|
+		|		<ja>@Override</ja>
+		|		<jk>public</jk> Object getContent(SerializerSession <jv>session</jv>, FileSpaceStatus <jv>value</jv>) {
+		|			<jk>switch</jk> (<jv>value</jv>) {
+		|				<jk>case</jk> <jsf>OK</jsf>:  <jk>return</jk> <jsm>img</jsm>().src(URI.<jsm>create</jsm>(<js>"servlet:/htdocs/ok.png"</js>));
+		|				<jk>case</jk> <jsf>WARNING</jsf>:  <jk>return</jk> <jsm>img</jsm>().src(URI.<jsm>create</jsm>(<js>"servlet:/htdocs/warning.png"</js>));
+		|				<jk>default</jk>: <jk>return</jk> <jsm>img</jsm>().src(URI.<jsm>create</jsm>(<js>"servlet:/htdocs/severe.png"</js>));
+		|			}
+		|		}
+		|	}
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/06.jm.HtmlDocSerializer.html b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/06.jm.HtmlDocSerializer.html
new file mode 100644
index 000000000..f52547aee
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/06.jm.HtmlDocSerializer.html
@@ -0,0 +1,92 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'HtmlDocSerializer', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		{@link oaj.html.HtmlDocSerializer} is an extension of {@link oaj.html.HtmlSerializer}
+		that wraps serialized POJOs in a complete HTML document. 
+	</p>
+	<p>
+		The class hierarchy for the builder of this serializer is:
+	</p>
+	<ul class='javatree'>
+		<li class='jac'>{@link oaj.Context.Builder}
+			<ul>
+				<li class='jac'>{@link oaj.BeanContextable.Builder}
+					<ul>
+						<li class='jac'>{@link oaj.BeanTraverseContext.Builder}
+							<ul>
+								<li class='jac'>{@link oaj.serializer.Serializer.Builder}
+									<ul>
+										<li class='jac'>{@link oaj.serializer.WriterSerializer.Builder}
+											<ul>
+												<li class='jc'>{@link oaj.xml.XmlSerializer.Builder}
+													<ul>
+														<li class='jc'>{@link oaj.html.HtmlSerializer.Builder}
+															<ul>
+																<li class='jc'>{@link oaj.html.HtmlStrippedDocSerializer.Builder}
+																	<ul>
+																		<li class='jc'>{@link oaj.html.HtmlDocSerializer.Builder}
+																	</ul>
+																</li>
+															</ul>
+														</li>
+													</ul>
+												</li>
+											</ul>
+										</li>
+									</ul>
+								</li>
+							</ul>
+						</li>
+					</ul>
+				</li>
+			</ul>
+		</li>
+	</ul>
+	<p>
+		Refer to the builder javadocs for configurable settings.
+	</p>
+	<p>
+		This class is used extensively in the creation of POJO-based user interfaces in the REST API.
+	</p>
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+		|	<jd>/** 
+		|	 * Sample REST resource that prints out a simple "Hello world!" message.
+		|	 */</jd>
+		|	<ja>@Rest</ja>(path=<js>"/helloWorld"</js>)
+		|	<ja>@HtmlDocConfig</ja>(
+		|		navlinks={
+		|			<js>"up: request:/.."</js>,
+		|			<js>"options: servlet:/?method=OPTIONS"</js>
+		|		},
+		|		aside={
+		|			<js>"&lt;div style='max-width:400px' class='text'&gt;"</js>,
+		|			<js>"	&lt;p&gt;This page shows a resource that simply response with a 'Hello world!' message&lt;/p&gt;"</js>,
+		|			<js>"	&lt;p&gt;The POJO serialized is a simple String.&lt;/p&gt;"</js>,
+		|			<js>"&lt;/div&gt;"</js>
+		|		}
+		|	)
+		|	<jk>public class</jk> HelloWorldResource <jk>extends</jk> BasicRestServlet <jk>implements</jk> BasicUniversalConfig {...}
+	</p>
+	<p>
+		The {@link oaj.html.HtmlDocSerializer.Builder#template(Class)} setting defines
+		a template for the HTML page being generated.
+		The default template is described next.
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/07.jm.BasicHtmlDocTemplate.html b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/07.jm.BasicHtmlDocTemplate.html
new file mode 100644
index 000000000..bd710ffec
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/07.jm.BasicHtmlDocTemplate.html
@@ -0,0 +1,52 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'BasicHtmlDocTemplate'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.html.BasicHtmlDocTemplate} class defines a default template for HTML documents
+		created by {@link oaj.html.HtmlDocSerializer}.
+	</p>
+	<p>
+		The HTML document created by this template consists of the following structure:
+	</p>
+	<p class='bxml'>
+		|	<xt>&lt;html&gt;
+		|		&lt;head&gt;
+		|			&lt;style <xa>type</xa>=<xs>'text/css'</xs>&gt;
+		|				<xv>CSS styles and links to stylesheets</xv>
+		|			&lt;/style&gt;
+		|		&lt;/head&gt;
+		|		&lt;body&gt;
+		|			&lt;header&gt;
+		|				<xv>Page header</xv>
+		|			&lt;/header&gt;
+		|			&lt;nav&gt;
+		|				<xv>Navigation links</xv>
+		|			&lt;/nav&gt;
+		|			&lt;aside&gt;
+		|				<xv>Side-bar text</xv>
+		|			&lt;/aside&gt;
+		|			&lt;article&gt;
+		|				<xv>Contents of serialized object</xv>
+		|			&lt;/article&gt;
+		|			&lt;footer&gt;
+		|				<xv>Footer message</xv>
+		|			&lt;/footer&gt;
+		|		&lt;/body&gt;
+		|	&lt;/html&gt;</xt>
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/08.jm.HtmlCustomTemplates.html b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/08.jm.HtmlCustomTemplates.html
new file mode 100644
index 000000000..83b77df0d
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.HtmlDetails/08.jm.HtmlCustomTemplates.html
@@ -0,0 +1,34 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'Custom Templates'}
+
+<div class='topic'>
+	<p>
+		Custom page templates can be created by implementing the {@link oaj.html.HtmlDocTemplate}
+		interface and associating it with your {@link oaj.html.HtmlDocSerializer} using the {@link oaj.html.HtmlDocSerializer.Builder#template(Class)}
+		setting.
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.html.HtmlDocTemplate}
+			<ul class='javatreec'>
+				<li class='jm'>{@link oaj.html.HtmlDocTemplate#writeTo(HtmlDocSerializerSession,HtmlWriter,Object) writeTo(HtmlDocSerializerSession,HtmlWriter,Object)}
+			</ul>
+		</li>
+	</ul>
+	<p>
+		The interface implementation is open-ended allowing you to define the contents of the page any way you wish.
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlSchema.html b/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlSchema.html
new file mode 100644
index 000000000..4c3f82a85
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlSchema.html
@@ -0,0 +1,197 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'HTML-Schema Support'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.html.HtmlSchemaSerializer} class is the HTML-equivalent to the
+		{@link oaj.json.JsonSchemaSerializer} class.
+		It's used to generate HTML versions of JSON-Schema documents that describe the output generated by the 
+		{@link oaj.json.JsonSerializer} class.
+	</p>
+	<h5 class='figure'>Sample Beans</h5>
+	<p class='bjava'>
+		|	<jk>public class</jk> Person {
+		|		
+		|		<jc>// Bean properties</jc>
+		|		<jk>public</jk> String <jf>name</jf>;
+		|		<jk>public</jk> Calendar <jf>birthDate</jf>;
+		|		<jk>public</jk> List&lt;Address&gt; <jf>addresses</jf>; 
+		|	
+		|		<jc>// Getters/setters omitted</jc>
+		|	}
+		|	
+		|	<jk>public class</jk> Address {
+		|
+		|		<jc>// Bean properties</jc>
+		|		<jk>public</jk> String <jf>street</jf>, <jf>city</jf>;
+		|		<jk>public</jk> StateEnum <jf>state</jf>;
+		|		<jk>public int</jk> <jf>zip</jf>;
+		|		<jk>public boolean</jk> <jf>isCurrent</jf>;
+		|
+		|		<jc>// Getters/setters omitted</jc>
+		|	}	
+	</p>
+	<p>
+		The code for creating our POJO model and generating HTML-Schema is shown below:
+	</p>
+	<p class='bjava'>
+		|	<jc>// Get the one of the default schema serializers.</jc>
+		|	HtmlSchemaSerializer <jv>serializer</jv> = HtmlSchemaSerializer.<jsf>DEFAULT_SIMPLE_READABLE</jsf>;
+		|	
+		|	<jc>// Get the HTML Schema for the POJO.</jc>
+		|	String <jv>htmlSchema</jv> = <jv>serializer</jv>.serialize(<jk>new</jk> Person());
+		|
+		|	<jc>// This also works.</jc>
+		|	<jv>htmlSchema</jv> = <jv>serializer</jv>.serialize(Person.<jk>class</jk>);
+	</p>
+	<p>
+		The result is the HTML table shown below:
+	</p>
+	<table class='bordered unstyled w800'>
+		<tr>
+			<td>type</td>
+			<td>object</td>
+		</tr>
+		<tr>
+			<td>properties</td>
+			<td>
+				<table>
+					<tr>
+						<td>name</td>
+						<td>
+							<table>
+								<tr>
+									<td>type</td>
+									<td>string</td>
+								</tr>
+							</table>
+						</td>
+					</tr>
+					<tr>
+						<td>birthDate</td>
+						<td>
+							<table>
+								<tr>
+									<td>type</td>
+									<td>string</td>
+								</tr>
+							</table>
+						</td>
+					</tr>
+					<tr>
+						<td>addresses</td>
+						<td>
+							<table>
+								<tr>
+									<td>type</td>
+									<td>array</td>
+								</tr>
+								<tr>
+									<td>items</td>
+									<td>
+										<table>
+											<tr>
+												<td>type</td>
+												<td>object</td>
+											</tr>
+											<tr>
+												<td>properties</td>
+												<td>
+													<table>
+														<tr>
+															<td>street</td>
+															<td>
+																<table>
+																	<tr>
+																		<td>type</td>
+																		<td>string</td>
+																	</tr>
+																</table>
+															</td>
+														</tr>
+														<tr>
+															<td>city</td>
+															<td>
+																<table>
+																	<tr>
+																		<td>type</td>
+																		<td>string</td>
+																	</tr>
+																</table>
+															</td>
+														</tr>
+														<tr>
+															<td>state</td>
+															<td>
+																<table>
+																	<tr>
+																		<td>type</td>
+																		<td>string</td>
+																	</tr>
+																	<tr>
+																		<td>enum</td>
+																		<td>
+																			<ul>
+																				<li>AL</li>
+																				<li>PA</li>
+																				<li>NC</li>
+																			</ul>
+																		</td>
+																	</tr>
+																</table>
+															</td>
+														</tr>
+														<tr>
+															<td>zip</td>
+															<td>
+																<table>
+																	<tr>
+																		<td>type</td>
+																		<td>integer</td>
+																	</tr>
+																	<tr>
+																		<td>format</td>
+																		<td>int32</td>
+																	</tr>
+																</table>
+															</td>
+														</tr>
+														<tr>
+															<td>isCurrent</td>
+															<td>
+																<table>
+																	<tr>
+																		<td>type</td>
+																		<td>boolean</td>
+																	</tr>
+																</table>
+															</td>
+														</tr>
+													</table>
+												</td>
+											</tr>
+										</table>
+									</td>
+								</tr>
+							</table>
+						</td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/29.jm.UonDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/29.jm.UonDetails.html
new file mode 100644
index 000000000..292060c0e
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/29.jm.UonDetails.html
@@ -0,0 +1,87 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'UON Details'}
+
+<div class='topic'>
+	<p>
+		Juneau supports converting arbitrary POJOs to and from UON strings using ultra-efficient serializers 
+		and parsers.
+		The serializer converts POJOs directly to UON strings without the need for intermediate DOM objects 
+		using a highly-efficient state machine.
+		Likewise, the parser creates POJOs directly from UON strings without the need for intermediate DOM 
+		objects. 
+	</p>
+	<p>
+		Juneau uses UON (URL-Encoded Object Notation) for representing POJOs.  
+		The UON specification can be found <a href='doc-files/rfc_uon.txt'>here</a>.
+	</p>
+	<p>
+		The following example shows JSON for a typical bean:
+	</p>
+	<h5 class='figure'>Sample Beans</h5>
+	<p class='bjava'>
+		|	<jk>public class</jk> Person {
+		|		
+		|		<jc>// Bean properties</jc>
+		|		<jk>public</jk> String <jf>name</jf>;
+		|		<ja>@Swap</ja>(TemporalCalendarSwap.IsoInstant.<jk>class</jk>) <jk>public</jk> Calendar <jf>birthDate</jf>;
+		|		<jk>public</jk> List&lt;Address&gt; <jf>addresses</jf>; 
+		|	
+		|		<jc>// Getters/setters omitted</jc>
+		|	}
+		|	
+		|	<jk>public class</jk> Address {
+		|
+		|		<jc>// Bean properties</jc>
+		|		<jk>public</jk> String <jf>street</jf>, <jf>city</jf>;
+		|		<jk>public</jk> StateEnum <jf>state</jf>;
+		|		<jk>public int</jk> <jf>zip</jf>;
+		|		<jk>public boolean</jk> <jf>isCurrent</jf>;
+		|
+		|		<jc>// Getters/setters omitted</jc>
+		|	}	
+	</p>
+	<h5 class='figure'>Sample Code</h5>
+	<p class='bjava'>
+		|	Person <jv>person</jv> = <jk>new</jk> Person()
+		|		.name(<js>"John Smith"</js>)
+		|		.birthDate(<js>"1946-08-12T00:00:00Z"</js>)
+		|		.addresses(
+		|			<jk>new</jk> Address() 
+		|				.street(<js>"100 Main Street"</js>)
+		|				.city(<js>"Anywhereville"</js>)
+		|				.state(<jsf>NY</jsf>)
+		|				.zip(12345)
+		|				.isCurrent(<jk>true</jk>);
+		|		);
+	</p>
+	<h5 class='figure'>UON</h5>
+	<p class='buon'>
+		|	(
+		|		<ua>name</ua>=<us>'John+Smith'</us>,
+		|		<ua>birthDate</ua>=<us>'1946-08-12T00:00:00Z'</us>,
+		|		<ua>addresses</ua>=@(
+		|			(
+		|				<ua>street</ua>=<us>'100 Main Street'</us>,
+		|				<ua>city</ua>=<us>Anywhereville</us>,
+		|				<ua>state</ua>=<us>NY</us>,
+		|				<ua>zip</ua>=<un>12345</un>,
+		|				<ua>isCurrent</ua>=<uk>true</uk>
+		|			)
+		|		)
+		|	) 
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/29.jm.UonDetails/01.jm.UonMethodology.html b/juneau-doc/docs/Topics/02.juneau-marshall/29.jm.UonDetails/01.jm.UonMethodology.html
new file mode 100644
index 000000000..7cedbec6e
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/29.jm.UonDetails/01.jm.UonMethodology.html
@@ -0,0 +1,76 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'UON Methodology'}
+
+<div class='topic'>
+	<h5 class='figure'>General methodology:</h5>
+	<table class='styled w800' style='border-collapse:collapse'>
+		<tr><th>Java type</th><th>JSON equivalent</th><th>UON</th></tr>
+		<tr>
+			<td>Maps/beans</td>
+			<td>OBJECT</td>
+			<td class='code'>
+				|	<ua>a1</ua>=(<ua>b1</ua>=<us>x1</us>,<ua>b2</ua>=<us>x2</us>)
+				|	<ua>a1</ua>=(<ua>b1</ua>=(<ua>c1</ua>=<us>x1</us>,<ua>c2</ua>=<us>x2</us>))
+			</td>
+		</tr>
+		<tr>
+			<td>Collections/arrays</td>
+			<td>ARRAY</td>
+			<td class='code'>
+				|	<ua>a1</ua>=@(<us>x1</us>,<us>x2</us>)
+				|	<ua>a1</ua>=@(@(<us>x1</us>,<us>x2</us>),@(<us>x3</us>,<us>x4</us>))
+				|	<ua>a1</ua>=@((<ua>b1</ua>=<us>x1</us>,<ua>b2</ua>=<us>x2</us>),(<ua>c1</ua>=<us>x1</us>,<ua>c2</ua>=<us>x2</us>))
+			</td>
+		</tr>
+		<tr>
+			<td>Booleans</td>
+			<td>BOOLEAN</td>
+			<td class='code'>
+				|	<ua>a1</ua>=<uk>true</uk>&amp;<ua>a2</ua>=<uk>false</uk>
+			</td>
+		</tr>
+		<tr>
+			<td>int/float/double/...</td>
+			<td>NUMBER</td>
+			<td class='code'>
+				|	<ua>a1</ua>=<un>123</un>&amp;<ua>a2</ua>=<un>1.23e1</un>
+			</td>
+		</tr>
+		<tr>
+			<td>null</td>
+			<td>NULL</td>
+			<td class='code'>
+				|	<ua>a1</ua>=<uk>null</uk>
+			</td>
+		</tr>
+		<tr>
+			<td>String</td>
+			<td>STRING</td>
+			<td class='code'>
+				|	<ua>a1</ua>=<us>foobar</us>
+				|	<ua>a1</ua>=<us>'true'</us>
+				|	<ua>a1</ua>=<us>'null'</us>
+				|	<ua>a1</ua>=<us>'123'</us>
+				|	<ua>a1</ua>=<us>' string with whitespace '</us>
+				|	<ua>a1</ua>=<us>'string with ~'escaped~' quotes'</us>
+			</td>
+		</tr>
+	</table>
+	<p>
+		Refer to the <a href='doc-files/rfc_uon.txt'>UON specification</a> for a complete set of syntax rules.		
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/29.jm.UonDetails/02.jm.UonSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/29.jm.UonDetails/02.jm.UonSerializers.html
new file mode 100644
index 000000000..06e4cbd21
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/29.jm.UonDetails/02.jm.UonSerializers.html
@@ -0,0 +1,63 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'UON Serializers', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.uon.UonSerializer} class is used to serialize POJOs into UON.
+	</p>	
+	<p>
+		The class hierarchy for the builder of this serializer is:
+	</p>
+	<ul class='javatree'>
+		<li class='jac'>{@link oaj.Context.Builder}
+			<ul>
+				<li class='jac'>{@link oaj.BeanContextable.Builder}
+					<ul>
+						<li class='jac'>{@link oaj.BeanTraverseContext.Builder}
+							<ul>
+								<li class='jac'>{@link oaj.serializer.Serializer.Builder}
+									<ul>
+										<li class='jac'>{@link oaj.serializer.WriterSerializer.Builder}
+											<ul>
+												<li class='jc'>{@link oaj.uon.UonSerializer.Builder}
+											</ul>
+										</li>
+									</ul>
+								</li>
+							</ul>
+						</li>
+					</ul>
+				</li>
+			</ul>
+		</li>
+	</ul>
+	<p>
+		Refer to the builder javadocs for configurable settings.
+	</p>
+	<p>
+		The following pre-configured serializers are provided for convenience:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.uon.UonSerializer}
+			<ul class='javatreec'>
+				<li class='jf'>{@link oaj.uon.UonSerializer#DEFAULT DEFAULT}
+				<li class='jf'>{@link oaj.uon.UonSerializer#DEFAULT_ENCODING DEFAULT_ENCODING}
+				<li class='jf'>{@link oaj.uon.UonSerializer#DEFAULT_READABLE DEFAULT_READABLE}
+			</ul>
+		</li>
+	</ul>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/29.jm.UonDetails/03.jm.UonParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/29.jm.UonDetails/03.jm.UonParsers.html
new file mode 100644
index 000000000..c3601d96c
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/29.jm.UonDetails/03.jm.UonParsers.html
@@ -0,0 +1,58 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'UON Parsers', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.uon.UonParser} class is used to parse UON into POJOs.
+	</p>	
+	<p>
+		The class hierarchy for the builder of this parser is:
+	</p>
+	<ul class='javatree'>
+		<li class='jac'>{@link oaj.Context.Builder}
+			<ul>
+				<li class='jac'>{@link oaj.BeanContextable.Builder}
+					<ul>
+						<li class='jac'>{@link oaj.parser.Parser.Builder}
+							<ul>
+								<li class='jac'>{@link oaj.parser.ReaderParser.Builder}
+									<ul>
+										<li class='jc'>{@link oaj.uon.UonParser.Builder}
+									</ul>
+								</li>
+							</ul>
+						</li>
+					</ul>
+				</li>
+			</ul>
+		</li>
+	</ul>
+	<p>
+		Refer to the builder javadocs for configurable settings.
+	</p>
+	<p>
+		The following pre-configured parsers are provided for convenience:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.uon.UonParser}
+			<ul class='javatreec'>
+				<li class='jf'>{@link oaj.uon.UonParser#DEFAULT DEFAULT}
+				<li class='jf'>{@link oaj.uon.UonParser#DEFAULT_DECODING DEFAULT_DECODING}			
+			</ul>
+		</li>
+	</ul>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UrlEncodingDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UrlEncodingDetails.html
new file mode 100644
index 000000000..a6c7a9f42
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UrlEncodingDetails.html
@@ -0,0 +1,85 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'URL-Encoding Details'}
+
+<div class='topic'>
+	<p>
+		Juneau supports converting arbitrary POJOs to and from URL-encoded strings using ultra-efficient serializers 
+		and parsers.
+		The serializer converts POJOs directly to URL-encoded strings without the need for intermediate DOM objects 
+		using a highly-efficient state machine.
+		Likewise, the parser creates POJOs directly from URL-encoded strings without the need for intermediate DOM 
+		objects. 
+	</p>
+	<p>
+		Juneau uses UON (URL-Encoded Object Notation) for representing POJOs as URL-Encoded values in key-value pairs.  
+		The UON specification can be found <a href='doc-files/rfc_uon.txt'>here</a>.
+	</p>
+	<p>
+		The following example shows JSON for a typical bean:
+	</p>
+	<h5 class='figure'>Sample Beans</h5>
+	<p class='bjava'>
+		|	<jk>public class</jk> Person {
+		|		
+		|		<jc>// Bean properties</jc>
+		|		<jk>public</jk> String <jf>name</jf>;
+		|		<ja>@Swap</ja>(TemporalCalendarSwap.IsoInstant.<jk>class</jk>) <jk>public</jk> Calendar <jf>birthDate</jf>;
+		|		<jk>public</jk> List&lt;Address&gt; <jf>addresses</jf>; 
+		|	
+		|		<jc>// Getters/setters omitted</jc>
+		|	}
+		|	
+		|	<jk>public class</jk> Address {
+		|
+		|		<jc>// Bean properties</jc>
+		|		<jk>public</jk> String <jf>street</jf>, <jf>city</jf>;
+		|		<jk>public</jk> StateEnum <jf>state</jf>;
+		|		<jk>public int</jk> <jf>zip</jf>;
+		|		<jk>public boolean</jk> <jf>isCurrent</jf>;
+		|
+		|		<jc>// Getters/setters omitted</jc>
+		|	}	
+	</p>
+	<h5 class='figure'>Sample Code</h5>
+	<p class='bjava'>
+		|	Person <jv>person</jv> = <jk>new</jk> Person()
+		|		.name(<js>"John Smith"</js>)
+		|		.birthDate(<js>"1946-08-12T00:00:00Z"</js>)
+		|		.addresses(
+		|			<jk>new</jk> Address() 
+		|				.street(<js>"100 Main Street"</js>)
+		|				.city(<js>"Anywhereville"</js>)
+		|				.state(<jsf>NY</jsf>)
+		|				.zip(12345)
+		|				.isCurrent(<jk>true</jk>);
+		|		);
+	</p>
+	<h5 class='figure'>URL-Encoding</h5>
+	<p class='burlenc'>
+		|	<ua>name</ua>=<us>'John+Smith'</us>
+		|	&amp;<ua>birthDate</ua>=<us>'1946-08-12T00:00:00Z'</us>
+		|	&amp;<ua>addresses</ua>=@(
+		|		(
+		|			<ua>street</ua>=<us>'100 Main Street'</us>,
+		|			<ua>city</ua>=<us>Anywhereville</us>,
+		|			<ua>state</ua>=<us>NY</us>,
+		|			<ua>zip</ua>=<un>12345</un>,
+		|			<ua>isCurrent</ua>=<uk>true</uk>
+		|		)
+		|	)
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UrlEncodingDetails/01.jm.UrlEncMethodology.html b/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UrlEncodingDetails/01.jm.UrlEncMethodology.html
new file mode 100644
index 000000000..dbb47709c
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UrlEncodingDetails/01.jm.UrlEncMethodology.html
@@ -0,0 +1,76 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'URL-Encoding Methodology'}
+
+<div class='topic'>
+	<h5 class='figure'>General methodology:</h5>
+	<table class='styled w800' style='border-collapse:collapse'>
+		<tr><th>Java type</th><th>JSON equivalent</th><th>UON</th></tr>
+		<tr>
+			<td>Maps/beans</td>
+			<td>OBJECT</td>
+			<td class='code'>
+				|	<ua>a1</ua>=(<ua>b1</ua>=<us>x1</us>,<ua>b2</ua>=<us>x2</us>)
+				|	<ua>a1</ua>=(<ua>b1</ua>=(<ua>c1</ua>=<us>x1</us>,<ua>c2</ua>=<us>x2</us>))
+			</td>
+		</tr>
+		<tr>
+			<td>Collections/arrays</td>
+			<td>ARRAY</td>
+			<td class='code'>
+				|	<ua>a1</ua>=@(<us>x1</us>,<us>x2</us>)
+				|	<ua>a1</ua>=@(@(<us>x1</us>,<us>x2</us>),@(<us>x3</us>,<us>x4</us>))
+				|	<ua>a1</ua>=@((<ua>b1</ua>=<us>x1</us>,<ua>b2</ua>=<us>x2</us>),(<ua>c1</ua>=<us>x1</us>,<ua>c2</ua>=<us>x2</us>))
+			</td>
+		</tr>
+		<tr>
+			<td>Booleans</td>
+			<td>BOOLEAN</td>
+			<td class='code'>
+				|	<ua>a1</ua>=<uk>true</uk>&amp;<ua>a2</ua>=<uk>false</uk>
+			</td>
+		</tr>
+		<tr>
+			<td>int/float/double/...</td>
+			<td>NUMBER</td>
+			<td class='code'>
+				|	<ua>a1</ua>=<un>123</un>&amp;<ua>a2</ua>=<un>1.23e1</un>
+			</td>
+		</tr>
+		<tr>
+			<td>null</td>
+			<td>NULL</td>
+			<td class='code'>
+				|	<ua>a1</ua>=<uk>null</uk>
+			</td>
+		</tr>
+		<tr>
+			<td>String</td>
+			<td>STRING</td>
+			<td class='code'>
+				|	<ua>a1</ua>=<us>foobar</us>
+				|	<ua>a1</ua>=<us>'true'</us>
+				|	<ua>a1</ua>=<us>'null'</us>
+				|	<ua>a1</ua>=<us>'123'</us>
+				|	<ua>a1</ua>=<us>' string with whitespace '</us>
+				|	<ua>a1</ua>=<us>'string with ~'escaped~' quotes'</us>
+			</td>
+		</tr>
+	</table>
+	<p>
+		Refer to the <a href='doc-files/rfc_uon.txt'>UON specification</a> for a complete set of syntax rules.		
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UrlEncodingDetails/02.jm.UrlEncSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UrlEncodingDetails/02.jm.UrlEncSerializers.html
new file mode 100644
index 000000000..f3adbb671
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UrlEncodingDetails/02.jm.UrlEncSerializers.html
@@ -0,0 +1,68 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'URL-Encoding Serializers', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.urlencoding.UrlEncodingSerializer} class is used to serialize POJOs into URL-Encoding.
+	</p>	
+	<p>
+		The class hierarchy for the builder of this serializer is:
+	</p>
+	<ul class='javatree'>
+		<li class='jac'>{@link oaj.Context.Builder}
+			<ul>
+				<li class='jac'>{@link oaj.BeanContextable.Builder}
+					<ul>
+						<li class='jac'>{@link oaj.BeanTraverseContext.Builder}
+							<ul>
+								<li class='jac'>{@link oaj.serializer.Serializer.Builder}
+									<ul>
+										<li class='jac'>{@link oaj.serializer.WriterSerializer.Builder}
+											<ul>
+												<li class='jc'>{@link oaj.uon.UonSerializer.Builder}
+													<ul>
+														<li class='jc'>{@link oaj.urlencoding.UrlEncodingSerializer.Builder}
+													</ul>
+												</li>
+											</ul>
+										</li>
+									</ul>
+								</li>
+							</ul>
+						</li>
+					</ul>
+				</li>
+			</ul>
+		</li>
+	</ul>
+	<p>
+		Refer to the builder javadocs for configurable settings.
+	</p>
+	<p>
+		The following pre-configured serializers are provided for convenience:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.urlencoding.UrlEncodingSerializer}
+			<ul class='javatreec'>
+				<li class='jf'>{@link oaj.urlencoding.UrlEncodingSerializer#DEFAULT DEFAULT}
+				<li class='jf'>{@link oaj.urlencoding.UrlEncodingSerializer#DEFAULT_EXPANDED DEFAULT_EXPANDED}
+				<li class='jf'>{@link oaj.urlencoding.UrlEncodingSerializer#DEFAULT_PLAINTEXT DEFAULT_PLAINTEXT}
+				<li class='jf'>{@link oaj.urlencoding.UrlEncodingSerializer#DEFAULT_READABLE DEFAULT_READABLE}		
+			</ul>
+		</li>
+	</ul>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UrlEncodingDetails/03.jm.UrlEncParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UrlEncodingDetails/03.jm.UrlEncParsers.html
new file mode 100644
index 000000000..546428348
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UrlEncodingDetails/03.jm.UrlEncParsers.html
@@ -0,0 +1,61 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'URL-Encoding Parsers', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.urlencoding.UrlEncodingParser} class is used to parse URL-Encoding into POJOs.
+	</p>	
+	<p>
+		The class hierarchy for the builder of this parser is:
+	</p>
+	<ul class='javatree'>
+		<li class='jac'>{@link oaj.Context.Builder}
+			<ul>
+				<li class='jac'>{@link oaj.BeanContextable.Builder}
+					<ul>
+						<li class='jac'>{@link oaj.parser.Parser.Builder}
+							<ul>
+								<li class='jac'>{@link oaj.parser.ReaderParser.Builder}
+									<ul>
+										<li class='jc'>{@link oaj.uon.UonParser.Builder}
+											<ul>
+												<li class='jc'>{@link oaj.urlencoding.UrlEncodingParser.Builder}
+											</ul>
+										</li>
+									</ul>
+								</li>
+							</ul>
+						</li>
+					</ul>
+				</li>
+			</ul>
+		</li>
+	</ul>
+	<p>
+		Refer to the builder javadocs for configurable settings.
+	</p>
+	<p>
+		The following pre-configured parsers are provided for convenience:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.urlencoding.UrlEncodingParser}
+			<ul class='javatreec'>
+				<li class='jf'>{@link oaj.urlencoding.UrlEncodingParser#DEFAULT DEFAULT}
+			</ul>
+		</li>
+	</ul>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UrlEncodingDetails/04.jm.UrlEncodingAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UrlEncodingDetails/04.jm.UrlEncodingAnnotation.html
new file mode 100644
index 000000000..ec9154e7b
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UrlEncodingDetails/04.jm.UrlEncodingAnnotation.html
@@ -0,0 +1,36 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'@UrlEncoding Annotation'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.urlencoding.annotation.UrlEncoding @UrlEncoding} annotation
+		is used to override the behavior of {@link oaj.urlencoding.UrlEncodingSerializer} on individual bean classes or properties.
+	</p>
+	<ul class='javatree'>
+		<li class='ja'>{@link oaj.urlencoding.annotation.UrlEncoding}
+			<ul class='javatreec'>
+				<li class='jma'>{@link oaj.urlencoding.annotation.UrlEncoding#expandedParams() expandedParams}
+			</ul>
+		</li>
+	</ul>		
+	<p>
+		The {@link oaj.urlencoding.annotation.UrlEncoding#expandedParams() expandedParams} setting is
+		used to force bean properties of type array or Collection to be expanded into multiple key/value pairings.
+		It's identical in behavior to using the {@del oaj.urlencoding.UrlEncodingSerializer#URLENC_expandedParams}
+		and {@del oaj.urlencoding.UrlEncodingParser#URLENC_expandedParams} properties, but applies to only individual bean properties.
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.MsgPackDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.MsgPackDetails.html
new file mode 100644
index 000000000..a185395c8
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.MsgPackDetails.html
@@ -0,0 +1,27 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'MessagePack Details'}
+
+<div class='topic'>
+	<p>
+		Juneau supports converting arbitrary POJOs to and from MessagePack using ultra-efficient serializers 
+		and parsers.
+	</p>
+	<p>
+		MessagePack is a compact binary form of JSON.
+		The serialization support for MessagePack mirrors that of JSON.
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.MsgPackDetails/01.jm.MsgPackSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.MsgPackDetails/01.jm.MsgPackSerializers.html
new file mode 100644
index 000000000..84eac227c
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.MsgPackDetails/01.jm.MsgPackSerializers.html
@@ -0,0 +1,61 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'MessagePack Serializers', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.msgpack.MsgPackSerializer} class is used to serialize POJOs into MessagePack.
+	</p>	
+	<p>
+		The class hierarchy for the builder of this serializer is:
+	</p>
+	<ul class='javatree'>
+		<li class='jac'>{@link oaj.Context.Builder}
+			<ul>
+				<li class='jac'>{@link oaj.BeanContextable.Builder}
+					<ul>
+						<li class='jac'>{@link oaj.BeanTraverseContext.Builder}
+							<ul>
+								<li class='jac'>{@link oaj.serializer.Serializer.Builder}
+									<ul>
+										<li class='jac'>{@link oaj.serializer.OutputStreamSerializer.Builder}
+											<ul>
+												<li class='jc'>{@link oaj.msgpack.MsgPackSerializer.Builder}
+											</ul>
+										</li>
+									</ul>
+								</li>
+							</ul>
+						</li>
+					</ul>
+				</li>
+			</ul>
+		</li>
+	</ul>
+	<p>
+		Refer to the builder javadocs for configurable settings.
+	</p>
+	<p>
+		The following pre-configured serializers are provided for convenience:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.msgpack.MsgPackSerializer}
+			<ul class='javatreec'>
+				<li class='jf'>{@link oaj.msgpack.MsgPackSerializer#DEFAULT DEFAULT}
+			</ul>
+		</li>
+	</ul>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.MsgPackDetails/02.jm.MsgPackParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.MsgPackDetails/02.jm.MsgPackParsers.html
new file mode 100644
index 000000000..42b7aaece
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.MsgPackDetails/02.jm.MsgPackParsers.html
@@ -0,0 +1,57 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'MessagePack Parsers', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.msgpack.MsgPackParser} class is used to parse MessagePack into POJOs.
+	</p>	
+	<p>
+		The class hierarchy for the builder of this parser is:
+	</p>
+	<ul class='javatree'>
+		<li class='jac'>{@link oaj.Context.Builder}
+			<ul>
+				<li class='jac'>{@link oaj.BeanContextable.Builder}
+					<ul>
+						<li class='jac'>{@link oaj.parser.Parser.Builder}
+							<ul>
+								<li class='jac'>{@link oaj.parser.InputStreamParser.Builder}
+									<ul>
+										<li class='jc'>{@link oaj.msgpack.MsgPackParser.Builder}
+									</ul>
+								</li>
+							</ul>
+						</li>
+					</ul>
+				</li>
+			</ul>
+		</li>
+	</ul>
+	<p>
+		Refer to the builder javadocs for configurable settings.
+	</p>
+	<p>
+		The following pre-configured parsers are provided for convenience:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.msgpack.MsgPackParser}
+			<ul class='javatreec'>
+				<li class='jf'>{@link oaj.msgpack.MsgPackParser#DEFAULT DEFAULT}
+			</ul>
+		</li>
+	</ul>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.OpenApiDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.OpenApiDetails.html
new file mode 100644
index 000000000..ba5e40e6c
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.OpenApiDetails.html
@@ -0,0 +1,49 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'OpenAPI Details', updated:'8.2.0'} 
+
+<div class='topic'>
+	<p>
+		Juneau supports converting arbitrary POJOs to and from strings using OpenAPI-based schema rules. 
+	</p>
+	<p>
+		The relevant classes for using OpenAPI-based serialization are:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.oapi.OpenApiSerializer} - Converts POJOs to strings.
+		<li class='jc'>{@link oaj.oapi.OpenApiParser} - Converts strings to POJOs.
+		<li class='jc'>{@link oaj.httppart.HttpPartSchema} - Defines the schema for your POJO.
+	</ul>
+	<p>
+		The {@link oaj.httppart.HttpPartSchema} class is used to define the formatting and 
+		validations for a POJO.
+		It's used in conjunction with the serializer and parser to produce and consume HTTP parts based on 
+		OpenAPI rules.
+	</p>
+	<p>
+		Later in the rest-server and rest-client sections, we also describe how the following annotations
+		can be applied to method parameters and class types to define the schema for various HTTP parts:
+	</p>
+	<ul class='javatreec'>
+		<li class='ja'>{@link oaj.http.annotation.Content}
+		<li class='ja'>{@link oaj.http.annotation.Header}
+		<li class='ja'>{@link oaj.http.annotation.Query}
+		<li class='ja'>{@link oaj.http.annotation.FormData}
+		<li class='ja'>{@link oaj.http.annotation.Path}
+		<li class='ja'>{@link oaj.http.annotation.Response}
+		<li class='ja'>{@link oaj.http.annotation.ResponseHeader}
+	</ul>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.OpenApiDetails/01.jm.OpenApiMethodology.html b/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.OpenApiDetails/01.jm.OpenApiMethodology.html
new file mode 100644
index 000000000..9ff0bd55c
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.OpenApiDetails/01.jm.OpenApiMethodology.html
@@ -0,0 +1,159 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'OpenAPI Methodology', updated:'8.2.0'} 
+
+<div class='topic'>
+	<p>
+		Unlike the other Juneau serializers and parsers that convert input and output directly to-and-from POJOs,
+		the OpenAPI serializers and parsers use intermediate objects based on the <c>type</c> and <c>format</c>
+		of the schema.
+	</p>
+	<p>
+		The following table shows the "natural" intermediate type of the object based on the <c>type/format</c>:
+	</p>
+	<table class='styled w800'>
+		<tr><th>Type</th><th>Format</th><th>Intermediate Java Type</th></tr>
+		<tr class='dark bb'>
+			<td rowspan='4'><c>string</c> or empty</td>
+			<td><c>byte<br>binary<br>binary-spaced</c></td>
+			<td><c><jk>byte</jk>[]</c></td>
+		</tr>
+		<tr class='dark bb'>
+			<td><c>date<br>date-time</c></td>
+			<td>{@link java.util.Calendar}</td>
+		</tr>
+		<tr class='dark bb'>
+			<td><c>uon</c></td>
+			<td>No intermediate type.<br>(serialized directly to/from POJO)</td>
+		</tr>
+		<tr class='dark bb'>
+			<td>empty</td>
+			<td>{@link java.lang.String}</td>
+		</tr>
+		<tr class='light bb'>
+			<td rowspan='1'><c>boolean</c></td>
+			<td>empty</td>
+			<td>{@link java.lang.Boolean}</td>
+		</tr>
+		<tr class='dark bb'>
+			<td rowspan='2'><c>integer</c></td>
+			<td><c>int32</c></td>
+			<td>{@link java.lang.Integer}</td>
+		</tr>
+		<tr class='dark bb'>
+			<td><c>int64</c></td>
+			<td>{@link java.lang.Long}</td>
+		</tr>
+		<tr class='light bb'>
+			<td rowspan='2'><c>number</c></td>
+			<td><c>float</c></td>
+			<td>{@link java.lang.Float}</td>
+		</tr>
+		<tr class='light bb'>
+			<td><c>double</c></td>
+			<td>{@link java.lang.Double}</td>
+		</tr>
+		<tr class='dark bb'>
+			<td rowspan='2'><c>array</c></td>
+			<td>empty</td>
+			<td>Arrays of intermediate types on this list.</td>
+		</tr>
+		<tr class='dark bb'>
+			<td><c>uon</c></td>
+			<td>No intermediate type.<br>(serialized directly to/from POJO)</td>
+		</tr>
+		<tr class='light bb'>
+			<td rowspan='2'><c>object</c></td>
+			<td>empty</td>
+			<td><c>Map&lt;String,Object&gt;</c></td>
+		</tr>
+		<tr class='light bb'>
+			<td><c>uon</c></td>
+			<td>No intermediate type.<br>(serialized directly to/from POJO)</td>
+		</tr>
+	</table>
+	<p>
+		The valid POJO types for serializing/parsing are based on the intermediate types above.
+		As a general rule, any POJOs that are the intermediate type or transformable to or from
+		the intermediate type are valid POJO types.
+	</p>
+	<p>
+		For example, the following POJO type can be transformed to and from a byte array.
+	</p>
+	<p class='bjava'>
+		|	<jc>// Sample POJO class convertable to and from a byte[].</jc>
+		|	<jk>public class</jk> MyPojo {
+		|		
+		|		<jc>// Constructor used by parser.</jc>
+		|		<jk>public</jk> MyPojo(<jk>byte</jk>[] <jv>value</jv>) {...}
+		|	
+		|		<jc>// toX method used by serializer.</jc>
+		|		<jk>public byte</jk>[] toBytes() {...}
+		|	}
+	</p>
+	<p>
+		This example shows how that POJO can be converted to a BASE64-encoded string.
+	</p>
+	<p class='bjava'>
+		|	<jc>// Construct a POJO.</jc>
+		|	MyPojo <jv>myPojo</jv> = ...;
+		|	
+		|	<jc>// Define a schema.</jc>
+		|	HttpPartSchema <jv>schema</jv> = HttpPartSchema.<jsm>tByte</jsm>().build();
+		|
+		|	<jc>// Convert POJO to BASE64-encoded string.</jc>
+		|	HttpPartSerializer <jv>serializer</jv> = OpenApiSerializer.<jsf>DEFAULT</jsf>;
+		|	String <jv>httpPart</jv> = <jv>serializer</jv>.serialize(<jv>schema</jv>, <jv>myPojo</jv>);
+		|	
+		|	<jc>// Convert BASE64-encoded string back into a POJO.</jc>
+		|	HttpPartParser <jv>parser</jv> = OpenApiParser.<jsf>DEFAULT</jsf>;
+		|	<jv>myPojo</jv> = <jv>parser</jv>.parse(<jv>schema</jv>, <jv>httpPart</jv>, MyPojo.<jk>class</jk>);
+	</p>
+	<p>
+		In addition to defining format, the schema also allows for validations of the serialized form.
+	</p>
+	<p class='bjava'>
+		|	<jc>// Construct a POJO.</jc>
+		|	MyPojo <jv>myPojo</jv> = ...;
+		|	
+		|	<jc>// Define a schema.</jc>
+		|	<jc>// Serialized string must be no smaller than 100 characters.</jc>
+		|	HttpPartSchema <jv>schema</jv> = HttpPartSchema.<jsm>tByte</jsm>().minLength(100).build();
+		|
+		|	<jc>// Convert POJO to BASE64-encoded string.</jc>
+		|	HttpPartSerializer <jv>serializer</jv> = OpenApiSerializer.<jsf>DEFAULT</jsf>;
+		|	String <jv>httpPart</jv>;
+		|	<jk>try</jk> {
+		|		<jv>httpPart</jv> = <jv>serializer</jv>.serialize(<jv>schema</jv>, <jv>myPojo</jv>);
+		|	} <jk>catch</jk> (SchemaValidationException <jv>e</jv>) {
+		|		<jc>// Oops, output too small.</jc>
+		|	}
+		|	
+		|	<jc>// Convert BASE64-encoded string back into a POJO.</jc>
+		|	HttpPartParser <jv>parser</jv> = OpenApiParser.<jsf>DEFAULT</jsf>;
+		|	<jk>try</jk> {
+		|		<jv>myPojo</jv> = <jv>parser</jv>.parse(<jv>schema</jv>, <jv>httpPart</jv>, MyPojo.<jk>class</jk>);
+		|	} <jk>catch</jk> (SchemaValidationException <jv>e</jv>) {
+		|		<jc>// Oops, input too small.</jc>
+		|	}
+	</p>
+	<p>
+		It looks simple, but the implementation is highly sophisticated being able to serialize and parse and validate using complex schemas.
+	</p>
+	<p>
+		The next sections go more into depth on serializing and parsing various POJO types.
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.OpenApiDetails/02.jm.OpenApiSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.OpenApiDetails/02.jm.OpenApiSerializers.html
new file mode 100644
index 000000000..e32942402
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.OpenApiDetails/02.jm.OpenApiSerializers.html
@@ -0,0 +1,527 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'OpenAPI Serializers', updated:'8.2.0,9.0.0'} 
+
+<div class='topic'>
+	<p>
+		The {@link oaj.oapi.OpenApiSerializer} class is used to convert POJOs to HTTP parts.
+	</p>
+	<p>
+		The class hierarchy for the builder of this serializer is:
+	</p>
+	<ul class='javatree'>
+		<li class='jac'>{@link oaj.Context.Builder}
+			<ul>
+				<li class='jac'>{@link oaj.BeanContextable.Builder}
+					<ul>
+						<li class='jac'>{@link oaj.BeanTraverseContext.Builder}
+							<ul>
+								<li class='jac'>{@link oaj.serializer.Serializer.Builder}
+									<ul>
+										<li class='jac'>{@link oaj.serializer.WriterSerializer.Builder}
+											<ul>
+												<li class='jc'>{@link oaj.uon.UonSerializer.Builder}
+													<ul>
+														<li class='jc'>{@link oaj.oapi.OpenApiSerializer.Builder}
+													</ul>
+												</li>
+											</ul>
+										</li>
+									</ul>
+								</li>
+							</ul>
+						</li>
+					</ul>
+				</li>
+			</ul>
+		</li>
+	</ul>
+	<p>
+		Refer to the builder javadocs for configurable settings.
+	</p>
+	<p>
+		Later we'll describe how to use HTTP-Part annotations to define OpenAPI schemas for serialization and parsing
+		of HTTP parts.  
+		The following example is a preview showing an HTTP body defined as pipe-delimited list of comma-delimited numbers (e.g. <js>"1,2,3|4,5,6|7,8,9"</js>):
+	</p>
+	<p class='bjava'>
+		|	<ja>@RestPost</ja>(<js>"/2dLongArray"</js>)	
+		|	<jk>public void</jk> post2dLongArray(
+		|		<ja>@Content</ja>(
+		|			schema=<ja>@Schema</ja>(
+		|				type=<js>"array"</js>,
+		|				collectionFormat=<js>"pipes"</js>,
+		|				items=<ja>@Items</ja>(
+		|					type=<js>"array"</js>,
+		|					collectionFormat=<js>"csv"</js>,
+		|					items=<ja>@SubItems</ja>(
+		|						type=<js>"integer"</js>, 
+		|						format=<js>"int64"</js>,
+		|						minimum=<js>"0"</js>,
+		|						maximum=<js>"100"</js>
+		|						minLength=1,
+		|						maxLength=10
+		|					)
+		|				)
+		|				minLength=1,
+		|				maxLength=10
+		|			)
+		|		)
+		|		Long[][] body
+		|	) {...}
+		|
+		|	<jc>// Alternate shortened format.</jc>
+		|	<ja>@RestPost</ja>(<js>"/2dLongArray"</js>)	
+		|	<jk>public void</jk> post2dLongArray(
+		|		<ja>@Content</ja>(
+		|			schema=<ja>@Schema</ja>(
+		|				t=<js>"array"</js>,
+		|				cf=<js>"pipes"</js>,
+		|				i=<ja>@Items</ja>(
+		|					t=<js>"array"</js>,
+		|					cf=<js>"csv"</js>,
+		|					i=<ja>@SubItems</ja>(
+		|						t=<js>"integer"</js>, 
+		|						f=<js>"int64"</js>,
+		|						min=<js>"0"</js>,
+		|						max=<js>"100"</js>
+		|						minl=1,
+		|						maxl=10
+		|					)
+		|				)
+		|				minl=1,
+		|				maxl=10
+		|			)
+		|		)
+		|		Long[][] body
+		|	) {...}
+	</p>
+	<p>
+		Under-the-covers, this gets converted to the following schema object:
+	</p>
+	<p class='bjava'>
+		|	HttpPartSchema <jv>schema</jv> = HttpPartSchema.<jsm>create</jsm>()
+		|		.items(
+		|			HttpPartSchema.<jsm>create</jsm>()
+		|				.type(<js>"array"</js>)
+		|				.collectionFormat(<js>"pipes"</js>)
+		|				.items(
+		|					HttpPartSchema.<jsm>create</jsm>()
+		|						.type(<js>"array"</js>)
+		|						.collectionFormat(<js>"csv"</js>)
+		|						.items(
+		|							HttpPartSchema.<jsm>create</jsm>()
+		|								.type(<js>"integer"</js>) 
+		|								.format(<js>"int64"</js>)
+		|								.minimum(0)
+		|								.maximum(100)
+		|								.minLength(1)
+		|								.maxLength(10)
+		|						)
+		|				)
+		|		)
+		|		.build();
+	</p>
+	<p>
+		Various convenience methods exist for shortening this code.
+	</p>
+	<p class='bjava'>
+		|	HttpPartSchema <jv>schema</jv> = HttpPartSchema.<jsm>tArrayPipes</jsm>(
+		|		<jsm>tArrayCsv</jsm>(
+		|			<jsm>tInt64</jsm>().minimum(0).maximum(100).minLength(1).maxLength(10)
+		|		)
+		|	).build();
+	</p>
+	<p>
+		The following code shows how the schema above can be used to create our pipe+csv list of numbers:
+	</p>
+	<p class='bjava'>
+		|	<jc>// Our POJO being serialized.</jc>
+		|	Long[][] <jv>input</jv> = ....
+		|	
+		|	<jc>// The serializer to use.</jc>
+		|	HttpPartSerializer <jv>serializer</jv> = OpenApiSerializer.<jsf>DEFAULT</jsf>;
+		|	
+		|	<jc>// Convert POJO to a string.</jc>
+		|	<jk>try</jk> {
+		|		String <jv>httpPart</jv> = <jv>serializer</jv>.serialize(<jv>schema</jv>, <jv>input</jv>);
+		|	} <jk>catch</jk> (SchemaValidationException <jv>e</jv>) {
+		|		<jc>// Oops, one of the restrictions were not met.</jc>
+		|	}
+	</p>
+	<p>
+		As a general rule, any POJO convertible to the intermediate type for the <c>type/format</c> of the schema can
+		be serialized using the OpenAPI serializer.
+		Here are the rules of POJO types allowed for various type/format combinations:
+	</p>
+	<table class='styled w800'>
+		<tr><th>Type</th><th>Format</th><th>Valid parameter types</th></tr>
+		<tr class='dark bb'>
+			<td rowspan='4'><c>string</c> or empty</td>
+			<td><c>byte<br>binary<br>binary-spaced</c></td>
+			<td>
+				<ul>
+					<li><c><jk>byte</jk>[]</c> (default)
+					<li>{@link java.io.InputStream}
+					<li>{@link java.io.Reader} - Read into String and then converted using {@link java.lang.String#getBytes()}.
+					<li>{@link java.lang.Object} - Converted to String and then converted using {@link java.lang.String#getBytes()}.
+					<li>Any POJO transformable to a <c><jk>byte</jk>[]</c> via the following methods:
+						<ul>
+							<li><c><jk>public byte</jk>[] toBytes() {...}</c>
+							<li><c><jk>public byte</jk>[]</jk> toFoo() {...}</c> (any method name starting with "to")
+						</ul>
+					<li>Any POJO transformable to a <c><jk>byte</jk>[]</c> via an {@link oaj.swap.ObjectSwap}.
+				</ul>
+			</td>
+		</tr>
+		<tr class='dark bb'>
+			<td><c>date<br>date-time</c></td>
+			<td>
+				<ul>
+					<li>{@link java.util.Calendar} (default)
+					<li>{@link java.util.Date}
+					<li>Any POJO transformable to a {@link java.util.Calendar} via the following methods:
+						<ul>
+							<li><c><jk>public</jk> Calendar toCalendar() {...}</c>
+							<li><c><jk>public</jk> Calendar toFoo() {...}</c> (any method name starting with "to")
+						</ul>
+					<li>Any POJO transformable to a {@link java.util.Calendar} via an {@link oaj.swap.ObjectSwap}.
+				</ul>
+			</td>
+		</tr>
+		<tr class='dark bb'>
+			<td><c>uon</c></td>
+			<td>
+				<ul>
+					<li>Any {@doc jm.PojoCategories Serializable POJO} type.
+				</ul>
+			</td>
+		</tr>
+		<tr class='dark bb'>
+			<td>empty</td>
+			<td>
+				<ul>
+					<li>{@link java.lang.String} (default)
+					<li>Any POJO transformable to a {@link java.lang.String} via the following methods:
+						<ul>
+							<li><c><jk>public</jk> String toString() {...}</c>
+						</ul>
+					<li>Any POJO transformable to a {@link java.lang.String} via an {@link oaj.swap.ObjectSwap}.
+				</ul>
+			</td>
+		</tr>
+		<tr class='light bb'>
+			<td rowspan='1'><c>boolean</c></td>
+			<td>empty</td>
+			<td>
+				<ul>
+					<li>{@link java.lang.Boolean} (default)
+					<li><jk>boolean</jk>
+					<li>{@link java.lang.String} - Converted to a {@link java.lang.Boolean}.
+					<li>Any POJO transformable to a {@link java.lang.Boolean} via the following methods:
+						<ul>
+							<li><c><jk>public</jk> Boolean toBoolean() {...}</c>
+							<li><c><jk>public</jk> Boolean toFoo() {...}</c> (any method name starting with "to")
+						</ul>
+					<li>Any POJO transformable to a {@link java.lang.Boolean} via an {@link oaj.swap.ObjectSwap}.
+				</ul>
+			</td>
+		</tr>
+		<tr class='dark bb'>
+			<td rowspan='2'><c>integer</c></td>
+			<td><c>int32</c></td>
+			<td>
+				<ul>
+					<li>{@link java.lang.Integer} (default)
+					<li><jk>int</jk>
+					<li>{@link java.lang.String} - Converted to an {@link java.lang.String}.
+					<li>Any POJO transformable to an {@link java.lang.Integer} via the following methods:
+						<ul>
+							<li><c><jk>public</jk> Integer toInteger() {...}</c>
+							<li><c><jk>public</jk> Integer toFoo() {...}</c> (any method name starting with "to")
+						</ul>
+					<li>Any POJO transformable to an {@link java.lang.Integer} via an {@link oaj.swap.ObjectSwap}.
+				</ul>
+			</td>
+		</tr>
+		<tr class='dark bb'>
+			<td><c>int64</c></td>
+			<td>
+				<ul>
+					<li>{@link java.lang.Long} (default)
+					<li><jk>long</jk>
+					<li>{@link java.lang.String} - Converted to a {@link java.lang.Long}.
+					<li>Any POJO transformable to a {@link java.lang.Long} via the following methods:
+						<ul>
+							<li><c><jk>public</jk> Long toLong() {...}</c>
+							<li><c><jk>public</jk> Long toFoo() {...}</c> (any method name starting with "to")
+						</ul>
+					<li>Any POJO transformable to a {@link java.lang.Long} via an {@link oaj.swap.ObjectSwap}.
+				</ul>
+			</td>
+		</tr>
+		<tr class='light bb'>
+			<td rowspan='2'><c>number</c></td>
+			<td><c>float</c></td>
+			<td>
+				<ul>
+					<li>{@link java.lang.Float} (default)
+					<li><jk>float</jk>
+					<li>{@link java.lang.String} - Converted to a {@link java.lang.Float}.
+					<li>Any POJO transformable to a {@link java.lang.Float} via the following methods:
+						<ul>
+							<li><c><jk>public</jk> Float toFloat() {...}</c>
+							<li><c><jk>public</jk> Float toFoo() {...}</c> (any method name starting with "to")
+						</ul>
+					<li>Any POJO transformable to a {@link java.lang.Float} via an {@link oaj.swap.ObjectSwap}.
+				</ul>
+			</td>
+		</tr>
+		<tr class='light bb'>
+			<td><c>double</c></td>
+			<td>
+				<ul>
+					<li>{@link java.lang.Double} (default)
+					<li><jk>double</jk>
+					<li>{@link java.lang.String} - Converted to a {@link java.lang.Double}.
+					<li>Any POJO transformable to a {@link java.lang.Double} via the following methods:
+						<ul>
+							<li><c><jk>public</jk> Double toDouble() {...}</c>
+							<li><c><jk>public</jk> Double toFoo() {...}</c> (any method name starting with "to")
+						</ul>
+					<li>Any POJO transformable to a {@link java.lang.Double} via an {@link oaj.swap.ObjectSwap}.
+				</ul>
+			</td>
+		</tr>
+		<tr class='dark bb'>
+			<td rowspan='2'><c>array</c></td>
+			<td>empty</td>
+			<td>
+				<ul>
+					<li>Arrays or Collections of any defaults on this list.
+					<li>Any POJO transformable to arrays of the default types (e.g. <c>Integer[]</c>, <c>Boolean[][]</c>, etc...).
+						<br>For example:
+						<ul>
+							<li><c><jk>public</jk> Boolean[][] toFoo() {...}</c> (any method name starting with "to")
+						</ul>
+					<li>Any POJO transformable to arrays of the default types via an {@link oaj.swap.ObjectSwap}
+				</ul>
+			</td>
+		</tr>
+		<tr class='dark bb'>
+			<td><c>uon</c></td>
+			<td>
+				<ul>
+					<li>Any {@doc jm.PojoCategories Serializable POJO} type.
+				</ul>
+			</td>
+		</tr>
+		<tr class='light bb'>
+			<td rowspan='2'><c>object</c></td>
+			<td>empty</td>
+			<td>
+				<ul>
+					<li><c>Map&lt;String,Object&gt;</c> (default)
+					<li>Beans with properties of anything on this list.
+					<li>Any POJO transformable to a map via an {@link oaj.swap.ObjectSwap}
+				</ul>
+			</td>
+		</tr>
+		<tr class='light bb'>
+			<td><c>uon</c></td>
+			<td>
+				<ul>
+					<li>Any {@doc jm.PojoCategories Serializable POJO} type.
+				</ul>
+			</td>
+		</tr>
+	</table>
+	<p>
+		For arrays, an example of "Any POJO transformable to arrays of the default types" is:
+	</p>
+	<p class='bjava'>
+		|	<jc>// Sample POJO class convertable to a Long[][].</jc>
+		|	<jk>public class</jk> MyPojo {
+		|		
+		|		<jc>// toX method used by serializer.</jc>
+		|		<jk>public</jk> Long[][] to2dLongs() {...}
+		|	}
+	</p>
+	<p>
+		In the example above, our POJO class can be used to create our pipe-delimited list of comma-delimited numbers: 
+	</p>
+	<p class='bjava'>
+		|	<jc>// Our POJO being serialized.</jc>
+		|	MyPojo <jv>input</jv> = ....
+		|	
+		|	<jc>// The serializer to use.</jc>
+		|	HttpPartSerializer <jv>serializer</jv> = OpenApiSerializer.<jsf>DEFAULT</jsf>;
+		|	
+		|	<jc>// Convert POJO to a string.</jc>
+		|	<jk>try</jk> {
+		|		String <jv>httpPart</jv> = <jv>serializer</jv>.serialize(<jv>schema</jv>, <jv>input</jv>);
+		|	} <jk>catch</jk> (SchemaValidationException <jv>e</jv>) {
+		|		<jc>// Oops, one of the restrictions were not met.</jc>
+		|	}
+	</p>
+	<p>
+		The <c>object</c> type is not officially part of the OpenAPI standard.  
+		However, Juneau supports serializing Maps and beans to HTTP parts using UON notation.
+	</p>
+	<p>
+		The following shows an example of a bean with several properties of various types.
+	</p>
+	<p class='bjava'>
+		|	<jk>public class</jk> MyBean {
+		|		<jk>private static byte</jk>[] <jsf>FOOB</jsf> = <js>"foo"</js>.getBytes();
+		|
+		|		<jk>public</jk> String <jf>f1</jf> = <js>"foo"</js>;
+		|		<jk>public byte</jk>[] <jf>f2</jf> = <jsf>FOOB</jsf>;
+		|		<jk>public byte</jk>[] <jf>f3</jf> = <jsf>FOOB</jsf>;
+		|		<jk>public byte</jk>[] <jf>f4</jf> = <jsf>FOOB</jsf>;
+		|		<jk>public</jk> Calendar <jf>f5</jf> = <jsm>parseIsoCalendar</jsm>(<js>"2012-12-21T12:34:56Z"</js>);
+		|		<jk>public</jk> String <jf>f6</jf> = <js>"foo"</js>;
+		|		<jk>public int</jk> <jf>f7</jf> = 1;
+		|		<jk>public</jk> Long <jf>f8</jf> = 2l;
+		|		<jk>public float</jk> <jf>f9</jf> = 1.0;
+		|		<jk>public</jk> Double <jf>f10</jf> = 1.0;
+		|		<jk>public</jk> Boolean <jf>f11</jf> = <jk>true</jk>;
+		|		<jk>public</jk> Object <jf>fExtra</jf> = "1";
+		|	}
+	</p>
+	<p>
+		We define the following schema:
+	</p>
+	<p class='bjava'>
+		|	<jk>import static</jk> org.apache.juneau.httppart.HttpPartSchema.*;
+		|	
+		|	HttpPartSchema <jv>schema</jv> = tObject()
+		|		.prop(<js>"f1"</js>, <jsm>tString</jsm>())
+		|		.prop(<js>"f2"</js>, <jsm>tByte</jsm>())
+		|		.prop(<js>"f3"</js>, <jsm>tBinary</jsm>())
+		|		.prop(<js>"f4"</js>, <jsm>tBinarySpaced</jsm>())
+		|		.prop(<js>"f5"</js>, <jsm>tDateTime</jsm>(>))
+		|		.prop(<js>"f6"</js>, <jsm>tUon</jsm>())
+		|		.prop(<js>"f7"</js>, <jsm>tInteger</jsm>())
+		|		.prop(<js>"f8"</js>, <jsm>tInt64</jsm>())
+		|		.prop(<js>"f9"</js>, <jsm>tNumber</jsm>())
+		|		.prop(<js>"f10"</js>, <jsm>tDouble</jsm>())
+		|		.prop(<js>"f11"</js>, <jsm>tBoolean</jsm>())
+		|		.ap(<jsm>tInteger</jsm>())
+		|		.build();
+	</p>
+	<p>
+		Then we serialize our bean:
+	</p>
+	<p class='bjava'>
+		|	HttpPartSerializer <jv>serializer</jv> = OpenApiSerializer.<jsf>DEFAULT</jsf>;
+		|	String <jv>httpPart</jv> = <jv>serializer</jv>.serialize(<jv>schema</jv>, <jk>new</jk> MyBean());
+	</p>
+	<p>
+		The results of this serialization is shown below:
+	</p>
+	<p class='buon'>
+		|	(
+		|		f1=foo,
+		|		f2=Zm9v,
+		|		f3=666F6F,
+		|		f4='66 6F 6F',
+		|		f5=2012-12-21T12:34:56Z,
+		|		f6=foo,
+		|		f7=1,
+		|		f8=2,
+		|		f9=1.0,
+		|		f10=1.0,
+		|		f11=true,
+		|		fExtra=1
+		|	)
+	</p>
+	<p>
+		The following is an example of a bean with various array property types:
+	</p>
+	<p class='bjava'>
+		|	<jk>public class</jk> MyBean {
+		|		<jk>private static byte</jk>[] <jsf>FOOB</jsf> = <js>"foo"</js>.getBytes();
+		|	
+		|		<jk>public</jk> String[] <jf>f1</jf> = {<js>"a,b"</js>,<jk>null</jk>}, 
+		|		<jk>public byte</jk>[][] <jf>f2</jf> = <jk>new byte</jk>[][]{<jsf>FOOB</jsf>,<jk>null</jk>}, 
+		|		<jk>public byte</jk>[][] <jf>f3</jf> = <jk>new byte</jk>[][]{<jsf>FOOB</jsf>,<jk>null</jk>},
+		|		<jk>public byte</jk>[][] <jf>f4</jf> = <jk>new byte</jk>[][]{<jsf>FOOB</jsf>,<jk>null</jk>},
+		|		<jk>public</jk> Calendar[] <jf>f5</jf> = <jk>new</jk> Calendar[]{<jsm>parseIsoCalendar</jsm>(<js>"2012-12-21T12:34:56Z"</js>),<jk>null</jk>},
+		|		<jk>public</jk> String[] <jf>f6</jf> = {<js>"a"</js>,<js>"b"</js>,<jk>null</jk>},
+		|		<jk>public int</jk>[] <jf>f7</jf> = <jk>new int</jk>[]{1,2,<jk>null</jk>}, 
+		|		<jk>public</jk> Integer[] <jf>f8</jf> = <jk>new</jk> Integer[]{3,4,<jk>null</jk>}, 
+		|		<jk>public float</jk>[] <jf>f9</jf> = <jk>new float</jk>[]{1f,2f,<jk>null</jk>}, 
+		|		<jk>public</jk> Float[] <jf>f10</jf> = <jk>new</jk> Float[]{3f,4f,<jk>null</jk>}, 
+		|		<jk>public</jk> Boolean[] <jf>f11</jf> = <jk>new</jk> Boolean[]{<jk>true</jk>,<jk>false</jk>,<jk>null</jk>}, 
+		|		<jk>public</jk> Object[] <jf>fExtra</jf> = <jk>new</jk> Object[]{1,<js>"2"</js>,<jk>null</jk>};
+		|	}
+	</p>
+	<p>
+		For this bean, we define the following schema:
+	</p>
+	<p class='bjava'>
+		|	<jk>import static</jk> org.apache.juneau.httppart.HttpPartSchema.*;
+		|
+		|	HttpPartSchema <jv>schema</jv> = <jsm>tObject</jsm>()
+		|		.prop(<js>"f1"</js>, <jsm>tArray</jsm>(<jsm>tString</jsm>()))
+		|		.prop(<js>"f2"</js>, <jsm>tArray</jsm>(<jsm>tByte</jsm>()))
+		|		.prop(<js>"f3"</js>, <jsm>tArray</jsm>(<jsm>tBinary</jsm>()))
+		|		.prop(<js>"f4"</js>, <jsm>tArray</jsm>(<jsm>tBinarySpaced</jsm>()))
+		|		.prop(<js>"f5"</js>, <jsm>tArray</jsm>(<jsm>tDateTime</jsm>()))
+		|		.prop(<js>"f6"</js>, <jsm>tArray</jsm>(<jsm>tUon</jsm>()))
+		|		.prop(<js>"f7"</js>, <jsm>tArray</jsm>(<jsm>tInteger</jsm>()))
+		|		.prop(<js>"f8"</js>, <jsm>tArray</jsm>(<jsm>tInt64</jsm>()))
+		|		.prop(<js>"f9"</js>, <jsm>tArray</jsm>(<jsm>tNumber</jsm>()))
+		|		.prop(<js>"f10"</js>, <jsm>tArray</jsm>(<jsm>tDouble</jsm>()))
+		|		.prop(<js>"f11"</js>, <jsm>tArray</jsm>(<jsm>tBoolean</jsm>()))
+		|		.ap(<jsm>tArray</jsm>(<jsm>tInteger</jsm>()))
+		|		.build();
+	</p>
+	<p>
+		Serializing this bean produces the following output:
+	</p>
+	<p class='buon'>
+		|	(
+		|		f1=@('a,b',null),
+		|		f2=@(Zm9v,null),
+		|		f4=@(2012-12-21T12:34:56Z,null),
+		|		f5=@(666F6F,null),
+		|		f6=@('66 6F 6F',null),
+		|		f7=@(a,b,null),
+		|		f8=@(1,2,null),
+		|		f9=@(3,4,null),
+		|		f10=@(1.0,2.0,null),
+		|		f11=@(3.0,4.0,null),
+		|		f12=@(true,false,null),
+		|		fExtra=@(1,2,null)
+		|	)
+	</p>
+	<ul class='notes'>
+		<li class='note'>
+			Array properties can also use CSV/SSV/PIPES for array notation.
+			<br>Various notations can be mixed throughout.
+		<li class='note'>
+			Schemas and POJOs can be defined arbitrarily deep.
+		<li class='note'>
+			Schemas are optional.
+			They can be skipped or partially defined.
+		<li class='note'>
+			We make our best attempt to convert the input to the matching type.  
+			However, you will get <c>SerializeExceptions</c> if you attempt an impossible conversion.
+			(e.g. trying to serialize the string "foo" as a boolean). 
+	</ul>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.OpenApiDetails/03.jm.OpenApiParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.OpenApiDetails/03.jm.OpenApiParsers.html
new file mode 100644
index 000000000..1459d392a
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.OpenApiDetails/03.jm.OpenApiParsers.html
@@ -0,0 +1,368 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'OpenAPI Parsers', updated: '8.2.0,9.0.0'} 
+
+<div class='topic'>
+	<p>
+		The {@link oaj.oapi.OpenApiParser} class is used to convert HTTP parts back into POJOs.
+	</p>
+	<p>
+		The class hierarchy for the builder of this parser is:
+	</p>
+	<ul class='javatree'>
+		<li class='jac'>{@link oaj.Context.Builder}
+			<ul>
+				<li class='jac'>{@link oaj.BeanContextable.Builder}
+					<ul>
+						<li class='jac'>{@link oaj.parser.Parser.Builder}
+							<ul>
+								<li class='jac'>{@link oaj.parser.ReaderParser.Builder}
+									<ul>
+										<li class='jc'>{@link oaj.uon.UonParser.Builder}
+											<ul>
+												<li class='jc'>{@link oaj.oapi.OpenApiParser.Builder}
+											</ul>
+										</li>
+									</ul>
+								</li>
+							</ul>
+						</li>
+					</ul>
+				</li>
+			</ul>
+		</li>
+	</ul>
+	<p>
+		Refer to the builder javadocs for configurable settings.
+	</p>
+	<p>
+		The following is the previous example of a schema that defines the format of a pipe-delimited list of comma-delimited numbers (e.g. <js>"1,2,3|4,5,6|7,8,9"</js>):
+	</p>
+	<p class='bjava'>
+		|	<jk>import static</jk> org.apache.juneau.httppart.HttpPartSchema.*;
+		|
+		|	HttpPartSchema <jv>schema</jv> = <jsm>tArrayPipes</jsm>(
+		|		<jsm>tArrayCsv</jsm>(
+		|			<jsm>tInt64</jsm>().min(0).max(100).minl(1).maxl(10)
+		|		)
+		|	).build();
+	</p>
+	<p>
+		The following code shows how the schema above can be used to parse our input into a POJO:
+	</p>
+	<p class='bjava'>
+		|	<jc>// Our input being parsed.</jc>
+		|	String <jv>input</jv> = <js>"1,2,3|4,5,6|7,8,9"</js>
+		|	
+		|	<jc>// The parser to use.</jc>
+		|	HttpPartParser <jv>parser</jv> = OpenApiParser.<jsf>DEFAULT</jsf>;
+		|	
+		|	<jc>// Convert string to a POJO.</jc>
+		|	<jk>try</jk> {
+		|		Long[][] <jv>pojo</jv> = <jv>parser</jv>.parse(<jv>schema</jv>, <jv>input</jv>, Long[][].<jk>class</jk>);
+		|	} <jk>catch</jk> (SchemaValidationException <jv>e</jv>) {
+		|		<jc>// Oops, one of the restrictions were not met.</jc>
+		|	}
+	</p>
+	<p>
+		As a general rule, any POJO convertible from the intermediate type for the <c>type/format</c> of the schema can
+		be parsed using the OpenAPI parser.
+		Here are the rules of POJO types allowed for various type/format combinations:
+	</p>
+	<table class='styled w800'>
+		<tr><th>Type</th><th>Format</th><th>Valid parameter types</th></tr>
+		<tr class='dark bb'>
+			<td rowspan='4'><c>string</c> or empty</td>
+			<td><c>byte<br>binary<br>binary-spaced</c></td>
+			<td>
+				<ul>
+					<li><c><jk>byte</jk>[]</c> (default)
+					<li>{@link java.io.InputStream} - Returns a {@link java.io.ByteArrayInputStream}.
+					<li>{@link java.io.Reader} - Returns a {@link java.io.InputStreamReader} wrapped around a {@link java.io.ByteArrayInputStream}.
+					<li>{@link java.lang.String} - Constructed using {@link java.lang.String#String(byte[])}.
+					<li>{@link java.lang.Object} - Returns the default <c><jk>byte</jk>[]</c>.
+					<li>Any POJO transformable from a <c><jk>byte</jk>[]</c> (via constructors or static create methods).
+				</ul>
+			</td>
+		</tr>
+		<tr class='dark bb'>
+			<td><c>date<br>date-time</c></td>
+			<td>
+				<ul>
+					<li>{@link java.util.Calendar} (default)
+					<li>{@link java.util.Date}
+					<li>{@link java.util.GregorianCalendar}
+					<li>{@link java.lang.String} - Converted using {@link java.util.Calendar#toString()}.
+					<li>{@link java.lang.Object} - Returns the default {@link java.util.Calendar}.
+					<li>Any POJO transformable from a {@link java.util.Calendar} (via constructors or static create methods).
+				</ul>
+			</td>
+		</tr>
+		<tr class='dark bb'>
+			<td><c>uon</c></td>
+			<td>
+				<ul>
+					<li>Any {@doc jm.PojoCategories Parsable POJO} type.
+				</ul>
+			</td>
+		</tr>
+		<tr class='dark bb'>
+			<td>empty</td>
+			<td>
+				<ul>
+					<li>{@link java.lang.String} (default)
+					<li>{@link java.lang.Object} - Returns the default {@link java.lang.String}.
+					<li>Any POJO transformable from a {@link java.lang.String} (via constructors, static create methods, or swaps).
+				</ul>
+			</td>
+		</tr>
+		<tr class='light bb'>
+			<td rowspan='1'><c>boolean</c></td>
+			<td>empty</td>
+			<td>
+				<ul>
+					<li>{@link java.lang.Boolean} (default)
+					<li><jk>boolean</jk>
+					<li>{@link java.lang.String}
+					<li>{@link java.lang.Object} - Returns the default {@link java.lang.Boolean}.
+					<li>Any POJO transformable from a {@link java.lang.Boolean} (via constructors, static create methods, or swaps).
+				</ul>
+			</td>
+		</tr>
+		<tr class='dark bb'>
+			<td rowspan='2'><c>integer</c></td>
+			<td><c>int32</c></td>
+			<td>
+				<ul>
+					<li>{@link java.lang.Integer} (default)
+					<li>Any subclass of {@link java.lang.Number} 
+					<li>Any primitive number:  (e.g <jk>int</jk>, <jk>float</jk>...)
+					<li>{@link java.lang.String}
+					<li>{@link java.lang.Object} - Returns the default {@link java.lang.Integer}.
+					<li>Any POJO transformable from an {@link java.lang.Integer} (via constructors, static create methods, or swaps).
+				</ul>
+			</td>
+		</tr>
+		<tr class='dark bb'>
+			<td><c>int64</c></td>
+			<td>
+				<ul>
+					<li>{@link java.lang.Long} (default)
+					<li>Any subclass of {@link java.lang.Number} 
+					<li>Any primitive number:  (e.g <jk>int</jk>, <jk>float</jk>...)
+					<li>{@link java.lang.String}
+					<li>{@link java.lang.Object} - Returns the default {@link java.lang.Long}.
+					<li>Any POJO transformable from an {@link java.lang.Long} (via constructors, static create methods, or swaps).
+				</ul>
+			</td>
+		</tr>
+		<tr class='light bb'>
+			<td rowspan='2'><c>number</c></td>
+			<td><c>float</c></td>
+			<td>
+				<ul>
+					<li>{@link java.lang.Float} (default)
+					<li>Any subclass of {@link java.lang.Number} 
+					<li>Any primitive number:  (e.g <jk>int</jk>, <jk>float</jk>...)
+					<li>{@link java.lang.String}
+					<li>{@link java.lang.Object} - Returns the default {@link java.lang.Float}.
+					<li>Any POJO transformable from an {@link java.lang.Float} (via constructors, static create methods, or swaps).
+				</ul>
+			</td>
+		</tr>
+		<tr class='light bb'>
+			<td><c>double</c></td>
+			<td>
+				<ul>
+					<li>{@link java.lang.Double} (default)
+					<li>Any subclass of {@link java.lang.Number} 
+					<li>Any primitive number:  (e.g <jk>int</jk>, <jk>float</jk>...)
+					<li>{@link java.lang.String}
+					<li>{@link java.lang.Object} - Returns the default {@link java.lang.Double}.
+					<li>Any POJO transformable from an {@link java.lang.Double} (via constructors, static create methods, or swaps).
+				</ul>
+			</td>
+		</tr>
+		<tr class='dark bb'>
+			<td rowspan='2'><c>array</c></td>
+			<td>empty</td>
+			<td>
+				<ul>
+					<li>Arrays or Collections of anything on this list.
+					<li>Any POJO transformable from arrays of the default types (e.g. <c>Integer[]</c>, <c>Boolean[][]</c>, etc...).
+				</ul>
+			</td>
+		</tr>
+		<tr class='dark bb'>
+			<td><c>uon</c></td>
+			<td>
+				<ul>
+					<li>Any {@doc jm.PojoCategories Parsable POJO} type.
+				</ul>
+			</td>
+		</tr>
+		<tr class='light bb'>
+			<td rowspan='2'><c>object</c></td>
+			<td>empty</td>
+			<td>
+				<ul>
+					<li><c>Map&lt;String,Object&gt;</c> (default)
+					<li>Beans with properties of anything on this list.
+					<li>Maps with string keys.
+				</ul>
+			</td>
+		</tr>
+		<tr class='light bb'>
+			<td><c>uon</c></td>
+			<td>
+				<ul>
+					<li>Any {@doc jm.PojoCategories Parsable POJO} type.
+				</ul>
+			</td>
+		</tr>
+	</table>
+	<p>
+		Additionally, any of the type above can also be wrapped as {@link java.util.Optional Optionals}.
+	</p>
+	
+	<p>
+		For arrays, an example of "Any POJO transformable from arrays of the default types" is:
+	</p>
+	<p class='bjava'>
+		|	<jc>// Sample POJO class convertable from a Long[][].</jc>
+		|	<jk>public class</jk> MyPojo {
+		|		
+		|		<jc>// Constructor used by parser.</jc>
+		|		<jk>public</jk> MyPojo(Long[][] <jv>from2dLongs</jv>) {...}
+		|	}
+	</p>
+	<p>
+		In the example above, our POJO class can be constructed from our pipe-delimited list of comma-delimited numbers: 
+	</p>
+	<p class='bjava'>
+		|	<jc>// Our input being parsed.</jc>
+		|	String <jv>input</jv> = <js>"1,2,3|4,5,6|7,8,9"</js>
+		|	
+		|	<jc>// The parser to use.</jc>
+		|	HttpPartParser <jv>parser</jv> = OpenApiParser.<jsf>DEFAULT</jsf>;
+		|	
+		|	<jc>// Convert string to a POJO.</jc>
+		|	<jk>try</jk> {
+		|		MyPojo <jv>pojo</jv> = <jv>parser</jv>.parse(<jv>schema</jv>, <jv>input</jv>, MyPojo.<jk>class</jk>);
+		|	} <jk>catch</jk> (SchemaValidationException <jv>e</jv>) {
+		|		<jc>// Oops, one of the restrictions were not met.</jc>
+		|	}
+	</p>
+	<p>
+		Just like serialization, the <c>object</c> type is not officially part of the OpenAPI standard, but
+		Juneau supports parsing HTTP parts in UON notation to Maps and beans.
+	</p>
+	<p>
+		The following shows an example of a bean with several properties of various types.
+	</p>
+	<p class='bjava'>
+		|	<jk>public class</jk> MyBean {
+		|		<jk>public</jk> String <jf>f1</jf>;
+		|		<jk>public byte</jk>[] <jf>f2</jf>;
+		|		<jk>public byte</jk>[] <jf>f3</jf>;
+		|		<jk>public byte</jk>[] <jf>f4</jf>;
+		|		<jk>public</jk> Calendar <jf>f5</jf>;
+		|		<jk>public</jk> String <jf>f6</jf>;
+		|		<jk>public int</jk> <jf>f7</jf>;
+		|		<jk>public</jk> Long <jf>f8</jf>;
+		|		<jk>public float</jk> <jf>f9</jf>;
+		|		<jk>public</jk> Double <jf>f10</jf>;
+		|		<jk>public</jk> Boolean <jf>f11</jf>;
+		|		<jk>public</jk> Object <jf>fExtra</jf>;
+		|	}
+	</p>
+	<p>
+		We define the following schema again:
+	</p>
+	<p class='bjava'>
+		|	<jk>import static</jk> org.apache.juneau.httppart.HttpPartSchema.*;
+		|	
+		|	HttpPartSchema <jv>schema</jv> = <jsm>tObject</jsm>()
+		|		.prop(<js>"f1"</js>, <jsm>tString</jsm>())
+		|		.prop(<js>"f2"</js>, <jsm>tByte</jsm>())
+		|		.prop(<js>"f3"</js>, <jsm>tBinary</jsm>())
+		|		.prop(<js>"f4"</js>, <jsm>tBinarySpaced</jsm>())
+		|		.prop(<js>"f5"</js>, <jsm>tDateTime</jsm>())
+		|		.prop(<js>"f6"</js>, <jsm>tUon</jsm>())
+		|		.prop(<js>"f7"</js>, <jsm>tInteger</jsm>())
+		|		.prop(<js>"f8"</js>, <jsm>tInt64</jsm>())
+		|		.prop(<js>"f9"</js>, <jsm>tNumber</jsm>())
+		|		.prop(<js>"f10"</js>, <jsm>tDouble</jsm>())
+		|		.prop(<js>"f11"</js>, <jsm>tBoolean</jsm>())
+		|		.ap(<jsm>tInteger</jsm>())
+		|		.build();
+	</p>
+	<p>
+		Then we parse our input into our POJO:
+	</p>
+	<p class='bjava'>
+		|	String <jv>input</jv> = 
+		|		<js>"(f1=foo,f2=Zm9v,f3=666F6F,f4='66 6F 6F',f5=2012-12-21T12:34:56Z,f6=foo,"</js>
+		|		+ <js>"f7=1,f8=2,f9=1.0,f10=1.0,f11=true,fExtra=1)"</js>;
+		|	
+		|	HttpPartParser <jv>parser</jv> = OpenApiParser.<jsf>DEFAULT</jsf>;
+		|	MyBean <jv>bean</jv> = <jv>parser</jv>.parse(<jv>schema</jv>, <jv>input</jv>, MyBean.<jk>class</jk>);
+	</p>
+	<p>
+		Note that serializing into generic <c>Object</c> properties would have produced similar results:
+	</p>
+	<p class='bjava'>
+		|	<jk>public class</jk> MyBean {
+		|		<jk>public</jk> Object <jf>f1</jf>;
+		|		<jk>public</jk> Object <jf>f2</jf>;
+		|		<jk>public</jk> Object <jf>f3</jf>;
+		|		<jk>public</jk> Object <jf>f4</jf>;
+		|		<jk>public</jk> Object <jf>f5</jf>;
+		|		<jk>public</jk> Object <jf>f6</jf>;
+		|		<jk>public</jk> Object <jf>f7</jf>;
+		|		<jk>public</jk> Object <jf>f8</jf>;
+		|		<jk>public</jk> Object <jf>f9</jf>;
+		|		<jk>public</jk> Object <jf>f10</jf>;
+		|		<jk>public</jk> Object <jf>f11</jf>;
+		|		<jk>public</jk> Object <jf>fExtra</jf>;
+		|	}
+	</p>
+	<p>
+		We can also parse into Maps as well:
+	</p>
+	<p class='bjava'>
+		|	String <jv>input</jv> = 
+		|		<js>"(f1=foo,f2=Zm9v,f3=666F6F,f4='66 6F 6F',f5=2012-12-21T12:34:56Z,f6=foo,"</js>
+		|		+ <js>"f7=1,f8=2,f9=1.0,f10=1.0,f11=true,fExtra=1)"</js>;
+		|	
+		|	HttpPartParser <jv>parser</jv> = OpenApiParser.<jsf>DEFAULT</jsf>;
+		|	JsonMap <jv>map</jv> = <jv>parser</jv>.parse(<jv>schema</jv>, <jv>input</jv>, JsonMap.<jk>class</jk>);
+	</p>
+	<ul class='notes'>
+		<li class='note'>
+			Array properties can also use CSV/SSV/PIPES for array notation.
+			<br>Various notations can be mixed throughout.
+		<li class='note'>
+			Schemas and POJOs can be defined arbitrarily deep.
+		<li class='note'>
+			Schemas are optional.
+			They can be skipped or partially defined.
+		<li class='note'>
+			We make our best attempt to convert the output to the matching type.  
+			However, you will get <c>ParseExceptions</c> if you attempt an impossible conversion.
+			(e.g. trying to parse the string "foo" into a boolean). 
+	</ul>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/33.jm.BestPractices.html b/juneau-doc/docs/Topics/02.juneau-marshall/33.jm.BestPractices.html
new file mode 100644
index 000000000..197a07bf4
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/33.jm.BestPractices.html
@@ -0,0 +1,42 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'Best Practices'}
+
+<div class='topic'>
+	<ol class='spaced-list'>
+		<li>
+			Reuse instances of serializers and parsers whenever possible.
+			<br>They are designed to be thread safe and maintain internal caches of bean metadata to increase performance.
+		<li>
+			The {@link oaj.BeanTraverseContext.Builder#detectRecursions()} 
+			option can cause a performance penalty of 
+			around 20%.  
+			<br>Therefore, it's recommended that this option be used only when necessary. 
+		<li>
+			In general, JSON serialization and parsing is about 20% faster than XML.  
+			JSON is also more compact than XML.
+			<br>MessagePack is fastest and most compact of all.
+		<li>
+			The RDF parsers are SLOW.
+			<br>RDF simply isn't efficient with node traversal, so creating tree structures out of RDF models
+			is highly inefficient.  	
+		<li>
+			The {@link oaj.parser.Parser} methods that take in {@link oaj.ClassMeta} 
+			parameters are slightly faster than methods that 
+			take in {@link java.lang.Class} or {@link java.lang.Object} parameters, since the latter methods involve 
+			hash lookups to resolve to {@link oaj.ClassMeta} parameters.
+	</ol>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/07.juneau-rest-common.html b/juneau-doc/docs/Topics/07.juneau-rest-common.html
new file mode 100644
index 000000000..6901955de
--- /dev/null
+++ b/juneau-doc/docs/Topics/07.juneau-rest-common.html
@@ -0,0 +1,59 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'juneau-rest-common', created:'9.0.0'}
+
+<div class='topic'>
+	<h5 class='figure'>Maven Dependency</h5>
+	<p class='bxml 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-common<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-common-{@property juneauVersion}.jar 
+	</p>	
+	
+	<h5 class='figure'>OSGi Module</h5>
+	<p class='bcode w500'>
+		|	org.apache.juneau.rest.common_{@property juneauVersion}.jar 
+	</p>	
+	
+	<p>
+		The {@link oaj.http} package contains a slew of useful extensions to the Apache HttpComponents libraries
+		and define APIs used extensively in the REST server and client APIs.
+	</p>
+	<ul class='javatree'>
+		<li class='jp'>{@link oaj.http} - Utility classes used for HTTP parts/headers/entities.
+		<li class='jp'>{@link oaj.http.annotation} - Swagger-based annotations used on both server-side APIs and client-side proxy interfaces.
+		<li class='jp'>{@link oaj.http.entity} - HTTP entity classes.
+		<li class='jp'>{@link oaj.http.header} - HTTP header classes.
+		<li class='jp'>{@link oaj.http.part} - HTTP query/form-data/path classes.
+		<li class='jp'>{@link oaj.http.remote} - Remote proxy interface API
+		<li class='jp'>{@link oaj.http.resource} - HTTP resource classes.
+		<li class='jp'>{@link oaj.http.response} - HTTP response classes.
+	</ul>
+	
+	<p>
+		These APIs extend from the Apache HttpComponents libraries and can be used with libraries based on it such
+		as Apache HttpClient.  The REST Client API described later is built on top of Apache HttpClient and many
+		of the classes defined in this package make up integral components of that API.  Likewise, the APIs
+		defined here are also used in the REST Server APIs also described later.
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/07.juneau-rest-common/01.jrc.org.apache.juneau.http.html b/juneau-doc/docs/Topics/07.juneau-rest-common/01.jrc.org.apache.juneau.http.html
new file mode 100644
index 000000000..4da507cce
--- /dev/null
+++ b/juneau-doc/docs/Topics/07.juneau-rest-common/01.jrc.org.apache.juneau.http.html
@@ -0,0 +1,297 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'org.apache.juneau.http', created:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.http.header} package contains various convenience classes for creating
+		standard HTTP components using static imports.
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.http.HttpHeaders} - Utility class for standard HTTP headers.
+		<li class='jc'>{@link oaj.http.HttpParts} - Utility class for standard HTTP parts.
+		<li class='jc'>{@link oaj.http.HttpEntities} - Utility class for standard HTTP entities.
+		<li class='jc'>{@link oaj.http.HttpResources} - Utility class for standard HTTP resources.
+		<li class='jc'>{@link oaj.http.HttpResponses} - Utility class for standard HTTP resources.
+	</ul>
+	
+	<h5 class='topic'>HttpHeaders</h5>
+	<p>
+		The {@link oaj.http.HttpHeaders} class contains many convenience static methods and fields for working with standard HTTP request and response headers
+		and header lists.
+	</p>
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+		|	<jk>import static</jk> org.apache.juneau.http.HttpHeaders.*;
+		|
+		|	HeaderList <jv>headers</jv> = 
+		|		<jsm>headerList</jsm>(  <jc>// Arbitrary list of headers</jc>
+		|	
+		|			<jsf>CONTENTTYPE_TEXT_XML</jsf>,   <jc>// Static constants</jc>
+		|		
+		|			<jsm>contentType</jsm>(<js>"text/xml"</js>)   <jc>// Predefined headers</jc>
+		|		
+		|			<jsm>contentType</jsm>(() -&gt; <js>"text/xml"</js>)   <jc>// Predefined headers with supplied values</jc>
+		|		
+		|			<jsm>stringHeader</jsm>(<js>"Content-Type"</js>, <js>"text/xml"</js>)   <jc>// Freeform headers</jc>
+		|		
+		|			<jsm>stringHeader</jsm>(<js>"Content-Type"</js>, () -&gt; <js>"text/xml"</js>)   <jc>// Freeform headers with supplied values</jc>
+		|		);
+	</p>
+	<p>
+		This class is vast in scope and covers all request and response headers defined in RFC2616.
+	</p>
+	<p>
+		In addition to the predefined headers, various methods are provided for free-form headers.  Each accepts
+		either static values or values from {@link java.util.function.Supplier Suppliers}:
+	</p>
+	<ul class='javatreec'>
+		<li class='jm'>{@link oaj.http.HttpHeaders#basicHeader(String,Object) basicHeader}
+		<li class='jm'>{@link oaj.http.HttpHeaders#booleanHeader(String,String) booleanHeader}
+		<li class='jm'>{@link oaj.http.HttpHeaders#csvHeader(String,String) csvHeader}
+		<li class='jm'>{@link oaj.http.HttpHeaders#dateHeader(String,String) dateHeader}
+		<li class='jm'>{@link oaj.http.HttpHeaders#entityTagsHeader(String,String) entityTagsHeader}
+		<li class='jm'>{@link oaj.http.HttpHeaders#entityTagHeader(String,String) entityTagHeader}
+		<li class='jm'>{@link oaj.http.HttpHeaders#integerHeader(String,String) integerHeader}
+		<li class='jm'>{@link oaj.http.HttpHeaders#longHeader(String,String) longHeader}
+		<li class='jm'>{@link oaj.http.HttpHeaders#mediaRangesHeader(String,String) mediaRangesHeader}
+		<li class='jm'>{@link oaj.http.HttpHeaders#mediaTypeHeader(String,String) mediaTypeHeader}
+		<li class='jm'>{@link oaj.http.HttpHeaders#stringHeader(String,String) stringHeader}
+		<li class='jm'>{@link oaj.http.HttpHeaders#serializedHeader(String,Object) serializedHeader}
+		<li class='jm'>{@link oaj.http.HttpHeaders#stringRangesHeader(String,String) stringRangesHeader}
+		<li class='jm'>{@link oaj.http.HttpHeaders#uriHeader(String,String) uriHeader}
+	</ul>
+	<p>
+		The {@link oaj.http.HttpHeaders#serializedHeader(String,Object) serializedHeader} methods allows for headers 
+		serialized using schema-based serializers such as the OpenAPI serializer. 
+	</p>
+	
+	<p>
+		Static methods are also provided for instantiating {@link oaj.http.annotation.Header}-annotated or
+		other HttpComponent-defined header classes:
+	</p>
+	<ul class='javatree'>
+		<li class='jm'>{@link oaj.http.HttpHeaders#header(Class,String,Object) header(Class,String,Object)}
+		<li class='jm'>{@link oaj.http.HttpHeaders#header(Class,Object) header(Class,String,Object)}
+	</ul>
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+		|	<jk>import static</jk> org.apache.juneau.http.HttpHeaders.*;
+		|
+		|	ContentType <jv>contentType</jv> = <jsm>header</jsm>(ContentType.<jk>class</jk>, <js>"text/xml"</js>);
+	</p>
+	<p>
+		Lists of headers can be produced with the following methods:
+	</p>
+	<ul class='javatree'>
+		<li class='jm'>{@link oaj.http.HttpHeaders#headerList() headerList()}
+		<li class='jm'>{@link oaj.http.HttpHeaders#headerList(Header...) headerList(Header...)}
+		<li class='jm'>{@link oaj.http.HttpHeaders#headerList(List) headerList(List&lt;Header&gt;)}
+		<li class='jm'>{@link oaj.http.HttpHeaders#headerList(String...) headerList(String...)}
+	</ul>
+	<p>
+		The capabilities of the {@link oaj.http.header.HeaderList} class is described later.
+	</p>
+		
+	<h5 class='topic'>HttpParts</h5>
+	<p>
+		The {@link oaj.http.HttpParts} class contains convenience static methods for generating query/form-data/path parts and part lists.
+	</p>
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+		|	<jk>import static</jk> org.apache.juneau.http.HttpParts.*;
+		|
+		|	PartList <jv>formData</jv> = 
+		|		<jsm>partList</jsm>(  <jc>// Arbitrary list of parts</jc>
+		|			<jsm>stringPart</jsm>(<js>"Name"</js>, <js>"Bill"</js>)   <jc>// Freeform part</jc>
+		|			<jsm>integerPart</jsm>(<js>"Age"</js>, () -> <jsm>calculateAge</jsm>())   <jc>// Freeform part with supplied value</jc>
+		|		);
+	</p>
+	<p>
+		The following methods are provided for creating parts.  Each accepts
+		either static values or values from {@link java.util.function.Supplier Suppliers}:
+	</p>
+	<ul class='javatreec'>
+		<li class='jm'>{@link oaj.http.HttpParts#basicPart(String,Object) basicPart}
+		<li class='jm'>{@link oaj.http.HttpParts#booleanPart(String,Boolean) booleanPart}
+		<li class='jm'>{@link oaj.http.HttpParts#csvArrayPart(String,String...) csvArrayPart}
+		<li class='jm'>{@link oaj.http.HttpParts#datePart(String,ZonedDateTime) datePart}
+		<li class='jm'>{@link oaj.http.HttpParts#integerPart(String,Integer) integerPart}
+		<li class='jm'>{@link oaj.http.HttpParts#longPart(String,Long) longPart}
+		<li class='jm'>{@link oaj.http.HttpParts#serializedPart(String,Object) serializedPart}
+		<li class='jm'>{@link oaj.http.HttpParts#stringPart(String,String) stringPart}
+		<li class='jm'>{@link oaj.http.HttpParts#uriPart(String,URI) uriPart}
+	</ul>
+	<p>
+		The {@link oaj.http.HttpParts#serializedPart(String,Object) serializedPart} methods allows for parts 
+		serialized using schema-based serializers such as the OpenAPI serializer. 
+	</p>
+	<p>
+		Lists of parts can be produced with the following methods:
+	</p>
+	<ul class='javatree'>
+		<li class='jm'>{@link oaj.http.HttpParts#partList() partList()}
+		<li class='jm'>{@link oaj.http.HttpParts#partList(List) partList(List&lt;NameValuePair&gt;)}
+		<li class='jm'>{@link oaj.http.HttpParts#partList(NameValuePair...) partList(NameValuePair...)}
+		<li class='jm'>{@link oaj.http.HttpParts#partList(Object...) partList(Object...)}
+	</ul>
+	<p>
+		The capabilities of the {@link oaj.http.part.PartList} class is described later.
+	</p>
+	
+	<h5 class='topic'>HttpEntities</h5>
+	<p>
+		The {@link oaj.http.HttpEntities} class contains convenience static methods for generating HTTP message entities.
+		Returned objects extend from  {@code org.apache.http.HttpEntity} but provides the following additional features:
+	</p>
+	<ul class='spaced-list'>
+		<li>
+			Caching.
+		<li>
+			Fluent setters.
+		<li>
+			Fluent assertions.
+		<li>
+			Externally-supplied/dynamic content.
+	</ul>
+	<p>
+		The following methods are provided for creating entities.  Each accepts
+		either static values or values from {@link java.util.function.Supplier Suppliers} and returns builders:
+	</p>
+	<ul class='javatreec'>
+		<li class='jm'>{@link oaj.http.HttpEntities#byteArrayEntity(byte[]) byteArrayEntity}
+		<li class='jm'>{@link oaj.http.HttpEntities#fileEntity(File) fileEntity}
+		<li class='jm'>{@link oaj.http.HttpEntities#readerEntity(Reader) readerEntity}
+		<li class='jm'>{@link oaj.http.HttpEntities#serializedEntity(Object, Serializer) serializedEntity}
+		<li class='jm'>{@link oaj.http.HttpEntities#streamEntity(InputStream) streamEntity}
+		<li class='jm'>{@link oaj.http.HttpEntities#stringEntity(String) stringEntity}
+	</ul>
+	<p>
+		HTTP entities are automatically supported in both the server and client REST APIs for requests and responses.
+	</p>
+	
+	<h5 class='topic'>HttpResources</h5>
+	<p>
+		The {@link oaj.http.HttpResources} class contains convenience static methods for generating HTTP message resources.
+		Returned objects extend from {@link oaj.http.resource.HttpResource} which extends from {@link oaj.http.HttpEntity} but with
+		additional arbitrary headers.
+	</p>
+	<p>
+		The following methods are provided for creating entities.  Each accepts
+		either static values or values from {@link java.util.function.Supplier Suppliers} and are in the form of builders.
+	</p>
+	<ul class='javatreec'>
+		<li class='jm'>{@link oaj.http.HttpResources#byteArrayResource(byte[]) byteArrayResource}
+		<li class='jm'>{@link oaj.http.HttpResources#fileResource(File) fileResource}
+		<li class='jm'>{@link oaj.http.HttpResources#readerResource(Reader) readerResource}
+		<li class='jm'>{@link oaj.http.HttpResources#streamResource(InputStream) streamResource}
+		<li class='jm'>{@link oaj.http.HttpResources#stringResource(String) stringResource}
+	</ul>
+	<p>
+		The most common location where resources are used are as returned types of REST operation methods described later.
+	</p>
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+		|	<jk>import static</jk> org.apache.juneau.http.HttpResources.*;
+		|	
+		|	<ja>@RestDelete</ja>(path=<js>"/{id}"</js>)
+		|	<jk>public</jk> HttpResource helloWold(...) {
+		|		<jk>return</jk> <jsm>stringResource</jsm>(<js>"Hello!"</js>).contentType(<js>"text/plain"</js>).build();
+		|	}
+	</p>
+	
+	
+	<h5 class='topic'>HttpResponses</h5>
+	<p>
+		The {@link oaj.http.HttpResponses} class contains convenience static methods for standard HTTP responses.
+		Returned objects extend from {@code org.apache.http.HttpResponse} and are in the form of builders.
+	</p>
+	<p>
+		The following methods are provided for creating entities:
+	</p>
+	<ul class='javatreec'>
+		<li class='jm'>{@link oaj.http.HttpResponses#_continue() _continue}
+		<li class='jm'>{@link oaj.http.HttpResponses#accepted() accepted}
+		<li class='jm'>{@link oaj.http.HttpResponses#alreadyReported() alreadyReported}
+		<li class='jm'>{@link oaj.http.HttpResponses#badRequest() badRequest}
+		<li class='jm'>{@link oaj.http.HttpResponses#conflict() conflict}
+		<li class='jm'>{@link oaj.http.HttpResponses#created() created}
+		<li class='jm'>{@link oaj.http.HttpResponses#earlyHints() earlyHints}
+		<li class='jm'>{@link oaj.http.HttpResponses#expectationFailed() expectationFailed}
+		<li class='jm'>{@link oaj.http.HttpResponses#failedDependency() failedDependency}
+		<li class='jm'>{@link oaj.http.HttpResponses#forbidden() forbidden}
+		<li class='jm'>{@link oaj.http.HttpResponses#found(String) found}
+		<li class='jm'>{@link oaj.http.HttpResponses#gone() gone}
+		<li class='jm'>{@link oaj.http.HttpResponses#httpVersionNotSupported() httpVersionNotSupported}
+		<li class='jm'>{@link oaj.http.HttpResponses#imUsed() imUsed}
+		<li class='jm'>{@link oaj.http.HttpResponses#insufficientStorage() insufficientStorage}
+		<li class='jm'>{@link oaj.http.HttpResponses#internalServerError() internalServerError}
+		<li class='jm'>{@link oaj.http.HttpResponses#lengthRequired() lengthRequired}
+		<li class='jm'>{@link oaj.http.HttpResponses#locked() locked}
+		<li class='jm'>{@link oaj.http.HttpResponses#loopDetected() loopDetected}
+		<li class='jm'>{@link oaj.http.HttpResponses#methodNotAllowed() methodNotAllowed}
+		<li class='jm'>{@link oaj.http.HttpResponses#misdirectedRequest() misdirectedRequest}
+		<li class='jm'>{@link oaj.http.HttpResponses#movedPermanently(String) movedPermanently}
+		<li class='jm'>{@link oaj.http.HttpResponses#multipleChoices() multipleChoices}
+		<li class='jm'>{@link oaj.http.HttpResponses#multiStatus() multiStatus}
+		<li class='jm'>{@link oaj.http.HttpResponses#networkAuthenticationRequired() networkAuthenticationRequired}
+		<li class='jm'>{@link oaj.http.HttpResponses#noContent() noContent}
+		<li class='jm'>{@link oaj.http.HttpResponses#nonAuthoritiveInformation() nonAuthoritiveInformation}
+		<li class='jm'>{@link oaj.http.HttpResponses#notAcceptable() notAcceptable}
+		<li class='jm'>{@link oaj.http.HttpResponses#notExtended() notExtended}
+		<li class='jm'>{@link oaj.http.HttpResponses#notFound() notFound}
+		<li class='jm'>{@link oaj.http.HttpResponses#notImplemented() notImplemented}
+		<li class='jm'>{@link oaj.http.HttpResponses#notModified() notModified}
+		<li class='jm'>{@link oaj.http.HttpResponses#ok() ok}
+		<li class='jm'>{@link oaj.http.HttpResponses#partialContent() partialContent}
+		<li class='jm'>{@link oaj.http.HttpResponses#payloadTooLarge() payloadTooLarge}
+		<li class='jm'>{@link oaj.http.HttpResponses#permanentRedirect(String) permanentRedirect}
+		<li class='jm'>{@link oaj.http.HttpResponses#preconditionFailed() preconditionFailed}
+		<li class='jm'>{@link oaj.http.HttpResponses#preconditionRequired() preconditionRequired}
+		<li class='jm'>{@link oaj.http.HttpResponses#processing() processing}
+		<li class='jm'>{@link oaj.http.HttpResponses#rangeNotSatisfiable() rangeNotSatisfiable}
+		<li class='jm'>{@link oaj.http.HttpResponses#requestHeaderFieldsTooLarge() requestHeaderFieldsTooLarge}
+		<li class='jm'>{@link oaj.http.HttpResponses#resetContent() resetContent}
+		<li class='jm'>{@link oaj.http.HttpResponses#seeOther(String) seeOther}
+		<li class='jm'>{@link oaj.http.HttpResponses#serviceUnavailable() serviceUnavailable}
+		<li class='jm'>{@link oaj.http.HttpResponses#switchingProtocols() switchingProtocols}
+		<li class='jm'>{@link oaj.http.HttpResponses#temporaryRedirect(String) temporaryRedirect}
+		<li class='jm'>{@link oaj.http.HttpResponses#tooManyRequests() tooManyRequests}
+		<li class='jm'>{@link oaj.http.HttpResponses#unauthorized() unauthorized}
+		<li class='jm'>{@link oaj.http.HttpResponses#unavailableForLegalReasons() unavailableForLegalReasons}
+		<li class='jm'>{@link oaj.http.HttpResponses#unprocessableEntity() unprocessableEntity}
+		<li class='jm'>{@link oaj.http.HttpResponses#unsupportedMediaType() unsupportedMediaType}
+		<li class='jm'>{@link oaj.http.HttpResponses#upgradeRequired() upgradeRequired}
+		<li class='jm'>{@link oaj.http.HttpResponses#uriTooLong() uriTooLong}
+		<li class='jm'>{@link oaj.http.HttpResponses#useProxy() useProxy}
+		<li class='jm'>{@link oaj.http.HttpResponses#variantAlsoNegotiates() variantAlsoNegotiates}
+	</ul>
+	<p>
+		The most common location where these responses are used are in REST operation methods described later.
+	</p>
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+		|	<jk>import static</jk> org.apache.juneau.http.HttpResponses.*;
+		|	<jk>import static</jk> org.apache.juneau.http.HttpHeaders.*;
+		| 
+		|	<ja>@RestDelete</ja>(path=<js>"/{id}"</js>)
+		|	<jk>public</jk> Ok doDelete(...) <jk>throws</jk> Unauthorized {
+		|		<jk>if</jk> (<jc>/* user not authorized*/</jc>)
+		|			<jk>throw</jk> <jsm>unauthorized</jsm>().build();
+		|		<jk>return</jk> <jsm>ok</jsm>().content(<js>"OK"</js>).header(<jsm>contentType</jsm>(<js>"text/plain"</js>)).build();
+		|	}
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/07.juneau-rest-common/02.jrc.org.apache.juneau.http.annotation.html b/juneau-doc/docs/Topics/07.juneau-rest-common/02.jrc.org.apache.juneau.http.annotation.html
new file mode 100644
index 000000000..9a2a19290
--- /dev/null
+++ b/juneau-doc/docs/Topics/07.juneau-rest-common/02.jrc.org.apache.juneau.http.annotation.html
@@ -0,0 +1,47 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'org.apache.juneau.http.annotation', created:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.http.annotation} package contains annotations for defining both server and client side 
+		APIs.  The server-side APIs also use it for producing auto-generated Swagger documentation through
+		the REST API itself.
+	</p>
+	<ul class='javatreec'>
+		<li class='ja'>{@link oaj.http.annotation.Contact}
+		<li class='ja'>{@link oaj.http.annotation.Content}
+		<li class='ja'>{@link oaj.http.annotation.ExternalDocs}
+		<li class='ja'>{@link oaj.http.annotation.FormData}
+		<li class='ja'>{@link oaj.http.annotation.HasFormData}
+		<li class='ja'>{@link oaj.http.annotation.HasQuery}
+		<li class='ja'>{@link oaj.http.annotation.Header}
+		<li class='ja'>{@link oaj.http.annotation.Items}
+		<li class='ja'>{@link oaj.http.annotation.License}
+		<li class='ja'>{@link oaj.http.annotation.Path}
+		<li class='ja'>{@link oaj.http.annotation.Query}
+		<li class='ja'>{@link oaj.http.annotation.Request}
+		<li class='ja'>{@link oaj.http.annotation.Response}
+		<li class='ja'>{@link oaj.http.annotation.Schema}
+		<li class='ja'>{@link oaj.http.annotation.StatusCode}
+		<li class='ja'>{@link oaj.http.annotation.SubItems}
+		<li class='ja'>{@link oaj.http.annotation.Tag}
+	</ul>
+	<p>
+		These annotations are used in a variety of places in the server and client side REST interfaces, especially for
+		remote proxies.
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/07.juneau-rest-common/03.jrc.org.apache.juneau.http.header.html b/juneau-doc/docs/Topics/07.juneau-rest-common/03.jrc.org.apache.juneau.http.header.html
new file mode 100644
index 000000000..5e2655e1b
--- /dev/null
+++ b/juneau-doc/docs/Topics/07.juneau-rest-common/03.jrc.org.apache.juneau.http.header.html
@@ -0,0 +1,250 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'org.apache.juneau.http.header', created:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.http.header} package contains implementations of <c>org.apache.http.Header</c> for all common HTTP
+		headers.
+	</p>
+	<ul class='javatreec'>
+		<li class='jc'>{@link oaj.http.header.Accept}
+		<li class='jc'>{@link oaj.http.header.AcceptCharset}
+		<li class='jc'>{@link oaj.http.header.AcceptEncoding}
+		<li class='jc'>{@link oaj.http.header.AcceptLanguage}
+		<li class='jc'>{@link oaj.http.header.AcceptRanges}
+		<li class='jc'>{@link oaj.http.header.Age}
+		<li class='jc'>{@link oaj.http.header.Allow}
+		<li class='jc'>{@link oaj.http.header.Authorization}
+		<li class='jc'>{@link oaj.http.header.CacheControl}
+		<li class='jc'>{@link oaj.http.header.ClientVersion}
+		<li class='jc'>{@link oaj.http.header.Connection}
+		<li class='jc'>{@link oaj.http.header.ContentDisposition}
+		<li class='jc'>{@link oaj.http.header.ContentEncoding}
+		<li class='jc'>{@link oaj.http.header.ContentLanguage}
+		<li class='jc'>{@link oaj.http.header.ContentLength}
+		<li class='jc'>{@link oaj.http.header.ContentLocation}
+		<li class='jc'>{@link oaj.http.header.ContentRange}
+		<li class='jc'>{@link oaj.http.header.ContentType}
+		<li class='jc'>{@link oaj.http.header.Date}
+		<li class='jc'>{@link oaj.http.header.Debug}
+		<li class='jc'>{@link oaj.http.header.ETag}
+		<li class='jc'>{@link oaj.http.header.Expect}
+		<li class='jc'>{@link oaj.http.header.Expires}
+		<li class='jc'>{@link oaj.http.header.Forwarded}
+		<li class='jc'>{@link oaj.http.header.From}
+		<li class='jc'>{@link oaj.http.header.Host}
+		<li class='jc'>{@link oaj.http.header.IfMatch}
+		<li class='jc'>{@link oaj.http.header.IfModifiedSince}
+		<li class='jc'>{@link oaj.http.header.IfNoneMatch}
+		<li class='jc'>{@link oaj.http.header.IfRange}
+		<li class='jc'>{@link oaj.http.header.IfUnmodifiedSince}
+		<li class='jc'>{@link oaj.http.header.LastModified}
+		<li class='jc'>{@link oaj.http.header.Location}
+		<li class='jc'>{@link oaj.http.header.MaxForwards}
+		<li class='jc'>{@link oaj.http.header.MediaRange}
+		<li class='jc'>{@link oaj.http.header.MediaRanges}
+		<li class='jc'>{@link oaj.http.header.MediaType}
+		<li class='jc'>{@link oaj.http.header.NoTrace}
+		<li class='jc'>{@link oaj.http.header.Origin}
+		<li class='jc'>{@link oaj.http.header.Pragma}
+		<li class='jc'>{@link oaj.http.header.ProxyAuthenticate}
+		<li class='jc'>{@link oaj.http.header.ProxyAuthorization}
+		<li class='jc'>{@link oaj.http.header.Range}
+		<li class='jc'>{@link oaj.http.header.Referer}
+		<li class='jc'>{@link oaj.http.header.RetryAfter}
+		<li class='jc'>{@link oaj.http.header.Server}
+		<li class='jc'>{@link oaj.http.header.TE}
+		<li class='jc'>{@link oaj.http.header.Thrown}
+		<li class='jc'>{@link oaj.http.header.Trailer}
+		<li class='jc'>{@link oaj.http.header.TransferEncoding}
+		<li class='jc'>{@link oaj.http.header.Upgrade}
+		<li class='jc'>{@link oaj.http.header.UserAgent}
+		<li class='jc'>{@link oaj.http.header.Vary}
+		<li class='jc'>{@link oaj.http.header.Via}
+		<li class='jc'>{@link oaj.http.header.Warning}
+		<li class='jc'>{@link oaj.http.header.WwwAuthenticate}
+	</ul>
+	<p>
+		These headers extend from the following classes that provide data-type specific functionality:
+	</p>
+	<ul class='javatree'>
+		<li class='jic'>{@code org.apache.http.NameValuePair}
+		<ul>
+			<li class='jic'>{@code org.apache.http.Header}
+			<ul>
+				<li class='jc'>{@link oaj.http.header.BasicHeader}
+				<ul class='javatreec'>
+					<li class='jc'>{@link oaj.http.header.BasicBooleanHeader}	
+					<li class='jc'>{@link oaj.http.header.BasicCsvHeader}
+					<li class='jc'>{@link oaj.http.header.BasicDateHeader}
+					<li class='jc'>{@link oaj.http.header.BasicEntityTagHeader}
+					<li class='jc'>{@link oaj.http.header.BasicEntityTagsHeader}
+					<li class='jc'>{@link oaj.http.header.BasicIntegerHeader}
+					<li class='jc'>{@link oaj.http.header.BasicLongHeader}
+					<li class='jc'>{@link oaj.http.header.BasicMediaRangesHeader}
+					<li class='jc'>{@link oaj.http.header.BasicMediaTypeHeader}
+					<li class='jc'>{@link oaj.http.header.BasicStringHeader}
+					<li class='jc'>{@link oaj.http.header.BasicStringRangesHeader}
+					<li class='jc'>{@link oaj.http.header.BasicUriHeader}
+				</ul>
+			</ul>
+		</ul>
+	</ul>
+	<p>
+		These subclasses provide various convenience methods to allow for easy fluent-style coding.
+	</p>
+	<h5 class='figure'>Examples</h5>
+	<p class='bjava'>
+		|	<jc>// Validates the response body content is not expired.</jc>
+		|	<jv>restClient</jv>
+		|		.get(<jsf>URL</jsf>)
+		|		.run()
+		|		.getHeader(<js>"Expires"</js>).asDateHeader().assertZonedDateTime().isLessThan(<jk>new</jk> Date());
+	</p>
+	
+	<h5 class='topic'>HeaderList</h5>
+	<p>
+		The {@link oaj.http.header.HeaderList} class is a thread-safe immutable list of HTTP headers.
+	</p>
+
+	<h5 class='figure'>Example</h5>
+	<p class='bjava'>
+		|	<jc>// Construct using builder.</jc>
+		|	HeaderList <jv>headers</jv> = HeaderList
+		|		.<jsm>create</jsm>()
+		|		.append(Accept.<jsm>of</jsm>(<js>"text/xml"</js>))
+		|		.append(<js>"Content-Type"</js>, ()-&gt;<jsm>getDynamicContentTypeFromSomewhere</jsm>())
+		|		.build();
+		|	
+		|	<jc>// Construct using convenience creator.</jc>
+		|	HeaderList <jv>headers</jv> = HeaderList.<jsm>of</jsm>(Accept.<jsf>TEXT_XML</jsf>, ContentType.<jsf>TEXT_XML</jsf>);
+	</p>
+	<p>
+		Header lists are immutable, but can be appended to using the {@link oaj.http.header.HeaderList#copy() copy()} method:	
+	</p>
+	<p class='bjava'>
+		|	<jv>headers</jv> = <jv>headers</jv>
+		|		.copy()
+		|		.append(AcceptEncoding.<jsm>of</jsm>(<js>"identity"</js>))
+		|		.build();
+	</p>
+	<p>
+		Static methods are provided on {@link oaj.http.HttpHeaders} to further simplify creation of header lists.
+	</p>
+	<p class='bjava'>
+		|	<jk>import static</jk> org.apache.juneau.http.HttpHeaders.*;
+		|
+		|	HeaderList <jv>headers</jv> = <jsm>headerList</jsm>(<jsm>accept</jsm>(<js>"text/xml"</js>), <jsm>contentType</jsm>(<js>"text/xml"</js>));
+	</p>
+	<p>
+		The builder class supports setting default header values (i.e. add a header to the list if it isn't otherwise in the list).
+		Note that this is different from simply setting a value twice as using default values will not overwrite existing
+		headers.
+		<br>The following example notes the distinction:
+	</p>
+	<p class='bjava'>
+		|	<jv>headers</jv> = HeaderList
+		|		.<jsm>create</jsm>()
+		|		.set(Accept.<jsf>TEXT_PLAIN</jsf>)
+		|		.set(Accept.<jsf>TEXT_XML</jsf>)
+		|		.build();
+		|	<jsm>assertObject</jsm>(<jv>headers</jv>).isString(<js>"[Accept: text/xml]"</js>);
+		|
+		|	<jv>headers</jv> = HeaderList
+		|		.create()
+		|		.set(Accept.<jsf>TEXT_PLAIN</jsf>)
+		|		.setDefault(Accept.<jsf>TEXT_XML</jsf>)
+		|		.build();
+		|	<jsm>assertObject</jsm>(<jv>headers</jv>).isString(<js>"[Accept: text/plain]"</js>);
+	</p>
+
+	<p>
+		Various methods are provided for iterating over the headers in this list to avoid array copies.
+	</p>
+	<ul class='javatree'>
+		<li class='jm'>{@link oaj.http.header.HeaderList#forEach(Consumer) forEach(Consumer)} / {@link oaj.http.header.HeaderList#forEach(String,Consumer) forEach(String,Consumer)} / {@link oaj.http.header.HeaderList#forEach(Predicate,Consumer) forEach(Predicate,Consumer)} - Use consumers to process headers.
+		<li class='jm'>{@link oaj.http.header.HeaderList#iterator() iterator()} / {@link oaj.http.header.HeaderList#iterator(String) iterator(String)} - Use an {@link HeaderIterator} to process headers.
+		<li class='jm'>{@link oaj.http.header.HeaderList#stream() stream()} / {@link oaj.http.header.HeaderList#stream(String) stream(String)} - Use a stream.
+	</ul>
+	<p>
+		In general, try to use these over the {@link oaj.http.header.HeaderList#getAll() getAll()} / {@link oaj.http.header.HeaderList#getAll(String) getAll(String)} methods that require array copies.
+	</p>
+	<p>
+		The {@link oaj.http.header.HeaderList#get(String) get(String)} method is special in that it will collapse multiple headers with the same name into
+		a single comma-delimited list (see <a href='https://tools.ietf.org/html/rfc2616#section-4.2'>RFC 2616 Section 4.2</a> for rules).
+	</p>
+	<p>
+		The {@link oaj.http.header.HeaderList#get(Class) get(Class)} and {@link oaj.http.header.HeaderList#get(String,Class) get(String,Class)} methods are provided for working with {@link oaj.http.annotation.Header}-annotated
+		beans.
+	</p>
+	<h5 class='figure'>Example</h5>
+	<p class='bjava'>
+		|	ContentType <jv>contentType</jv> = <jv>headers</jv>.get(ContentType.<jk>class</jk>);
+	</p>
+
+	<p>
+		By default, header names are treated as case-insensitive.  This can be changed using the {@link oaj.http.header.HeaderList.Builder#caseSensitive() caseSensitive()}
+		method.
+	</p>
+
+	<p>
+		A {@link oaj.svl.VarResolver} can be associated with this builder to create header values with embedded variables that
+		are resolved at runtime.
+	</p>
+
+	<h5 class='figure'>Example</h5>
+	<p class='bjava'>
+		|	<jc>// Create a header list with dynamically-resolving values pulled from a system property.</jc>
+		|
+		|	System.<jsm>setProperty</jsm>(<js>"foo"</js>, <js>"bar"</js>);
+		|
+		|	HeaderList <jv>headers</jv> = HeaderList
+		|		.<jsm>create</jsm>()
+		|		.resolving()
+		|		.append(<js>"X1"</js>, <js>"$S{foo}"</js>)
+		|		.append(<js>"X2"</js>, ()-&gt;<js>"$S{foo}"</js>)
+		|		.build();
+		|
+		|	<jsm>assertObject</jsm>(<jv>headers</jv>).isString(<js>"[X1: bar, X2: bar]"</js>);
+	</p>
+
+	<p>
+		The {@link oaj.http.header.HeaderList} object can be extended to defined pre-packaged lists of headers which can be used in various
+		annotations throughout the framework.
+	</p>
+	<h5 class='figure'>Example</h5>
+	<p class='bjava'>
+		|	<jc>// A predefined list of headers.</jc>
+		|	<jk>public class</jk> MyHeaderList <jk>extends</jk> HeaderList {
+		|		<jk>public</jk> MyHeaderList() {
+		|			<jk>super</jk>(Accept.<jsf>TEXT_XML</jsf>, ContentType.<jsf>TEXT_XML</jsf>);
+		|		}
+		|	}
+		|
+		|	<jc>// Use it on a remote proxy to add headers on all requests.</jc>
+		|	<ja>@Remote</ja>(path=<js>"/petstore"</js>, headerList=MyHeaderList.<jk>class</jk>)
+		|	<jk>public interface</jk> PetStore {
+		|
+		|		<ja>@RemotePost</ja>(<js>"/pets"</js>)
+		|		Pet addPet(
+		|			<ja>@Content</ja> CreatePet <jv>createPet</jv>,
+		|			<ja>@Header</ja>(<js>"E-Tag"</js>) UUID <jv>etag</jv>,
+		|			<ja>@Query</ja>(<js>"debug"</js>) <jk>boolean</jk> <jv>debug</jv>
+		|		);
+		|	}
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/07.juneau-rest-common/04.jrc.org.apache.juneau.http.part.html b/juneau-doc/docs/Topics/07.juneau-rest-common/04.jrc.org.apache.juneau.http.part.html
new file mode 100644
index 000000000..da081ef96
--- /dev/null
+++ b/juneau-doc/docs/Topics/07.juneau-rest-common/04.jrc.org.apache.juneau.http.part.html
@@ -0,0 +1,164 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'org.apache.juneau.http.part', created:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.http.part} package contains implementations of <c>org.apache.http.NameValuePair</c> to 
+		be used for query/form-data/path parts and part lists.
+	</p>
+	<ul class='javatree'>
+		<li class='jic'>{@code org.apache.http.NameValuePair}
+		<ul>
+			<li class='jc'>{@link oaj.http.part.BasicPart}
+			<ul class='javatreec'>
+				<li class='jc'>{@link oaj.http.part.BasicBooleanPart}
+				<li class='jc'>{@link oaj.http.part.BasicCsvArrayPart}
+				<li class='jc'>{@link oaj.http.part.BasicDatePart}
+				<li class='jc'>{@link oaj.http.part.BasicIntegerPart}
+				<li class='jc'>{@link oaj.http.part.BasicLongPart}
+				<li class='jc'>{@link oaj.http.part.BasicPartIterator}
+				<li class='jc'>{@link oaj.http.part.BasicStringPart}
+				<li class='jc'>{@link oaj.http.part.BasicUriPart}
+			</ul>
+		</ul>
+	</ul>
+
+	<h5 class='topic'>PartList</h5>
+	<p>
+		The {@link oaj.http.part.PartList} class is a thread-safe immutable list of HTTP parts (form-data, query-parameters, path-parameters).
+	</p>
+	<h5 class='figure'>Example</h5>
+	<p class='bjava'>
+		|	PartList <jv>parts</jv> = PartList
+		|		.<jsm>create</jsm>()
+		|		.append(MyPart.<jsm>of</jsm>(<js>"foo"</js>))
+		|		.append(<js>"Bar"</js>, ()-&gt;<jsm>getDynamicValueFromSomewhere</jsm>())
+		|		.build();
+	</p>
+
+	<p>
+		Convenience creators are provided for creating lists with minimal code:
+	</p>
+	<p class='bjava'>
+		PartList <jv>parts</jv> = PartList.<jsm>of</jsm>(BasicIntegerPart.<jsm>of</jsm>(<js>"foo"</js>, 1));
+	</p>
+
+	<p>
+		Part lists are immutable, but can be appended to using the {@link oaj.http.part.PartList#copy() copy()} method:
+	</p>
+	<p class='bjava'>
+		|	<jv>parts</jv> = <jv>parts</jv>
+		|		.copy()
+		|		.append(BasicIntegerPart.<jsm>of</jsm>(<js>"foo"</js>, 1))
+		|		.build();
+	</p>
+
+	<p>
+		Static methods are provided on {@link oaj.http.HttpParts} to further simplify creation of part lists.
+	</p>
+	<p class='bjava'>
+		|	<jk>import static</jk> org.apache.juneau.http.HttpParts.*;
+		|
+		|	PartList <jv>parts</jv> = <jsm>partList</jsm>(<jsm>integerPart</jsm>(<js>"foo"</js>, 1), <jsm>booleanPart</jsm>(<js>"bar"</js>, <jk>false</jk>));
+	</p>
+
+	<p>
+		The builder class supports setting default part values (i.e. add a part to the list if it isn't otherwise in the list).
+		Note that this is different from simply setting a value twice as using default values will not overwrite existing
+		parts.
+		<br>The following example notes the distinction:
+	</p>
+
+	<p class='bjava'>
+		|	<jv>parts</jv> = PartList
+		|		.<jsm>create</jsm>()
+		|		.set(<js>"Foo"</js>, <js>"bar"</js>)
+		|		.set(<js>"Foo"</js>, <js>"baz"</js>)
+		|		.build();
+		|	<jsm>assertObject</jsm>(<jv>parts</jv>).isString(<js>"foo=baz"</js>);
+		|
+		|	<jv>parts</jv> = PartList
+		|		.create()
+		|		.set(<js>"Foo"</js>, <js>"bar"</js>)
+		|		.setDefault(<js>"Foo"</js>, <js>"baz"</js>)
+		|		.build();
+		|	<jsm>assertObject</jsm>(<jv>parts</jv>).isString(<js>"foo=bar"</js>);
+	</p>
+
+	<p>
+		Various methods are provided for iterating over the parts in this list to avoid array copies.
+	</p>
+	<ul class='javatree'>
+		<li class='jm'>{@link oaj.http.part.PartList#forEach(Consumer) forEach(Consumer)} / {@link oaj.http.part.PartList#forEach(String,Consumer) forEach(String,Consumer)} / {@link oaj.http.part.PartList#forEach(Predicate,Consumer) forEach(Predicate,Consumer)} - Use consumers to process parts.
+		<li class='jm'>{@link oaj.http.part.PartList#iterator() iterator()} / {@link oaj.http.part.PartList#iterator(String) iterator(String)} - Use an {@link PartIterator} to process parts.
+		<li class='jm'>{@link oaj.http.part.PartList#stream() stream()} / {@link oaj.http.part.PartList#stream(String) stream(String)} - Use a stream.
+	</ul>
+	<p>
+		In general, try to use these over the {@link oaj.http.part.PartList#getAll() getAll()} / {@link oaj.http.part.PartList#getAll(String) getAll(String)} methods that require array copies.
+	</p>
+
+	<p>
+		Similar to the way multiple headers can be collapsed into a single value, the {@link oaj.http.part.PartList#get(String) get(String)} method is special in that it will collapse multiple parts with the same name into
+		a single comma-delimited list.
+	</p>
+
+	<p>
+		The {@link oaj.http.part.PartList#get(Class) get(Class)} and {@link oaj.http.part.PartList#get(String,Class) get(String,Class)} methods are provided for working with {@link oaj.http.annotation.FormData} / {@link oaj.http.annotation.Query} / {@link oaj.http.annotation.Path}-annotated
+		beans.
+	</p>
+
+	<h5 class='figure'>Example</h5>
+	<p class='bjava'>
+		|	MyQueryBean <jv>foo</jv> = <jv>parts</jv>.get(MyQueryBean.<jk>class</jk>);
+	</p>
+
+	<p>
+		A {@link oaj.svl.VarResolver} can be associated with this builder to create part values with embedded variables that
+		are resolved at runtime.
+	</p>
+
+	<h5 class='figure'>Example</h5>
+	<p class='bjava'>
+		|	<jc>// Create a part list with dynamically-resolving values pulled from a system property.</jc>
+		|
+		|	System.<jsm>setProperty</jsm>(<js>"foo"</js>, <js>"bar"</js>);
+		|
+		|	PartList <jv>parts</jv> = PartList
+		|		.<jsm>create</jsm>()
+		|		.resolving()
+		|		.append(<js>"X1"</js>, <js>"$S{foo}"</js>)
+		|		.append(<js>"X2"</js>, ()-&gt;<js>"$S{foo}"</js>)
+		|		.build();
+		|
+		|	<jsm>assertObject</jsm>(<jv>parts</jv>).isString(<js>"X1=bar&amp;X2=bar"</js>);
+	</p>
+
+	<p>
+		The {@link oaj.http.part.PartList} object can be extended to defined pre-packaged lists of parts which can be used in various
+		annotations throughout the framework.
+	</p>
+
+	<h5 class='figure'>Example</h5>
+	<p class='bjava'>
+		|	<jc>// A predefined list of parts.</jc>
+		|	<jk>public class</jk> MyPartList <jk>extends</jk> PartList {
+		|		<jk>public</jk> MyPartList() {
+		|			<jk>super</jk>(BasicIntegerPart.<jsm>of</jsm>(<js>"foo"</js>,1), BasicBooleanPart.<jsm>of</jsm>(<js>"bar"</js>,<jk>false</jk>));
+		|		}
+		|	}
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/07.juneau-rest-common/05.jrc.org.apache.juneau.http.entity.html b/juneau-doc/docs/Topics/07.juneau-rest-common/05.jrc.org.apache.juneau.http.entity.html
new file mode 100644
index 000000000..eb5068f10
--- /dev/null
+++ b/juneau-doc/docs/Topics/07.juneau-rest-common/05.jrc.org.apache.juneau.http.entity.html
@@ -0,0 +1,74 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'org.apache.juneau.http.entity', created:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.http.entity} package contains implementations of <c>org.apache.http.HttpEntity</c>.
+	</p>
+	<ul class='javatree'>
+		<li class='jic'>{@code org.apache.http.HttpEntity}
+		<ul>
+			<li class='jc'>{@link oaj.http.entity.BasicHttpEntity}
+			<ul class='javatreec'>
+				<li class='jc'>{@link oaj.http.entity.ByteArrayEntity}
+				<li class='jc'>{@link oaj.http.entity.FileEntity}
+				<li class='jc'>{@link oaj.http.entity.InputStreamEntity}
+				<li class='jc'>{@link oaj.http.entity.ReaderEntity}
+				<li class='jc'>{@link oaj.http.entity.SerializedEntity}
+				<li class='jc'>{@link oaj.http.entity.StringEntity}
+			</ul>
+		</ul>
+	</ul>
+	
+	<h5 class='topic'>HttpEntityBuilder</h5>
+	<p>
+		HTTP entities are created through builders created in the {@link oaj.http.HttpEnties} class or individual <c>create()</c> methods
+		defined in the subclasses above.  The builder contains the following methods:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.http.entity.HttpEntityBuilder}
+		<ul>
+			<li class='jm'>{@link oaj.http.entity.HttpEntityBuilder#cached() cached()}
+			<li class='jm'>{@link oaj.http.entity.HttpEntityBuilder#chunked() chunked()}
+			<li class='jm'>{@link oaj.http.entity.HttpEntityBuilder#chunked(boolean) chunked(boolean)}
+			<li class='jm'>{@link oaj.http.entity.HttpEntityBuilder#content(Object) content(Object)}
+			<li class='jm'>{@link oaj.http.entity.HttpEntityBuilder#content(Supplier) content(Supplier)}
+			<li class='jm'>{@link oaj.http.entity.HttpEntityBuilder#contentEncoding(ContentEncoding) contentEncoding(ContentEncoding)}
+			<li class='jm'>{@link oaj.http.entity.HttpEntityBuilder#contentEncoding(String) contentEncoding(String)}
+			<li class='jm'>{@link oaj.http.entity.HttpEntityBuilder#contentLength(long) contentLength(long)}
+			<li class='jm'>{@link oaj.http.entity.HttpEntityBuilder#contentType(ContentType) contentType(ContentType)}
+			<li class='jm'>{@link oaj.http.entity.HttpEntityBuilder#contentType(String) contentType(String)}
+		</ul>
+	</ul>
+	
+	<h5 class='figure'>Example</h5>
+	<p class='bjava'>
+		|	<jk>import static</jk> org.apache.juneau.http.HttpEntities.*;
+		|
+		|	<jk>byte</jk>[] <jv>payload</jv> = {...};
+		|
+		|	<jc>// Create via type builder.</jc>
+		|	HttpEntity <jv>entity</jv> = ByteArrayEntity
+		|		.<jsm>create</jsm>()
+		|		.content(<jv>payload</jv>)
+		|		.contentType(ContentType.<jsf>APPLICATION_OCTET_STREAM</jsf>)
+		|		.build();
+		|
+		|	<jc>// Create via HttpEntities.</jc>
+		|	HttpEntity <jv>entity</jv> = <jsm>byteArrayEntity</jsm>(<jv>payload</jv>, ContentType.<jsf>APPLICATION_OCTET_STREAM</jsf>).build();
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/07.juneau-rest-common/06.jrc.org.apache.juneau.http.resource.html b/juneau-doc/docs/Topics/07.juneau-rest-common/06.jrc.org.apache.juneau.http.resource.html
new file mode 100644
index 000000000..4bf0ccddc
--- /dev/null
+++ b/juneau-doc/docs/Topics/07.juneau-rest-common/06.jrc.org.apache.juneau.http.resource.html
@@ -0,0 +1,87 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'org.apache.juneau.http.resource', created:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.http.resource} package contains implementations of {@link oaj.http.resource.HttpResource} which are extensions of <c>org.apache.http.HttpEntity</c> with 
+		arbitrary headers added.
+	</p>
+	<ul class='javatree'>
+		<li class='jic'>{@code org.apache.http.HttpEntity}
+		<ul>
+			<li class='jic'>{@link oaj.http.resource.HttpResource}
+			<ul>
+				<li class='jc'>{@link oaj.http.resource.BasicResource}
+				<ul class='javatreec'>
+					<li class='jc'>{@link oaj.http.resource.ByteArrayResource}
+					<li class='jc'>{@link oaj.http.resource.FileResource}
+					<li class='jc'>{@link oaj.http.resource.InputStreamResource}
+					<li class='jc'>{@link oaj.http.resource.ReaderResource}
+					<li class='jc'>{@link oaj.http.resource.StringResource}
+				</ul>
+			</ul>
+		</ul>
+	</ul>
+	
+	<h5 class='topic'>HttpResourceBuilder</h5>
+	<p>
+		HTTP entities are created through builders created in the {@link oaj.http.HttpResources} class or individual <c>create()</c> methods
+		defined in the subclasses above.  The builder contains the following methods:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.http.resource.HttpResourceBuilder}
+		<ul>
+			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#cached() cached()}
+			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#chunked() chunked()}
+			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#chunked(boolean) chunked(boolean)}
+			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#content(Object) content(Object)}
+			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#content(Supplier) content(Supplier)}
+			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#contentEncoding(ContentEncoding) contentEncoding(ContentEncoding)}
+			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#contentEncoding(String) contentEncoding(String)}
+			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#contentLength(long) contentLength(long)}
+			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#contentType(ContentType) contentType(ContentType)}
+			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#contentType(String) contentType(String)}
+			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#copyFrom(HttpResponse) copyFrom(HttpResponse)}
+			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#getEntity() getEntity()}
+			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#getHeaders() getHeaders()}
+			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#header(Header) header(Header)}
+			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#header(String,String) header(String,String)}
+			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#headers(Header...) headers(Header...)}
+			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#headers(HeaderList) headers(HeaderList)}
+			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#headers(List) headers(List&lt;Header&gt;)}
+			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#getHeaders() getHeaders()}
+		</ul>
+	</ul>
+	
+	<h5 class='figure'>Example</h5>
+	<p class='bjava'>
+		|	<jk>import static</jk> org.apache.juneau.http.HttpResources.*;
+		|
+		|	<jk>byte</jk>[] <jv>payload</jv> = {...};
+		|
+		|	<jc>// Create via type builder.</jc>
+		|	HttpResource <jv>resource</jv> = ByteArrayResource
+		|		.<jsm>create</jsm>()
+		|		.content(<jv>payload</jv>)
+		|		.contentType(ContentType.<jsf>APPLICATION_OCTET_STREAM</jsf>)
+		|		.build();
+		|
+		|	<jc>// Create via HttpResources.</jc>
+		|	HttpResource <jv>resource</jv> = <jsm>byteArrayResource</jsm>(<jv>payload</jv>, ContentType.<jsf>APPLICATION_OCTET_STREAM</jsf>).build();
+	</p>
+	
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/07.juneau-rest-common/07.jrc.org.apache.juneau.http.response.html b/juneau-doc/docs/Topics/07.juneau-rest-common/07.jrc.org.apache.juneau.http.response.html
new file mode 100644
index 000000000..b337a63fb
--- /dev/null
+++ b/juneau-doc/docs/Topics/07.juneau-rest-common/07.jrc.org.apache.juneau.http.response.html
@@ -0,0 +1,146 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'org.apache.juneau.http.response', created:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.http.response} package contains predefined <c>org.apache.http.HttpResponse</c> implementations for most standard HTTP
+		responses. 
+	</p>
+	<ul class='javatreec'>
+		<li class='jc'>{@link oaj.http.response.Accepted}
+		<li class='jc'>{@link oaj.http.response.AlreadyReported}
+		<li class='jc'>{@link oaj.http.response.BadRequest}
+		<li class='jc'>{@link oaj.http.response.Conflict}
+		<li class='jc'>{@link oaj.http.response.Continue}
+		<li class='jc'>{@link oaj.http.response.Created}
+		<li class='jc'>{@link oaj.http.response.EarlyHints}
+		<li class='jc'>{@link oaj.http.response.ExpectationFailed}
+		<li class='jc'>{@link oaj.http.response.FailedDependency}
+		<li class='jc'>{@link oaj.http.response.Forbidden}
+		<li class='jc'>{@link oaj.http.response.Found}
+		<li class='jc'>{@link oaj.http.response.Gone}
+		<li class='jc'>{@link oaj.http.response.HttpVersionNotSupported}
+		<li class='jc'>{@link oaj.http.response.IMUsed}
+		<li class='jc'>{@link oaj.http.response.InsufficientStorage}
+		<li class='jc'>{@link oaj.http.response.InternalServerError}
+		<li class='jc'>{@link oaj.http.response.LengthRequired}
+		<li class='jc'>{@link oaj.http.response.Locked}
+		<li class='jc'>{@link oaj.http.response.LoopDetected}
+		<li class='jc'>{@link oaj.http.response.MethodNotAllowed}
+		<li class='jc'>{@link oaj.http.response.MisdirectedRequest}
+		<li class='jc'>{@link oaj.http.response.MovedPermanently}
+		<li class='jc'>{@link oaj.http.response.MultipleChoices}
+		<li class='jc'>{@link oaj.http.response.MultiStatus}
+		<li class='jc'>{@link oaj.http.response.NetworkAuthenticationRequired}
+		<li class='jc'>{@link oaj.http.response.NoContent}
+		<li class='jc'>{@link oaj.http.response.NonAuthoritiveInformation}
+		<li class='jc'>{@link oaj.http.response.NotAcceptable}
+		<li class='jc'>{@link oaj.http.response.NotExtended}
+		<li class='jc'>{@link oaj.http.response.NotFound}
+		<li class='jc'>{@link oaj.http.response.NotImplemented}
+		<li class='jc'>{@link oaj.http.response.NotModified}
+		<li class='jc'>{@link oaj.http.response.Ok}
+		<li class='jc'>{@link oaj.http.response.PartialContent}
+		<li class='jc'>{@link oaj.http.response.PayloadTooLarge}
+		<li class='jc'>{@link oaj.http.response.PermanentRedirect}
+		<li class='jc'>{@link oaj.http.response.PreconditionFailed}
+		<li class='jc'>{@link oaj.http.response.PreconditionRequired}
+		<li class='jc'>{@link oaj.http.response.Processing}
+		<li class='jc'>{@link oaj.http.response.RangeNotSatisfiable}
+		<li class='jc'>{@link oaj.http.response.RequestHeaderFieldsTooLarge}
+		<li class='jc'>{@link oaj.http.response.ResetContent}
+		<li class='jc'>{@link oaj.http.response.SeeOther}
+		<li class='jc'>{@link oaj.http.response.ServiceUnavailable}
+		<li class='jc'>{@link oaj.http.response.SwitchingProtocols}
+		<li class='jc'>{@link oaj.http.response.TemporaryRedirect}
+		<li class='jc'>{@link oaj.http.response.TooManyRequests}
+		<li class='jc'>{@link oaj.http.response.Unauthorized}
+		<li class='jc'>{@link oaj.http.response.UnavailableForLegalReasons}
+		<li class='jc'>{@link oaj.http.response.UnprocessableEntity}
+		<li class='jc'>{@link oaj.http.response.UnsupportedMediaType}
+		<li class='jc'>{@link oaj.http.response.UpgradeRequired}
+		<li class='jc'>{@link oaj.http.response.UriTooLong}
+		<li class='jc'>{@link oaj.http.response.UseProxy}
+		<li class='jc'>{@link oaj.http.response.VariantAlsoNegotiates}
+	</ul>	
+	
+	<p>
+		These are built upon existing HttpComponents APIs:
+	</p>
+	<ul class='javatree'>
+		<li class='jic'>{@code org.apache.http.HttpMessage}
+		<ul>
+			<li class='jic'>{@code org.apache.http.HttpResponse}
+			<ul>
+				<li class='jc'>{@link oaj.http.response.BasicHttpResponse} - 100-399 response codes
+				<li class='jc'>{@link oaj.http.response.BasicHttpException} - 400+ response codes
+			</ul>
+		</ul>
+	</ul>
+	
+	<p>
+		The most common location where these responses are used are in REST operation methods described later.
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+		|	<ja>@RestDelete</ja>(path=<js>"/{id}"</js>)
+		|	<jk>public</jk> Ok doDelete(<ja>@Path</ja> <jk>int</jk> <jv>id</jv>) <jk>throws</jk> NotFound, Unauthorized {
+		|		<jf>pojoService</jf>.delete(<jf>pojoService</jf>.find(<jv>id</jv>).orElseThrow(NotFound::<jk>new</jk>));
+		|		<jk>return</jk> Ok.OK;
+		|	}
+	</p>
+	
+	<p>
+		The following classes are also provided for constructing your own custom responses:
+	</p>
+	<ul class='javatreec'>
+		<li class='jc'>{@link oaj.http.response.BasicHttpException}
+		<li class='jc'>{@link oaj.http.response.BasicHttpResponse}
+		<li class='jc'>{@link oaj.http.response.HttpExceptionBuilder}
+		<li class='jc'>{@link oaj.http.response.HttpResponseBuilder}
+	</ul>
+	
+	<h5 class='topic'>HttpResponseBuilder / HttpExceptionBuilder</h5>
+	<p>
+		HTTP responses are created through builders created in the {@link oaj.http.HttpResponses} class or individual <c>create()</c> methods
+		defined in the basic classes above.  The builder contains the following methods:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oaj.http.response.HttpResponseBuilder}
+		<ul>
+			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#content(HttpEntity) content(HttpEntity)}
+			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#content(String) content(String)}
+			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#copyFrom(HttpResponse) copyFrom(HttpResponse)}
+			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#getHeaders() getHeaders()}
+			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#getStatusLine() getStatusLine()}
+			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#header(Header) header(Header)}
+			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#header(String,String) header(String,String)}
+			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#headers(Header...) headers(Header...)}
+			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#headers(HeaderList) headers(HeaderList)}
+			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#headers(List) headers(List&lt;Header&gt;)}
+			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#locale(Locale) locale(Locale)}
+			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#location(String) location(String)}
+			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#location(URI) location(URI)}
+			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#protocolVersion(ProtocolVersion) protocolVersion(ProtocolVersion)}
+			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#reasonPhrase(String) reasonPhrase(String)}
+			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#reasonPhraseCatalog(ReasonPhraseCatalog) reasonPhraseCatalog(ReasonPhraseCatalog)}
+			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#statusCode(int) statusCode(int)}
+			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#statusLine(BasicStatusLine) statusLine(BasicStatusLine)}
+			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#unmodifiable() unmodifiable()}
+		</ul>
+	</ul>
+	
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/07.juneau-rest-common/08.jrc.org.apache.juneau.http.remote.html b/juneau-doc/docs/Topics/07.juneau-rest-common/08.jrc.org.apache.juneau.http.remote.html
new file mode 100644
index 000000000..d8a82940a
--- /dev/null
+++ b/juneau-doc/docs/Topics/07.juneau-rest-common/08.jrc.org.apache.juneau.http.remote.html
@@ -0,0 +1,33 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'org.apache.juneau.http.remote', created:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oaj.http.remote} package contains the annotations used for defining client-side remote proxies.
+	</p>
+	<ul class='javatreec'>
+		<li class='ja'>{@link oaj.http.remote.Remote}
+		<li class='ja'>{@link oaj.http.remote.RemoteGet}
+		<li class='ja'>{@link oaj.http.remote.RemotePut}
+		<li class='ja'>{@link oaj.http.remote.RemotePost}
+		<li class='ja'>{@link oaj.http.remote.RemoteDelete}
+		<li class='ja'>{@link oaj.http.remote.RemoteOp}
+	</ul>
+	<p>
+		See {@doc jrc.Proxies Proxies} for more information on use of these annotations.
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/08.juneau-rest-server.html b/juneau-doc/docs/Topics/08.juneau-rest-server.html
new file mode 100644
index 000000000..653a14e99
--- /dev/null
+++ b/juneau-doc/docs/Topics/08.juneau-rest-server.html
@@ -0,0 +1,133 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'juneau-rest-server', updated:'9.0.0'}
+
+<div class='topic'>
+	<h5 class='figure'>Maven Dependency</h5>
+	<p class='bxml 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 <l>juneau-rest-server</l> library allows you to quickly wrap POJOs and expose them as full-fledged REST 
+		resources served up in a servlet container using a bare-minimum amount of code.
+		The primary goal for Juneau was to make it as easy as possible to implement easy-to-read and self-documenting 
+		REST resources using very little code.
+	</p>
+	<p>
+		One of the biggest advantages of the Juneau REST framework over similar architectures is that it hides the 
+		serialization layer from the developer.  
+		The developer can work entirely with POJOs and let the Juneau framework handle all the serialization and 
+		parsing work.  
+		The developer need never know what the <l>Accept</l> or <l>Content-Type</l> or <l>Accept-Encoding</l> (etc...) 
+		header values are because those details are all handled by the framework. 
+	</p>
+	<p> 
+		The API builds upon the existing JEE Servlet API.  
+		The root class, {@link oajr.servlet.RestServlet} is nothing but a specialized 
+		{@link javax.servlet.http.HttpServlet}, and the {@link oajr.RestRequest} and 
+		{@link oajr.RestResponse} classes are nothing more than specialized 
+		{@link javax.servlet.http.HttpServletRequest} and {@link javax.servlet.http.HttpServletResponse} objects.  
+		This allows maximum flexibility for the developer since you can let Juneau handle operations such as 
+		serialization, or you can revert to the existing servlet APIs to do low-level processing of requests yourself.	
+		It also means you need nothing more than a Servlet container such as Jetty to use the REST framework.
+	</p>
+	
+	<h5 class='topic'>Features</h5>
+	<ul class='spaced-list'>
+		<li>
+			Deployable in standard Servlet containers.
+		<li>
+			Deployable in Spring Boot environments with full support for injected beans.
+		<li>
+			Serializes POJOs to JSON, XML, HTML, URL-Encoding, UON, RDF/XML, N-Triple, Turtle, N3, SOAP, or 
+			Java-serialized-object based on value of <l>Accept</l> header.  
+			<br>No user code is required to handle these types.
+			<ul>
+				<li>Extensible design that provides ability to override existing content type handlers, or add the 
+					ability to handle other kinds of content types.
+			</ul>
+		<li>
+			Parses content of POST/PUT request bodies to POJOs.
+		<li>
+			Automatic built-in ability to serialize POJO metadata to JSON+SCHEMA, XML+SCHEMA, or HTML+SCHEMA based on 
+			<l>Accept</l> header.
+		<li>
+			Automatic negotiation of output Writer based on HTTP headers.
+			<ul>
+				<li>Automatic handling of <l>Accept-Charset</l> header for all character sets supported by the JVM.
+				<li>Automatic handling of <l>Accept-Encoding</l> header with registered encoders.
+			</ul>
+		<li>
+			Automatic error handling.
+			<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.
+			</ul>
+		<li>
+			Support for parsing all HTTP parts (headers, query, formData, path variables) using Swagger formatting rules and validations.
+			<br>Not limited to simple POJOs, but rather you can represent arbitrarily-complex POJOs in any HTTP part using UON notation.
+		<li>
+			Auto-created Swagger JSON and Swagger UI available through OPTIONS requests of resources.
+		<li>
+			Various useful debugging features that make debugging using a browser extremely simple...
+			<ul>
+				<li>Ability to pass HTTP header values as URL GET parameters (e.g. <l>&amp;Accept=text/xml</l>).
+				<li>Ability to pass HTTP content on PUT/POST requests as a URL GET parameter 
+					(e.g. <l>&amp;content=(foo=bar)</l>).
+				<li>Ability to simulate non-GET requests using a <l>&amp;method</l> GET parameter 
+					(e.g. <l>&amp;method=POST</l>).
+				<li>Ability to force <js>"text/plain"</js> on response using GET parameter <l>&amp;plainText=true</l>.
+			</ul>
+		<li>
+			Ability to implement overloaded HTTP methods through the use of the <l>&amp;method</l> attribute 
+			(e.g. <l>&amp;method=FOO</l>).
+		<li>
+			Ability to match URL patterns (e.g. <l>/foo/{fooId}/bar/{barId}</l>) against URLs 
+			(e.g. <l>/foo/123/bar/456/bing</l>).
+		<li>
+			Ability to associate guards at the resource or method levels through annotations.
+			<br>Typically useful for security, but can be used for a variety of purposes.
+		<li>
+			Ability to associate converters at the resource or method levels through annotations.
+			<br>Typically useful for performing conversions on input and output, such as for supporting older input and 
+			output formats.
+	</ul>
+	<p>
+		Many of the examples in this document are pulled directly from <l>juneau-examples-rest</l>.
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/08.juneau-rest-server/01.jrs.Overview.html b/juneau-doc/docs/Topics/08.juneau-rest-server/01.jrs.Overview.html
new file mode 100644
index 000000000..38d378507
--- /dev/null
+++ b/juneau-doc/docs/Topics/08.juneau-rest-server/01.jrs.Overview.html
@@ -0,0 +1,155 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'Overview', created:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		A REST resource is simply a Java class annotated with {@link oajr.annotation.Rest @Rest}.
+		The most common case is a class that extends {@link oajr.servlet.BasicRestServlet}, which itself is simply an 
+		extension of {@link javax.servlet.http.HttpServlet} which allows it to be deployed as a servlet.  
+	</p>
+	<p>
+		Juneau has two sample applications for demonstrating how to use the REST API, one using Jetty and one using
+		Spring Boot:
+	</p>
+	<ul class='javatree'>
+		<li class='jp'>{@link oaj.examples.rest.jetty}
+		<li class='jp'>{@link oaj.examples.rest.springboot}
+	</ul>
+	<p>
+		The {@link oaj.examples.rest.springboot} application is described in the section {@doc jrss.Overview}.
+	</p>
+	<p>
+		The Jetty application consists of the following application class that registers our top-level servlet:
+	</p>
+	<p class='bjava'>
+		|	<jk>public class</jk> App {
+		|	
+		|		<jk>public static void</jk> main(String[] <jv>args</jv>) <jk>throws</jk> Exception {
+		|			JettyMicroservice
+		|				.<jsm>create</jsm>()
+		|				.args(<jv>args</jv>)
+		|				.servlet(RootResources.<jk>class</jk>)
+		|				.build()
+		|				.start()
+		|				.startConsole()
+		|				.join();
+		|		}
+		|	}
+	</p>
+	<p>
+		The root resources class is an example of a router page that is used to attach children to:
+	</p>
+	<p class='bjava'>
+		|	<ja>@Rest</ja>(
+		|		title=<js>"Root resources"</js>,
+		|		description=<js>"Example of a router resource page."</js>,
+		|		children={
+		|			HelloWorldResource.<jk>class</jk>,
+		|			DtoExamples.<jk>class</jk>,
+		|			UtilityBeansResource.<jk>class</jk>,
+		|			HtmlBeansResource.<jk>class</jk>,
+		|			ConfigResource.<jk>class</jk>,
+		|			ShutdownResource.<jk>class</jk>
+		|		}
+		|	)
+		|	<ja>@HtmlDocConfig</ja>(
+		|		widgets={
+		|			ContentTypeMenuItem.<jk>class</jk>
+		|		},
+		|		navlinks={
+		|			<js>"api: servlet:/api"</js>,
+		|			<js>"stats: servlet:/stats"</js>,
+		|			<js>"$W{ContentTypeMenuItem}"</js>,
+		|			<js>"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/RootResources.java"</js>
+		|		},
+		|		aside={
+		|			<js>"&lt;div 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;API&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;STATS&lt;/span&gt; link to view runtime statistics on this page.&lt;/p&gt;"</js>,
+		|			<js>"	&lt;p&gt;Also note the &lt;span class='link'&gt;SOURCE&lt;/span&gt; link to view the source code for the page.&lt;/p&gt;"</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>
+		|		},
+		|		asideFloat=<js>"RIGHT"</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>implements</jk> BasicUniversalJenaConfig {
+		|		<jc>// IMPORTANT!  If you don't need RDF support, change the parent interface to BasicUniversalConfig.
+		|		// It allows you to remove the Jena prerequisite.</jc>
+		|	
+		|		<jk>private static final long</jk> <jsf>serialVersionUID</jsf> = 1L;
+		|	}	
+	</p>
+	<p>
+		This is what it looks like in a browser:
+	</p>
+	
+	<h5 class='figure'>HTML representation</h5>
+	<img class='bordered w800' src='doc-files/jrs.Overview.RootResources.png'>
+	
+	<h5 class='figure'>JSON representation</h5>
+	<img class='bordered w800' src='doc-files/jrs.Overview.RootResources.json.png'>
+	
+	<p>
+		The {@link oaj.examples.rest.HelloWorldResource} class is our basic example of a child REST resource:
+	</p>
+	
+	<p class='bjava'>
+		|	<ja>@Rest</ja>(
+		|		title=<js>"Hello World"</js>,
+		|		description=<js>"An example of the simplest-possible resource"</js>,
+		|		path=<js>"/helloWorld"</js>
+		|	)
+		|	<ja>@HtmlDocConfig</ja>(
+		|		aside={
+		|			<js>"&lt;div style='max-width:400px' class='text'&gt;"</js>,
+		|			<js>"	&lt;p&gt;This page shows a resource that simply response with a 'Hello world!' message&lt;/p&gt;"</js>,
+		|			<js>"	&lt;p&gt;The POJO serialized is a simple String.&lt;/p&gt;"</js>,
+		|			<js>"&lt;/div&gt;"</js>
+		|		}
+		|	)
+		|	<jk>public class</jk> HelloWorldResource <jk>extends</jk> BasicRestObject <jk>implements</jk> BasicUniversalConfig {
+		|	
+		|		<ja>@RestGet</ja>(path=<js>"/*"</js>, summary=<js>"Responds with \"Hello world!\""</js>)
+		|		<jk>public</jk> String sayHello() {
+		|			<jk>return</jk> <js>"Hello world!"</js>;
+		|		}
+		|	}
+	</p>
+
+	<p>
+		This is what it looks like in a browser:
+	</p>
+
+	<h5 class='figure'>HTML representation</h5>
+	<img class='bordered w800' src='doc-files/jrs.Overview.HelloWorldResource.png'>
+	
+	<p>
+		It doesn't much simpler than that.  
+		In this case, we're simply returning a string that will be converted to any of the supported languages (e.g. 
+		JSON, XML, HTML, ...).
+		However, we could have returned any POJO consisting of beans, maps, collections, etc...
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/08.juneau-rest-server/02.jrs.AnnotatedClasses.html b/juneau-doc/docs/Topics/08.juneau-rest-server/02.jrs.AnnotatedClasses.html
new file mode 100644
index 000000000..a5f4ae4f2
--- /dev/null
+++ b/juneau-doc/docs/Topics/08.juneau-rest-server/02.jrs.AnnotatedClasses.html
@@ -0,0 +1,90 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'@Rest-Annotated Classes', updated:'8.1.2,9.0.0'}
+
+<div class='topic'>
+	<p>
+		The {@link oajr.annotation.Rest @Rest} annotation is the primary way of defining
+		and configuring REST resource classes.
+		The functionality of the class itself is covered in detail in the topics below.
+	</p>
+	<ul class='javatree'>
+		<li class='ja'>{@link oajr.annotation.Rest}
+			<ul class='javatreec'>
+				<li class='jma'>{@link oajr.annotation.Rest#allowedHeaderParams() allowedHeaderParams}
+				<li class='jma'>{@link oajr.annotation.Rest#allowedMethodHeaders() allowedMethodHeaders}
+				<li class='jma'>{@link oajr.annotation.Rest#allowedMethodParams() allowedMethodParams}
+				<li class='jma'>{@link oajr.annotation.Rest#beanStore() beanStore}
+				<li class='jma'>{@link oajr.annotation.Rest#builder() builder}
+				<li class='jma'>{@link oajr.annotation.Rest#callLogger() callLogger}
+				<li class='jma'>{@link oajr.annotation.Rest#children() children}
+				<li class='jma'>{@link oajr.annotation.Rest#clientVersionHeader() clientVersionHeader}
+				<li class='jma'>{@link oajr.annotation.Rest#config() config}
+				<li class='jma'>{@link oajr.annotation.Rest#consumes() consumes}
+				<li class='jma'>{@link oajr.annotation.Rest#contextClass() contextClass}
+				<li class='jma'>{@link oajr.annotation.Rest#converters() converters}
+				<li class='jma'>{@link oajr.annotation.Rest#debug() debug}
+				<li class='jma'>{@link oajr.annotation.Rest#debugEnablement() debugEnablement}
+				<li class='jma'>{@link oajr.annotation.Rest#debugOn() debugOn}
+				<li class='jma'>{@link oajr.annotation.Rest#defaultAccept() defaultAccept}
+				<li class='jma'>{@link oajr.annotation.Rest#defaultCharset() defaultCharset}
+				<li class='jma'>{@link oajr.annotation.Rest#defaultContentType() defaultContentType}
+				<li class='jma'>{@link oajr.annotation.Rest#defaultRequestAttributes() defaultRequestAttributes}
+				<li class='jma'>{@link oajr.annotation.Rest#defaultRequestHeaders() defaultRequestHeaders}
+				<li class='jma'>{@link oajr.annotation.Rest#defaultResponseHeaders() defaultResponseHeaders}
+				<li class='jma'>{@link oajr.annotation.Rest#description() description}
+				<li class='jma'>{@link oajr.annotation.Rest#disableContentParam() disableContentParam}
+				<li class='jma'>{@link oajr.annotation.Rest#encoders() encoders}
+				<li class='jma'>{@link oajr.annotation.Rest#fileFinder() fileFinder}
+				<li class='jma'>{@link oajr.annotation.Rest#guards() guards}
+				<li class='jma'>{@link oajr.annotation.Rest#maxInput() maxInput}
+				<li class='jma'>{@link oajr.annotation.Rest#messages() messages}
+				<li class='jma'>{@link oajr.annotation.Rest#on() on}
+				<li class='jma'>{@link oajr.annotation.Rest#onClass() onClass}
+				<li class='jma'>{@link oajr.annotation.Rest#parsers() parsers}
+				<li class='jma'>{@link oajr.annotation.Rest#partParser() partParser}
+				<li class='jma'>{@link oajr.annotation.Rest#partSerializer() partSerializer}
+				<li class='jma'>{@link oajr.annotation.Rest#path() path}
+				<li class='jma'>{@link oajr.annotation.Rest#produces() produces}
+				<li class='jma'>{@link oajr.annotation.Rest#renderResponseStackTraces() renderResponseStackTraces}
+				<li class='jma'>{@link oajr.annotation.Rest#responseProcessors() responseProcessors}
+				<li class='jma'>{@link oajr.annotation.Rest#restChildrenClass() restChildrenClass}
+				<li class='jma'>{@link oajr.annotation.Rest#restOpArgs() restOpArgs}
+				<li class='jma'>{@link oajr.annotation.Rest#restOpContextClass() restOpContextClass}
+				<li class='jma'>{@link oajr.annotation.Rest#restOperationsClass() restOperationsClass}
+				<li class='jma'>{@link oajr.annotation.Rest#roleGuard() roleGuard}
+				<li class='jma'>{@link oajr.annotation.Rest#rolesDeclared() rolesDeclared}
+				<li class='jma'>{@link oajr.annotation.Rest#serializers() serializers}
+				<li class='jma'>{@link oajr.annotation.Rest#siteName() siteName}
+				<li class='jma'>{@link oajr.annotation.Rest#staticFiles() staticFiles}
+				<li class='jma'>{@link oajr.annotation.Rest#swagger() swagger}
+				<li class='jma'>{@link oajr.annotation.Rest#swaggerProvider() swaggerProvider}
+				<li class='jma'>{@link oajr.annotation.Rest#title() title}
+				<li class='jma'>{@link oajr.annotation.Rest#uriAuthority() uriAuthority}
+				<li class='jma'>{@link oajr.annotation.Rest#uriContext() uriContext}
+				<li class='jma'>{@link oajr.annotation.Rest#uriRelativity() uriRelativity}
+				<li class='jma'>{@link oajr.annotation.Rest#uriResolution() uriResolution}
+			</ul>
+		</li>
+	</ul>
+	<p>
+		The {@link oajr.annotation.Rest @Rest} annotation in inheritable from parents and interfaces of resource classes.
+		When multiple annotations are defined at different levels, the annotation values are combined.
+		This is a particularly useful feature because it allows you to define your own configured parent
+		resource classes that can be extended by all your child resources so that they all share common
+		settings.
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/08.juneau-rest-server/02.jrs.AnnotatedClasses/01.jrs.PredefinedClasses.html b/juneau-doc/docs/Topics/08.juneau-rest-server/02.jrs.AnnotatedClasses/01.jrs.PredefinedClasses.html
new file mode 100644
index 000000000..1bf05a277
--- /dev/null
+++ b/juneau-doc/docs/Topics/08.juneau-rest-server/02.jrs.AnnotatedClasses/01.jrs.PredefinedClasses.html
@@ -0,0 +1,214 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'Predefined Classes', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The following example represents the bare-minimum needed
+		for deploying a top-level REST endpoint with basic JSON marshalling support:
+	</p>
+	<p class='bjava'>
+		|	<ja>@Rest</ja>(
+		|		path=<js>"/mypath"</js>,
+		|		serializers=JsonSerializer.<jk>class</jk>,
+		|		parsers=JsonParser.<jk>class</jk>
+		|	)
+		|	<jk>public class</jk> MyResource <jk>extends</jk> RestServlet {
+		|	
+		|		<ja>@RestGet</ja>(path=<js>"/"</js>)
+		|		<jk>public</jk> Object getPojo() {
+		|			...
+		|		}
+		|	}
+	</p>
+	<p>
+		The {@link oajr.servlet.RestServlet} class provides all the logic for starting up your REST
+		application when the servlet container calls {@link oajr.servlet.RestServlet#init(ServletConfig) init(ServletConfig)}.  
+		On startup, it scans your class for annotations and sets up 
+		all of your serializers and parsers.  It then does this recursively for all child resources.
+	</p>
+	<p>
+		Users will typically not extend directly from {@link oajr.servlet.RestServlet}.  Instead, several classes are provided by the framework to provide additional
+		functionality and to handle different use-cases.  Users will typically extend from one of these <c>Basic*</c> classes:
+	</p>
+	<ul class='javatree'>
+		<li class='jac'>{@link javax.servlet.http.HttpServlet} 
+			<ul>
+				<li class='jac'>{@link oajr.servlet.RestServlet}
+					<ul>
+						<li class='jac'>{@link oajr.servlet.BasicRestServlet} <jk>implements</jk> {@link oajr.servlet.BasicRestOperations}, {@link oajr.config.BasicJsonConfig}
+							<ul>
+								<li class='jac'>{@link oajr.servlet.BasicRestServletGroup} <jk>implements</jk> {@link oajr.servlet.BasicGroupOperations}
+							</ul>
+						</li>
+						<li class='jac'>{@link oajr.springboot.SpringRestServlet}
+							<ul>
+								<li class='jac'>{@link oajr.springboot.BasicSpringRestServlet} <jk>implements</jk> {@link oajr.servlet.BasicRestOperations}, {@link oajr.config.BasicJsonConfig}
+									<ul>
+										<li class='jac'>{@link oajr.springboot.BasicSpringRestServletGroup} <jk>implements</jk> {@link oajr.servlet.BasicGroupOperations}
+									</ul>
+								</li>
+							</ul>
+						</li>
+					</ul>
+				</li>
+			</ul>
+		</li>
+		<li class='jac'>{@link oajr.servlet.RestObject}
+			<ul>
+				<li class='jac'>{@link oajr.servlet.BasicRestObject} <jk>implements</jk> {@link oajr.servlet.BasicRestOperations}, {@link oajr.config.BasicJsonConfig}
+					<ul>
+						<li class='jac'>{@link oajr.servlet.BasicRestObjectGroup} <jk>implements</jk> {@link oajr.servlet.BasicGroupOperations}
+					</ul>
+				</li>
+			</ul>
+		</li>
+	</ul>
+	<p>
+		The {@link oajr.servlet.RestServlet}
+		class itself is not configured with any serializers or parsers.  However, it does
+		provide several convenience methods to be aware of:
+	</p>
+	<ul class='javatree'>
+		<li class='jac'>{@link oajr.servlet.RestServlet}
+			<ul class='spaced-list'>
+				<li>Predefined lifecycle hook methods:
+					<ul class='javatreec'>
+						<li class='jm'>{@link oajr.servlet.RestServlet#onInit(RestContext.Builder) onInit()}
+						<li class='jm'>{@link oajr.servlet.RestServlet#onPostInit(RestContext) onPostInit()}
+						<li class='jm'>{@link oajr.servlet.RestServlet#onPostInitChildFirst(RestContext) onPostInitChildFirst()}
+						<li class='jm'>{@link oajr.servlet.RestServlet#onStartCall(HttpServletRequest,HttpServletResponse) onStartCall()}
+						<li class='jm'>{@link oajr.servlet.RestServlet#onPreCall(RestRequest,RestResponse) onPreCall()}
+						<li class='jm'>{@link oajr.servlet.RestServlet#onPostCall(RestRequest,RestResponse) onPostCall()}
+						<li class='jm'>{@link oajr.servlet.RestServlet#onEndCall(HttpServletRequest,HttpServletResponse) onEndCall()}
+						<li class='jm'>{@link oajr.servlet.RestServlet#onDestroy(RestContext) onDestroy()}
+					</ul>
+				</li>
+				<li>Logging methods:
+					<ul class='javatreec'>
+						<li class='jm'>{@link oajr.servlet.RestServlet#log(Level,String,Object...) log(Level,String,Object...)}
+						<li class='jm'>{@link oajr.servlet.RestServlet#log(Level,Throwable,String,Object...) log(Level,Throwable,String,Object...)}
+						<li class='jm'>{@link oajr.servlet.RestServlet#log(String) log(String)}
+						<li class='jm'>{@link oajr.servlet.RestServlet#log(String,Throwable) log(String,Throwable)}
+					</ul>
+				</li>
+				<li>Other methods:
+					<ul class='javatreec'>
+						<li class='jm'>{@link oajr.servlet.RestServlet#getContext() getContext()}
+						<li class='jm'>{@link oajr.servlet.RestServlet#getPath() getPath()}
+						<li class='jm'>{@link oajr.servlet.RestServlet#getRequest() getRequest()}
+						<li class='jm'>{@link oajr.servlet.RestServlet#getResponse() getResponse()}
+					</ul>
+				</li>
+			</ul>
+		</li>
+	</ul>
+	<p>
+		The <c>Basic*</c> classes implement the {@link oajr.servlet.BasicRestOperations} interface
+		which defines common endpoints for swagger documentation, statistics, and serving static files:
+	</p>
+	<p class='bjava'>
+		|	<jk>public interface</jk> BasicRestOperations {
+		|
+		|		<ja>@RestGet</ja>(path=<js>"/api/*"</js>)
+		|		<jk>public</jk> {@link oaj.dto.swagger.Swagger} {@link oajr.servlet.BasicRestOperations#getSwagger(RestRequest) getSwagger}({@link oajr.RestRequest} <jv>req</jv>);
+		|
+		|		<ja>@RestGet</ja>(path=<js>"/htdocs/*"</js>)
+		|		<jk>public</jk> {@link oaj.http.resource.HttpResource} {@link oajr.servlet.BasicRestOperations#getHtdoc(String,Locale) getHtdoc}(<ja>@Path</ja> String <jv>path</jv>, Locale <jv>locale</jv>);
+		|
+		|		<ja>@RestGet</ja>(path=<js>"favicon.ico"</js>)
+		|		<jk>public</jk> {@link oaj.http.resource.HttpResource} {@link oajr.servlet.BasicRestOperations#getFavIcon() getFavIcon}();
+		|
+		|		<ja>@RestGet</ja>(path=<js>"/stats"</js>)
+		|		<jk>public</jk> {@link oajr.stats.RestContextStats} {@link oajr.servlet.BasicRestOperations#getStats(RestRequest) getStats}({@link oajr.RestRequest} <jv>req</jv>);
+		|
+		|		<ja>@RestOp</ja>(method=<jsf>ANY</jsf>, path=<js>"/error"</js>)
+		|		<jk>public void</jk> {@link oajr.servlet.BasicRestOperations#error() error}();
+		|	}
+	</p>
+	<p>
+		The <c>Basic*</c> classes also implement {@link oajr.config.BasicJsonConfig} interface which
+		provides basic JSON marshalling support.  Other config interfaces are available as
+		well to quickly provide different types of marshalling support.  Note that these interfaces
+		do not define any methods, but rather simply provide a set of commonly-used annotations so that
+		you don't need to define them on all your classes.
+	</p>
+	<ul class='javatreec'>
+		<li class='jic'>{@link oajr.config.BasicJsonConfig}
+		<li class='jic'>{@link oajr.config.BasicJsonHtmlConfig}
+		<li class='jic'>{@link oajr.config.BasicSimpleJsonConfig}
+		<li class='jic'>{@link oajr.config.BasicOpenApiConfig}
+		<li class='jic'>{@link oajr.config.BasicUniversalConfig}
+		<li class='jic'>{@link oajr.config.BasicUniversalJenaConfig}
+	</ul>
+	<p>
+		For example, if you want to provide a resource that supports all languages in Juneau, 
+		simply add the {@link oajr.config.BasicUniversalConfig} interface like so:
+	</p>
+	<p class='bjava'>
+		|	<ja>@Rest</ja>(...)
+		|	<jk>public class</jk> MyResource <jk>extends</jk> BasicRestServlet <jk>implements</jk> BasicUniversalConfig {
+		|		...
+		|	}
+	</p>
+	<p>
+		The <c>*Group</c> classes implement the {@link oajr.servlet.BasicGroupOperations} interface which provides an additional REST endpoint for listing and navigating child resources:
+	</p>
+	<p class='bjava'>
+		|	<jk>public interface</jk> BasicGroupOperations {
+		|
+		|		<ja>@RestGet</ja>(path=<js>"/"</js>)
+		|		<jk>public</jk> {@link oajr.beans.ChildResourceDescriptions} {@link oajr.servlet.BasicGroupOperations#getChildren(RestRequest) getChildren}({@link oajr.RestRequest} <jv>req</jv>);
+		|	}
+	</p>
+	<p>
+		The <c>*Spring*</c> classes are meant to be used in Spring Boot environments so that you can
+		take full advantage of the Spring Framework for injecting dependencies on child resources
+		and helper classes.
+	</p>
+	<p>
+		The <c>*Object*</c> classes provide the same functionality as the servlet
+		classes but do not extend from {@link javax.servlet.http.HttpServlet}.  
+		This becomes important in Spring Boot environments where you may want to 
+		define child resources as Spring Beans, but don't want Spring Boot to auto-detect
+		them as servlets to be deployed as top-level resources.  This is less important
+		in standard servlet containers that don't auto-deploy servlets.  In those
+		environments, you can also use servlet classes for child resources.
+	</p>
+	<p>
+		The following is a breakdown of which classes you will use in different cases:
+	</p>
+	<ul class='spaced-list'>
+		<li>Top level resources in a servlet container:
+			<ul class='javatreec'>
+				<li class='jac'>{@link oajr.servlet.BasicRestServlet}
+				<li class='jac'>{@link oajr.servlet.BasicRestServletGroup}
+			</ul>
+		</li>
+		<li>Top level resources in a Spring Boot environment:
+			<ul class='javatreec'>
+				<li class='jac'>{@link oajr.springboot.BasicSpringRestServlet}
+				<li class='jac'>{@link oajr.springboot.BasicSpringRestServletGroup}
+			</ul>
+		</li>
+		<li>Child resources:
+			<ul class='javatreec'>
+				<li class='jac'>{@link oajr.servlet.BasicRestObject}
+				<li class='jac'>{@link oajr.servlet.BasicRestObjectGroup}
+			</ul>
+		</li>
+	</ul>
+</div>	
diff --git a/juneau-doc/docs/Topics/08.juneau-rest-server/02.jrs.AnnotatedClasses/02.jrs.ChildResources.html b/juneau-doc/docs/Topics/08.juneau-rest-server/02.jrs.AnnotatedClasses/02.jrs.ChildResources.html
new file mode 100644
index 000000000..592b522b5
--- /dev/null
+++ b/juneau-doc/docs/Topics/08.juneau-rest-server/02.jrs.AnnotatedClasses/02.jrs.ChildResources.html
@@ -0,0 +1,55 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'Child Resources', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		Child Resources are REST servlets or objects that are linked to parent resources through the 
+		{@link oajr.annotation.Rest#children() @Rest(children)} annotation.
+	</p>
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+		|	<jd>/** Parent Resource */</jd>
+		|	<ja>@Rest</ja>(
+		|		path=<js>"/parent"</js>,
+		|		children={MyChildResource.<jk>class</jk>}
+		|	)
+		|	<jk>public</jk> MyRootResources <jk>extends</jk> BasicRestServletGroup <jk>implements</jk> BasicUniversalConfig {...}
+	</p>
+	<p class='bjava'>
+		|	<jd>/** Child Resource */</jd>
+ 		|	<ja>@Rest</ja>(
+		|		path=<js>"/child"</js>  <jc>// Path relative to parent resource.</jc>
+		|	)
+		|	<jk>public</jk> MyChildResource {...} <jc>// Note that we don't need to extend from RestServlet.</jc>
+	</p>
+	<p>
+		The path of the child resource gets appended to the path of the parent resource. 
+		So in the example above, the child resource is accessed through the URL <l>/parent/child</l>.
+	</p>
+	<p>
+		One advantage of using child resources is that they do not need to be declared in the JEE <l>web.xml</l> 
+		file.
+		Initialization of and access to the child resources occurs through the parent resource.
+		Children can be nested arbitrary deep to create complex REST interfaces with a single top-level REST servlet.
+	</p>
+	<p>
+		As explained earlier, child REST objects typically extend from {@link oajr.servlet.BasicRestObject} or {@link oajr.servlet.BasicRestObjectGroup}
+		and not from one of the servlet classes.  They also technically don't even need to extend from those classes
+		and can instead just be a normal class annotated with the bare-minimum {@link oajr.annotation.Rest @Rest} and {@link oajr.annotation.RestOp @RestOp}
+		annotations.
+	</p>
+</div>	
diff --git a/juneau-doc/docs/Topics/08.juneau-rest-server/02.jrs.AnnotatedClasses/03.jrs.PathVariables.html b/juneau-doc/docs/Topics/08.juneau-rest-server/02.jrs.AnnotatedClasses/03.jrs.PathVariables.html
new file mode 100644
index 000000000..513ab38ff
--- /dev/null
+++ b/juneau-doc/docs/Topics/08.juneau-rest-server/02.jrs.AnnotatedClasses/03.jrs.PathVariables.html
@@ -0,0 +1,43 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'Path Variables', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The path can contain variables that get resolved to {@link oaj.http.annotation.Path @Path} parameters
+		or access through the {@link oajr.RestRequest#getPathParams()} method.
+	</p>
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+		|	<ja>@Rest</ja>(
+		|		path=<js>"/myResource/{foo}/{bar}"</js>
+		|	)
+		|	<jk>public class</jk> MyResource <jk>extends</jk> BasicRestServlet <jk>implements</jk> BasicUniversalConfig {
+		|
+		|		<ja>@RestPost</ja>(<js>"/{baz}"</js>)
+		|		<jk>public void</jk> String doX(<ja>@Path</ja> String <jv>foo</jv>, <ja>@Path</ja> <jk>int</jk> <jv>bar</jv>) {
+		|			...
+		|		}
+		|	}
+	</p>
+	<p>
+		Variables can be used on either top-level or child resources and can be defined on multiple levels.
+		Path variables resolved in parent resource paths are also available to the child resources.
+	</p>
+	<div class='info'>
+		All variables in the path must be specified or else the target will not resolve and a <c>404</c> will result.
+	</div>
+</div>	
diff --git a/juneau-doc/docs/Topics/08.juneau-rest-server/02.jrs.AnnotatedClasses/04.jrs.Deployment.html b/juneau-doc/docs/Topics/08.juneau-rest-server/02.jrs.AnnotatedClasses/04.jrs.Deployment.html
new file mode 100644
index 000000000..fa3467fd6
--- /dev/null
+++ b/juneau-doc/docs/Topics/08.juneau-rest-server/02.jrs.AnnotatedClasses/04.jrs.Deployment.html
@@ -0,0 +1,73 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'Deployment', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		REST resources are deployed in the following ways:
+	</p>
+	<ul class='spaced-list'>
+		<li>Deployed in a J2EE container as a servlet.
+		<li>Deployed in a Spring Boot environment as a servlet.
+		<li>Deployed as a child of another REST resource.
+	</ul>
+	<p>
+		When deployed in a J2EE container, you MUST extend from one of the servlet classes.
+	</p>
+	<ul class='notes'>
+		<li class='note'>
+			When deployed as a child of another resource, you MAY extend from one of the servlet classes but it's 
+			not necessary.</b>
+			The only requirement is that the class be annotated with <ja>@Rest</ja> and have one of the following constructors
+			if they aren't already Spring Beans:
+			<ul class='javatree'>
+				<li class='jm'><c><jk>public</jk> T()</c>
+				<li class='jm'><c><jk>public</jk> T(RestContext.Builder)</c>
+			</ul>
+		</li>
+	</ul>
+	<p>
+		Deployment in a servlet container is typically done by adding a servlet entry for the top-level resources to the JEE <l>web.xml</l>.
+	</p>
+	<p>
+		Deployment in a Spring Boot environment involves defining your top-level resources as Spring Beans.  
+		Top-level resources must extend from {@link oajr.springboot.BasicSpringRestServlet} or {@link oajr.springboot.BasicSpringRestServletGroup}
+		so that Juneau can hook into the injection framework provided by Spring.  Child resource CAN be defined as injected Spring Beans
+		as well but it is not a requirement.  
+	</p>
+	<h5 class='figure'>Example Spring Boot Configuration</h5>
+	<p class='bjava'>
+		|	<ja>@SpringBootApplication</ja>
+		|	<ja>@Controller</ja>
+		|	<jk>public class</jk> SpringBootAppConfig {
+		|			
+		|		<ja>@Bean</ja>
+		|		<jk>public</jk> MyRootResources getRootResources() {
+		|			...
+		|		}
+		|	
+		|		<ja>@Bean</ja>
+		|		<jk>public</jk> MyChildResource getMyChildResource() {
+		|			...
+		|		}
+		|	
+		|		<ja>@Bean</ja>
+		|		<jk>public</jk> ServletRegistrationBean&gt;Servlet> getRootServlet(RootResources <jv>rootResources</jv>) {
+		|			<jk>return new</jk> ServletRegistrationBean&gt;>(<jv>rootResources</jv>, <js>"/*"</js>);
+		|		}
+		|	}
+	</p>	
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/08.juneau-rest-server/02.jrs.AnnotatedClasses/05.jrs.LifecycleHooks.html b/juneau-doc/docs/Topics/08.juneau-rest-server/02.jrs.AnnotatedClasses/05.jrs.LifecycleHooks.html
new file mode 100644
index 000000000..9907b18eb
--- /dev/null
+++ b/juneau-doc/docs/Topics/08.juneau-rest-server/02.jrs.AnnotatedClasses/05.jrs.LifecycleHooks.html
@@ -0,0 +1,81 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'Lifecycle Hooks', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		Lifecycle hooks allow you to hook into lifecycle events of the servlet/resource creation and REST calls.
+	</p>
+	<p>
+		For example, if you want to add an initialization method to your resource:
+	</p>
+	<p class='bjava'>
+		|	<ja>@Rest</ja>(...)
+		|	<jk>public class</jk> MyResource {
+		|
+		|		<jc>// Our database.</jc>
+		|		<jk>private</jk> Map&lt;Integer,Object&gt; <jf>myDatabase</jf>;
+		|
+		|		<ja>@RestHook</ja>(<jsf>INIT</jsf>)
+		|		<jk>public void</jk> initMyDatabase(RestContext.Builder <jv>builder</jv>) <jk>throws</jk> Exception {
+		|			<jf>myDatabase</jf> = <jk>new</jk> LinkedHashMap&lt;&gt;();
+		|		}
+		|	}
+	</p>
+	<p>
+		Or if you want to intercept REST calls:
+	</p>
+	<p class='bjava'>
+		|	<ja>@Rest</ja>(...)
+		|	<jk>public class</jk> MyResource {
+		|
+		|		<jc>// Add a request attribute to all incoming requests.</jc>
+		|		<ja>@RestHook</ja>(<jsf>PRE_CALL</jsf>)
+		|		<jk>public void</jk> onPreCall(RestRequest <jv>req</jv>) {
+		|			<jv>req</jv>.setAttribute(<js>"foo"</js>, <js>"bar"</js>);
+		|		}
+		|	}
+	</p>
+	<p>
+		The hook events can be broken down into two categories:
+	</p>
+	<ul class='javatree'>
+		<li class='je'>{@link oajr.annotation.HookEvent}
+			<ul class='spaced-list'>
+				<li>Resource lifecycle events:
+					<ul class='javatree'>
+						<li class='jf'>{@link oajr.annotation.HookEvent#INIT INIT} - Right before initialization.
+						<li class='jf'>{@link oajr.annotation.HookEvent#POST_INIT POST_INIT} - Right after initialization.
+						<li class='jf'>{@link oajr.annotation.HookEvent#POST_INIT_CHILD_FIRST POST_INIT_CHILD_FIRST} - Right after initialization, but run child methods first.
+						<li class='jf'>{@link oajr.annotation.HookEvent#DESTROY DESTROY} - Right before servlet destroy.
+					</ul>
+				</li>
+				<li>REST call lifecycle events:
+					<ul class='javatree'>
+						<li class='jf'>{@link oajr.annotation.HookEvent#START_CALL START_CALL} - At the beginning of a REST call.
+						<li class='jf'>{@link oajr.annotation.HookEvent#PRE_CALL PRE_CALL} - Right before the <ja>@RestOp</ja> method is invoked.
+						<li class='jf'>{@link oajr.annotation.HookEvent#POST_CALL POST_CALL} - Right after the <ja>@RestOp</ja> method is invoked.
+						<li class='jf'>{@link oajr.annotation.HookEvent#END_CALL END_CALL} - At the end of the REST call after the response has been flushed.
+					</ul>
+				</li>
+			</ul>
+		</li>
+	</ul>
+	
+	<ul class='seealso'>
+		<li class='ja'>{@link oajr.annotation.RestHook}
+	</ul>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/08.juneau-rest-server/03.jrs.RestOpAnnotatedMethods.html b/juneau-doc/docs/Topics/08.juneau-rest-server/03.jrs.RestOpAnnotatedMethods.html
new file mode 100644
index 000000000..885b23e96
--- /dev/null
+++ b/juneau-doc/docs/Topics/08.juneau-rest-server/03.jrs.RestOpAnnotatedMethods.html
@@ -0,0 +1,85 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'@RestOp-Annotated Methods', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		REST Java methods are identified on REST servlets using the 
+		{@link oajr.annotation.RestOp @RestOp} annotation. 
+		The annotation allows the framework to identify the available REST methods through reflection.
+	</p>
+	<ul class='javatree'>
+		<li class='ja'>{@link oajr.annotation.RestOp}
+			<ul class='javatreec'>
+				<li class='jma'>{@link oajr.annotation.RestOp#clientVersion() clientVersion}
+				<li class='jma'>{@link oajr.annotation.RestOp#consumes() consumes}
+				<li class='jma'>{@link oajr.annotation.RestOp#contextClass() contextClass}
+				<li class='jma'>{@link oajr.annotation.RestOp#converters() converters}
+				<li class='jma'>{@link oajr.annotation.RestOp#debug() debug}
+				<li class='jma'>{@link oajr.annotation.RestOp#defaultAccept() defaultAccept}
+				<li class='jma'>{@link oajr.annotation.RestOp#defaultCharset() defaultCharset}
+				<li class='jma'>{@link oajr.annotation.RestOp#defaultContentType() defaultContentType}
+				<li class='jma'>{@link oajr.annotation.RestOp#defaultRequestAttributes() defaultRequestAttributes}
+				<li class='jma'>{@link oajr.annotation.RestOp#defaultRequestFormData() defaultRequestFormData}
+				<li class='jma'>{@link oajr.annotation.RestOp#defaultRequestHeaders() defaultRequestHeaders}
+				<li class='jma'>{@link oajr.annotation.RestOp#defaultRequestQueryData() defaultRequestQueryData}
+				<li class='jma'>{@link oajr.annotation.RestOp#defaultResponseHeaders() defaultResponseHeaders}
+				<li class='jma'>{@link oajr.annotation.RestOp#description() description}
+				<li class='jma'>{@link oajr.annotation.RestOp#encoders() encoders}
+				<li class='jma'>{@link oajr.annotation.RestOp#guards() guards}
+				<li class='jma'>{@link oajr.annotation.RestOp#matchers() matchers}
+				<li class='jma'>{@link oajr.annotation.RestOp#maxInput() maxInput}
+				<li class='jma'>{@link oajr.annotation.RestOp#method() method}
+				<li class='jma'>{@link oajr.annotation.RestOp#on() on}
+				<li class='jma'>{@link oajr.annotation.RestOp#parsers() parsers}
+				<li class='jma'>{@link oajr.annotation.RestOp#path() path}
+				<li class='jma'>{@link oajr.annotation.RestOp#produces() produces}
+				<li class='jma'>{@link oajr.annotation.RestOp#roleGuard() roleGuard}
+				<li class='jma'>{@link oajr.annotation.RestOp#rolesDeclared() rolesDeclared}
+				<li class='jma'>{@link oajr.annotation.RestOp#serializers() serializers}
+				<li class='jma'>{@link oajr.annotation.RestOp#summary() summary}
+				<li class='jma'>{@link oajr.annotation.RestOp#swagger() swagger}
+				<li class='jma'>{@link oajr.annotation.RestOp#value() value}
+			</ul>
+		</li>
+	</ul>
+	
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+		|	<ja>@RestOp</ja>(method=<jsf>GET</jsf>, path=<js>"/"</js>)
+		|	<jk>public</jk> String sayHello() {
+		|		<jk>return</jk> <js>"Hello world!"</js>;
+		|	}
+	</p>
+	
+	<p>
+		The following specialized annotations are also provided for specific HTTP methods:
+	</p>
+	<ul class='javatreec'>
+		<li class='ja'>{@link oajr.annotation.RestGet}
+		<li class='ja'>{@link oajr.annotation.RestPut}
+		<li class='ja'>{@link oajr.annotation.RestPost}
+		<li class='ja'>{@link oajr.annotation.RestDelete}
+	</ul>
+	
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+		|	<ja>@RestGet</ja>(path=<js>"/"</js>)
+		|	<jk>public</jk> String sayHello() {
+		|		<jk>return</jk> <js>"Hello world!"</js>;
+		|	}
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/08.juneau-rest-server/03.jrs.RestOpAnnotatedMethods/01.jrs.InferredHttpMethodsAndPaths.html b/juneau-doc/docs/Topics/08.juneau-rest-server/03.jrs.RestOpAnnotatedMethods/01.jrs.InferredHttpMethodsAndPaths.html
new file mode 100644
index 000000000..ecd7c0109
--- /dev/null
+++ b/juneau-doc/docs/Topics/08.juneau-rest-server/03.jrs.RestOpAnnotatedMethods/01.jrs.InferredHttpMethodsAndPaths.html
@@ -0,0 +1,76 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'Inferred HTTP Methods and Paths', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		When the <c>name</c> and/or <c>path</c> values are not specified, their values are inferred
+		from the Java method name. 
+	</p>
+	<p>
+		The HTTP method can be inferred from the Java method by starting the method name with any of the following:
+	</p>
+	<ul>
+		<li><c>get</c>
+		<li><c>put</c>
+		<li><c>post</c>
+		<li><c>delete</c>
+		<li><c>options</c>
+		<li><c>head</c>
+		<li><c>trace</c>
+		<li><c>patch</c>
+	</ul>
+	<p>
+		If <c>path</c> is not defined, it's inferred from the Java method name (minus the prefix above).
+	</p>
+	
+	<h5 class='figure'>Examples:</h5>
+	<p class='bjava'>
+		|	<jc>// Method="GET", path="/foo"</jc>
+		|	<ja>@RestOp</ja>
+		|	<jk>public</jk> String getFoo() {...}
+	</p>
+	<p class='bjava'>
+		|	<jc>// Method="DELETE", path="/foo"</jc>
+		|	<ja>@RestOp</ja>
+		|	<jk>public</jk> String deleteFoo() {...}
+	</p>
+	<p class='bjava'>
+		|	<jc>// Method="GET", path="/foo"</jc>
+		|	<jc>// "GET" is default</jc>
+		|	<ja>@RestOp</ja>
+		|	<jk>public</jk> String foo() {...}
+	</p>
+	<p class='bjava'>
+		|	<jc>// Method="GET", path="/"</jc>
+		|	<ja>@RestOp</ja>(path=<js>"/"</js>)
+		|	<jk>public</jk> String foo() {...}
+	</p>
+	<p class='bjava'>
+		|	<jc>// Method="GET", path="/"</jc>
+		|	<ja>@RestOp</ja>
+		|	<jk>public</jk> String get() {...}
+	</p>
+	<p class='bjava'>
+		|	<jc>// Method="POST", path="/"</jc>
+		|	<ja>@RestOp</ja>
+		|	<jk>public</jk> String post() {...}
+	</p>
+	
+	<p>
+		If <c>name</c> and <c>path</c> are both specified, the Java method name can be anything.
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/08.juneau-rest-server/03.jrs.RestOpAnnotatedMethods/02.jrs.JavaMethodParameters.html b/juneau-doc/docs/Topics/08.juneau-rest-server/03.jrs.RestOpAnnotatedMethods/02.jrs.JavaMethodParameters.html
new file mode 100644
index 000000000..fbc1aa531
--- /dev/null
+++ b/juneau-doc/docs/Topics/08.juneau-rest-server/03.jrs.RestOpAnnotatedMethods/02.jrs.JavaMethodParameters.html
@@ -0,0 +1,188 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'Java Method Parameters', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		Java methods can contain any of the following parameters in any order:
+	</p>
+	<ul class='spaced-list'>
+		<li>
+			<b>Parameters based on class types:</b>
+			<ul class='spaced-list'>
+				<li>Request objects:
+					<ul class='javatreec'>
+						<li class='jic'>{@link javax.servlet.AsyncContext}
+						<li class='jc'>{@link oajr.arg.CookieList}
+						<li class='je'>{@link javax.servlet.DispatcherType}
+						<li class='jc'>{@link oaj.httppart.HttpPartParserSession}
+						<li class='jc'>{@link oaj.httppart.HttpPartSerializerSession}
+						<li class='jic'>{@link javax.servlet.HttpServletRequest}
+						<li class='jc'>{@link java.io.InputStream}
+						<li class='jac'>{@link oaj.parser.InputStreamParser}
+						<li class='jc'>{@link java.util.Locale}
+						<li class='jc'>{@link oaj.cp.Messages}
+						<li class='jac'>{@link oaj.parser.Parser}
+						<li class='jic'>{@link java.security.Principal}
+						<li class='jc'>{@link java.io.Reader}
+						<li class='jac'>{@link oaj.parser.ReaderParser}
+						<li class='jc'>{@link oajr.httppart.RequestAttributes}
+						<li class='jc'>{@link oajr.httppart.RequestContent}
+						<li class='jc'>{@link oajr.httppart.RequestFormParams}
+						<li class='jc'>{@link oajr.httppart.RequestHeaders}
+						<li class='jc'>{@link oajr.httppart.RequestPathParams}
+						<li class='jc'>{@link oajr.httppart.RequestQueryParams}
+						<li class='jc'>{@link java.util.ResourceBundle}
+						<li class='jc'>{@link oajr.RestRequest}
+						<li class='jic'>{@link javax.servlet.ServletInputStream}
+						<li class='jc'>{@link oaj.dto.swagger.Swagger}
+						<li class='jc'>{@link java.util.TimeZone}
+						<li class='jc'>{@link oaj.UriContext}
+						<li class='jc'>{@link oaj.UriResolver}
+						<li class='jc'>{@link oaj.svl.VarResolverSession}
+					</ul>
+				</li>
+				<li>Response objects:
+					<ul class='javatreec'>
+						<li class='jic'>{@link javax.servlet.HttpServletResponse}
+						<li class='jc'>{@link java.io.OutputStream}
+						<li class='jc'>{@link oajr.RestResponse}
+						<li class='jic'>{@link javax.servlet.ServletOutputStream}
+						<li class='jc'>{@link java.io.Writer}
+					</ul>
+				</li>
+				<li>Session objects:
+					<ul class='javatreec'>
+						<li class='jic'>{@link javax.servlet.http.HttpSession}
+						<li class='jc'>{@link oajr.RestSession}
+						<li class='jc'>{@link oajr.util.UrlPath}
+						<li class='jc'>{@link oajr.util.UrlPathMatch}
+						<li class='jc'>{@link oaj.cp.BeanStore}
+						<li class='jc'>{@link oajr.RestOpSession}
+					</ul>				
+				</li>
+				<li>Parsed request header values:
+					<ul class='javatreec'>
+						<li class='jc'>{@link oaj.http.header.Accept}
+						<li class='jc'>{@link oaj.http.header.AcceptCharset}
+						<li class='jc'>{@link oaj.http.header.AcceptEncoding}
+						<li class='jc'>{@link oaj.http.header.AcceptLanguage}
+						<li class='jc'>{@link oaj.http.header.AcceptRanges}
+						<li class='jc'>{@link oaj.http.header.Authorization}
+						<li class='jc'>{@link oaj.http.header.CacheControl}
+						<li class='jc'>{@link oaj.http.header.ClientVersion}
+						<li class='jc'>{@link oaj.http.header.Connection}
+						<li class='jc'>{@link oaj.http.header.ContentDisposition}
+						<li class='jc'>{@link oaj.http.header.ContentEncoding}
+						<li class='jc'>{@link oaj.http.header.ContentLength}
+						<li class='jc'>{@link oaj.http.header.ContentType}
+						<li class='jc'>{@link oaj.http.header.Date}
+						<li class='jc'>{@link oaj.http.header.Debug}
+						<li class='jc'>{@link oaj.http.header.Expect}
+						<li class='jc'>{@link oaj.http.header.Forwarded}
+						<li class='jc'>{@link oaj.http.header.From}
+						<li class='jc'>{@link oaj.http.header.Host}
+						<li class='jc'>{@link oaj.http.header.IfMatch}
+						<li class='jc'>{@link oaj.http.header.IfModifiedSince}
+						<li class='jc'>{@link oaj.http.header.IfNoneMatch}
+						<li class='jc'>{@link oaj.http.header.IfRange}
+						<li class='jc'>{@link oaj.http.header.IfUnmodifiedSince}
+						<li class='jc'>{@link oaj.http.header.MaxForwards}
+						<li class='jc'>{@link oaj.http.header.NoTrace}
+						<li class='jc'>{@link oaj.http.header.Origin}
+						<li class='jc'>{@link oaj.http.header.Pragma}
+						<li class='jc'>{@link oaj.http.header.ProxyAuthorization}
+						<li class='jc'>{@link oaj.http.header.Range}
+						<li class='jc'>{@link oaj.http.header.Referer}
+						<li class='jc'>{@link oaj.http.header.TE}
+						<li class='jc'>{@link oaj.http.header.Thrown}
+						<li class='jc'>{@link oaj.http.header.Upgrade}
+						<li class='jc'>{@link oaj.http.header.UserAgent}
+						<li class='jc'>{@link oaj.http.header.Warning}
+					</ul>
+				</li>
+				<li>Context values:
+					<ul class='javatreec'>
+						<li class='jc'>{@link oaj.BeanContext}
+						<li class='jc'>{@link oaj.config.Config}
+						<li class='jic'>{@link oajr.debug.DebugEnablement}
+						<li class='jc'>{@link oaj.encoders.EncoderSet}
+						<li class='jic'>{@link oaj.cp.FileFinder}
+						<li class='jc'>{@link oaj.jsonschema.JsonSchemaGenerator}
+						<li class='jc'>{@link java.util.Logger}
+						<li class='jc'>{@link oajr.stats.MethodExecStore}
+						<li class='jc'>{@link oaj.parser.ParserSet}
+						<li class='jc'>{@link oajr.RestChildren}
+						<li class='jc'>{@link oajr.RestContext}
+						<li class='jc'>{@link oajr.stats.RestContextStats}
+						<li class='jic'>{@link oajr.logging.RestLogger}
+						<li class='jc'>{@link oajr.RestOpContext}
+						<li class='jc'>{@link oajr.RestOperations}
+						<li class='jc'>{@link oaj.serializer.SerializerSet}
+						<li class='jic'>{@link oajr.staticfile.StaticFiles}
+						<li class='jc'>{@link oajr.stats.ThrownStore}
+					</ul>
+				</li>
+			</ul>
+		<li><b>Annotated parameters (either on the parameter or parameter type):</b>
+			<ul class='javatreec'>
+				<li class='ja'>{@link oajr.annotation.Attr}
+				<li class='ja'>{@link oaj.http.annotation.Content}
+				<li class='ja'>{@link oaj.http.annotation.Path}
+				<li class='ja'>{@link oaj.http.annotation.FormData}
+				<li class='ja'>{@link oaj.http.annotation.HasFormData}
+				<li class='ja'>{@link oaj.http.annotation.Query}
+				<li class='ja'>{@link oaj.http.annotation.HasQuery}
+				<li class='ja'>{@link oaj.http.annotation.Header}
+				<li class='ja'>{@link oaj.http.annotation.StatusCode}
+				<li class='ja'>{@link oajr.annotation.Method}
+				<li class='ja'>{@link oaj.http.annotation.Request}
+				<li class='ja'>{@link oaj.http.annotation.Response}
+			</ul>
+		</li>
+	</ul>
+	<p>
+		In Spring Boot environments, any available Spring Beans can also be passed in as parameters.
+	</p>
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+		|	<ja>@RestGet</ja>(<js>"/example1/{a1}/{a2}/{a3}/*"</js>)
+		|	<jk>public</jk> String doGetExample1(
+		|		RestRequest <jv>req</jv>,
+		|		RestResponse <jv>res</jv>,
+		|		<ja>@Method</ja> String <jv>method</jv>,
+		|		<ja>@Path</ja>(<js>"a1"</js>) String <jv>a1</jv>,
+		|		<ja>@Path</ja>(<js>"a2"</js>) <jk>int</jk> <jv>a2</jv>,
+		|		<ja>@Path</ja>(<js>"a3"</js>) UUID <jv>a3</jv>,
+		|		<ja>@Query</ja>(<js>"p1"</js>) <jk>int</jk> <jv>p1</jv>,
+		|		<ja>@Query</ja>(<js>"p2"</js>) String <jv>p2</jv>,
+		|		<ja>@Query</ja>(<js>"p3"</js>) UUID <jv>p3</jv>,
+		|		<ja>@HasQuery</ja>(<js>"p3"</js>) boolean <jv>hasP3</jv>,
+		|		<ja>@Path</ja>(<js>"/*"</js>) String <jv>remainder</jv>,
+		|		<ja>@Header</ja>(<js>"Accept-Language"</js>) String <jv>lang</jv>,
+		|		<ja>@Header</ja>(<js>"Accept"</js>) String <jv>accept</jv>,
+		|		<ja>@Header</ja>(<js>"DNT"</js>) <jk>int</jk> <jv>doNotTrack</jv>,
+		|		RequestAttributes <jv>attributes</jv>,
+		|		ResourceBundle <jv>nls</jv>
+		|	) {
+		|		<jc>// Do something with all of those</jc>
+		|	}
+	</p>
+	<p>
+		Additional parameter types can be defined by overriding {@link oajr.RestContext.Builder#createRestOpArgs(BeanStore,Supplier)} or
+		by adding them to the bean store using {@link oajr.RestContext.Builder#createBeanStore(Class,Supplier)}.
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/08.juneau-rest-server/03.jrs.RestOpAnnotatedMethods/03.jrs.JavaMethodReturnTypes.html b/juneau-doc/docs/Topics/08.juneau-rest-server/03.jrs.RestOpAnnotatedMethods/03.jrs.JavaMethodReturnTypes.html
new file mode 100644
index 000000000..cc1cb4b51
--- /dev/null
+++ b/juneau-doc/docs/Topics/08.juneau-rest-server/03.jrs.RestOpAnnotatedMethods/03.jrs.JavaMethodReturnTypes.html
@@ -0,0 +1,154 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'Java Method Return Types', updated:'9.0.0'}
+
+<div class='topic'>
+	<p>
+		The return type of the Java method can be any serializable POJO as defined in {@doc jm.PojoCategories POJO Categories}.
+		It can also be <jk>void</jk> if the method is not sending any output (e.g. a request redirect) or is 
+		setting the output using the {@link oajr.RestResponse#setContent(Object)} method.
+	</p>
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+		|	<ja>@RestGet</ja>
+		|	<jk>public</jk> String doGet() {
+		|		<jk>return</jk> <js>"Hello World!"</js>;
+		|	}
+	</p>
+	<p>
+		In addition to POJOs, the following return types are also supported:
+	</p>
+	<ul class='spaced-list'>
+		<li>
+			<b>Parameters based on class types:</b>
+			<ul class='spaced-list'>
+				<li>Direct streams:
+					<ul class='javatreec'>
+						<li class='jc'>{@link java.io.InputStream}
+						<li class='jc'>{@link java.io.Reader}
+					</ul>
+				</li>
+				<li>Apache HttpComponent beans:
+					<ul class='javatreec'>
+						<li class='jic'>{@link org.apache.http.HttpEntity}
+						<li class='jic'>{@link oaj.http.resource.HttpResource}
+						<li class='jic'>{@link org.apache.http.HttpResponse}
+					</ul>
+				</li>
+				<li>Standard HTTP response beans:
+					<ul class='javatreec'>
+						<li class='jc'>{@link oaj.http.response.Accepted}
+						<li class='jc'>{@link oaj.http.response.AlreadyReported}
+						<li class='jc'>{@link oaj.http.response.BadRequest}
+						<li class='jc'>{@link oaj.http.response.Conflict}
+						<li class='jc'>{@link oaj.http.response.Continue}
+						<li class='jc'>{@link oaj.http.response.Created}
+						<li class='jc'>{@link oaj.http.response.EarlyHints}
+						<li class='jc'>{@link oaj.http.response.ExpectationFailed}
+						<li class='jc'>{@link oaj.http.response.FailedDependency}
+						<li class='jc'>{@link oaj.http.response.Forbidden}
+						<li class='jc'>{@link oaj.http.response.Found}
+						<li class='jc'>{@link oaj.http.response.Gone}
+						<li class='jc'>{@link oaj.http.response.HttpVersionNotSupported}
+						<li class='jc'>{@link oaj.http.response.IMUsed}
+						<li class='jc'>{@link oaj.http.response.InsufficientStorage}
+						<li class='jc'>{@link oaj.http.response.InternalServerError}
+						<li class='jc'>{@link oaj.http.response.LengthRequired}
+						<li class='jc'>{@link oaj.http.response.Locked}
+						<li class='jc'>{@link oaj.http.response.LoopDetected}
+						<li class='jc'>{@link oaj.http.response.MethodNotAllowed}
+						<li class='jc'>{@link oaj.http.response.MisdirectedRequest}
+						<li class='jc'>{@link oaj.http.response.MovedPermanently}
+						<li class='jc'>{@link oaj.http.response.MultipleChoices}
+						<li class='jc'>{@link oaj.http.response.MultiStatus}
+						<li class='jc'>{@link oaj.http.response.NetworkAuthenticationRequired}
+						<li class='jc'>{@link oaj.http.response.NoContent}
+						<li class='jc'>{@link oaj.http.response.NonAuthoritiveInformation}
+						<li class='jc'>{@link oaj.http.response.NotAcceptable}
+						<li class='jc'>{@link oaj.http.response.NotExtended}
+						<li class='jc'>{@link oaj.http.response.NotFound}
+						<li class='jc'>{@link oaj.http.response.NotImplemented}
+						<li class='jc'>{@link oaj.http.response.NotModified}
+						<li class='jc'>{@link oaj.http.response.Ok}
+						<li class='jc'>{@link oaj.http.response.PartialContent}
+						<li class='jc'>{@link oaj.http.response.PayloadTooLarge}
+						<li class='jc'>{@link oaj.http.response.PermanentRedirect}
+						<li class='jc'>{@link oaj.http.response.PreconditionFailed}
+						<li class='jc'>{@link oaj.http.response.PreconditionRequired}
+						<li class='jc'>{@link oaj.http.response.Processing}
+						<li class='jc'>{@link oaj.http.response.RangeNotSatisfiable}
+						<li class='jc'>{@link oaj.http.response.RequestHeaderFieldsTooLarge}
+						<li class='jc'>{@link oaj.http.response.ResetContent}
+						<li class='jc'>{@link oaj.http.response.SeeOther}
+						<li class='jc'>{@link oaj.http.response.ServiceUnavailable}
+						<li class='jc'>{@link oaj.http.response.SwitchingProtocols}
+						<li class='jc'>{@link oaj.http.response.TemporaryRedirect}
+						<li class='jc'>{@link oaj.http.response.TooManyRequests}
+						<li class='jc'>{@link oaj.http.response.Unauthorized}
+						<li class='jc'>{@link oaj.http.response.UnavailableForLegalReasons}
+						<li class='jc'>{@link oaj.http.response.UnprocessableEntity}
+						<li class='jc'>{@link oaj.http.response.UnsupportedMediaType}
+						<li class='jc'>{@link oaj.http.response.UpgradeRequired}
+						<li class='jc'>{@link oaj.http.response.UriTooLong}
+						<li class='jc'>{@link oaj.http.response.UseProxy}
+						<li class='jc'>{@link oaj.http.response.VariantAlsoNegotiates}
+					</ul>
+				</li>
+				<li>Other:
+					<ul class='javatreec'>
+						<li class='jc'>{@link oajr.beans.ChildResourceDescriptions}
+						<li class='jc'>{@link oajr.beans.ResourceDescriptions}
+						<li class='jc'>{@link oajr.beans.SeeOtherRoot}
+						<li class='jc'>{@link java.lang.Throwable}
+					</ul>
+				</li>
+			</ul>		
+		<li><b>Annotated parameters (either on the parameter or parameter type):</b>
+			<ul class='javatreec'>
+				<li class='ja'>{@link oaj.http.annotation.Response}
+			</ul>
+		</li>
+	</ul>		
+	<p>
+		REST Java methods can also generate a response via the following:
+	</p>
+	<ul class='spaced-list'>
+		<li>
+			By calling {@link oajr.RestResponse#setContent(Object)} with any of the types above.
+		<li>
+			By accessing the {@link java.io.Writer} directly by calling 
+			{@link oajr.RestResponse#getNegotiatedWriter()} and writing the output yourself.
+	</ul>
+	<h5 class='figure'>Example:</h5>
+	<p class='bjava'>
+		|	<jc>// Equivalent method 1</jc>
+		|	<ja>@RestGet</ja>(<js>"/example1/{personId}"</js>)
+		|	<jk>public</jk> Person doGet1(<ja>@Path</ja>(<js>"personId"</js>) UUID <jv>personId</jv>) {
+		|		Person <jv>person</jv> = <jsm>getPersonById</jsm>(<jv>personId</jv>);
+		|		<jk>return</jk> <jv>person</jv>;
+		|	}
+		|
+		|	<jc>// Equivalent method 2</jc>
+		|	<ja>@RestGet</ja>(<js>"/example2/{personId}"</js>)
+		|	<jk>public void</jk> doGet2(RestResponse <jv>res</jv>, <ja>@Path</ja>(<js>"personId"</js>) UUID <jv>personId</jv>) {
+		|		Person <jv>person</jv> = <jsm>getPersonById</jsm>(<jv>personId</jv>);
+		|		<jv>res</jv>.setContent(<jv>person</jv>);
+		|	}
+	</p>
+	<p>
+		Additional parameter types can be defined by overriding {@link oajr.RestContext.Builder#createResponseProcessors(BeanStore,Supplier)}.
+	</p>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/08.juneau-rest-server/03.jrs.RestOpAnnotatedMethods/04.jrs.JavaMethodThrowableTypes.html b/juneau-doc/docs/Topics/08.juneau-rest-server/03.jrs.RestOpAnnotatedMethods/04.jrs.JavaMethodThrowableTypes.html
new file mode 100644
index 000000000..d2451598e
--- /dev/null
+++ b/juneau-doc/docs/Topics/08.juneau-rest-server/03.jrs.RestOpAnnotatedMethods/04.jrs.JavaMethodThrowableTypes.html
@@ -0,0 +1,103 @@
... 14389 lines suppressed ...


[juneau] 01/02: Javadocs

Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 701eb031afdc0b71146a0413070751399643651b
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Mon Jun 27 13:44:24 2022 -0400

    Javadocs
---
 .../org/apache/juneau/assertions/AnyAssertion.java |    2 +-
 .../apache/juneau/assertions/ArrayAssertion.java   |    2 +-
 .../org/apache/juneau/assertions/Assertion.java    |    2 +-
 .../juneau/assertions/AssertionPredicate.java      |    2 +-
 .../juneau/assertions/AssertionPredicates.java     |    2 +-
 .../org/apache/juneau/assertions/Assertions.java   |   64 +-
 .../apache/juneau/assertions/BeanAssertion.java    |    2 +-
 .../juneau/assertions/BeanListAssertion.java       |    2 +-
 .../apache/juneau/assertions/BooleanAssertion.java |    2 +-
 .../juneau/assertions/ByteArrayAssertion.java      |    2 +-
 .../juneau/assertions/CollectionAssertion.java     |    2 +-
 .../juneau/assertions/ComparableAssertion.java     |    2 +-
 .../apache/juneau/assertions/DateAssertion.java    |    2 +-
 .../juneau/assertions/FluentAnyAssertion.java      |    2 +-
 .../juneau/assertions/FluentArrayAssertion.java    |    2 +-
 .../apache/juneau/assertions/FluentAssertion.java  |    2 +-
 .../juneau/assertions/FluentBeanAssertion.java     |    2 +-
 .../juneau/assertions/FluentBeanListAssertion.java |    2 +-
 .../juneau/assertions/FluentBooleanAssertion.java  |    2 +-
 .../assertions/FluentByteArrayAssertion.java       |    2 +-
 .../assertions/FluentCollectionAssertion.java      |    2 +-
 .../assertions/FluentComparableAssertion.java      |    2 +-
 .../juneau/assertions/FluentDateAssertion.java     |    2 +-
 .../juneau/assertions/FluentIntegerAssertion.java  |    2 +-
 .../juneau/assertions/FluentListAssertion.java     |    2 +-
 .../juneau/assertions/FluentLongAssertion.java     |    2 +-
 .../juneau/assertions/FluentMapAssertion.java      |    2 +-
 .../juneau/assertions/FluentObjectAssertion.java   |    2 +-
 .../assertions/FluentPrimitiveArrayAssertion.java  |    2 +-
 .../juneau/assertions/FluentStringAssertion.java   |    2 +-
 .../assertions/FluentStringListAssertion.java      |    2 +-
 .../assertions/FluentThrowableAssertion.java       |    2 +-
 .../juneau/assertions/FluentVersionAssertion.java  |    2 +-
 .../assertions/FluentZonedDateTimeAssertion.java   |    2 +-
 .../apache/juneau/assertions/IntegerAssertion.java |    2 +-
 .../apache/juneau/assertions/ListAssertion.java    |    2 +-
 .../apache/juneau/assertions/LongAssertion.java    |    2 +-
 .../org/apache/juneau/assertions/MapAssertion.java |    2 +-
 .../apache/juneau/assertions/ObjectAssertion.java  |    2 +-
 .../juneau/assertions/PrimitiveArrayAssertion.java |    2 +-
 .../apache/juneau/assertions/StringAssertion.java  |    2 +-
 .../juneau/assertions/StringListAssertion.java     |    2 +-
 .../juneau/assertions/ThrowableAssertion.java      |    2 +-
 .../java/org/apache/juneau/assertions/Verify.java  |    2 +-
 .../apache/juneau/assertions/VersionAssertion.java |    2 +-
 .../juneau/assertions/ZonedDateTimeAssertion.java  |    2 +-
 .../main/java/org/apache/juneau/utils/Snippet.java |    2 +-
 juneau-doc/docs/Topics/01.Overview/01.o.Core.html  |    2 +-
 .../22.jm.SimpleVariableLanguage.html              |   69 -
 .../01.jm.SvlVariables.html                        |  207 ---
 .../02.jm.VarResolvers.html                        |   70 -
 .../03.jm.DefaultVarResolver.html                  |   39 -
 .../04.jm.SvlOtherNotes.html                       |   34 -
 .../Topics/02.juneau-marshall/23.jm.Encoders.html  |   80 -
 .../02.juneau-marshall/24.jm.ObjectTools.html      |  343 -----
 .../02.juneau-marshall/25.jm.JsonDetails.html      |   97 --
 .../25.jm.JsonDetails/01.jm.JsonMethodology.html   |   89 --
 .../25.jm.JsonDetails/02.jm.JsonSerializers.html   |   68 -
 .../25.jm.JsonDetails/03.jm.SimplifiedJson.html    |   79 -
 .../25.jm.JsonDetails/04.jm.JsonParsers.html       |   73 -
 .../25.jm.JsonDetails/05.jm.JsonAnnotation.html    |   67 -
 .../26.jm.JsonSchemaDetails.html                   |  110 --
 .../02.juneau-marshall/27.jm.XmlDetails.html       |   92 --
 .../27.jm.XmlDetails/01.jm.XmlMethodology.html     |  419 ------
 .../27.jm.XmlDetails/02.jm.XmlSerializers.html     |   72 -
 .../27.jm.XmlDetails/03.jm.XmlParsers.html         |   57 -
 .../04.jm.XmlBeanTypeNameAnnotation.html           |  496 ------
 .../05.jm.XmlChildNameAnnotation.html              |  102 --
 .../06.jm.XmlFormatAnnotation.html                 |  722 ---------
 .../27.jm.XmlDetails/07.jm.XmlNamespaces.html      |  184 ---
 .../02.juneau-marshall/28.jm.HtmlDetails.html      |   26 -
 .../28.jm.HtmlDetails/01.jm.HtmlMethodology.html   |  526 -------
 .../28.jm.HtmlDetails/02.jm.HtmlSerializers.html   |   76 -
 .../28.jm.HtmlDetails/03.jm.HtmlParsers.html       |   58 -
 .../28.jm.HtmlDetails/04.jm.HtmlAnnotation.html    |   75 -
 .../05.jm.HtmlRenderAnnotation.html                |  120 --
 .../28.jm.HtmlDetails/06.jm.HtmlDocSerializer.html |   92 --
 .../07.jm.BasicHtmlDocTemplate.html                |   52 -
 .../08.jm.HtmlCustomTemplates.html                 |   34 -
 .../02.juneau-marshall/29.jm.HtmlSchema.html       |  197 ---
 .../02.juneau-marshall/30.jm.UonDetails.html       |   87 --
 .../30.jm.UonDetails/01.jm.UonMethodology.html     |   76 -
 .../30.jm.UonDetails/02.jm.UonSerializers.html     |   63 -
 .../30.jm.UonDetails/03.jm.UonParsers.html         |   58 -
 .../31.jm.UrlEncodingDetails.html                  |   85 --
 .../01.jm.UrlEncMethodology.html                   |   76 -
 .../02.jm.UrlEncSerializers.html                   |   68 -
 .../03.jm.UrlEncParsers.html                       |   61 -
 .../04.jm.UrlEncodingAnnotation.html               |   36 -
 .../02.juneau-marshall/32.jm.MsgPackDetails.html   |   27 -
 .../01.jm.MsgPackSerializers.html                  |   61 -
 .../32.jm.MsgPackDetails/02.jm.MsgPackParsers.html |   57 -
 .../02.juneau-marshall/33.jm.OpenApiDetails.html   |   49 -
 .../01.jm.OpenApiMethodology.html                  |  159 --
 .../02.jm.OpenApiSerializers.html                  |  527 -------
 .../33.jm.OpenApiDetails/03.jm.OpenApiParsers.html |  368 -----
 .../02.juneau-marshall/34.jm.BestPractices.html    |   42 -
 ...r-springboot.html => 06.juneau-assertions.html} |   13 +-
 .../01.ja.Overview.html}                           |    2 +-
 juneau-doc/docs/Topics/06.juneau-rest-common.html  |   59 -
 .../01.jrc.org.apache.juneau.http.html             |  297 ----
 .../02.jrc.org.apache.juneau.http.annotation.html  |   47 -
 .../03.jrc.org.apache.juneau.http.header.html      |  250 ---
 .../04.jrc.org.apache.juneau.http.part.html        |  164 --
 .../05.jrc.org.apache.juneau.http.entity.html      |   74 -
 .../06.jrc.org.apache.juneau.http.resource.html    |   87 --
 .../07.jrc.org.apache.juneau.http.response.html    |  146 --
 .../08.jrc.org.apache.juneau.http.remote.html      |   33 -
 juneau-doc/docs/Topics/07.juneau-rest-server.html  |  133 --
 .../07.juneau-rest-server/01.jrs.Overview.html     |  155 --
 .../02.jrs.AnnotatedClasses.html                   |   90 --
 .../01.jrs.PredefinedClasses.html                  |  214 ---
 .../02.jrs.ChildResources.html                     |   55 -
 .../03.jrs.PathVariables.html                      |   43 -
 .../02.jrs.AnnotatedClasses/04.jrs.Deployment.html |   73 -
 .../05.jrs.LifecycleHooks.html                     |   81 -
 .../03.jrs.RestOpAnnotatedMethods.html             |   85 --
 .../01.jrs.InferredHttpMethodsAndPaths.html        |   76 -
 .../02.jrs.JavaMethodParameters.html               |  188 ---
 .../03.jrs.JavaMethodReturnTypes.html              |  154 --
 .../04.jrs.JavaMethodThrowableTypes.html           |  103 --
 .../05.jrs.PathPatterns.html                       |  105 --
 .../06.jrs.Matchers.html                           |   72 -
 .../07.jrs.OverloadingHttpMethods.html             |   42 -
 .../08.jrs.AdditionalInformation.html              |   32 -
 .../07.juneau-rest-server/04.jrs.HttpParts.html    |   79 -
 .../04.jrs.HttpParts/01.jrs.PartMarshallers.html   |   71 -
 .../02.jrs.HttpPartAnnotations.html                |  465 ------
 .../04.jrs.HttpParts/03.jrs.DefaultParts.html      |  114 --
 .../04.jrs.HttpParts/04.jrs.RequestBeans.html      |  107 --
 .../04.jrs.HttpParts/05.jrs.ResponseBeans.html     |  115 --
 .../04.jrs.HttpParts/06.jrs.HttpPartApis.html      |   56 -
 .../07.juneau-rest-server/05.jrs.Marshalling.html  |  176 ---
 .../06.jrs.HandlingFormPosts.html                  |  162 --
 .../07.juneau-rest-server/07.jrs.Guards.html       |  121 --
 .../07.juneau-rest-server/08.jrs.Converters.html   |   71 -
 .../09.jrs.LocalizedMessages.html                  |  107 --
 .../07.juneau-rest-server/10.jrs.Encoders.html     |   43 -
 .../11.jrs.ConfigurationFiles.html                 |  202 ---
 .../07.juneau-rest-server/12.jrs.SvlVariables.html |  300 ----
 .../07.juneau-rest-server/13.jrs.StaticFiles.html  |   72 -
 .../14.jrs.ClientVersioning.html                   |   68 -
 .../07.juneau-rest-server/15.jrs.Swagger.html      |   31 -
 .../01.jrs.BasicRestServletSwagger.html            |   63 -
 .../15.jrs.Swagger/02.jrs.BasicSwaggerInfo.html    |  179 ---
 .../15.jrs.Swagger/03.jrs.SwaggerTags.html         |  113 --
 .../15.jrs.Swagger/04.jrs.SwaggerOperations.html   |   56 -
 .../15.jrs.Swagger/05.jrs.SwaggerParameters.html   |  156 --
 .../15.jrs.Swagger/06.jrs.SwaggerResponses.html    |   57 -
 .../15.jrs.Swagger/07.jrs.SwaggerModels.html       |  105 --
 .../15.jrs.Swagger/08.jrs.SwaggerStylesheet.html   |   27 -
 .../doc-files/jrs.Swagger.Models.1.png             |  Bin 176855 -> 0 bytes
 .../doc-files/jrs.Swagger.Models.2.png             |  Bin 131057 -> 0 bytes
 .../doc-files/jrs.Swagger.Models.3.png             |  Bin 252827 -> 0 bytes
 .../doc-files/jrs.Swagger.Operations.1.png         |  Bin 168211 -> 0 bytes
 .../doc-files/jrs.Swagger.Operations.2.png         |  Bin 226271 -> 0 bytes
 .../doc-files/jrs.Swagger.Operations.3.png         |  Bin 303830 -> 0 bytes
 .../doc-files/jrs.Swagger.Parameters.2.png         |  Bin 138574 -> 0 bytes
 .../16.jrs.ExecutionStatistics.html                |   60 -
 .../17.jrs.HtmlDocAnnotation.html                  |  144 --
 .../01.jrs.HtmlUIvsDI.html                         |   59 -
 .../02.jrs.HtmlWidgets.html                        |  101 --
 .../03.jrs.HtmlPredefinedWidgets.html              |  252 ----
 .../04.jrs.HtmlUiCustomization.html                |  139 --
 .../05.jrs.HtmlStylesheets.html                    |  121 --
 .../jrs.HtmlDocAnnotation.PredefinedWidgets.1.png  |  Bin 269258 -> 0 bytes
 .../jrs.HtmlDocAnnotation.PredefinedWidgets.2.png  |  Bin 138885 -> 0 bytes
 .../jrs.HtmlDocAnnotation.PredefinedWidgets.3.png  |  Bin 343271 -> 0 bytes
 .../jrs.HtmlDocAnnotation.PredefinedWidgets.4.png  |  Bin 5081 -> 0 bytes
 .../18.jrs.LoggingAndDebugging.html                |  234 ---
 .../19.jrs.HttpStatusCodes.html                    |   81 -
 .../20.jrs.BuiltInParameters.html                  |   78 -
 .../21.jrs.UsingWithOsgi.html                      |   80 -
 .../07.juneau-rest-server/22.jrs.RestContext.html  |  159 --
 .../23.jrs.RestOpContext.html                      |   91 --
 .../24.jrs.ResponseProcessors.html                 |   84 --
 .../07.juneau-rest-server/25.jrs.RestRpc.html      |  343 -----
 .../26.jrs.SerializingUris.html                    |   99 --
 .../07.juneau-rest-server/27.jrs.UtilityBeans.html |  130 --
 .../07.juneau-rest-server/28.jrs.HtmlBeans.html    |  126 --
 .../07.juneau-rest-server/29.jrs.OtherNotes.html   |   29 -
 .../01.jrs.Log4j.html                              |   36 -
 .../doc-files/jrs.ExecutionStatistics.1.png        |  Bin 161323 -> 0 bytes
 .../doc-files/jrs.ExecutionStatistics.2.png        |  Bin 69823 -> 0 bytes
 .../doc-files/jrs.HelloWorldExample.1.png          |  Bin 73686 -> 0 bytes
 .../doc-files/jrs.HtmlBeans.div.json.png           |  Bin 76677 -> 0 bytes
 .../doc-files/jrs.HtmlBeans.div.png                |  Bin 64941 -> 0 bytes
 .../doc-files/jrs.HtmlBeans.form.json.png          |  Bin 141793 -> 0 bytes
 .../doc-files/jrs.HtmlBeans.form.png               |  Bin 75720 -> 0 bytes
 .../doc-files/jrs.HtmlBeans.json.png               |  Bin 80462 -> 0 bytes
 .../doc-files/jrs.HtmlBeans.png                    |  Bin 92212 -> 0 bytes
 .../doc-files/jrs.HtmlBeans.table.json.png         |  Bin 79407 -> 0 bytes
 .../doc-files/jrs.HtmlBeans.table.png              |  Bin 65106 -> 0 bytes
 .../doc-files/jrs.Overview.HelloWorldResource.png  |  Bin 71127 -> 0 bytes
 .../doc-files/jrs.Overview.RootResources.json.png  |  Bin 122559 -> 0 bytes
 .../doc-files/jrs.Overview.RootResources.png       |  Bin 193666 -> 0 bytes
 .../doc-files/jrs.RouterPages.1.png                |  Bin 224036 -> 0 bytes
 .../doc-files/jrs.Stylesheets.0.png                |  Bin 233293 -> 0 bytes
 .../doc-files/jrs.Stylesheets.1.png                |  Bin 26898 -> 0 bytes
 .../doc-files/jrs.Stylesheets.2.png                |  Bin 334340 -> 0 bytes
 .../doc-files/jrs.Stylesheets.3.png                |  Bin 298163 -> 0 bytes
 .../doc-files/jrs.Swagger.1.png                    |  Bin 174380 -> 0 bytes
 .../doc-files/jrs.Swagger.2.png                    |  Bin 194455 -> 0 bytes
 .../doc-files/jrs.Swagger.3.png                    |  Bin 79498 -> 0 bytes
 .../doc-files/jrs.Swagger.4.png                    |  Bin 99968 -> 0 bytes
 .../doc-files/jrs.Swagger.5.png                    |  Bin 63056 -> 0 bytes
 .../doc-files/jrs.UiCustomization.1.png            |  Bin 267773 -> 0 bytes
 .../jrs.UtilityBeans.BeanDescription.json.png      |  Bin 118047 -> 0 bytes
 .../doc-files/jrs.UtilityBeans.BeanDescription.png |  Bin 123915 -> 0 bytes
 .../doc-files/jrs.UtilityBeans.Hyperlink.json.png  |  Bin 52285 -> 0 bytes
 .../doc-files/jrs.UtilityBeans.Hyperlink.png       |  Bin 74561 -> 0 bytes
 .../doc-files/jrs.UtilityBeans.json.png            |  Bin 85771 -> 0 bytes
 .../doc-files/jrs.UtilityBeans.png                 |  Bin 105911 -> 0 bytes
 .../doc-files/jrs.restRPC.1.png                    |  Bin 231550 -> 0 bytes
 .../doc-files/jrs.restRPC.2.png                    |  Bin 130661 -> 0 bytes
 .../doc-files/jrs.restRPC.3.png                    |  Bin 170873 -> 0 bytes
 .../doc-files/jrs.restRPC.4.png                    |  Bin 96014 -> 0 bytes
 .../doc-files/jrs.restRPC.5.png                    |  Bin 62998 -> 0 bytes
 .../doc-files/jrs.restRPC.6.png                    |  Bin 158415 -> 0 bytes
 .../doc-files/jrs.restRPC.7.png                    |  Bin 110931 -> 0 bytes
 .../doc-files/jrs.restRPC.8.png                    |  Bin 122164 -> 0 bytes
 .../doc-files/jrs.restRPC.9.png                    |  Bin 114351 -> 0 bytes
 .../docs/Topics/08.juneau-rest-server-rdf.html     |   43 -
 .../docs/Topics/09.juneau-rest-server-jaxrs.html   |   43 -
 .../01.jrsj.BaseProvider.html                      |   80 -
 .../01.jrss.Overview.html                          |  165 --
 .../doc-files/jrss.Overview.HelloWorldResource.png |  Bin 76244 -> 0 bytes
 .../doc-files/jrss.Overview.RootResources.json.png |  Bin 121600 -> 0 bytes
 .../doc-files/jrss.Overview.RootResources.png      |  Bin 195239 -> 0 bytes
 juneau-doc/docs/Topics/11.juneau-rest-client.html  |  181 ---
 .../01.jrc.PojoMarshalling.html                    |  120 --
 .../11.juneau-rest-client/02.jrc.RequestParts.html |  108 --
 .../03.jrc.RequestContent.html                     |   81 -
 .../04.jrc.ResponseStatus.html                     |   77 -
 .../05.jrc.ResponseHeaders.html                    |  123 --
 .../06.jrc.ResponseContent.html                    |  149 --
 .../07.jrc.CustomCallHandlers.html                 |   68 -
 .../11.juneau-rest-client/08.jrc.Interceptors.html |   68 -
 .../11.juneau-rest-client/09.jrc.Proxies.html      |  115 --
 .../09.jrc.Proxies/01.jrc.Remote.html              |  170 ---
 .../09.jrc.Proxies/02.jrc.RemoteMethod.html        |  171 ---
 .../09.jrc.Proxies/03.jrc.Content.html             |  122 --
 .../09.jrc.Proxies/04.jrc.FormData.html            |  100 --
 .../09.jrc.Proxies/05.jrc.Query.html               |  103 --
 .../09.jrc.Proxies/06.jrc.Header.html              |   89 --
 .../09.jrc.Proxies/07.jrc.Path.html                |   88 --
 .../09.jrc.Proxies/08.jrc.Request.html             |  133 --
 .../09.jrc.Proxies/09.jrc.Response.html            |   77 -
 .../10.jrc.DualPurposeInterfaces.html              |  117 --
 .../10.jrc.LoggingAndDebugging.html                |   98 --
 .../11.jrc.CustomizingHttpClient.html              |   51 -
 .../12.jrc.ExtendingRestClient.html                |   47 -
 .../13.jrc.Authentication.html                     |   26 -
 .../01.jrc.AuthenticationBASIC.html                |   42 -
 .../02.jrc.AuthenticationForm.html                 |  103 --
 .../03.jrc.AuthenticationOIDC.html                 |  141 --
 juneau-doc/docs/Topics/12.juneau-rest-mock.html    |   44 -
 .../12.juneau-rest-mock/01.jrm.MockRestClient.html |  220 ---
 .../docs/Topics/13.juneau-microservice-core.html   |   60 -
 .../01.jmc.Overview.html                           |   72 -
 .../02.jmc.LifecycleMethods.html                   |  100 --
 .../13.juneau-microservice-core/03.jmc.Args.html   |   91 --
 .../04.jmc.Manifest.html                           |   76 -
 .../13.juneau-microservice-core/05.jmc.Config.html |  144 --
 .../06.jmc.SystemProperties.html                   |   43 -
 .../07.jmc.VarResolver.html                        |   62 -
 .../08.jmc.ConsoleCommands.html                    |  104 --
 .../09.jmc.Listeners.html                          |   72 -
 .../docs/Topics/14.juneau-microservice-jetty.html  |   47 -
 .../01.jmj.Overview.html                           |   65 -
 .../02.jmj.LifecycleMethods.html                   |  110 --
 .../03.jmj.ResourceClasses.html                    |  156 --
 .../04.jmj.PredefinedResourceClasses.html          |   34 -
 .../05.jmj.Config.html                             |  222 ---
 .../06.jmj.JettyXml.html                           |  101 --
 .../07.jmj.UiCustomization.html                    |  125 --
 .../08.jmj.Extending.html                          |   92 --
 .../doc-files/jmj.ResourceClasses.1.png            |  Bin 42699 -> 0 bytes
 .../doc-files/jmj.Running.1.png                    |  Bin 67578 -> 0 bytes
 .../doc-files/jmj.UiCustomization.1.png            |  Bin 56726 -> 0 bytes
 .../docs/Topics/15.my-jetty-microservice.html      |   36 -
 .../01.mjm.Installing.html                         |  270 ----
 .../15.my-jetty-microservice/02.mjm.Running.html   |   49 -
 .../15.my-jetty-microservice/03.mjm.Building.html  |   60 -
 .../doc-files/mjm.Installing.1.png                 |  Bin 84524 -> 0 bytes
 .../doc-files/mjm.Installing.2.png                 |  Bin 159036 -> 0 bytes
 .../doc-files/mjm.Installing.3.png                 |  Bin 93366 -> 0 bytes
 .../doc-files/mjm.Running.1.png                    |  Bin 67578 -> 0 bytes
 .../docs/Topics/16.my-springboot-microservice.html |   35 -
 .../01.msm.Installing.html                         |  146 --
 .../02.msm.Running.html                            |   48 -
 .../03.msm.Building.html                           |   57 -
 .../doc-files/msm.Installing.1.png                 |  Bin 84524 -> 0 bytes
 .../doc-files/msm.Installing.2.png                 |  Bin 162034 -> 0 bytes
 .../doc-files/msm.Installing.3.png                 |  Bin 97545 -> 0 bytes
 .../doc-files/msm.Running.1.png                    |  Bin 67578 -> 0 bytes
 juneau-doc/docs/Topics/17.juneau-petstore.html     |   39 -
 .../17.juneau-petstore/01.jp.RunningTheApp.html    |   45 -
 .../02.jp.juneau-petstore-api.html                 |  219 ---
 .../03.jp.juneau-petstore-client.html              |   47 -
 .../04.jp.juneau-petstore-server.html              |  363 -----
 .../Topics/17.juneau-petstore/doc-files/9a.png     |  Bin 221670 -> 0 bytes
 .../Topics/17.juneau-petstore/doc-files/9b.png     |  Bin 146792 -> 0 bytes
 .../Topics/17.juneau-petstore/doc-files/9c.png     |  Bin 226731 -> 0 bytes
 .../Topics/17.juneau-petstore/doc-files/9d.png     |  Bin 234305 -> 0 bytes
 .../Topics/17.juneau-petstore/doc-files/9e.png     |  Bin 110349 -> 0 bytes
 .../Topics/17.juneau-petstore/doc-files/9f.png     |  Bin 185344 -> 0 bytes
 .../Topics/17.juneau-petstore/doc-files/9g.png     |  Bin 140337 -> 0 bytes
 .../Topics/17.juneau-petstore/doc-files/9h.png     |  Bin 116711 -> 0 bytes
 .../17.juneau-petstore/doc-files/PetStore.png      |  Bin 838280 -> 0 bytes
 .../17.juneau-petstore/doc-files/PetStore_pets.png |  Bin 233639 -> 0 bytes
 .../17.juneau-petstore/doc-files/RootResources.png |  Bin 184725 -> 0 bytes
 juneau-doc/docs/Topics/18.Glossaries.html          |   21 -
 .../Topics/18.Glossaries/01.g.LanguageSupport.html |  150 --
 .../Topics/18.Glossaries/02.g.Annotations.html     |  336 -----
 juneau-doc/docs/Topics/19.Security.html            |   26 -
 .../docs/Topics/19.Security/01.s.Marshall.html     |   86 --
 juneau-doc/docs/Topics/19.Security/02.s.Svl.html   |   63 -
 juneau-doc/docs/Topics/19.Security/03.s.Rest.html  |   30 -
 juneau-doc/src/main/javadoc/overview.html          | 1585 ++++++++++----------
 juneau-doc/src/main/javadoc/resources/docs.txt     |    3 +-
 .../src/main/javadoc/resources/fragments/toc.html  |    5 +-
 .../assertion/FluentResponseBodyAssertion.java     |    2 +-
 .../assertion/FluentResponseHeaderAssertion.java   |    2 +-
 .../FluentResponseStatusLineAssertion.java         |    2 +-
 .../assertions/FluentProtocolVersionAssertion.java |    2 +-
 .../assertions/FluentRequestContentAssertion.java  |    2 +-
 .../FluentRequestFormParamAssertion.java           |    2 +-
 .../assertions/FluentRequestHeaderAssertion.java   |    2 +-
 .../assertions/FluentRequestLineAssertion.java     |    2 +-
 .../FluentRequestQueryParamAssertion.java          |    2 +-
 331 files changed, 912 insertions(+), 23282 deletions(-)

diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AnyAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AnyAssertion.java
index 36aff92c9..4f2ed935f 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AnyAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AnyAssertion.java
@@ -121,7 +121,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ArrayAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ArrayAssertion.java
index de57a3f1c..16a53056e 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ArrayAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ArrayAssertion.java
@@ -105,7 +105,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertion.java
index 51e462a50..55619bfe2 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertion.java
@@ -51,7 +51,7 @@ import org.apache.juneau.internal.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  */
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicate.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicate.java
index ee48320fe..3c4e35e83 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicate.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicate.java
@@ -47,7 +47,7 @@ import org.apache.juneau.cp.*;
  * </p>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicates.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicates.java
index b885685b9..76bce0ea2 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicates.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicates.java
@@ -44,7 +44,7 @@ import org.apache.juneau.internal.*;
  * </p>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  */
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertions.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertions.java
index bef94de96..365844875 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertions.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertions.java
@@ -65,7 +65,7 @@ import org.apache.juneau.utils.*;
  * </p>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  */
@@ -97,7 +97,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link AnyAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link AnyAssertion} for supported operations on this type.
 	 *
 	 * @param <T> The value type.
 	 * @param value
@@ -125,7 +125,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link ArrayAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link ArrayAssertion} for supported operations on this type.
 	 *
 	 * @param <E> The value element type.
 	 * @param value
@@ -154,7 +154,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link BeanAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link BeanAssertion} for supported operations on this type.
 	 *
 	 * @param <T> The value type.
 	 * @param value
@@ -183,7 +183,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link BeanListAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link BeanListAssertion} for supported operations on this type.
 	 *
 	 * @param <E> The element type.
 	 * @param value
@@ -210,7 +210,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link BooleanAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link BooleanAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -237,7 +237,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -269,7 +269,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -300,7 +300,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link ByteArrayAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link ByteArrayAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -326,7 +326,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link ByteArrayAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link ByteArrayAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -354,7 +354,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -385,7 +385,7 @@ public class Assertions {
 	 * provides more functionality than {@link CollectionAssertion}.
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link CollectionAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link CollectionAssertion} for supported operations on this type.
 	 *
 	 * @param <E> The element type.
 	 * @param value
@@ -412,7 +412,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link ComparableAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link ComparableAssertion} for supported operations on this type.
 	 *
 	 * @param <T> The value type.
 	 * @param value
@@ -439,7 +439,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link DateAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link DateAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -466,7 +466,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -493,7 +493,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -520,7 +520,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -546,7 +546,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link IntegerAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link IntegerAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -573,7 +573,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link ListAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link ListAssertion} for supported operations on this type.
 	 *
 	 * @param <E> The element type.
 	 * @param value
@@ -601,7 +601,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link ListAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link ListAssertion} for supported operations on this type.
 	 *
 	 * @param <E> The element type.
 	 * @param value
@@ -630,7 +630,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link LongAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link LongAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -657,7 +657,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -684,7 +684,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link MapAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link MapAssertion} for supported operations on this type.
 	 *
 	 * @param <K> The key type.
 	 * @param <V> The value type.
@@ -714,7 +714,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link ObjectAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link ObjectAssertion} for supported operations on this type.
 	 *
 	 * @param <T> The value type.
 	 * @param value
@@ -743,7 +743,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link AnyAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link AnyAssertion} for supported operations on this type.
 	 *
 	 * @param <T> The value type.
 	 * @param value
@@ -770,7 +770,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link StringAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link StringAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -799,7 +799,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -826,7 +826,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link StringAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link StringAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -857,7 +857,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link StringListAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link StringListAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -884,7 +884,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link ThrowableAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link ThrowableAssertion} for supported operations on this type.
 	 *
 	 * @param <T> The value type.
 	 * @param value
@@ -911,7 +911,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link VersionAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link VersionAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -937,7 +937,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See {@doc jm.FluentAssertions Fluent Assertions} for general assertion usage and {@link ZonedDateTimeAssertion} for supported operations on this type.
+	 * See {@doc ja.Overview Fluent Assertions} for general assertion usage and {@link ZonedDateTimeAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BeanAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BeanAssertion.java
index 14853da08..6dc04254c 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BeanAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BeanAssertion.java
@@ -89,7 +89,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BeanListAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BeanListAssertion.java
index 46c77d0fa..8deba2200 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BeanListAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BeanListAssertion.java
@@ -119,7 +119,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BooleanAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BooleanAssertion.java
index f829dc8a0..79aeb8e35 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BooleanAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BooleanAssertion.java
@@ -87,7 +87,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  */
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ByteArrayAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ByteArrayAssertion.java
index 293cd3a2e..3e12bfe05 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ByteArrayAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ByteArrayAssertion.java
@@ -107,7 +107,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  */
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/CollectionAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/CollectionAssertion.java
index cc204cc7e..69e8ac8ee 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/CollectionAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/CollectionAssertion.java
@@ -96,7 +96,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ComparableAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ComparableAssertion.java
index 19a671c63..d184a2055 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ComparableAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ComparableAssertion.java
@@ -82,7 +82,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/DateAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/DateAssertion.java
index 2ebbffa11..f26422935 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/DateAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/DateAssertion.java
@@ -104,7 +104,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  */
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentAnyAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentAnyAssertion.java
index 7077d0e2e..b74f96457 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentAnyAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentAnyAssertion.java
@@ -127,7 +127,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentArrayAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentArrayAssertion.java
index 2aac8cc4f..02e40e5f1 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentArrayAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentArrayAssertion.java
@@ -106,7 +106,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentAssertion.java
index 89cdf4f18..ff6337f16 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentAssertion.java
@@ -75,7 +75,7 @@ import org.apache.juneau.internal.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanAssertion.java
index 81e327994..962bc3e01 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanAssertion.java
@@ -85,7 +85,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanListAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanListAssertion.java
index d7608bea9..beb7b4e66 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanListAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanListAssertion.java
@@ -113,7 +113,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBooleanAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBooleanAssertion.java
index bc8dee147..555e114b6 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBooleanAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBooleanAssertion.java
@@ -89,7 +89,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentByteArrayAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentByteArrayAssertion.java
index fa9362870..fd83eda81 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentByteArrayAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentByteArrayAssertion.java
@@ -102,7 +102,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentCollectionAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentCollectionAssertion.java
index 9c19a7d56..914c1837a 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentCollectionAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentCollectionAssertion.java
@@ -95,7 +95,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentComparableAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentComparableAssertion.java
index f51b08b8c..0026079ff 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentComparableAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentComparableAssertion.java
@@ -85,7 +85,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentDateAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentDateAssertion.java
index 525fa2270..e731f64ef 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentDateAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentDateAssertion.java
@@ -112,7 +112,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentIntegerAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentIntegerAssertion.java
index 585417343..9355afbba 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentIntegerAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentIntegerAssertion.java
@@ -93,7 +93,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentListAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentListAssertion.java
index 204e154ac..dd4facea8 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentListAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentListAssertion.java
@@ -111,7 +111,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentLongAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentLongAssertion.java
index 32dcbcc6a..f2e0785cb 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentLongAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentLongAssertion.java
@@ -97,7 +97,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentMapAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentMapAssertion.java
index eaf74b243..a582b3b46 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentMapAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentMapAssertion.java
@@ -95,7 +95,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
index 6aed4f1df..f1434a6b1 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
@@ -83,7 +83,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentPrimitiveArrayAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentPrimitiveArrayAssertion.java
index fdfa11dd3..41edb48a4 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentPrimitiveArrayAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentPrimitiveArrayAssertion.java
@@ -99,7 +99,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentStringAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentStringAssertion.java
index f0cab86b8..4e2f022cf 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentStringAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentStringAssertion.java
@@ -122,7 +122,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentStringListAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentStringListAssertion.java
index aa9f3f6fc..b827000ec 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentStringListAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentStringListAssertion.java
@@ -114,7 +114,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentThrowableAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentThrowableAssertion.java
index dae5e9eee..0c320cf6a 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentThrowableAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentThrowableAssertion.java
@@ -92,7 +92,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentVersionAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentVersionAssertion.java
index 1f1023543..e41829cb9 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentVersionAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentVersionAssertion.java
@@ -100,7 +100,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentZonedDateTimeAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentZonedDateTimeAssertion.java
index 2a3791f36..e190903f7 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentZonedDateTimeAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentZonedDateTimeAssertion.java
@@ -106,7 +106,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/IntegerAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/IntegerAssertion.java
index 77c36d05d..eb980534c 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/IntegerAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/IntegerAssertion.java
@@ -88,7 +88,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  */
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ListAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ListAssertion.java
index 50d1e6002..833af5c5b 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ListAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ListAssertion.java
@@ -113,7 +113,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/LongAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/LongAssertion.java
index 2b6ae911e..5c51bea8f 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/LongAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/LongAssertion.java
@@ -93,7 +93,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  */
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/MapAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/MapAssertion.java
index 93db2af86..84fa2c1db 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/MapAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/MapAssertion.java
@@ -97,7 +97,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ObjectAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ObjectAssertion.java
index 1920aa402..9355d91b8 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ObjectAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ObjectAssertion.java
@@ -81,7 +81,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/PrimitiveArrayAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/PrimitiveArrayAssertion.java
index 9bf2857ce..0500e3b6a 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/PrimitiveArrayAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/PrimitiveArrayAssertion.java
@@ -98,7 +98,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/StringAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/StringAssertion.java
index aba4e61bc..996b001c8 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/StringAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/StringAssertion.java
@@ -115,7 +115,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  */
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/StringListAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/StringListAssertion.java
index ee4998117..f8a02e7ee 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/StringListAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/StringListAssertion.java
@@ -112,7 +112,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  */
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ThrowableAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ThrowableAssertion.java
index 88512f26e..15f1b948c 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ThrowableAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ThrowableAssertion.java
@@ -92,7 +92,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  *
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Verify.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Verify.java
index 4011f42f4..4af89c812 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Verify.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Verify.java
@@ -33,7 +33,7 @@ import org.apache.juneau.internal.*;
  * </p>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  */
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/VersionAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/VersionAssertion.java
index 76a97a3ca..9eb46bf31 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/VersionAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/VersionAssertion.java
@@ -97,7 +97,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  */
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ZonedDateTimeAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ZonedDateTimeAssertion.java
index 67dc74351..75567c08b 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ZonedDateTimeAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ZonedDateTimeAssertion.java
@@ -100,7 +100,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/Snippet.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/Snippet.java
index 69915893d..0df16f02b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/Snippet.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/Snippet.java
@@ -22,7 +22,7 @@ package org.apache.juneau.utils;
  * See <c>Assertions.<jsm>assertThrown</jsm>(Snippet)</c> for an example.
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc jm.FluentAssertions}
+ * 	<li class='link'>{@doc ja.Overview}
  * 	<li class='extlink'>{@source}
  * </ul>
  */
diff --git a/juneau-doc/docs/Topics/01.Overview/01.o.Core.html b/juneau-doc/docs/Topics/01.Overview/01.o.Core.html
index a9c6c2a47..26b80209c 100644
--- a/juneau-doc/docs/Topics/01.Overview/01.o.Core.html
+++ b/juneau-doc/docs/Topics/01.Overview/01.o.Core.html
@@ -499,6 +499,6 @@
 		|		.getContent().as(MyBean.<jk>class</jk>);
 	</p>
 	<ul class='seealso'>
-		<li class='link'>{@doc jm.FluentAssertions Fluent Assertions} for more information.
+		<li class='link'>{@doc ja.Overview Fluent Assertions} for more information.
 	</ul>
 </div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/22.jm.SimpleVariableLanguage.html b/juneau-doc/docs/Topics/02.juneau-marshall/22.jm.SimpleVariableLanguage.html
deleted file mode 100644
index 454203ddd..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/22.jm.SimpleVariableLanguage.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'Simple Variable Language'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.svl} packages 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>.
-		It is used extensively in the Config, REST and Microservice APIs.
-	</p>
-	<p>
-		Most variables can be recursively nested within the varKey (e.g. <js>"$FOO{$BAR{xxx},$BAZ{xxx}}"</js>)
-		and can return values that themselves contain more variables.
-	</p>
-	<p>
-		The {@link oaj.svl.VarResolver} class is used to resolve variables.
-		The {@link oaj.svl.VarResolver#DEFAULT} resolver is a reusable instance of this class 
-		configured with the following basic variables:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.svl.vars.SystemPropertiesVar} - <c>$S{key[,default]}</c>
-		<li class='jc'>{@link oaj.svl.vars.EnvVariablesVar} - <c>$E{key[,default]}</c>
-	</ul>
-	<p>
-		The following logic variables are also provided:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.svl.vars.IfVar} - <c>$IF{arg,then[,else]}</c>
-		<li class='jc'>{@link oaj.svl.vars.SwitchVar} - <c>$SW{arg,pattern1:then1[,pattern2:then2...]}</c>
-		<li class='jc'>{@link oaj.svl.vars.CoalesceVar} - <c>$CO{arg1[,arg2...]}</c>
-		<li class='jc'>{@link oaj.svl.vars.PatternMatchVar} - <c>$PM{arg,pattern}</c> 
-		<li class='jc'>{@link oaj.svl.vars.PatternReplaceVar} - <c>$PR{arg,pattern,replace}</c> 
-		<li class='jc'>{@link oaj.svl.vars.PatternExtractVar} - <c>$PE{arg,pattern,groupIndex}</c> 
-		<li class='jc'>{@link oaj.svl.vars.NotEmptyVar} - <c>$NE{arg}</c>
-		<li class='jc'>{@link oaj.svl.vars.UpperCaseVar} - <c>$UC{arg}</c>
-		<li class='jc'>{@link oaj.svl.vars.LowerCaseVar} - <c>$LC{arg}</c>
-		<li class='jc'>{@link oaj.svl.vars.LenVar} - <c>$LN{arg[,delimiter]}</c>
-		<li class='jc'>{@link oaj.svl.vars.SubstringVar} - <c>$ST{arg,start[,end]}</c>
-	</ul>
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-		|	<jc>// Use the default variable resolver to resolve a string that contains 
-		|	// $S (system property) variables.</jc>
-		|	String <jv>property</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='bjava'>
-		|	<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>property</jv> = VarResolver.<jsf>DEFAULT</jsf>.resolve(<js>"$E{MYPROPERTY,$S{my.property,not found}}"</js>);
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/22.jm.SimpleVariableLanguage/01.jm.SvlVariables.html b/juneau-doc/docs/Topics/02.juneau-marshall/22.jm.SimpleVariableLanguage/01.jm.SvlVariables.html
deleted file mode 100644
index e51464bbf..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/22.jm.SimpleVariableLanguage/01.jm.SvlVariables.html
+++ /dev/null
@@ -1,207 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'SVL Variables', updated:'8.0.0,8.1.0'}
-
-<div class='topic'>
-	<p>
-		Variables are defined through the {@link oaj.svl.Var} API.
-		The API comes with several predefined variables and is easily extensible.
-	</p>
-	<p>
-		The following is an example of a variable that performs URL-Encoding on strings.
-	</p>
-	<p class='bjava'>
-		|	<jc>// First create our var.</jc>
-		|	<jk>public class</jk> UrlEncodeVar <jk>extends</jk> SimpleVar {
-		|		
-		|		<jc>// Must have a no-arg constructor!</jc>
-		|		<jk>public</jk> UrlEncodeVar() {
-		|			<jk>super</jk>(<js>"UE"</js>);
-		|		}	
-		|		
-		|		<jc>// The method we must implement</jc>
-		|		<ja>@Override</ja>
-		|		<jk>public</jk> String resolve(VarResolverSession <jv>session</jv>, String <jv>key</jv>) {
-		|			<jk>return</jk> URLEncoder.<jsm>encode</jsm>(<jv>key</jv>, <js>"UTF-8"</js>);
-		|		}
-		|	}
-		|	
-		|	<jc>// Next create a var resolver that extends the existing DEFAULT resolver
-		|	// that supports resolving system properties.</jc>
-		|	VarResolver <jv>varResolver</jv> = VarResolver.<jsf>DEFAULT</jsf>
-		|		.copy()
-		|		.vars(UrlEncodeVar.<jk>class</jk>)
-		|		.build();
-		|	
-		|	<jc>// Retrieve a system property and URL-encode it if necessary.</jc>
-		|	String <jv>myProperty</jv> = <jv>varResolver</jv>.resolve(<js>"$UE{$S{my.property}}"</js>);
-	</p>
-	<p>
-		The following shows the class hierarchy of the {@link oaj.svl.Var} class:
-	</p>  
-	<ul class='javatree'>
-		<li class='jac'>{@link oaj.svl.Var} - Superclass of all vars.
-			<ul>
-				<li class='jac'>{@link oaj.svl.SimpleVar} - Superclass of all vars that return strings.
-					<ul>
-						<li class='jac'>{@link oaj.svl.DefaultingVar} - Variables that define a default value if the resolve method returns null.
-							<ul>
-								<li class='jac'>{@link oaj.svl.MapVar} - Variables that pull values from maps.
-							</ul>
-						</li>
-						<li class='jac'>{@link oaj.svl.MultipartVar} - Variables that consist of 2 or more comma-delimited arguments.
-					</ul>
-				</li>
-				<li class='jac'>{@link oaj.svl.StreamedVar} - Superclass of all vars that stream their value to writers.
-			</ul>
-		</li>
-	</ul>
-	<p>
-		The following is the list of default variables defined in all modules:
-	</p>
-	<table class='styled w800'>
-		<tr>
-			<th>Module</th><th>Class</th><th>Pattern</th>
-		</tr>
-		<tr class='dark'>
-			<td rowspan='16' style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-svl</td>
-			<td>{@link oaj.svl.vars.EnvVariablesVar}</td>
-			<td class='code'>$E{key[,default]}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oaj.svl.vars.SystemPropertiesVar}</td>
-			<td class='code'>$S{key[,default]}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oaj.svl.vars.ArgsVar}</td>
-			<td class='code'>$A{key[,default]}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oaj.svl.vars.ManifestFileVar}</td>
-			<td class='code'>$MF{key[,default]}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oaj.svl.vars.IfVar}</td>
-			<td class='code'>$IF{arg,then[,else]}</td>
-		</tr>
-		<tr class='dark dd'>
-			<td>{@link oaj.svl.vars.SwitchVar}</td>
-			<td class='code'>$SW{arg,pattern1:then1[,pattern2:then2...]}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oaj.svl.vars.CoalesceVar}</td>
-			<td class='code'>$CO{arg1[,arg2...]}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oaj.svl.vars.PatternMatchVar}</td>
-			<td class='code'>$PM{arg,pattern}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oaj.svl.vars.PatternReplaceVar}</td>
-			<td class='code'>$PR{arg,pattern,replace}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oaj.svl.vars.PatternExtractVar}</td>
-			<td class='code'>$PE{arg,pattern,groupdIndex}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oaj.svl.vars.NotEmptyVar}</td>
-			<td class='code'>$NE{arg}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oaj.svl.vars.UpperCaseVar}</td>
-			<td class='code'>$UC{arg}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oaj.svl.vars.LowerCaseVar}</td>
-			<td class='code'>$LC{arg}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oaj.svl.vars.LenVar}</td>
-			<td class='code'>$LN{arg[,delimiter]}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oaj.svl.vars.SubstringVar}</td>
-			<td class='code'>$ST{arg,start[,end]}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oaj.html.HtmlWidgetVar}</td>
-			<td class='code'>$W{name}</td>
-		</tr>
-		<tr class='light dd'>
-			<td rowspan='1' style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-config</td>
-			<td>{@link oaj.config.vars.ConfigVar}</td>
-			<td class='code'>$C{key[,default]}</td>
-		</tr>
-		<tr class='dark'>
-			<td rowspan='15' style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-rest-server</td>
-			<td>{@link oajr.vars.FileVar}</td>
-			<td class='code'>$F{path[,default]}}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oajr.vars.ServletInitParamVar}</td>
-			<td class='code'>$I{name[,default]}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oajr.vars.LocalizationVar}</td>
-			<td class='code'>$L{key[,args...]}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oajr.vars.RequestAttributeVar}</td>
-			<td class='code'>$RA{key1[,key2...]}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oajr.vars.RequestFormDataVar}</td>
-			<td class='code'>$RF{key1[,key2...]}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oajr.vars.RequestHeaderVar}</td>
-			<td class='code'>$RH{key1[,key2...]}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oajr.vars.RequestPathVar}</td>
-			<td class='code'>$RP{key1[,key2...]}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oajr.vars.RequestQueryVar}</td>
-			<td class='code'>$RQ{key1[,key2...]}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oajr.vars.RequestSwaggerVar}</td>
-			<td class='code'>$RS{key}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oajr.vars.RequestVar}</td>
-			<td class='code'>$R{key1[,key2...]}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oajr.vars.SerializedRequestAttrVar}</td>
-			<td class='code'>$SA{contentType,key[,default]}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oajr.vars.SwaggerVar}</td>
-			<td class='code'>$SS{key1[,key2...]}</td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oajr.vars.UrlVar}</td>
-			<td class='code'>$U{uri}></td>
-		</tr>
-		<tr class='dark'>
-			<td>{@link oajr.vars.UrlEncodeVar}</td>
-			<td class='code'>$UE{uriPart}</td>
-		</tr>
-	</table>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/22.jm.SimpleVariableLanguage/02.jm.VarResolvers.html b/juneau-doc/docs/Topics/02.juneau-marshall/22.jm.SimpleVariableLanguage/02.jm.VarResolvers.html
deleted file mode 100644
index 6fd490eab..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/22.jm.SimpleVariableLanguage/02.jm.VarResolvers.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'VarResolvers and VarResolverSessions', updated:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The main class for performing variable resolution is {@link oaj.svl.VarResolver}.
-		Two methods are provided for resolving variables:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.svl.VarResolver}
-			<ul>
-				<li class='jm'>{@link oaj.svl.VarResolver#resolve(String) resolve(String)} 
-					- Resolves variables and returns the results as a simple string.
-				<li class='jm'>{@link oaj.svl.VarResolver#resolveTo(String,Writer) resolveTo(String,Writer)} 
-					- Resolves variables and sends results to a writer.
-			</ul>
-		</li>
-	</ul>
-	<p>
-		Var resolvers can rely on the existence of other objects.
-		For example, {@link oaj.config.vars.ConfigVar} relies on the existence of a {@link oaj.config.Config}.
-		This is accomplished through the following method:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.svl.VarResolver.Builder} 
-			<ul>
-				<li class='jm'>{@link oaj.svl.VarResolver.Builder#bean(Class,Object) bean(Class&lt;T&gt;, T)} - Specify a bean for all sessions.
-			</ul>
-		</li>
-		<li class='jc'>{@link oaj.svl.VarResolverSession}
-			<ul>
-				<li class='jm'>{@link oaj.svl.VarResolverSession#bean(Class,Object) bean(Class&lt;T&gt;, T)} - Specify a bean for this session.
-			</ul>
-		</li>
-	</ul>
-	<p>
-		Beans are accessible through the following method:
-	</p>
-	<ul class='javatree'>
-		<li class='jm'>{@link oaj.svl.VarResolverSession#getBean(Class)}
-	</ul>
-	<p>
-		Var resolvers can be cloned and extended by using the {@link oaj.svl.VarResolver#copy()} method.
-		Cloning a resolver will copy it's {@link oaj.svl.Var} class names and context objects.
-	</p>
-	
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-		|	<jc>// Create a resolver that copies the default resolver and adds $C and $A vars.</jc>
-		|	VarResolver <jv>myVarResolver</jv> = VarResolver
-		|		.<jsf>DEFAULT</jsf>
-		|		.copy()
-		|		.vars(ConfigVar.<jk>class</jk>, ArgsVar.<jk>class</jk>)
-		|		.build();
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/22.jm.SimpleVariableLanguage/03.jm.DefaultVarResolver.html b/juneau-doc/docs/Topics/02.juneau-marshall/22.jm.SimpleVariableLanguage/03.jm.DefaultVarResolver.html
deleted file mode 100644
index 9966f4b4b..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/22.jm.SimpleVariableLanguage/03.jm.DefaultVarResolver.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'VarResolver.DEFAULT', created:'8.1.0'}
-
-<div class='topic'>
-	<p>
-		{@link oaj.svl.VarResolver#DEFAULT} is a reusable variable resolver with default support for the following variables:
-	</p>
-	<ul>
-		<li><c>$S{key[,default]}</c> - {@link oaj.svl.vars.SystemPropertiesVar}
-		<li><c>$E{key[,default]}</c> - {@link oaj.svl.vars.EnvVariablesVar}
-		<li><c>$A{key[,default]}</c> - {@link oaj.svl.vars.ArgsVar}
-		<li><c>$MF{key[,default]}</c> - {@link oaj.svl.vars.ManifestFileVar}
-		<li><c>$SW{stringArg,pattern:thenValue[,pattern:thenValue...]}</c> - {@link oaj.svl.vars.SwitchVar}
-		<li><c>$IF{arg,then[,else]}</c> - {@link oaj.svl.vars.IfVar}
-		<li><c>$CO{arg[,arg2...]}</c> - {@link oaj.svl.vars.CoalesceVar}
-		<li><c>$PM{arg,pattern}</c> - {@link oaj.svl.vars.PatternMatchVar}
-		<li><c>$PR{stringArg,pattern,replace}</c>- {@link oaj.svl.vars.PatternReplaceVar}
-		<li><c>$PE{arg,pattern,groupIndex}</c> - {@link oaj.svl.vars.PatternExtractVar}
-		<li><c>$UC{arg}</c> - {@link oaj.svl.vars.UpperCaseVar}
-		<li><c>$LC{arg}</c> - {@link oaj.svl.vars.LowerCaseVar}
-		<li><c>$NE{arg}</c> - {@link oaj.svl.vars.NotEmptyVar}
-		<li><c>$LN{arg[,delimiter]}</c> - {@link oaj.svl.vars.LenVar}
-		<li><c>$ST{arg,start[,end]}</c> - {@link oaj.svl.vars.SubstringVar}
-	</ul>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/22.jm.SimpleVariableLanguage/04.jm.SvlOtherNotes.html b/juneau-doc/docs/Topics/02.juneau-marshall/22.jm.SimpleVariableLanguage/04.jm.SvlOtherNotes.html
deleted file mode 100644
index 4aa268f3e..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/22.jm.SimpleVariableLanguage/04.jm.SvlOtherNotes.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'Other Notes'}
-
-<div class='topic'>
-	<ul class='spaced-list'>
-		<li>
-			The escape character <js>'\'</js> can be used when necessary to escape the following characters: 
-			<c>$ , { }</c>
-		<li>
-			<b>WARNING:</b>  It is possible to cause {@link java.lang.StackOverflowError StackOverflowErrors} if 
-			your nested variables result in a recursive loop (e.g. the environment variable 
-			<c>'MYPROPERTY'</c> has the value <c>'$E{MYPROPERTY}'</c>).
-			So don't do that!
-		<li>
-			As a general rule, this class tries to be as efficient as possible by not creating new strings when not 
-			needed.
-			<br>For example, calling the resolve method on a string that doesn't contain variables (e.g. 
-			<c>resolver.resolve(<js>"foobar"</js>)</c>) will simply be a no-op and return the same string.
-	</ul>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/23.jm.Encoders.html b/juneau-doc/docs/Topics/02.juneau-marshall/23.jm.Encoders.html
deleted file mode 100644
index fa7690e02..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/23.jm.Encoders.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'Encoders', created:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.encoders} package defines an API for handling encoding-based matching
-		of <c>Accept-Encoding</c>/<c>Content-Encoding</c> HTTP headers.  It consists of the following classes:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.encoders.EncoderSet}
-		<li class='jcc'>{@link oaj.encoders.Encoder}
-		<ul>
-			<li class='jc'>{@link oaj.encoders.IdentityEncoder}
-			<li class='jc'>{@link oaj.encoders.GzipEncoder}
-		</ul>
-	</ul>
-	<h5 class='topic'>EncoderSet</h5>
-	<p>
-		The {@link oaj.encoders.EncoderSet} class represents the set of {@link Encoder encoders} keyed by codings.
-		It maintains a set of encoders and the codings that they can handle.
- 		The {@link oaj.encoders.EncoderSet#getEncoderMatch(String) getEncoderMatch(String)} and {@link oaj.encoders.EncoderSet#getEncoder(String)} 
- 		methods are then used to find appropriate encoders for specific <c>Accept-Encoding</c> and <c>Content-Encoding</c> header values.
-	</p>
-	
-	<h5 class='topic'>Match ordering</h5>
-	<p>
-		Encoders are tried in the order they appear in the set.  The {@link oaj.encoders.EncoderSet.Builder#add(Class...)} / {@link oaj.encoders.EncoderSet.Builder#add(Encoder...)}
-		methods prepend the values to the list to allow them the opportunity to override encoders already in the list.
-	</p>
-	<p>
-		For example, calling <code>builder.add(E1.<jk>class</jk>,E2.<jk>class</jk>).add(E3.<jk>class</jk>,
-		E4.<jk>class</jk>)</code> will result in the order <c>E3, E4, E1, E2</c>.
-	</p>
-	
-	<h5 class='section'>Example:</h5>
-	<p class='bjava'>
-	|	<jc>// Create an encoder group with support for gzip compression.</jc>
-	|	EncoderSet <jv>encoders</jv> = EncoderSet
-	|		.<jsm>create</jsm>()
-	|		.add(GzipEncoder.<jk>class</jk>)
-	|		.build();
-	|
-	|	<jc>// Should return "gzip"</jc>
-	|	String <jv>matchedCoding</jv> = <jv>encoders</jv>.findMatch(<js>"compress;q=1.0, gzip;q=0.8, identity;q=0.5, *;q=0"</js>);
-	|
-	|	<jc>// Get the encoder</jc>
-	|	Encoder <jv>encoder</jv> = <jv>encoders</jv>.getEncoder(<jv>matchedCoding</jv>);
-	</p>
-
-	<h5 class='topic'>Encoder API</h5>
-	<p>
-		The {@link oaj.encoders.Encoder} interface is used for enabling decompression on requests and compression on responses, such as support for GZIP compression.
-		It is used to wrap input and output streams within compression/decompression streams.
-	</p>
-	<ul class='javatree'>
-		<li class='jac'>{@link oaj.encoders.Encoder}
-		<ul class='javatreec'>
-			<li class='jm'>{@link oaj.encoders.Encoder#getCodings() getCodings()}
-			<li class='jm'>{@link oaj.encoders.Encoder#getInputStream(InputStream) getInputStream(InputStream)}
-			<li class='jm'>{@link oaj.encoders.Encoder#getOutputStream(OutputStream) getOutputStream(OutputStream)}
-		</ul>
-	</ul>
-	<p>
-		Encoders are registered with <c>RestServlets</c> through the <ja>@Rest(encoders)</ja> annotation.
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.ObjectTools.html b/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.ObjectTools.html
deleted file mode 100644
index a480d443e..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/24.jm.ObjectTools.html
+++ /dev/null
@@ -1,343 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'Object Tools', created:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.objecttools} package defines convenience utility classes for accessing
-		and manipulating POJOs.  It consists of the following classes:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.objecttools.ObjectRest}
-		<li class='jc'>{@link oaj.objecttools.ObjectSearcher}
-		<li class='jc'>{@link oaj.objecttools.ObjectSorter}
-		<li class='jc'>{@link oaj.objecttools.ObjectViewer}
-		<li class='jc'>{@link oaj.objecttools.ObjectPaginator}
-		<li class='jc'>{@link oaj.objecttools.ObjectIntrospector}
-		<li class='jc'>{@link oaj.objecttools.ObjectMerger}
-	</ul>
-	
-	<h5 class='topic'>ObjectRest</h5>
-	<p>
-		The {@link oaj.objecttools.ObjectRest} class provides the ability to perform standard REST operations (GET, PUT, POST, DELETE) against nodes in a POJO model.
-		Nodes in the POJO model are addressed using URLs.
-	</p>
-	<p>
-		A POJO model is defined as a tree model where nodes consist of consisting of the following:
-	</p>
-	<ul class='spaced-list'>
-		<li>
-			{@link Map Maps} and Java beans representing JSON objects.
-		<li>
-			{@link Collection Collections} and arrays representing JSON arrays.
-		<li>
-			Java beans.
-	</ul>
-	<p>
-		Leaves of the tree can be any type of object.
-	</p>
-	<p>
-		Use {@link oaj.objecttools.ObjectRest#get(String) get()} to retrieve an element from a JSON tree.
-		<br>Use {@link oaj.objecttools.ObjectRest#put(String,Object) put()} to create (or overwrite) an element in a JSON tree.
-		<br>Use {@link oaj.objecttools.ObjectRest#post(String,Object) post()} to add an element to a list in a JSON tree.
-		<br>Use {@link oaj.objecttools.ObjectRest#delete(String) delete()} to remove an element from a JSON tree.
-	</p>
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-	|	<jc>// Construct an unstructured POJO model</jc>
-	|	JsonMap <jv>map</jv> = JsonMap.<jsm>ofJson</jsm>(<js>""</js>
-	|		+ <js>"{"</js>
-	|		+ <js>"	name:'John Smith', "</js>
-	|		+ <js>"	address:{ "</js>
-	|		+ <js>"		streetAddress:'21 2nd Street', "</js>
-	|		+ <js>"		city:'New York', "</js>
-	|		+ <js>"		state:'NY', "</js>
-	|		+ <js>"		postalCode:10021 "</js>
-	|		+ <js>"	}, "</js>
-	|		+ <js>"	phoneNumbers:[ "</js>
-	|		+ <js>"		'212 555-1111', "</js>
-	|		+ <js>"		'212 555-2222' "</js>
-	|		+ <js>"	], "</js>
-	|		+ <js>"	additionalInfo:null, "</js>
-	|		+ <js>"	remote:false, "</js>
-	|		+ <js>"	height:62.4, "</js>
-	|		+ <js>"	'fico score':' &gt; 640' "</js>
-	|		+ <js>"} "</js>
-	|	);
-	|
-	|	<jc>// Wrap Map inside an ObjectRest object</jc>
-	|	ObjectRest <jv>johnSmith</jv> = ObjectRest.<jsm>create</jsm>(<jv>map</jv>);
-	|
-	|	<jc>// Get a simple value at the top level</jc>
-	|	<jc>// "John Smith"</jc>
-	|	String <jv>name</jv> = <jv>johnSmith</jv>.getString(<js>"name"</js>);
-	|
-	|	<jc>// Change a simple value at the top level</jc>
-	|	<jv>johnSmith</jv>.put(<js>"name"</js>, <js>"The late John Smith"</js>);
-	|
-	|	<jc>// Get a simple value at a deep level</jc>
-	|	<jc>// "21 2nd Street"</jc>
-	|	String <jv>streetAddress</jv> = <jv>johnSmith</jv>.getString(<js>"address/streetAddress"</js>);
-	|
-	|	<jc>// Set a simple value at a deep level</jc>
-	|	<jv>johnSmith</jv>.put(<js>"address/streetAddress"</js>, <js>"101 Cemetery Way"</js>);
-	|
-	|	<jc>// Get entries in a list</jc>
-	|	<jc>// "212 555-1111"</jc>
-	|	String <jv>firstPhoneNumber</jv> = <jv>johnSmith</jv>.getString(<js>"phoneNumbers/0"</js>);
-	|
-	|	<jc>// Add entries to a list</jc>
-	|	<jv>johnSmith</jv>.post(<js>"phoneNumbers"</js>, <js>"212 555-3333"</js>);
-	|
-	|	<jc>// Delete entries from a model</jc>
-	|	<jv>johnSmith</jv>.delete(<js>"fico score"</js>);
-	|
-	|	<jc>// Add entirely new structures to the tree</jc>
-	|	JsonMap <jv>medicalInfo</jv> = JsonMap.<jsm>ofJson</jsm>(<js>""</js>
-	|		+ <js>"{"</js>
-	|		+ <js>"	currentStatus: 'deceased',"</js>
-	|		+ <js>"	health: 'non-existent',"</js>
-	|		+ <js>"	creditWorthiness: 'not good'"</js>
-	|		+ <js>"}"</js>
-	|	);
-	|	<jv>johnSmith</jv>.put(<js>"additionalInfo/medicalInfo"</js>, <jv>medicalInfo</jv>);
-	</p>
-
-	<p>
-		In the special case of collections/arrays of maps/beans, a special XPath-like selector notation can be used in lieu
-		of index numbers on GET requests to return a map/bean with a specified attribute value.
-		<br>The syntax is {@code @attr=val}, where attr is the attribute name on the child map, and val is the matching value.
-	</p>
-	
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-	|	<jc>// Get map/bean with name attribute value of 'foo' from a list of items</jc>
-	|	Map <jv>map</jv> = <jv>objectRest</jv>.getMap(<js>"/items/@name=foo"</js>);
-	</p>
-	<ul class='notes'>
-		<li class='note'>This class is used in the {@link oajr.converter.Traversable} REST response converter.
-	</ul>
-	
-	<h5 class='topic'>ObjectSearcher</h5>
-	<p>
-		The {@link oaj.objecttools.ObjectSearcher} class is designed to provide searches across arrays and collections of maps or beans.
-		It allows you to quickly filter beans and maps using simple yet sophisticated search arguments.
-	</p>
-	
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'> 
-	|	MyBean[] <jv>arrayOfBeans</jv> = ...;
-	|	ObjectSearcher <jv>searcher</jv> = ObjectSearcher.<jsm>create</jsm>();
-	|	
-	|	<jc>// Returns a list of beans whose 'foo' property is 'X' and 'bar' property is 'Y'.</jc>		
-	|	List&lt;MyBean&gt; <jv>result</jv> = <jv>searcher</jv>.run(<jv>arrayOfBeans</jv>, <js>"foo=X,bar=Y"</js>);  
-	</p>
-	<p>
-		The tool can be used against the following data types:
-	</p>
-	<ul>
-		<li>Arrays/collections of maps or beans.
-	</ul>
-	<p>
-		The default searcher is configured with the following matcher factories that provides the capabilities of matching
-		against various data types.  This list is extensible:
-	</p>
-	<ul class='javatreec'>
-		<li class='jc'>{@link oaj.objecttools.StringMatcherFactory}
-		<li class='jc'>{@link oaj.objecttools.NumberMatcherFactory}
-		<li class='jc'>{@link oaj.objecttools.TimeMatcherFactory}
-	</ul>
-	<p>
-		The {@link oaj.objecttools.StringMatcherFactory} class provides searching based on the following patterns:
-	</p>
-	<ul>
-		<li><js>"property=foo"</js> - Simple full word match
-		<li><js>"property=fo*"</js>, <js>"property=?ar"</js> - Meta-character matching
-		<li><js>"property=foo bar"</js>(implicit), <js>"property=^foo ^bar"</js>(explicit) - Multiple OR'ed patterns
-		<li><js>"property=+fo* +*ar"</js> - Multiple AND'ed patterns
-		<li><js>"property=fo* -bar"</js> - Negative patterns
-		<li><js>"property='foo bar'"</js> - Patterns with whitespace
-		<li><js>"property=foo\\'bar"</js> - Patterns with single-quotes
-		<li><js>"property=/foo\\s+bar"</js> - Regular expression match
-	</ul>
-	<p>
-		The {@link oaj.objecttools.NumberMatcherFactory} class provides searching based on the following patterns:
-	</p>
-	<ul>
-		<li><js>"property=1"</js> - A single number
-		<li><js>"property=1 2"</js> - Multiple OR'ed numbers
-		<li><js>"property=-1 -2"</js> - Multiple OR'ed negative numbers
-		<li><js>"property=1-2"</js>,<js>"property=-2--1"</js>  - A range of numbers (whitespace ignored)
-		<li><js>"property=1-2 4-5"</js> - Multiple OR'ed ranges
-		<li><js>"property=&lt;1"</js>,<js>"property=&lt;=1"</js>,<js>"property=&gt;1"</js>,<js>"property=&gt;=1"</js> - Open-ended ranges
-		<li><js>"property=!1"</js>,<js>"property=!1-2"</js> - Negation
-	</ul>
-	<p>
-		The {@link oaj.objecttools.TimeMatcherFactory} class provides searching based on the following patterns:
-	</p>
-	<ul>
-		<li><js>"property=2011"</js> - A single year
-		<li><js>"property=2011 2013 2015"</js> - Multiple years
-		<li><js>"property=2011-01"</js> - A single month
-		<li><js>"property=2011-01-01"</js> - A single day
-		<li><js>"property=2011-01-01T12"</js> - A single hour
-		<li><js>"property=2011-01-01T12:30"</js> - A single minute
-		<li><js>"property=2011-01-01T12:30:45"</js> - A single second
-		<li><js>"property=&gt;2011"</js>,<js>"property=&gt;=2011"</js>,<js>"property=&lt;2011"</js>,<js>"property=&lt;=2011"</js> - Open-ended ranges
-		<li><js>"property=&gt;2011"</js>,<js>"property=&gt;=2011"</js>,<js>"property=&lt;2011"</js>,<js>"property=&lt;=2011"</js> - Open-ended ranges
-		<li><js>"property=2011 - 2013-06-30"</js> - Closed ranges
-	</ul>
-	<ul class='notes'>
-		<li class='note'>This class is used in the {@link oajr.converter.Queryable} REST response converter.
-	</ul>
-
-	<h5 class='topic'>ObjectSorter</h5>
-	<p>
-		The {@link oaj.objecttools.ObjectSorter} class is designed to sort arrays and collections of maps or beans.
-	</p>
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'> 
-	|	MyBean[] <jv>arrayOfBeans</jv> = ...;
-	|	ObjectSorter <jv>sorter</jv> = ObjectSorter.<jsm>create</jsm>();
-	|	
-	|	<jc>// Returns a list of beans sorted accordingly.</jc>		
-	|	List&lt;MyBean&gt; <jv>result</jv> = <jv>sorter</jv>.run(<jv>arrayOfBeans</jv>, <js>"foo,bar-"</js>);  
-	</p>
-	<p>
-		The tool can be used against the following data types:
-	</p>
-	<ul>
-		<li>Arrays/collections of maps or beans.
-	</ul>
-	<p>
-		The arguments are a simple comma-delimited list of property names optionally suffixed with <js>'+'</js> and <js>'-'</js> to 
-		denote ascending/descending order.
-	</p>
-	<ul class='notes'>
-		<li class='note'>This class is used in the {@link oajr.converter.Queryable} REST response converter.
-	</ul>
-	
-	<h5 class='topic'>ObjectViewer</h5>
-	<p>
-		The {@link oaj.objecttools.ObjectViewer} class is designed to extract properties from collections of maps or beans.
-	</p>
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'> 
-	|	MyBean[] <jv>arrayOfBeans</jv> = ...;
-	|	ObjectViewer <jv>viewer</jv> = ObjectViewer.<jsm>create</jsm>();
-
-	|	<jc>// Returns the 'foo' and 'bar' properties extracted into a list of maps.</jc>		
-	|	List&lt;Map&gt; <jv>result</jv> = <jv>viewer</jv>.run(<jv>arrayOfBeans</jv>, <js>"foo,bar"</js>);  
-	</p>
-	<p>
-		The tool can be used against the following data types:
-	</p>
-	<ul>
-		<li>Arrays/collections of maps or beans.
-		<li>Singular maps or beans.
-	</ul>
-	<ul class='notes'>
-		<li class='note'>This class is used in the {@link oajr.converter.Queryable} REST response converter.
-	</ul>
-	
-	<h5 class='topic'>ObjectPaginator</h5>
-	<p>
-		The {@link oaj.objecttools.ObjectPaginator} class is designed to extract sublists from arrays/collections of maps or beans.
-	</p>
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'> 
-	|	MyBean[] <jv>arrayOfBeans</jv> = ...;
-	|	ObjectPaginator <jv>paginator</jv> = ObjectPaginator.<jsm>create</jsm>();
-	|	
-	|	<jc>// Returns all rows from 100 to 110.</jc>		
-	|	List&lt;MyBean&gt; <jv>result</jv> = <jv>paginator</jv>.run(<jv>arrayOfBeans</jv>, 100, 10);  
-	</p>
-	<p>
-		The tool can be used against the following data types:
-	</p>
-	<ul>
-		<li>Arrays/collections of maps or beans.
-	</ul>
-	<ul class='notes'>
-		<li class='note'>This class is used in the {@link oajr.converter.Queryable} REST response converter.
-	</ul>
-
-	<h5 class='topic'>ObjectIntrospector</h5>
-	<p>
-		The {@link oaj.objecttools.ObjectIntrospector} class is used to invoke methods on {@code Objects} using arguments in serialized form.
-	</p>
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-	|	String <jv>string1</jv> = <js>"foobar"</js>;
-	|	String <jv>string2</jv> = ObjectIntrospector
-	|		.create(<jv>string</jv>)
-	|		.invoke(String.<jk>class</jk>, <js>"substring(int,int)"</js>, <js>"[3,6]"</js>);  <jc>// "bar"</jc>
-	</p>
-	<p>
-		The arguments passed to the identified method are POJOs serialized in JSON format.  Arbitrarily complex arguments can be passed
-		in as arguments.
-	</p>
-	<ul class='notes'>
-		<li class='note'>This class is used in the {@link oajr.converter.Introspectable} REST response converter.
-		<li class='warn'>This is an extremely powerful but potentially dangerous tool.  Use wisely.
-	</ul>
-	
-	<h5 class='topic'>ObjectMerger</h5>
-	<p>
-		The {@link oaj.objecttools.ObjectMerger} class is used for merging POJOs behind a single interface.
-		This is particularly useful in cases where you want to define beans with 'default' values.
-	</p>
-	<p>
-		For example, given the following bean classes:
-	</p>
-
-	<p class='bjava'>
-	|	<jk>public interface</jk> IA {
-	|		String getX();
-	|		<jk>void</jk> setX(String <jv>x</jv>);
-	|	}
-	|
-	|	<jk>public class</jk> A <jk>implements</jk> IA {
-	|		<jk>private</jk> String <jf>x</jf>;
-	|
-	|		<jk>public</jk> A(String <jv>x</jv>) {
-	|			<jk>this</jk>.<jf>x</jf> = <jv>x</jv>;
-	|		}
-	|
-	|		<jk>public</jk> String getX() {
-	|			<jk>return</jk> <jf>x</jf>;
-	|		}
-	|
-	|		<jk>public void</jk> setX(String <jv>x</jv>) {
-	|			<jk>this</jk>.<jf>x</jf> = <jv>x</jv>;
-	|		}
-	|	}
-	</p>
-	<p>
-		The getters will be called in order until the first non-null value is returned:
- 	</p>
-	<p class='bjava'>
-	|	<jv>merge</jv> = ObjectMerger.<jsm>merger</jsm>(IA.<jk>class</jk>, <jk>new</jk> A(<js>"1"</js>), <jk>new</jk> A(<js>"2"</js>));
-	|	<jsm>assertEquals</jsm>(<js>"1"</js>, <jv>merge</jv>.getX());
-	|
-	|	<jv>merge</jv> = ObjectMerger.<jsm>merger</jsm>(IA.<jk>class</jk>, <jk>new</jk> A(<jk>null</jk>), <jk>new</jk> A(<js>"2"</js>));
-	|	<jsm>assertEquals</jsm>(<js>"2"</js>, <jv>merge</jv>.getX());
-	|
-	|	<jv>merge</jv> = ObjectMerger.<jsm>merger</jsm>(IA.<jk>class</jk>, <jk>new</jk> A(<jk>null</jk>), <jk>new</jk> A(<jk>null</jk>));
-	|	<jsm>assertEquals</jsm>(<jk>null</jk>, <jv>merge</jv>.getX());
-	</p>
-	
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonDetails.html
deleted file mode 100644
index 3bce8b863..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonDetails.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'JSON Details'}
-
-<div class='topic'>
-	<p>
-		Juneau supports converting arbitrary POJOs to and from JSON using ultra-efficient serializers and parsers.
-		The JSON serializer converts POJOs directly to JSON without the need for intermediate DOM objects using a 
-		highly-efficient state machine.
-		Likewise, the JSON parser creates POJOs directly from JSON without the need for intermediate DOM objects. 
-	</p>
-	<p>
-		The following example shows JSON for a typical bean:
-	</p>
-	<h5 class='figure'>Sample Beans</h5>
-	<p class='bjava'>
-		|	<jk>public class</jk> Person {
-		|		
-		|		<jc>// Bean properties</jc>
-		|		<jk>public</jk> String <jf>name</jf>;
-		|		<ja>@Swap</ja>(TemporalCalendarSwap.IsoInstant.<jk>class</jk>) <jk>public</jk> Calendar <jf>birthDate</jf>;
-		|		<jk>public</jk> List&lt;Address&gt; <jf>addresses</jf>; 
-		|	
-		|		<jc>// Getters/setters omitted</jc>
-		|	}
-		|	
-		|	<jk>public class</jk> Address {
-		|
-		|		<jc>// Bean properties</jc>
-		|		<jk>public</jk> String <jf>street</jf>, <jf>city</jf>;
-		|		<jk>public</jk> StateEnum <jf>state</jf>;
-		|		<jk>public int</jk> <jf>zip</jf>;
-		|		<jk>public boolean</jk> <jf>isCurrent</jf>;
-		|
-		|		<jc>// Getters/setters omitted</jc>
-		|	}	
-	</p>
-	<h5 class='figure'>Sample Code</h5>
-	<p class='bjava'>
-		|	Person <jv>person</jv> = <jk>new</jk> Person()
-		|		.name(<js>"John Smith"</js>)
-		|		.birthDate(<js>"1946-08-12T00:00:00Z"</js>)
-		|		.addresses(
-		|			<jk>new</jk> Address() 
-		|				.street(<js>"100 Main Street"</js>)
-		|				.city(<js>"Anywhereville"</js>)
-		|				.state(<jsf>NY</jsf>)
-		|				.zip(12345)
-		|				.isCurrent(<jk>true</jk>);
-		|		);
-	</p>
-	<h5 class='figure'>Normal JSON</h5>
-	<p class='bjson'>
-		|	{
-		|		<js>"name"</js>: <js>"John Smith"</js>, 
-		|		<js>"birthDate"</js>: <js>"1946-08-12T00:00:00Z"</js>, 
-		|		<js>"addresses"</js>: [
-		|			{
-		|				<js>"street"</js>: <js>"100 Main Street"</js>, 
-		|				<js>"city"</js>: <js>"Anywhereville"</js>, 
-		|				<js>"state"</js>: <js>"NY"</js>, 
-		|				<js>"zip"</js>: 12345, 
-		|				<js>"isCurrent"</js>: <jk>true</jk>
-		|			}
-		|		]
-		|	} 
-	</p>
-	<h5 class='figure'>Simplified JSON</h5>
-	<p class='bjson'>
-		|	{
-		|		name: <js>'John Smith'</js>, 
-		|		birthDate: <js>'1946-08-12T00:00:00Z'</js>, 
-		|		addresses: [
-		|			{
-		|				street: <js>'100 Main Street'</js>, 
-		|				city: <js>'Anywhereville'</js>, 
-		|				state: <js>'NY'</js>, 
-		|				zip: 12345, 
-		|				isCurrent: <jk>true</jk>
-		|			}
-		|		]
-		|	} 
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonDetails/01.jm.JsonMethodology.html b/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonDetails/01.jm.JsonMethodology.html
deleted file mode 100644
index 2c9920c8f..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonDetails/01.jm.JsonMethodology.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'JSON Methodology'}
-
-<div class='topic'>
-	<p>
-		The JSON data type produced depends on the Java object type being serialized.
-	</p>
-	<ul class='spaced-list'>
-		<li>
-			Primitives and primitive objects are converted to JSON primitives.
-		<li>
-			Beans and Maps are converted to JSON objects.
-		<li>
-			Collections and arrays are converted to JSON arrays.
-		<li>
-			Anything else is converted to JSON strings.
-	</ul>
-	
-	<h5 class='figure'>Data type conversions:</h5>
-	<table class='styled w800'>
-		<tr>
-			<th>POJO type</th>
-			<th>JSON type</th>
-			<th>Example</th>
-			<th>Serialized form</th>
-		</tr>
-		<tr>
-			<td>String</td>
-			<td>String</td>
-			<td><c>serialize(<js>"foobar"</js>);</c></td>
-			<td><c><js>'foobar'</js></c>
-		</tr>
-		<tr>
-			<td>Number</td>
-			<td>Number</td>
-			<td><c>serialize(123);</c></td>
-			<td><c>123</c>
-		</tr>
-		<tr>
-			<td>Boolean</td>
-			<td>Boolean</td>
-			<td><c>serialize(<jk>true</jk>);</c></td>
-			<td><c><jk>true</jk></c>
-		</tr>
-		<tr>
-			<td>Null</td>
-			<td>Null</td>
-			<td><c>serialize(<jk>null</jk>);</c></td>
-			<td><c><jk>null</jk></c>
-		</tr>
-		<tr>
-			<td>Beans with properties of any type on this list</td>
-			<td>Object</td>
-			<td><c>serialize(<jk>new</jk> MyBean());</c></td>
-			<td><c>{p1:<js>'val1'</js>,p2:<jk>true</jk>}</c>
-		</tr>
-		<tr>
-			<td>Maps with values of any type on this list</td>
-			<td>Object</td>
-			<td><c>serialize(<jk>new</jk> TreeMap());</c></td>
-			<td><c>{key1:<js>'val1'</js>,key2:<jk>true</jk>}</c>
-		</tr>
-		<tr>
-			<td>Collections and arrays of any type on this list</td>
-			<td>Array</td>
-			<td><c>serialize(<jk>new</jk> Object[]{1,<js>"foo"</js>,<jk>true</jk>});</c></td>
-			<td><c>[1,<js>'foo'</js>,<jk>true</jk>]</c>
-		</tr>
-	</table>
-	<p>
-		In addition, swaps can be used to convert non-serializable POJOs into serializable forms, such as converting 
-		<c>Calendar</c> object to ISO8601 strings, or <c><jk>byte</jk>[]</c> arrays to Base-64 
-		encoded strings.
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonDetails/02.jm.JsonSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonDetails/02.jm.JsonSerializers.html
deleted file mode 100644
index 121dbe047..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonDetails/02.jm.JsonSerializers.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'JSON Serializers', updated:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.json.JsonSerializer} class is used to serialize POJOs into JSON.
-	</p>	
-	<p>
-		The class hierarchy for the builder of this serializer is:
-	</p>
-	<ul class='javatree'>
-		<li class='jac'>{@link oaj.Context.Builder}
-			<ul>
-				<li class='jac'>{@link oaj.BeanContextable.Builder}
-					<ul>
-						<li class='jac'>{@link oaj.BeanTraverseContext.Builder}
-							<ul>
-								<li class='jac'>{@link oaj.serializer.Serializer.Builder}
-									<ul>
-										<li class='jac'>{@link oaj.serializer.WriterSerializer.Builder}
-											<ul>
-												<li class='jc'>{@link oaj.json.JsonSerializer.Builder}
-											</ul>
-										</li>
-									</ul>
-								</li>
-							</ul>
-						</li>
-					</ul>
-				</li>
-			</ul>
-		</li>
-	</ul>
-	<p>
-		Refer to the builder javadocs for configurable settings.
-	</p>
-	<p>
-		The following pre-configured serializers are provided for convenience:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.json.JsonSerializer}
-			<ul class='javatreec'>
-				<li class='jf'>{@link oaj.json.JsonSerializer#DEFAULT DEFAULT}
-				<li class='jf'>{@link oaj.json.JsonSerializer#DEFAULT_READABLE DEFAULT_READABLE}
-			</ul>
-		</li>
-		<li class='jc'>{@link oaj.json.SimpleJsonSerializer}
-			<ul class='javatreec'>
-				<li class='jf'>{@link oaj.json.SimpleJsonSerializer#DEFAULT DEFAULT}
-				<li class='jf'>{@link oaj.json.SimpleJsonSerializer#DEFAULT_READABLE DEFAULT_READABLE}
-			</ul>
-		</li>
-	</ul>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonDetails/03.jm.SimplifiedJson.html b/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonDetails/03.jm.SimplifiedJson.html
deleted file mode 100644
index 15d9bdab4..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonDetails/03.jm.SimplifiedJson.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'Simplified JSON', updated:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.json.SimpleJsonSerializer} class can be used to serialized POJOs into Simplified JSON notation.
-	</p>
-	<p>
-		Simplified JSON is identical to JSON except for the following:
-	</p>
-	<ul class='spaced-list'>
-		<li>JSON attributes are only quoted when necessary.
-		<li>Uses single-quotes for quoting.
-	</ul>
-	<h5 class='figure'>Examples:</h5>
-	<p class='bjava'>
-		|	<jc>// Some free-form JSON.</jc>
-		|	JsonMap <jv>map</jv> = JsonMap.<jsm>of</jsm>(
-		|		<js>"foo"</js>, <js>"x1"</js>,
-		|		<js>"_bar"</js>, <js>"x2"</js>,
-		|		<js>" baz "</js>, <js>"x3"</js>,
-		|		<js>"123"</js>, <js>"x4"</js>,
-		|		<js>"return"</js>, <js>"x5"</js>,
-		|		<js>""</js>, <js>"x6"</js>
-		|	);
-	</p>
-	<p class='bjson'>
-		|	<joc>// Serialized to standard JSON</joc>
-		|	{
-		|		<jok>"foo"</jok>: <jov>"x1"</jov>,
-		|		<jok>"_bar"</jok>: <jov>"x2"</jov>,
-		|		<jok>" baz "</jok>: <jov>"x3"</jov>,
-		|		<jok>"123"</jok>: <jov>"x4"</jov>,
-		|		<jok>"return"</jok>: <jov>"x5"</jov>,
-		|		<jok>""</jok>: <jov>"x6"</jov>
-		|	}
-	</p>	 		
-	<p class='bjson'>
-		|	<joc>// Serialized to simplified JSON</joc>
-		|	{
-		|		<jok>foo</jok>: <jov>'x1'</jov>,
-		|		<jok>_bar</jok>: <jov>'x2'</jov>,
-		|		<jok>' baz '</jok>: <jov>'x3'</jov>,  <joc>// Quoted due to embedded spaces.</joc>
-		|		<jok>'123'</jok>: <jov>'x4'</jov>,    <joc>// Quoted to prevent confusion with number.</joc>
-		|		<jok>'return'</jok>: <jov>'x5'</jov>, <joc>// Quoted because it's a keyword.</joc>
-		|		<jok>''</jok>: <jov>'x6'</jov>        <joc>// Quoted because it's an empty string.</joc>
-		|	}
-	</p>
-	<p>
-		The advantage to simplified JSON is you can represent it in a Java String in minimal form with minimal escaping.
-		This is particularly useful in cases such as unit testing where you can easily validate POJOs by simplifying them to Simplified JSON and do a simple string comparison.
-	</p>
-	<p class='bjava'>
-		|	WriterSerializer <jv>serializer</jv> = SimpleJsonSerializer.<jsf>DEFAULT</jsf>;
-		|	<jsm>assertEquals</jsm>(<js>"{foo:'bar',baz:123}"</js>, <jv>serializer</jv>.toString(<jv>myPojo</jv>));
-	</p>			
-	
-	<ul class='seealso'>
-		<li class='jc'>{@link oaj.json.JsonSerializer.Builder}
-			<ul class='javatreec'>
-				<li class='jm'>{@link oaj.json.JsonSerializer.Builder#simpleMode() simpleMode()}
-			</ul>
-		</li>
-	</ul>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonDetails/04.jm.JsonParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonDetails/04.jm.JsonParsers.html
deleted file mode 100644
index fcb7d1fd7..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonDetails/04.jm.JsonParsers.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'JSON Parsers', updated:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.json.JsonParser} class is used to parse JSON into POJOs.
-	</p>	
-	<p>
-		The class hierarchy for the builder of this parser is:
-	</p>
-	<ul class='javatree'>
-		<li class='jac'>{@link oaj.Context.Builder}
-			<ul>
-				<li class='jac'>{@link oaj.BeanContextable.Builder}
-					<ul>
-						<li class='jac'>{@link oaj.parser.Parser.Builder}
-							<ul>
-								<li class='jac'>{@link oaj.parser.ReaderParser.Builder}
-									<ul>
-										<li class='jc'>{@link oaj.json.JsonParser.Builder}
-									</ul>
-								</li>
-							</ul>
-						</li>
-					</ul>
-				</li>
-			</ul>
-		</li>
-	</ul>
-	<p>
-		Refer to the builder javadocs for configurable settings.
-	</p>
-	<p>
-		The following pre-configured parsers are provided for convenience:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.json.JsonParser}
-			<ul class='javatreec'>
-				<li class='jf'>{@link oaj.json.JsonParser#DEFAULT DEFAULT}
-				<li class='jf'>{@link oaj.json.JsonParser#DEFAULT_STRICT DEFAULT_STRICT}
-			</ul>
-		</li>
-	</ul>
-	<p>
-		The JSON parser supports ALL valid JSON, including:
-	</p>
-	<ul class='spaced-list'>
-		<li>
-			Javascript comments.
-		<li>
-			Single or double quoted values.
-		<li>
-			Quoted (strict) or unquoted (non-strict) attributes.
-		<li>
-			JSON fragments (such as string, numeric, or boolean primitive values).
-		<li>
-			Concatenated strings. 
-	</ul>	
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonDetails/05.jm.JsonAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonDetails/05.jm.JsonAnnotation.html
deleted file mode 100644
index 3cac89c7f..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/25.jm.JsonDetails/05.jm.JsonAnnotation.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'@Json Annotation'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.json.annotation.Json @Json} annotation
-		is used to override the behavior of {@link oaj.json.JsonSerializer} on individual bean classes or properties.
-	</p>
-	<p>
-		The annotation can be applied to beans as well as other objects serialized to other types (e.g. strings).
-	</p>
-	<ul class='javatree'>
-		<li class='ja'>{@link oaj.json.annotation.Json}
-			<ul class='javatreec'>
-				<li class='jma'>{@link oaj.json.annotation.Json#wrapperAttr() wrapperAttr}
-			</ul>
-		</li>
-	</ul>		
-	<p>
-		The {@link oaj.json.annotation.Json#wrapperAttr() @Json(wrapperAttr)} annotation
-		can be used to wrap beans inside a JSON object with a specified attribute name.
-	</p>		
-	<h5 class='figure'>Example:</h5>
-	<p class='bbjavacode w800'>
-		|	<ja>@Json</ja>(wrapperAttr=<js>"personBean"</js>)
-		|	<jk>public class</jk> Person {
-		|		<jk>public</jk> String <jf>name</jf> = <js>"John Smith"</js>;
-		|	}
-	</p>
-	<p>
-		The following shows the JSON representation with and without the annotation present:
-	</p>
-	<table class='styled w800'>
-		<tr>
-			<th>Without annotation</th>
-			<th>With annotation</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	{
-				|		<jok>name</jok>: <jov>'John Smith'</jov>
-				|	}
-			</td>
-			<td class='code'>
-				|	{
-				|		<jok>personBean</jok>: {
-				|			<jok>name</jok>: <jov>'John Smith'</jov>
-				|		}
-				|	}
-			</td>
-		</tr>
-	</table>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.JsonSchemaDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.JsonSchemaDetails.html
deleted file mode 100644
index 86a44c0f1..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/26.jm.JsonSchemaDetails.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'JSON-Schema Support'}
-
-<div class='topic'>
-	<p>
-		Juneau provides the {@link oaj.json.JsonSchemaSerializer} class for generating JSON-Schema 
-		documents that describe the output generated by the {@link oaj.json.JsonSerializer} class.
-		This class shares the same properties as <c>JsonSerializer</c>.
-		For convenience the {@link oaj.json.JsonSerializer#getSchemaSerializer()} method has been 
-		added for creating instances of schema serializers from the regular serializer instance.
-	</p>
-	<h5 class='figure'>Sample Beans</h5>
-	<p class='bjava'>
-		|	<jk>public class</jk> Person {
-		|		
-		|		<jc>// Bean properties</jc>
-		|		<jk>public</jk> String <jf>name</jf>;
-		|		<jk>public</jk> Calendar <jf>birthDate</jf>;
-		|		<jk>public</jk> List&lt;Address&gt; <jf>addresses</jf>; 
-		|	
-		|		<jc>// Getters/setters omitted</jc>
-		|	}
-		|	
-		|	<jk>public class</jk> Address {
-		|
-		|		<jc>// Bean properties</jc>
-		|		<jk>public</jk> String <jf>street</jf>, <jf>city</jf>;
-		|		<jk>public</jk> StateEnum <jf>state</jf>;
-		|		<jk>public int</jk> <jf>zip</jf>;
-		|		<jk>public boolean</jk> <jf>isCurrent</jf>;
-		|
-		|		<jc>// Getters/setters omitted</jc>
-		|	}	
-	</p>
-	<p>
-		The code for creating our POJO model and generating JSON-Schema is shown below:
-	</p>
-	<p class='bjava'>
-		|	<jc>// Get the one of the default schema serializers.</jc>
-		|	JsonSchemaSerializer <jv>serializer</jv> = JsonSchemaSerializer.<jsf>DEFAULT_SIMPLE_READABLE</jsf>;
-		|	
-		|	<jc>// Get the JSON Schema for the POJO.</jc>
-		|	String <jv>jsonSchema</jv> = <jv>serializer</jv>.serialize(<jk>new</jk> Person());
-		|
-		|	<jc>// This also works.</jc>
-		|	<jv>jsonSchema</jv> = <jv>serializer</jv>.serialize(Person.<jk>class</jk>);
-	</p>
-	
-	<h5 class='figure'>JSON Schema</h5>
-	<p class='bjson'>
-		|	{
-		|		<jok>type: <jov>'object'</jov>, 
-		|		<jok>description</jok>: <jov>'org.apache.juneau.sample.Person'</jov>, 
-		|		<jok>properties</jok>: {
-		|			<jok>name</jok>: {
-		|				<jok>type</jok>: <jov>'string'</jov>, 
-		|				<jok>description</jok>: <jov>'java.lang.String'</jov>
-		|			}, 
-		|			<jok>birthDate</jok>: {
-		|				<jok>type</jok>: <jov>'string'</jov>, 
-		|				<jok>description</jok>: <jov>'java.util.Calendar'</jov>
-		|			}, 
-		|			<jok>addresses</jok>: {
-		|				<jok>type</jok>: <jov>'array'</jov>, 
-		|				<jok>description</jok>: <jov>'java.util.LinkedList&lt;org.apache.juneau.sample.Address&gt;'</jov>, 
-		|				<jok>items</jok>: {
-		|					<jok>type</jok>: <jov>'object'</jov>, 
-		|					<jok>description</jok>: <jov>'org.apache.juneau.sample.Address'</jov>, 
-		|					<jok>properties</jok>: {
-		|						<jok>street</jok>: {
-		|							<jok>type</jok>: <jov>'string'</jov>, 
-		|							<jok>description</jok>: <jov>'java.lang.String'</jov>
-		|						}, 
-		|						<jok>city</jok>: {
-		|							<jok>type</jok>: <jov>'string'</jov>, 
-		|							<jok>description</jok>: <jov>'java.lang.String'</jov>
-		|						}, 
-		|						<jok>state</jok>: {
-		|							<jok>type</jok>: <jov>'string'</jov>, 
-		|							<jok>description</jok>: <jov>'java.lang.String'</jov>
-		|						}, 
-		|						<jok>zip</jok>: {
-		|							<jok>type</jok>: <jov>'number'</jov>, 
-		|							<jok>description</jok>: <jov>'int'</jov>
-		|						}, 
-		|						<jok>isCurrent</jok>: {
-		|							<jok>type</jok>: <jov>'boolean'</jov>, 
-		|							<jok>description</jok>: <jov>'boolean'</jov>
-		|						}
-		|					}
-		|				}
-		|			}
-		|		}
-		|	}
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails.html
deleted file mode 100644
index 9a042b202..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'XML Details'}
-
-<div class='topic'>
-	<p>
-		Juneau supports converting arbitrary POJOs to and from XML using ultra-efficient serializers and parsers.
-		The XML serializer converts POJOs directly to XML without the need for intermediate DOM objects.
-		Likewise, the XML parser uses a STaX parser and creates POJOs directly without intermediate DOM objects. 
-	</p>
-	<p>
-		Unlike frameworks such as JAXB, Juneau does not require POJO classes to be annotated to produce and consume 
-		XML.
-		However, several XML annotations are provided for handling namespaces and fine-tuning the format of the XML produced.
-	</p>
-	<p>
-		The following example shows XML for a typical bean:
-	</p>
-	<h5 class='figure'>Sample Beans</h5>
-	<p class='bjava'>
-		|	<ja>@Bean</ja>(typeName=<js>"person"</js>)
-		|	<jk>public class</jk> Person {
-		|		
-		|		<jc>// Bean properties</jc>
-		|		<jk>public</jk> String <jf>name</jf>;
-		|		<ja>@Swap</ja>(TemporalCalendarSwap.IsoInstant.<jk>class</jk>) <jk>public</jk> Calendar <jf>birthDate</jf>;
-		|		<jk>public</jk> List&lt;Address&gt; <jf>addresses</jf>; 
-		|	
-		|		<jc>// Getters/setters omitted</jc>
-		|	}
-		|	
-		|	<ja>@Bean</ja>(typeName=<js>"address"</js>)
-		|	<jk>public class</jk> Address {
-		|
-		|		<jc>// Bean properties</jc>
-		|		<jk>public</jk> String <jf>street</jf>, <jf>city</jf>;
-		|		<jk>public</jk> StateEnum <jf>state</jf>;
-		|		<jk>public int</jk> <jf>zip</jf>;
-		|		<jk>public boolean</jk> <jf>isCurrent</jf>;
-		|
-		|		<jc>// Getters/setters omitted</jc>
-		|	}	
-	</p>
-	<h5 class='figure'>Sample Code</h5>
-	<p class='bjava'>
-		|	Person <jv>person</jv> = <jk>new</jk> Person()
-		|		.name(<js>"John Smith"</js>)
-		|		.birthDate(<js>"1946-08-12T00:00:00Z"</js>)
-		|		.addresses(
-		|			<jk>new</jk> Address() 
-		|				.street(<js>"100 Main Street"</js>)
-		|				.city(<js>"Anywhereville"</js>)
-		|				.state(<jsf>NY</jsf>)
-		|				.zip(12345)
-		|				.isCurrent(<jk>true</jk>);
-		|		);
-	</p>
-	<h5 class='figure'>Normal XML:</h5>
-	<p class='bxml'>
-		|	<xt>&lt;person&gt;</xt>
-		|		<xt>&lt;name&gt;</xt>John Smith<xt>&lt;/name&gt;</xt>
-		|		<xt>&lt;birthDate&gt;</xt>1946-08-12T04:00:00Z<xt>&lt;/birthDate&gt;</xt>
-		|		<xt>&lt;addresses&gt;</xt>
-		|			<xt>&lt;address&gt;</xt>
-		|				<xt>&lt;street&gt;</xt>100 Main Street<xt>&lt;/street&gt;</xt>
-		|				<xt>&lt;city&gt;</xt>Anywhereville<xt>&lt;/city&gt;</xt>
-		|				<xt>&lt;state&gt;</xt>NY<xt>&lt;/state&gt;</xt>
-		|				<xt>&lt;zip&gt;</xt>12345<xt>&lt;/zip&gt;</xt>
-		|				<xt>&lt;isCurrent&gt;</xt>true<xt>&lt;/isCurrent&gt;</xt>
-		|			<xt>&lt;/address&gt;</xt>
-		|		<xt>&lt;/addresses&gt;</xt>
-		|	<xt>&lt;/person&gt;</xt>
-	</p>
-	<p>
-		Juneau produces JSON-equivalent XML, meaning any valid JSON document can be losslessly converted into an XML 
-		equivalent.
-		In fact, all of the Juneau serializers and parsers are built upon this JSON-equivalence.
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/01.jm.XmlMethodology.html b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/01.jm.XmlMethodology.html
deleted file mode 100644
index f05d96ca3..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/01.jm.XmlMethodology.html
+++ /dev/null
@@ -1,419 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'XML Methodology'}
-
-<div class='topic'>
-	<p>
-		The following examples show how different data types are represented in XML.
-		They mirror how the data structures are represented in JSON.
-	
-	<h5 class='topic'>Simple types</h5>
-	<p>
-		The representation of loose (not a direct bean property value) simple types are shown below:
-	</p>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>XML</th>
-		</tr>
-		<tr>
-			<td>string</td>
-			<td class='code'><js>'foo'</js></td>
-			<td class='code'><xt>&lt;string&gt;</xt>foo<xt>&lt;/string&gt;</xt></td>
-		</tr>
-		<tr>
-			<td>boolean</td>
-			<td class='code'><jk>true</jk></td>
-			<td class='code'><xt>&lt;boolean&gt;</xt>true<xt>&lt;/boolean&gt;</xt></td>
-		</tr>
-		<tr>
-			<td>integer</td>
-			<td class='code'>123</td>
-			<td class='code'><xt>&lt;number&gt;</xt>123<xt>&lt;/number&gt;</xt></td>
-		</tr>
-		<tr>
-			<td>float</td>
-			<td class='code'>1.23</td>
-			<td class='code'><xt>&lt;number&gt;</xt>1.23<xt>&lt;/number&gt;</xt></td>
-		</tr>
-		<tr>
-			<td>null</td>
-			<td class='code'><jk>null</jk></td>
-			<td class='code'><xt>&lt;null/&gt;</xt></td>
-		</tr>
-	</table>
-	
-	<h5 class='topic'>Maps</h5>
-	<p>
-		Loose maps and beans use the element <xt>&lt;object&gt;</xt> for encapsulation.
-	</p>
-	<p>
-		<xa>_type</xa> attributes are added to bean properties or map entries if the type cannot be inferred 
-		through reflection (e.g. an <c>Object</c> or superclass/interface value type).
-	</p>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>XML</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	Map&lt;String,String&gt;
-			</td>
-			<td class='code'>
-				|	{
-				|		k1: <js>'v1'</js>
-				|		k2: <jk>null</jk>
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;k1&gt;<xv>v1</xv>&lt;/k1&gt;
-				|		&lt;k2 <xa>_type</xa>=<xs>'null'</xs>/&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	Map&lt;String,Number&gt;
-			</td>
-			<td class='code'>
-				|	{
-				|		k1: 123,
-				|		k2: 1.23,
-				|		k3: <jk>null</jk>
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;k1&gt;<xv>123</xv>&lt;/k1&gt;
-				|		&lt;k2&gt;<xv>1.23</xv>&lt;/k2&gt;
-				|		&lt;k3 <xa>_type</xa>=<xs>'null'</xs>/&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	Map&lt;String,Object&gt;
-			</td>
-			<td class='code'>
-				|	{
-				|		k1: <js>'v1'</js>
-				|		k2: 123,
-				|		k3: 1.23,
-				|		k4: <jk>true</jk>,
-				|		k5: <jk>null</jk>
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;k1&gt;<xv>v1</xv>&lt;/k1&gt;
-				|		&lt;k2 <xa>_type</xa>=<xs>'number'</xs>&gt;<xv>123</xv>&lt;/k2&gt;
-				|		&lt;k3 <xa>_type</xa>=<xs>'number'</xs>&gt;<xv>1.23</xv>&lt;/k3&gt;
-				|		&lt;k4 <xa>_type</xa>=<xs>'boolean'</xs>&gt;<xv>true</xv>&lt;/k4&gt;
-				|		&lt;k5 <xa>_type</xa>=<xs>'null'</xs>/&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-		</tr>
-	</table>
-
-	<h5 class='topic'>Arrays</h5>
-	<p>
-		Loose collections and arrays use the element <xt>&lt;array&gt;</xt> for encapsulation.
-	</p>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>XML</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	String[]
-			</td>
-			<td class='code'>
-				|	[
-				|		<js>'foo'</js>
-				|		<jk>null</jk>
-				|	]
-			</td>
-			<td class='code'><xt>
-				|	&lt;array&gt;
-				|		&lt;string&gt;<xv>foo</xv>&lt;/string&gt;
-				|		&lt;null/&gt;
-				|	&lt;/array&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	Number[]
-			</td>
-			<td class='code'>
-				|	[
-				|		123,
-				|		1.23,
-				|		<jk>null</jk>
-				|	]
-			</td>
-			<td class='code'><xt>
-				|	&lt;array&gt;
-				|		&lt;number&gt;<xv>123</xv>&lt;/number&gt;
-				|		&lt;number&gt;<xv>1.23</xv>&lt;/number&gt;
-				|		&lt;null/&gt;
-				|	&lt;/array&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	Object[]
-			</td>
-			<td class='code'>
-				|	[
-				|		<js>'foo'</js>,
-				|		123,
-				|		1.23,
-				|		<jk>true</jk>,
-				|		<jk>null</jk>
-				|	]
-			</td>
-			<td class='code'><xt>
-				|	&lt;array&gt;
-				|		&lt;string&gt;<xv>foo</xv>&lt;/string&gt;
-				|		&lt;number&gt;<xv>123</xv>&lt;/number&gt;
-				|		&lt;number&gt;<xv>1.23</xv>&lt;/number&gt;
-				|		&lt;boolean&gt;<xv>true</xv>&lt;/boolean&gt;
-				|		&lt;null/&gt;
-				|	&lt;/array&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	String[][]
-			</td>
-			<td class='code'>
-				|	[
-				|		[<js>'foo'</js>, <jk>null</jk>],
-				|		<jk>null</jk>,
-				|	]
-			</td>
-			<td class='code'><xt>
-				|	&lt;array&gt;
-				|		&lt;array&gt;
-				|			&lt;string&gt;<xv>foo</xv>&lt;/string&gt;
-				|			&lt;null/&gt;
-				|		&lt;/array&gt;
-				|		&lt;null/&gt;
-				|	&lt;/array&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<jk>int</jk>[]
-			</td>
-			<td class='code'>
-				|	[
-				|		123
-				|	]
-			</td>
-			<td class='code'><xt>
-				|	&lt;array&gt;
-				|		&lt;number&gt;<xv>123</xv>&lt;/number&gt;
-				|	&lt;/array&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<jk>boolean</jk>[]
-			</td>
-			<td class='code'>
-				|	[
-				|		<jk>true</jk>
-				|	]
-			</td>
-			<td class='code'><xt>
-				|	&lt;array&gt;
-				|		&lt;boolean&gt;<xv>true</xv>&lt;/boolean&gt;
-				|	&lt;/array&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	List&lt;String&gt;
-			</td>
-			<td class='code'>
-				|	[
-				|		<js>'foo'</js>
-				|		<jk>null</jk>
-				|	]
-			</td>
-			<td class='code'><xt>
-				|	&lt;array&gt;
-				|		&lt;string&gt;<xv>foo</xv>&lt;/string&gt;
-				|		&lt;null/&gt;
-				|	&lt;/array&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	List&lt;Number&gt;
-			</td>
-			<td class='code'>
-				|	[
-				|		123,
-				|		1.23,
-				|		<jk>null</jk>
-				|	]
-			</td>
-			<td class='code'><xt>
-				|	&lt;array&gt;
-				|		&lt;number&gt;<xv>123</xv>&lt;/number&gt;
-				|		&lt;number&gt;<xv>1.23</xv>&lt;/number&gt;
-				|		&lt;null/&gt;
-				|	&lt;/array&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	List&lt;Object&gt;
-			</td>
-			<td class='code'>
-				|	[
-				|		<js>'foo'</js>,
-				|		123,
-				|		1.23,
-				|		<jk>true</jk>,
-				|		<jk>null</jk>
-				|	]
-			</td>
-			<td class='code'><xt>
-				|	&lt;array&gt;
-				|		&lt;string&gt;<xv>foo</xv>&lt;/string&gt;
-				|		&lt;number&gt;<xv>123</xv>&lt;/number&gt;
-				|		&lt;number&gt;<xv>1.23</xv>&lt;/number&gt;
-				|		&lt;boolean&gt;<xv>true</xv>&lt;/boolean&gt;
-				|		&lt;null/&gt;
-				|	&lt;/array&gt;
-			</xt></td>
-		</tr>
-	</table>
-	
-	<h5 class='topic'>Beans</h5>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>XML</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<jk>class</jk> MyBean {
-				|		<jk>public</jk> String <jf>a</jf>;
-				|		<jk>public</jk> <jk>int</jk> <jf>b</jf>;
-				|		<jk>public</jk> Object <jf>c</jf>;  <jc>// String value</jc>
-				|		<jk>public</jk> Object <jf>d</jf>;  <jc>// Integer value</jc>  	
-				|		<jk>public</jk> MyBean2 <jf>e</jf>;  
-				|		<jk>public</jk> String[] <jf>f</jf>;  
-				|	 	<jk>public</jk> <jk>int</jk>[] <jf>g</jf>;  	
-				|	}
-				|	<jk>class</jk> MyBean2 {
-				|		String <jf>h</jf>;  
-				|	}
-			</td>
-			<td class='code'>
-				|	{
-				|		<jok>a</jok>: <jov>'foo'</jov>,
-				|		<jok>b</jok>: <jov>123</jov>,
-				|		<jok>c</jok>: <jov>'bar'</jov>,
-				|		<jok>d</jok>: <jov>456</jov>,
-				|		<jok>e</jok>: {
-				|			<jok>h</jok>: <jov>'baz'</jov>
-				|		}
-				|		<jok>f</jok>: [<jov>'qux'</jov>]
-				|		<jok>g</jok>: [<jov>789</jov>]
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;a&gt;<xv>foo</xv>&lt;/a&gt;
-				|		&lt;b&gt;<xv>123</xv>&lt;/b&gt;
-				|		&lt;c&gt;<xv>bar</xv>&lt;/c&gt;
-				|		&lt;d <xa>_type</xa>=<xs>'number'</xs>&gt;<xv>456</xv>&lt;/d&gt;
-				|		&lt;e&gt;
-				|			&lt;h&gt;<xv>baz</xv>&lt;/h&gt;
-				|		&lt;/e&gt;
-				|		&lt;f&gt;
-				|			&lt;string&gt;<xv>qux</xv>&lt;/string&gt;
-				|		&lt;/f&gt;
-				|		&lt;g&gt;
-				|			&lt;number&gt;<xv>789</xv>&lt;/number&gt;
-				|		&lt;/g&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-		</tr>
-	</table>
-	
-	<h5 class='topic'>Beans with Map properties</h5>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>XML</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<jk>class</jk> MyBean {
-				|		<jk>public</jk> Map&lt;String,String&gt; <jf>a</jf>;
-				|		<jk>public</jk> Map&lt;String,Number&gt; <jf>b</jf>;
-				|		<jk>public</jk> Map&lt;String,Object&gt; <jf>c</jf>; 
-				|	}
-			</td>
-			<td class='code'>
-				|	{
-				|		<jok>a</jok>: {
-				|			<jok>k1</jok>: <jov>'foo'</jov>
-				|		},
-				|		<jok>b</jok>: {
-				|			<jok>k2</jok>: <jov>123</jov>
-				|		},
-				|		<jok>c</jok>: {
-				|			<jok>k3</jok>: <jov>'bar'</jov>,
-				|			<jok>k4</jok>: <jov>456</jov>,
-				|			<jok>k5</jok>: <jov>true</jov>,
-				|			<jok>k6</jok>: <jov>null</jov>
-				|		}
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;a&gt;
-				|			&lt;k1&gt;<xv>foo</xv>&lt;/k1&gt;
-				|		&lt;/a&gt;
-				|		&lt;b&gt;
-				|			&lt;k2&gt;<xv>123</xv>&lt;/k2&gt;
-				|		&lt;/b&gt;
-				|		&lt;c&gt;
-				|			&lt;k3&gt;<xv>bar</xv>&lt;/k3&gt;
-				|			&lt;k4 <xa>_type</xa>=<xs>'number'</xs>&gt;<xv>456</xv>&lt;/k4&gt;
-				|			&lt;k5 <xa>_type</xa>=<xs>'boolean'</xs>&gt;<xv>true</xv>&lt;/k5&gt;
-				|			&lt;k6 <xa>_type</xa>=<xs>'null'</xs>/&gt;
-				|		&lt;/c&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-		</tr>
-	</table>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/02.jm.XmlSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/02.jm.XmlSerializers.html
deleted file mode 100644
index ffdcaff39..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/02.jm.XmlSerializers.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'XML Serializers', updated:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.xml.XmlSerializer} class is used to serialize POJOs into XML.
-	</p>	
-	<p>
-		The {@link oaj.xml.XmlDocSerializer} class is the same, but serializes a <xt>&lt;?xml?&gt;</xt> header 
-		at the top of the file.
-	</p>
-	<p>
-		The class hierarchy for the builder of this serializer is:
-	</p>
-	<ul class='javatree'>
-		<li class='jac'>{@link oaj.Context.Builder}
-			<ul>
-				<li class='jac'>{@link oaj.BeanContextable.Builder}
-					<ul>
-						<li class='jac'>{@link oaj.BeanTraverseContext.Builder}
-							<ul>
-								<li class='jac'>{@link oaj.serializer.Serializer.Builder}
-									<ul>
-										<li class='jac'>{@link oaj.serializer.WriterSerializer.Builder}
-											<ul>
-												<li class='jc'>{@link oaj.xml.XmlSerializer.Builder}
-											</ul>
-										</li>
-									</ul>
-								</li>
-							</ul>
-						</li>
-					</ul>
-				</li>
-			</ul>
-		</li>
-	</ul>
-	<p>
-		Refer to the builder javadocs for configurable settings.
-	</p>
-	<p>
-		The following pre-configured serializers are provided for convenience:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.xml.XmlSerializer}
-			<ul class='javatreec'>
-				<li class='jf'>{@link oaj.xml.XmlSerializer#DEFAULT DEFAULT}
-				<li class='jf'>{@link oaj.xml.XmlSerializer#DEFAULT_JUNEAU_NAMESPACE DEFAULT_JUNEAU_NAMESPACE}
-				<li class='jf'>{@link oaj.xml.XmlSerializer#DEFAULT_NS DEFAULT_NS}
-				<li class='jf'>{@link oaj.xml.XmlSerializer#DEFAULT_NS_SQ DEFAULT_NS_SQ}
-				<li class='jf'>{@link oaj.xml.XmlSerializer#DEFAULT_NS_SQ_READABLE DEFAULT_NS_SQ_READABLE}
-				<li class='jf'>{@link oaj.xml.XmlSerializer#DEFAULT_SQ DEFAULT_SQ}
-				<li class='jf'>{@link oaj.xml.XmlSerializer#DEFAULT_SQ_READABLE DEFAULT_SQ_READABLE}
-				<li class='jf'>{@link oaj.xml.XmlSerializer#DEFAULT_XS_NAMESPACE DEFAULT_XS_NAMESPACE}				
-			</ul>
-		</li>
-	</ul>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/03.jm.XmlParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/03.jm.XmlParsers.html
deleted file mode 100644
index 8ceb8124b..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/03.jm.XmlParsers.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'XML Parsers', updated:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.xml.XmlParser} class is used to parse XML into POJOs.
-	</p>	
-	<p>
-		The class hierarchy for the builder of this parser is:
-	</p>
-	<ul class='javatree'>
-		<li class='jac'>{@link oaj.Context.Builder}
-			<ul>
-				<li class='jac'>{@link oaj.BeanContextable.Builder}
-					<ul>
-						<li class='jac'>{@link oaj.parser.Parser.Builder}
-							<ul>
-								<li class='jac'>{@link oaj.parser.ReaderParser.Builder}
-									<ul>
-										<li class='jc'>{@link oaj.xml.XmlParser.Builder}
-									</ul>
-								</li>
-							</ul>
-						</li>
-					</ul>
-				</li>
-			</ul>
-		</li>
-	</ul>
-	<p>
-		Refer to the builder javadocs for configurable settings.
-	</p>
-	<p>
-		The following pre-configured parsers are provided for convenience:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.xml.XmlParser}
-			<ul class='javatreec'>
-				<li class='jf'>{@link oaj.xml.XmlParser#DEFAULT DEFAULT}
-			</ul>
-		</li>
-	</ul>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/04.jm.XmlBeanTypeNameAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/04.jm.XmlBeanTypeNameAnnotation.html
deleted file mode 100644
index d57913edf..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/04.jm.XmlBeanTypeNameAnnotation.html
+++ /dev/null
@@ -1,496 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'@Bean(typeName) Annotation'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.annotation.Bean#typeName() @Bean(typeName)} annotation can be used to 
-		override the Juneau default name on bean elements. 
-		Types names serve two distinct purposes:
-	</p>
-	<ol>
-		<li>To override the element name.
-		<li>To serve as a class identifier so that the bean class can be inferred during parsing if it
-			cannot automatically be inferred through reflection.
-	</ol>
-	
-	<h5 class='figure'>Example</h5>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>Without annotation</th>
-			<th>With annotation</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)
-				|	<jk>class</jk> MyBean {
-				|		<jk>public</jk> String <jf>a</jf>;
-				|		<jk>public int</jk> <jf>b</jf>;
-				|	}	
-			</td>
-			<td class='code'>
-				|	{
-				|		a: <js>'foo'</js>,
-				|		b: 123
-				|	}
-			</td>
-			<td class='code'><xt>
-				|&lt;object&gt;
-				|	&lt;a&gt;<xv>foo</xv>&lt;/id&gt;
-				|	&lt;b&gt;<xv>123</xv>&lt;/name&gt;
-				|&lt;/object&gt;
-			</xt></td>
-			<td class='code'><xt>
-				|	&lt;X&gt;
-				|		&lt;a&gt;<xv>foo</xv>&lt;/id&gt;
-				|		&lt;b&gt;<xv>123</xv>&lt;/name&gt;
-				|	&lt;/X&gt;
-			</xt></td>
-		</tr>
-	</table>
-	<p>
-		On bean properties, a <xa>_type</xa> attribute will be added if a type name is present and the bean 
-		class cannot be inferred through reflection.
-	</p>
-	<p>
-		In the following example, a type attribute is used on property 'b' but not property 'a' since
-		'b' is of type <c>Object</c> and therefore the bean class cannot be inferred.
-	</p>
-	
-	<h5 class='figure'>Example</h5>
-	<table class='styled w800'>
-		<tr>
-			<th>Java</th>
-			<th>Without annotation</th>
-			<th>With annotation</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<jk>class</jk> MyBean {
-				|		<jk>public</jk> BeanX <jf>a</jf> = <jk>new</jk> BeanX();
-				|		<jk>public</jk> Object <jf>b</jf> = <jk>new</jk> BeanX();
-				|	}
-				|	
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)
-				|	<jk>class</jk> BeanX {
-				|		<jk>public</jk> String <jf>fx</jf> = <js>"foo"</js>;
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;a&gt;
-				|			&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
-				|		&lt;/a&gt;
-				|		&lt;b&gt;
-				|			&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
-				|		&lt;/b&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;a&gt;
-				|			&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
-				|		&lt;/a&gt;
-				|		&lt;b <xa>_type</xa>=<xs>'X'</xs>&gt;
-				|			&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
-				|		&lt;/b&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-		</tr>
-	</table>
-	<div class='info'>
-		<c>string</c>, <c>number</c>, <c>boolean</c>, <c>object</c>, 
-		<c>array</c>, and <c>null</c> are reserved keywords that cannot be used as type names.
-	</div>
-	<p>
-		Beans with type names are often used in conjunction with the 
-		{@link oaj.annotation.Bean#dictionary() @Bean(dictionary)} and 
-		{@link oaj.annotation.Beanp#dictionary() @Beanp(dictionary)} 
-		annotations so that the beans can be resolved at parse time.  
-		These annotations are not necessary during serialization, but are needed during parsing in order to 
-		resolve the bean types.
-	</p>
-	<p>
-		The following examples show how type names are used under various circumstances.  
-	</p>
-	<p>
-		Pay special attention to when <xa>_type</xa> attributes are and are not used.
-	</p>
-	
-	<h5 class='figure'>Examples</h5>
-	<table class='styled w800'>
-		<tr>
-			<th>Java</th>
-			<th>XML</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(dictionary={BeanX.<jk>class</jk>})
-				|	<jk>class</jk> BeanWithArrayPropertiesWithTypeNames {
-				|		<jk>public</jk> BeanX[] <jf>b1</jf> = <jk>new</jk> BeanX[]{ 
-				|			<jk>new</jk> BeanX() 
-				|		};
-				|		<jk>public</jk> Object[] <jf>b2</jf> = <jk>new</jk> BeanX[]{ 
-				|			<jk>new</jk> BeanX() 
-				|		};
-				|		<jk>public</jk> Object[] <jf>b3</jf> = <jk>new</jk> Object[]{ 
-				|			<jk>new</jk> BeanX() 
-				|		};
-				|	}
-			</td>				
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;b1&gt;
-				|			&lt;X&gt;
-				|				&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
-				|			&lt;/X&gt;
-				|		&lt;/b1&gt;
-				|		&lt;b2&gt;
-				|			&lt;X&gt;
-				|				&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
-				|			&lt;/X&gt;
-				|		&lt;/b2&gt;
-				|		&lt;b3&gt;
-				|			&lt;X&gt;
-				|				&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
-				|			&lt;/X&gt;
-				|		&lt;/b3&gt;
-				|	&lt;/object&gt;
-			</xt></td>				
-		</tr>				
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(dictionary={BeanX.<jk>class</jk>})
-				|	<jk>class</jk> BeanWith2dArrayPropertiesWithTypeNames {
-				|		<jk>public</jk> BeanX[][] <jf>b1</jf> = <jk>new</jk> BeanX[][]{{
-				|			<jk>new</jk> BeanX()
-				|		}};
-				|		<jk>public</jk> Object[][] <jf>b2</jf> = <jk>new</jk> BeanX[][]{{
-				|			<jk>new</jk> BeanX()
-				|		}};
-				|		<jk>public</jk> Object[][] <jf>b3</jf> = <jk>new</jk> Object[][]{{
-				|			<jk>new</jk> BeanX()
-				|		}};
-				|	}
-			</td>				
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;b1&gt;
-				|			&lt;array&gt;
-				|				&lt;X&gt;
-				|					&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
-				|				&lt;/X&gt;
-				|			&lt;/array&gt;
-				|		&lt;/b1&gt;
-				|		&lt;b2&gt;
-				|			&lt;array&gt;
-				|				&lt;X&gt;
-				|					&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
-				|				&lt;/X&gt;
-				|			&lt;/array&gt;
-				|		&lt;/b2&gt;
-				|		&lt;b3&gt;
-				|			&lt;array&gt;
-				|				&lt;X&gt;
-				|					&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
-				|				&lt;/X&gt;
-				|			&lt;/array&gt;
-				|		&lt;/b3&gt;
-				|	&lt;/object&gt;
-			</xt></td>				
-		</tr>		
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(dictionary={BeanX.<jk>class</jk>})
-				|	<jk>class</jk> BeanWithMapPropertiesWithTypeNames {
-				|		<jk>public</jk> Map&lt;String,BeanX&gt; <jf>b1</jf> = <jk>new</jk> HashMap&lt;&gt;() {{ 
-				|			put(<js>"k1"</js>, <jk>new</jk> BeanX()); 
-				|		}};
-				|		<jk>public</jk> Map&lt;String,Object&gt; <jf>b2</jf> = <jk>new</jk> HashMap&lt;&gt;() {{
-				|			put(<js>"k2"</js>, <jk>new</jk> BeanX());
-				|		}}
-				|	}
-			</td>				
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;b1&gt;
-				|			&lt;k1&gt;
-				|				&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
-				|			&lt;/k1&gt;
-				|		&lt;/b1&gt;
-				|		&lt;b2&gt;
-				|			&lt;k2 <xa>_type</xa>=<xs>'X'</xs>&gt;
-				|				&lt;fx&gt;<xv>foo</xv>&lt;/fx&gt;
-				|			&lt;/k2&gt;
-				|		&lt;/b2&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-		</tr>
-	</table>
-	<p>
-		Bean type names are also used for resolution when abstract fields are used.
-		The following examples show how they are used in a variety of circumstances.
-	</p>
-	<table class='styled w800'>
-		<tr>
-			<th>Java</th>
-			<th>XML</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(dictionary={A.<jk>class</jk>})
-				|	<jk>class</jk> BeanWithAbstractFields {
-				|		<jk>public</jk> A <jf>a</jf> = <jk>new</jk> A();
-				|		<jk>public</jk> IA <jf>ia</jf> = <jk>new</jk> A();
-				|		<jk>public</jk> AA <jf>aa</jf> = <jk>new</jk> A();
-				|		<jk>public</jk> Object <jf>o</jf> = <jk>new</jk> A();
-				|	}
-				|	
-				|	<jk>interface</jk> IA {}
-				|	
-				|	<jk>abstract class</jk> AA <jk>implements</jk> IA {}
-				|
-				|	<ja>@Bean</ja>(typeName=<js>"A"</js>)
-				|	<jk>class</jk> A <jk>extends</jk> AA {
-				|		<jk>public</jk> String <jf>fa</jf> = <js>"foo"</js>;
-				|	}
-			</td>				
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;a&gt;
-				|			&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|		&lt;/a&gt;
-				|		&lt;ia <xa>_type</xa>=<xs>'A'</xs>&gt;
-				|			&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|		&lt;/ia&gt;
-				|		&lt;aa <xa>_type</xa>=<xs>'A'</xs>&gt;
-				|			&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|		&lt;/aa&gt;
-				|		&lt;o <xa>_type</xa>=<xs>'A'</xs>&gt;
-				|			&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|		&lt;/o&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(dictionary={A.<jk>class</jk>})
-				|	<jk>class</jk> BeanWithAbstractArrayFields {
-				|		<jk>public</jk> A[] <jf>a</jf> = <jk>new</jk> A[]{<jk>new</jk> A()};
-				|		<jk>public</jk> IA[] <jf>ia1</jf> = <jk>new</jk> A[]{<jk>new</jk> A()};
-				|		<jk>public</jk> IA[] <jf>ia2</jf> = <jk>new</jk> IA[]{<jk>new</jk> A()};
-				|		<jk>public</jk> AA[] <jf>aa1</jf> = <jk>new</jk> A[]{<jk>new</jk> A()};
-				|		<jk>public</jk> AA[] <jf>aa2</jf> = <jk>new</jk> AA[]{<jk>new</jk> A()};
-				|		<jk>public</jk> Object[] <jf>o1</jf> = <jk>new</jk> A[]{<jk>new</jk> A()};
-				|		<jk>public</jk> Object[] <jf>o2</jf> = <jk>new</jk> Object[]{<jk>new</jk> A()};
-				|	}
-			</td>				
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;a&gt;
-				|			&lt;A&gt;
-				|				&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|			&lt;/A&gt;
-				|		&lt;/a&gt;
-				|		&lt;ia1&gt;
-				|			&lt;A&gt;
-				|				&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|			&lt;/A&gt;
-				|		&lt;/ia1&gt;
-				|		&lt;ia2&gt;
-				|			&lt;A&gt;
-				|				&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|			&lt;/A&gt;
-				|		&lt;/ia2&gt;
-				|		&lt;aa1&gt;
-				|			&lt;A&gt;
-				|				&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|			&lt;/A&gt;
-				|		&lt;/aa1&gt;
-				|		&lt;aa2&gt;
-				|			&lt;A&gt;
-				|				&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|			&lt;/A&gt;
-				|		&lt;/aa2&gt;
-				|		&lt;o1&gt;
-				|			&lt;A&gt;
-				|				&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|			&lt;/A&gt;
-				|		&lt;/o1&gt;
-				|		&lt;o2&gt;
-				|			&lt;A&gt;
-				|				&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|			&lt;/A&gt;
-				|		&lt;/o2&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(dictionary={A.<jk>class</jk>})
-				|	<jk>class</jk> BeanWithAbstractMapFields {
-				|		<jk>public</jk> Map&lt;String,A&gt; <jf>a</jf> = <jk>new</jk> HashMap&lt;&gt;() {{
-				|			put(<js>"k1"</js>, <jk>new</jk> A());
-				|		}};
-				|		<jk>public</jk> Map&lt;String,AA&gt; <jf>b</jf> = <jk>new</jk> HashMap&lt;&gt;() {{
-				|			put(<js>"k2"</js>, <jk>new</jk> A());
-				|		}};
-				|		<jk>public</jk> Map&lt;String,Object&gt; <jf>c</jf> = <jk>new</jk> HashMap&lt;&gt;() {{
-				|			put(<js>"k3"</js>, <jk>new</jk> A());
-				|		}};
-				|	}
-			</td>				
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;a&gt;
-				|			&lt;k1&gt;
-				|				&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|			&lt;/k1&gt;
-				|		&lt;/a&gt;
-				|		&lt;b&gt;
-				|			&lt;k2 <xa>_type</xa>=<xs>'A'</xs>&gt;
-				|				&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|			&lt;/k2&gt;
-				|		&lt;/b&gt;
-				|		&lt;c&gt;
-				|			&lt;k3 <xa>_type</xa>=<xs>'A'</xs>&gt;
-				|				&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|			&lt;/k3&gt;
-				|		&lt;/c&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(dictionary={A.<jk>class</jk>})
-				|	<jk>class</jk> BeanWithAbstractMapArrayFields {
-				|		<jk>public</jk> Map&lt;String,A[]&gt; <jf>a</jf> = <jk>new</jk> LinkedHashMap&lt;&gt;() {{
-				|			put(<js>"a1"</js>, <jk>new</jk> A[]{<jk>new</jk> A()});
-				|		}};
-				|		<jk>public</jk> Map&lt;String,IA[]&gt; <jf>ia</jf> = <jk>new</jk> LinkedHashMap&lt;&gt;() {{
-				|			put(<js>"ia1"</js>, <jk>new</jk> A[]{<jk>new</jk> A()});
-				|			put(<js>"ia2"</js>, <jk>new</jk> IA[]{<jk>new</jk> A()});
-				|		}};
-				|		<jk>public</jk> Map&lt;String,AA[]&gt; <jf>aa</jf> = <jk>new</jk> LinkedHashMap&lt;&gt;() {{
-				|			put(<js>"aa1"</js>, <jk>new</jk> A[]{<jk>new</jk> A()});
-				|			put(<js>"aa2"</js>, <jk>new</jk> AA[]{<jk>new</jk> A()});
-				|		}};
-				|		<jk>public</jk> Map&lt;String,Object[]&gt; <jf>o</jf> = <jk>new</jk> LinkedHashMap&lt;&gt;() {{
-				|			put(<js>"o1"</js>, <jk>new</jk> A[]{<jk>new</jk> A()});
-				|			put(<js>"o2"</js>, <jk>new</jk> AA[]{<jk>new</jk> A()});
-				|		}};
-				|	}
-			</td>				
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;a&gt;
-				|			&lt;a1&gt;
-				|				&lt;A&gt;
-				|					&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|				&lt;/A&gt;
-				|			&lt;/a1&gt;
-				|		&lt;/a&gt;
-				|		&lt;ia&gt;
-				|			&lt;ia1&gt;
-				|				&lt;A&gt;
-				|					&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|				&lt;/A&gt;
-				|			&lt;/ia1&gt;
-				|			&lt;ia2&gt;
-				|				&lt;A&gt;
-				|					&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|				&lt;/A&gt;
-				|			&lt;/ia2&gt;
-				|		&lt;/ia&gt;
-				|		&lt;aa&gt;
-				|			&lt;aa1&gt;
-				|				&lt;A&gt;
-				|					&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|				&lt;/A&gt;
-				|			&lt;/aa1&gt;
-				|			&lt;aa2&gt;
-				|				&lt;A&gt;
-				|					&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|				&lt;/A&gt;
-				|			&lt;/aa2&gt;
-				|		&lt;/aa&gt;
-				|		&lt;o&gt;
-				|			&lt;o1&gt;
-				|				&lt;A&gt;
-				|					&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|				&lt;/A&gt;
-				|			&lt;/o1&gt;
-				|			&lt;o2&gt;
-				|				&lt;A&gt;
-				|					&lt;fa&gt;<xv>foo</xv>&lt;/fa&gt;
-				|				&lt;/A&gt;
-				|			&lt;/o2&gt;
-				|		&lt;/o&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-		</tr>
-	</table>
-	<p>
-		On a side note, characters that cannot be represented in XML 1.0 are encoded using a simple encoding.
-		Note in the examples below, some characters such as <js>'\n'</js>, <js>'\t</js>', and <js>'\r'</js>
-		can be represented as XML entities when used in text but not in element names.  Other characters such as
-		<js>'\b'</js> and <js>'\f'</js> cannot be encoded in XML 1.0 at all without inventing our own notation.
-		Whitespace characters in element names are encoded as well as whitespace end characters in text.
-	</p>
-	<table class='styled w800'>
-		<tr>
-			<th>Java</th>
-			<th>XML</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<jk>class</jk> BeanWithSpecialCharacters {
-				|		<jk>public</jk> String <jf>a</jf> = <js>"  \b\f\n\t\r  "</js>;
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;a&gt;<xv>_x0020_ _x0008__x000C_&amp;#x000a;&amp;#x0009;&amp;#x000d; _x0020_</xv>&lt;/a&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"  \b\f\n\t\r  "</js>)
-				|	<jk>class</jk> BeanWithNamesWithSpecialCharacters {
-				|		<ja>@Beanp</ja>(name=<js>"  \b\f\n\t\r  "</js>)
-				|		<jk>public</jk> String <jf>a</jf> = <js>"  \b\f\n\t\r  "</js>;
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;_x0020__x0020__x0008__x000C__x000A__x0009__x000D__x0020__x0020_&gt;
-				|		&lt;_x0020__x0020__x0008__x000C__x000A__x0009__x000D__x0020__x0020_&gt;
-				|			<xv>_x0020_ _x0008__x000C_&amp;#x000a;&amp;#x0009;&amp;#x000d; _x0020_</xv>
-				|		&lt;/_x0020__x0020__x0008__x000C__x000A__x0009__x000D__x0020__x0020_&gt;
-				|	&lt;/_x0020__x0020__x0008__x000C__x000A__x0009__x000D__x0020__x0020_&gt;
-			</xt></td>
-		</tr>
-	</table>
-	<p>
-		While it's true that these characters CAN be represented in XML 1.1, it's impossible to parse XML 1.1 
-		text in Java without the XML containing an XML declaration.
-		Unfortunately, this, and the uselessness of the 
-		{@link javax.xml.stream.XMLInputFactory#IS_REPLACING_ENTITY_REFERENCES} setting in Java
-		forced us to make some hard design decisions that may not be the most elegant.
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/05.jm.XmlChildNameAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/05.jm.XmlChildNameAnnotation.html
deleted file mode 100644
index 64e172851..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/05.jm.XmlChildNameAnnotation.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'@Xml(childName) Annotation'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.xml.annotation.Xml#childName() @Xml(childName)} annotation can be used to 
-		specify the name of XML child elements for bean properties of type collection or array.
-	</p>
-	
-	<h5 class='figure'>Example</h5>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>Without annotation</th>
-			<th>With annotation</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(childName=<js>"X"</js>)
-				|		<jk>public</jk> String[] <jf>a</jf>;
-				|		<ja>@Xml</ja>(childName=<js>"Y"</js>)
-				|		<jk>public int</jk>[] <jf>b</jf>;
-				|	}
-			</td>
-			<td class='code'>
-				|	{
-				|		a: [<js>'foo'</js>,<js>'bar'</js>],
-				|		b: [123,456]
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;a&gt;
-				|			&lt;string&gt;<xv>foo</xv>&lt;/string&gt;
-				|			&lt;string&gt;<xv>bar</xv>&lt;/string&gt;
-				|		&lt;/a&gt;
-				|		&lt;b&gt;
-				|			&lt;number&gt;<xv>123</xv>&lt;/number&gt;
-				|			&lt;number&gt;<xv>456</xv>&lt;/number&gt;
-				|		&lt;/b&gt;
-				|	&lt;/object&gt;
-		</xt></td>
-		<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;a&gt;
-				|			&lt;X&gt;<xv>foo</xv>&lt;/X&gt;
-				|			&lt;X&gt;<xv>bar</xv>&lt;/X&gt;
-				|		&lt;/a&gt;
-				|		&lt;b&gt;
-				|			&lt;Y&gt;<xv>123</xv>&lt;/Y&gt;
-				|			&lt;Y&gt;<xv>456</xv>&lt;/Y&gt;
-				|		&lt;/b&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(childName=<js>"child"</js>)
-				|		<jk>public int</jk>[] <jf>a</jf>;
-				|	}
-			</td>
-			<td class='code'>
-				|	{
-				|		a: [123,456]
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;a&gt;
-				|			&lt;string&gt;<xv>foo</xv>&lt;/string&gt;
-				|			&lt;string&gt;<xv>bar</xv>&lt;/string&gt;
-				|		&lt;/a&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;a&gt;
-				|			&lt;child&gt;<xv>foo</xv>&lt;/child&gt;
-				|			&lt;child&gt;<xv>bar</xv>&lt;/child&gt;
-				|		&lt;/a&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-		</tr>
-	</table>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/06.jm.XmlFormatAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/06.jm.XmlFormatAnnotation.html
deleted file mode 100644
index 60ce06287..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/06.jm.XmlFormatAnnotation.html
+++ /dev/null
@@ -1,722 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'@Xml(format) Annotation'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.xml.annotation.Xml#format() @Xml(format)} annotation can be used to tweak 
-		the XML format of a POJO.
-		The value is set to an enum value of type {@link oaj.xml.annotation.XmlFormat}.
-		This annotation can be applied to both classes and bean properties.
-	</p>
-	<p>
-		The {@link oaj.xml.annotation.XmlFormat#ATTR} format can be applied to bean properties to 
-		serialize them as XML attributes instead of elements.
-		Note that this only supports properties of simple types (e.g. strings, numbers, booleans).
-	</p>
-	
-	<h5 class='figure'>Example</h5>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>Without annotation</th>
-			<th>With annotation</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>ATTR</jsf>)
-				|		<jk>public</jk> String <jf>a</jf>;
-				|	}
-			</td>
-			<td class='code'>
-				|	{
-				|		a: <js>'foo'</js>
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;a&gt;<xv>foo</xv>&lt;/a&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-			<td class='code'><xt>
-				|	&lt;object <xa>a</xa>=<xs>'foo'</xs>/&gt;
-			</xt></td>
-		</tr>
-	</table>
-	<p>
-		The {@link oaj.xml.annotation.XmlFormat#ATTRS} format can be applied to bean classes to 
-		force all bean properties to be serialized as XML attributes instead of child elements.
-	</p>
-	
-	<h5 class='figure'>Example</h5>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>Without annotation</th>
-			<th>With annotation</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Xml</ja>(format=XmlFormat.<jsf>ATTRS</jsf>)
-				|	<jk>class</jk> MyBean {
-				|		<jk>public</jk> String <jf>a</jf>;
-				|		<jk>public int</jk> <jf>b</jf>;
-				|	}
-			</td>
-			<td class='code'>
-				|	{
-				|		a: <js>'foo'</js>,
-				|		b: 123
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;a&gt;<xv>foo</xv>&lt;/a&gt;
-				|		&lt;b&gt;<xv>123</xv>&lt;/b&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-			<td class='code'><xt>
-				|	&lt;object <xa>a</xa>=<xs>'foo'</xs> <xa>b</xa>=<xs>'123'</xs>/&gt;
-			</xt></td>
-		</tr>
-	</table>
-	<p>
-		The {@link oaj.xml.annotation.XmlFormat#ELEMENT} format can be applied to bean properties 
-		to override the {@link oaj.xml.annotation.XmlFormat#ATTRS} format applied on the bean 
-		class.
-	</p>
-	
-	<h5 class='figure'>Example</h5>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>Without annotation</th>
-			<th>With annotation</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Xml</ja>(format=XmlFormat.<jsf>ATTRS</jsf>)
-				|	<jk>class</jk> MyBean {
-				|		<jk>public</jk> String <jf>a</jf>;
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>ELEMENT</jsf>)
-				|		<jk>public int</jk> <jf>b</jf>;
-				|	}
-			</td>
-			<td class='code'>
-				|	{
-				|		a: <js>'foo'</js>,
-				|		b: 123
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;a&gt;<xv>foo</xv>&lt;/a&gt;
-				|		&lt;b&gt;<xv>123</xv>&lt;/b&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-			<td class='code'><xt>
-				|	&lt;object <xa>a</xa>=<xs>'foo'</xs></xs>&gt;
-				|		&lt;b&gt;<xv>123</xv>&lt;/b&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-		</tr>
-	</table>
-	<p>
-		The {@link oaj.xml.annotation.XmlFormat#ATTRS} format can be applied to a single bean 
-		property of type <c>Map&lt;String,Object&gt;</c> to denote arbitrary XML attribute values on the 
-		element.
-		These can be mixed with other {@link oaj.xml.annotation.XmlFormat#ATTR} annotated 
-		properties, but there must not be an overlap in bean property names and map keys. 
-	</p>
-	
-	<h5 class='figure'>Example</h5>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>Without annotation</th>
-			<th>With annotation</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>ATTRS</jsf>)
-				|		<jk>public</jk> Map&lt;String,Object&gt; <jf>a</jf>;
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>ATTR</jsf>)
-				|		<jk>public int</jk> <jf>b</jf>;
-				|	}
-			</td>
-			<td class='code'>
-				|	{
-				|		<jok>a</jok>: {
-				|			<jok>k1</jok>: <jov>'foo'</jov>, 
-				|			<jok>k2</jok>: <jov>123</jov>, 
-				|		},
-				|		<jok>b</jok>: <jov>456</jov>
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;a&gt;
-				|			&lt;k1&gt;<xv>foo</xv>&lt;/k1&gt;
-				|			&lt;k2 <xa>_type</xa>=<xs>'number'</xs>&gt;<xv>123</xv>&lt;/k2&gt;
-				|		&lt;/a&gt;
-				|		&lt;b&gt;<xv>456</xv>&lt;/b&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-			<td class='code'><xt>
-				|	&lt;object <xa>k1</xa>=<xs>'foo'</xs> <xa>k2</xa>=<xs>'123'</xs> <xa>b</xa>=<xs>'456'</xs>/&gt;
-			</xt></td>
-		</tr>
-	</table>
-	<p>
-		The {@link oaj.xml.annotation.XmlFormat#COLLAPSED} format can be applied to bean properties
-		of type array/Collection.
-		This causes the child objects to be serialized directly inside the bean element.
-		This format must be used in conjunction with {@link oaj.xml.annotation.Xml#childName() @Xml(childName)}
-		to differentiate which collection the values came from if you plan on parsing the output back into beans.
-		Note that child names must not conflict with other property names.
-	</p>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>Without annotation</th>
-			<th>With annotation</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(childName=<js>"A"</js>,format=XmlFormat.<jsf>COLLAPSED</jsf>)
-				|		<jk>public</jk> String[] <jf>a</jf>;
-				|		<ja>@Xml</ja>(childName=<js>"B"</js>,format=XmlFormat.<jsf>COLLAPSED</jsf>)
-				|		<jk>public int</jk>[] <jf>b</jf>;
-				|	}
-			</td>
-			<td class='code'>
-				|	{
-				|		a: [<js>'foo'</js>,<js>'bar'</js>],
-				|		b: [123,456]
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;a&gt;
-				|			&lt;string&gt;<xv>foo</xv>&lt;/string&gt;
-				|			&lt;string&gt;<xv>bar</xv>&lt;/string&gt;
-				|		&lt;/a&gt;
-				|		&lt;b&gt;
-				|			&lt;number&gt;<xv>123</xv>&lt;/number&gt;
-				|			&lt;number&gt;<xv>456</xv>&lt;/number&gt;
-				|		&lt;/b&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;A&gt;<xv>foo</xv>&lt;/A&gt;
-				|		&lt;A&gt;<xv>bar</xv>&lt;/A&gt;
-				|		&lt;B&gt;<xv>123</xv>&lt;/B&gt;
-				|		&lt;B&gt;<xv>456</xv>&lt;/B&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-		</tr>
-	</table>
-	<p>
-		The {@link oaj.xml.annotation.XmlFormat#ELEMENTS} format can be applied to a single bean 
-		property of either a simple type or array/Collection.
-		It allows free-form child elements to be formed.
-		All other properties on the bean MUST be serialized as attributes.
-	</p>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>With annotation</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>ATTR</jsf>)
-				|		<jk>public</jk> String <jf>a</jf>;
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>ELEMENTS</jsf>)
-				|		<jk>public</jk> String <jf>b</jf>;
-				|	}
-			</td>
-			<td class='code'>
-				|	{
-				|		a: <js>'foo'</js>,
-				|		b: <js>'bar'</js>
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;object <xa>a</xa>=<xs>'foo'</xs>&gt;
-				|		&lt;string&gt;<xv>bar</xv>&lt;/string&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>ATTR</jsf>)
-				|		<jk>public</jk> String <jf>a</jf>;
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>ELEMENTS</jsf>)
-				|		<jk>public</jk> Object[] <jf>b</jf>;
-				|	}
-			</td>
-			<td class='code'>
-				|	{
-				|		a: <js>'foo'</js>,
-				|		b: [
-				|			<js>'bar'</js>, 
-				|			<js>'baz'</js>, 
-				|			123, 
-				|			<jk>true</jk>,
-				|			<jk>null</jk>
-				|		]
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;object <xa>a</xa>=<xs>'foo'</xs>&gt;
-				|		&lt;string&gt;<xv>bar</xv>&lt;/string&gt;
-				|		&lt;string&gt;<xv>baz</xv>&lt;/string&gt;
-				|		&lt;number&gt;<xv>123</xv>&lt;/number&gt;
-				|		&lt;boolean&gt;<xv>true</xv>&lt;/boolean&gt;
-				|		&lt;null/&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-		</tr>
-	</table>
-	<p>
-		The {@link oaj.xml.annotation.XmlFormat#MIXED} format is similar to 
-		{@link oaj.xml.annotation.XmlFormat#ELEMENTS} except elements names on primitive types 
-		(string/number/boolean/null) are stripped from the output.
-		This format particularly useful when combined with bean dictionaries to produce mixed content.  
-		The bean dictionary isn't used during serialization, but it is needed during parsing to resolve bean 
-		types.
-	</p>
-	<p>
-		The {@link oaj.xml.annotation.XmlFormat#MIXED_PWS} format identical to 
-		{@link oaj.xml.annotation.XmlFormat#MIXED} except whitespace characters are preserved in 
-		the output.  
-	</p>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>Without annotations</th>
-			<th>With annotations</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED</jsf>)
-				|		<ja>@Beanp</ja>(dictionary={MyBeanX.<jk>class</jk>, MyBeanY.<jk>class</jk>})	
-				|		<jk>public</jk> Object[] <jf>a</jf>;
-				|	}
-				|	
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBeanX {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>ATTR</jsf>)
-				|		<jk>public</jk> String <jf>b</jf>;
-				|	}
-				|	
-				|	<ja>@Bean</ja>(typeName=<js>"Y"</js>)	
-				|	<jk>class</jk> MyBeanY {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>ATTR</jsf>)
-				|		<jk>public</jk> String <jf>c</jf>;
-				|	}
-			</td>
-			<td class='code'>
-				|	{
-				|		a: [
-				|			<js>'foo'</js>,
-				|			{ _type:<js>'X'</js>, b:<js>'bar'</js> }
-				|			<js>'baz'</js>,
-				|			{ _type:<js>'Y'</js>, b:<js>'qux'</js> },
-				|			<js>'quux'</js>
-				|		]
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;a&gt;
-				|			&lt;string&gt;<xv>foo</xv>&lt;/string&gt;
-				|			&lt;object&gt;
-				|				&lt;b&gt;<xv>bar</xv>&lt;/b&gt;
-				|			&lt;/object&gt;
-				|			&lt;string&gt;<xv>baz</xv>&lt;/string&gt;
-				|			&lt;object&gt;
-				|				&lt;b&gt;<xv>qux</xv>&lt;/b&gt;
-				|			&lt;/object&gt;
-				|			&lt;string&gt;<xv>quux</xv>&lt;/string&gt;
-				|		&lt;/a&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-			<td class='code'><xt>
-				|	&lt;object&gt;<xv>foo</xv>&lt;X <xa>b</xa>=<xs>'bar'</xs>/&gt;<xv>baz</xv>&lt;Y <xa>c</xa>=<xs>'qux'</xs>/&gt;<xv>quux</xv>&lt;/object&gt;
-			</xt></td>
-		</tr>
-	</table>
-	<p>
-		Whitespace (tabs and newlines) are not added to MIXED child nodes in readable-output mode. 
-		This helps ensures strings in the serialized output can be losslessly parsed back into their original 
-		forms when they contain whitespace characters.
-		If the {@link javax.xml.stream.XMLInputFactory#IS_REPLACING_ENTITY_REFERENCES} setting was not useless 
-		in Java, we could support lossless readable XML for MIXED content.  
-		But as of Java 8, it still does not work. 
-	</p>
-	<p>
-		XML suffers from other deficiencies as well that affect MIXED content.  
-		For example, <xt>&lt;X&gt;&lt;/X&gt;</xt> and <xt>&lt;X/&gt;</xt> are equivalent in XML and 
-		indistinguishable by the Java XML parsers.  
-		This makes it impossible to differentiate between an empty element and an element containing an empty 
-		string.  
-		This causes empty strings to get lost in translation. 
-		To alleviate this, we use the constructs <js>"_xE000_"</js> to represent an empty string, and 
-		<js>"_x0020_"</js> to represent leading and trailing spaces.
-	</p>
-	<p>
-		The examples below show how whitespace is handled under various circumstances:
-	</p>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>XML</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT</jsf>)
-				|		<jk>public</jk> String <jf>a</jf> = <jk>null</jk>;
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;X/&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT</jsf>)
-				|		<jk>public</jk> String <jf>a</jf> = <js>""</js>;
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;X&gt;<xv>_xE000_</xv>&lt;/X&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT</jsf>)
-				|		<jk>public</jk> String <jf>a</jf> = <js>" "</js>;
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;X&gt;<xv>_x0020_</xv>&lt;/X&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT</jsf>)
-				|		<jk>public</jk> String <jf>a</jf> = <js>"  "</js>;
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;X&gt;<xv>_x0020__x0020_</xv>&lt;/X&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT</jsf>)
-				|		<jk>public</jk> String <jf>a</jf> = <js>"  foobar  "</js>;
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;X&gt;<xv>_x0020_ foobar _x0020_</xv>&lt;/X&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT_PWS</jsf>)
-				|		<jk>public</jk> String <jf>a</jf> = <jk>null</jk>;
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;X/&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT_PWS</jsf>)
-				|		<jk>public</jk> String <jf>a</jf> = <js>""</js>;
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;X&gt;<xv>_xE000_</xv>&lt;/X&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT_PWS</jsf>)
-				|		<jk>public</jk> String <jf>a</jf> = <js>" "</js>;
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;X&gt;<xv> </xv>&lt;/X&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT_PWS</jsf>)
-				|		<jk>public</jk> String <jf>a</jf> = <js>"  "</js>;
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;X&gt;<xv>  </xv>&lt;/X&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT_PWS</jsf>)
-				|		<jk>public</jk> String <jf>a</jf> = <js>"  foobar  "</js>;
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;X&gt;<xv>  foobar  </xv>&lt;/X&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED</jsf>)
-				|		<jk>public</jk> String[] <jf>a</jf> = <jk>null</jk>;
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;X/&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED</jsf>)
-				|		<jk>public</jk> String[] <jf>a</jf> = {<js>""</js>};
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;X&gt;<xv>_xE000_</xv>&lt;/X&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED</jsf>)
-				|		<jk>public</jk> String[] <jf>a</jf> = {<js>" "</js>};
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;X&gt;<xv>_x0020_</xv>&lt;/X&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED</jsf>)
-				|		<jk>public</jk> String[] <jf>a</jf> = {<js>"  "</js>};
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;X&gt;<xv>_x0020__x0020_</xv>&lt;/X&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED</jsf>)
-				|		<jk>public</jk> String[] <jf>a</jf> = {<js>"  foobar  "</js>};
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;X&gt;<xv>_x0020_ foobar _x0020_</xv>&lt;/X&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED_PWS</jsf>)
-				|		<jk>public</jk> String[] <jf>a</jf> = <jk>null</jk>;
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;X/&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED_PWS</jsf>)
-				|		<jk>public</jk> String[] <jf>a</jf> = {<js>""</js>};
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;X&gt;<xv>_xE000_</xv>&lt;/X&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED_PWS</jsf>)
-				|		<jk>public</jk> String[] <jf>a</jf> = {<js>" "</js>};
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;X&gt;<xv> </xv>&lt;/X&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED_PWS</jsf>)
-				|		<jk>public</jk> String[] <jf>a</jf> = {<js>"  "</js>};
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;X&gt;<xv>  </xv>&lt;/X&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<ja>@Bean</ja>(typeName=<js>"X"</js>)	
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>MIXED_PWS</jsf>)
-				|		<jk>public</jk> String[] <jf>a</jf> = {<js>"  foobar  "</js>};
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;X&gt;<xv>  foobar  </xv>&lt;/X&gt;
-			</xt></td>
-		</tr>
-	</table>
-	
-	<p>
-		It should be noted that when using <jsf>MIXED</jsf>, you are not guaranteed to parse back the exact 
-		same content since side-by-side strings in the content will end up concatenated when parsed.
-	</p>
-	<p>
-		The {@link oaj.xml.annotation.XmlFormat#TEXT} format is similar to 
-		{@link oaj.xml.annotation.XmlFormat#MIXED} except it's meant for solitary objects that 
-		get serialized as simple child text nodes.
-		Any object that can be serialize to a <c>String</c> can be used.
-		The {@link oaj.xml.annotation.XmlFormat#TEXT_PWS} is the same except whitespace is 
-		preserved in the output.
-	</p>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>Without annotations</th>
-			<th>With annotations</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>TEXT</jsf>)
-				|		<jk>public</jk> String <jf>a</jf>;
-				|	}
-			</td>
-			<td class='code'>
-				|	{
-				|		a: <js>'foo'</js>
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;object&gt;
-				|		&lt;a&gt;<xv>foo</xv>&lt;/a&gt;
-				|	&lt;/object&gt;
-			</xt></td>
-			<td class='code'><xt>
-				|	&lt;object&gt;<xv>foo</xv>&lt;/object&gt;
-			</xt></td>
-		</tr>
-	</table>
-	<p>
-		The {@link oaj.xml.annotation.XmlFormat#XMLTEXT} format is similar to 
-		{@link oaj.xml.annotation.XmlFormat#TEXT} except it's meant for strings containing XML 
-		that should be serialized as-is to the document.
-		Any object that can be serialize to a <c>String</c> can be used.
-		During parsing, the element content gets parsed with the rest of the document and then re-serialized to 
-		XML before being set as the property value.  
-		This process may not be perfect (e.g. double quotes may be replaced by single quotes, etc...).
-	</p>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>With TEXT annotation</th>
-			<th>With XMLTEXT annotation</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<jk>class</jk> MyBean {
-				|		<ja>@Xml</ja>(format=XmlFormat.<jsf>XMLTEXT</jsf>)
-				|		<jk>public</jk> String <jf>a</jf>;
-				|	}
-			</td>
-			<td class='code'>
-				|	{
-				|		a: <js>'Some &lt;b&gt;XML&lt;/b&gt; text'</js>
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;object&gt;<xv>Some &amp;lt;b&amp;gt;XML&amp;lt;/b&amp;gt; text</xv>&lt;/object&gt;
-			</xt></td>
-			<td class='code'><xt>
-				|	&lt;object&gt;<xv>Some <xt>&lt;b&gt;</xt>XML<xt>&lt;/b&gt;</xt> text</xv>&lt;/object&gt;
-			</xt></td>
-		</tr>
-	</table>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/07.jm.XmlNamespaces.html b/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/07.jm.XmlNamespaces.html
deleted file mode 100644
index 0693e4bd8..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/27.jm.XmlDetails/07.jm.XmlNamespaces.html
+++ /dev/null
@@ -1,184 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'Namespaces'}
-
-<div class='topic'>
-	<p>
-		Let's go back to the example of our original <c>Person</c> bean class, but add some namespace annotations:
-	</p>
-	<h5 class='figure'>Sample Beans</h5>
-	<p class='bjava'>
-		|	<ja>@Xml</ja>(prefix=<js>"per"</js>)
-		|	<ja>@Bean</ja>(typeName=<js>"person"</js>)
-		|	<jk>public class</jk> Person {
-		|		
-		|		<jc>// Bean properties</jc>
-		|		<jk>public</jk> String <jf>name</jf>;
-		|		<ja>@Swap</ja>(TemporalCalendarSwap.IsoInstant.<jk>class</jk>) <jk>public</jk> Calendar <jf>birthDate</jf>;
-		|		<jk>public</jk> List&lt;Address&gt; <jf>addresses</jf>; 
-		|	
-		|		<jc>// Getters/setters omitted</jc>
-		|	}
-		|	
-		|	<ja>@Xml</ja>(prefix=<js>"addr"</js>)
-		|	<ja>@Bean</ja>(typeName=<js>"address"</js>)
-		|	<jk>public class</jk> Address {
-		|
-		|		<jc>// Bean properties</jc>
-		|		<ja>@Xml</ja>(prefix=<js>"mail"</js>) <jk>public</jk> String <jf>street</jf>, <jf>city</jf>;
-		|		<ja>@Xml</ja>(prefix=<js>"mail"</js>) <jk>public</jk> StateEnum <jf>state</jf>;
-		|		<ja>@Xml</ja>(prefix=<js>"mail"</js>) <jk>public int</jk> <jf>zip</jf>;
-		|		<jk>public boolean</jk> <jf>isCurrent</jf>;
-		|
-		|		<jc>// Getters/setters omitted</jc>
-		|	}	
-	</p>
-	<p>
-		The namespace URLs can either be defined as part of the {@link oaj.xml.annotation.Xml @Xml}
-		annotation, or can be defined at the package level with the {@link oaj.xml.annotation.XmlSchema @XmlSchema}
-		annotation.
-		Below shows it defined at the package level:
-	</p>
-	<h5 class='figure'>package-info.java</h5>
-	<p class='bjava'>
-		|	<ja>@XmlSchema</ja>(
-		|		prefix=<js>"ab"</js>,  <jc>// Default namespace</jc>
-		|		xmlNs={
-		|			<ja>@XmlNs</ja>(prefix=<js>"ab"</js>, namespaceURI=<js>"http://www.apache.org/addressBook/"</js>),
-		|			<ja>@XmlNs</ja>(prefix=<js>"per"</js>, namespaceURI=<js>"http://www.apache.org/person/"</js>),
-		|			<ja>@XmlNs</ja>(prefix=<js>"addr"</js>, namespaceURI=<js>"http://www.apache.org/address/"</js>),
-		|			<ja>@XmlNs</ja>(prefix=<js>"mail"</js>, namespaceURI=<js>"http://www.apache.org/mail/"</js>)
-		|		}
-		|	)
-		|	<jk>package</jk> org.apache.juneau.examples.addressbook;
-	</p>		
-	<h5 class='figure'>Sample Code</h5>
-	<p class='bjava'>
-		|	Person <jv>person</jv> = <jk>new</jk> Person()
-		|		.name(<js>"John Smith"</js>)
-		|		.birthDate(<js>"1946-08-12T00:00:00Z"</js>)
-		|		.addresses(
-		|			<jk>new</jk> Address() 
-		|				.street(<js>"100 Main Street"</js>)
-		|				.city(<js>"Anywhereville"</js>)
-		|				.state(<jsf>NY</jsf>)
-		|				.zip(12345)
-		|				.isCurrent(<jk>true</jk>);
-		|		);
-		|
-		|	<jc>// Create a new serializer with readable output, this time with namespaces enabled.</jc>
-		|	<jc>// Note that this is identical to XmlSerializer.DEFAULT_NS_SQ_READABLE.</jc>
-		|	XmlSerializer <jv>serializer</jv> = XmlSerializer.<jsm>create</jsm>().ns().ws().sq().build();
-		|	
-		|	String <jv>xml</jv> = <jv>serializer</jv>.serialize(p);
-	</p>
-	<p>
-		Now when we run this code, we'll see namespaces added to our output:
-	</p>
-	<p class='bxml'>
-		|	<xt>&lt;per:person&gt;</xt>
-		|		<xt>&lt;per:name&gt;</xt>John Smith<xt>&lt;/per:name&gt;</xt>
-		|		<xt>&lt;per:birthDate&gt;</xt>1946-08-12T04:00:00Z<xt>&lt;/per:birthDate&gt;</xt>
-		|		<xt>&lt;per:addresses&gt;</xt>
-		|			<xt>&lt;addr:address&gt;</xt>
-		|				<xt>&lt;mail:street&gt;</xt>100 Main Street<xt>&lt;/mail:street&gt;</xt>
-		|				<xt>&lt;mail:city&gt;</xt>Anywhereville<xt>&lt;/mail:city&gt;</xt>
-		|				<xt>&lt;mail:state&gt;</xt>NY<xt>&lt;/mail:state&gt;</xt>
-		|				<xt>&lt;mail:zip&gt;</xt>12345<xt>&lt;/mail:zip&gt;</xt>
-		|				<xt>&lt;addr:isCurrent&gt;</xt>true<xt>&lt;/addr:isCurrent&gt;</xt>
-		|			<xt>&lt;/addr:address&gt;</xt>
-		|		<xt>&lt;/per:addresses&gt;</xt>
-		|	<xt>&lt;/per:person&gt;</xt>
-	</p>
-	<p>
-		Enabling the {@del oaj.xml.XmlSerializer#XML_addNamespaceUrisToRoot} setting results
-		in the namespace URLs being added to the root node:
-	</p>
-	<p class='bxml'>
-		|	<xt>&lt;per:person</xt>
-		|			<xa>xmlns</xa>=<xs>'http://www.apache.org/2013/Juneau'</xs> 
-		|			<xa>xmlns:per</xa>=<xs>'http://www.apache.org/person/'</xs>
-		|			<xa>xmlns:addr</xa>=<xs>'http://www.apache.org/address/'</xs>
-		|			<xa>xmlns:mail</xa>=<xs>'http://www.apache.org/mail/'</xs>
-		|		<xt>&gt;</xt>
-		|		<xt>&lt;per:name&gt;</xt>John Smith<xt>&lt;/per:name&gt;</xt>
-		|		<xt>&lt;per:birthDate&gt;</xt>1946-08-12T04:00:00Z<xt>&lt;/per:birthDate&gt;</xt>
-		|		<xt>&lt;per:addresses&gt;</xt>
-		|			<xt>&lt;addr:address&gt;</xt>
-		|				<xt>&lt;mail:street&gt;</xt>100 Main Street<xt>&lt;/mail:street&gt;</xt>
-		|				<xt>&lt;mail:city&gt;</xt>Anywhereville<xt>&lt;/mail:city&gt;</xt>
-		|				<xt>&lt;mail:state&gt;</xt>NY<xt>&lt;/mail:state&gt;</xt>
-		|				<xt>&lt;mail:zip&gt;</xt>12345<xt>&lt;/mail:zip&gt;</xt>
-		|				<xt>&lt;addr:isCurrent&gt;</xt>true<xt>&lt;/addr:isCurrent&gt;</xt>
-		|			<xt>&lt;/addr:address&gt;</xt>
-		|		<xt>&lt;/per:addresses&gt;</xt>
-		|	<xt>&lt;/per:person&gt;</xt>
-	</p>
-	<p>
-		We can simplify the output by setting the default namespace on the serializer so that all the elements do 
-		not need to be prefixed:
-	</p>
-	<p class='bjava'>
-		|	<jc>// Create a new serializer with readable output, this time with namespaces enabled.</jc>
-		|	XmlSerializer <jv>serializer</jv> = XmlSerializer.<jsm>create</jsm>().ws().sq().ns()
-		|		.defaultNamespaceUri(<js>"http://www.apache.org/person/"</js>)
-			.build();
-		|</p>
-	<p>
-		This produces the following equivalent where the elements don't need prefixes since they're already in the 
-		default document namespace:
-	</p>
-	<p class='bxml'>
-		|	<xt>&lt;person</xt>
-		|			<xa>xmlns:juneau</xa>=<xs>'http://www.apache.org/2013/Juneau'</xs> 
-		|			<xa>xmlns</xa>=<xs>'http://www.apache.org/person/'</xs>
-		|			<xa>xmlns:addr</xa>=<xs>'http://www.apache.org/address/'</xs>
-		|			<xa>xmlns:mail</xa>=<xs>'http://www.apache.org/mail/'</xs>
-		|		<xt>&gt;</xt>
-		|		<xt>&lt;name&gt;</xt>John Smith<xt>&lt;/name&gt;</xt>
-		|		<xt>&lt;birthDate&gt;</xt>1946-08-12T04:00:00Z<xt>&lt;/birthDate&gt;</xt>
-		|		<xt>&lt;addresses&gt;</xt>
-		|			<xt>&lt;addr:address&gt;</xt>
-		|				<xt>&lt;mail:street&gt;</xt>100 Main Street<xt>&lt;/mail:street&gt;</xt>
-		|				<xt>&lt;mail:city&gt;</xt>Anywhereville<xt>&lt;/mail:city&gt;</xt>
-		|				<xt>&lt;mail:state&gt;</xt>NY<xt>&lt;/mail:state&gt;</xt>
-		|				<xt>&lt;mail:zip&gt;</xt>12345<xt>&lt;/mail:zip&gt;</xt>
-		|				<xt>&lt;addr:isCurrent&gt;</xt>true<xt>&lt;/addr:isCurrent&gt;</xt>
-		|			<xt>&lt;/addr:address&gt;</xt>
-		|		<xt>&lt;/addresses&gt;</xt>
-		|	<xt>&lt;/person&gt;</xt>
-	</p>
-	<p>
-		By default, the XML serializer class will make a first-pass over the data structure to look for namespaces 
-		defined on classes and bean properties.
-		In high-performance environments, you may want to consider disabling auto-detection and providing your 
-		own explicit list of namespaces to the serializer to avoid this scanning step using 
-		{@link oaj.xml.XmlSerializer.Builder#disableAutoDetectNamespaces()}.
-	</p>
-	<p>
-		The following code will produce the same output as before, but will perform slightly better since it 
-		avoids this pre-scan step.
-	</p>
-	<p class='bjava'>
-		|	<jc>// Create a new serializer with readable output, this time with namespaces enabled.</jc>
-		|	XmlSerializer <jv>serializer</jv> = XmlSerializer.<jsm>create</jsm>()
-		|		.ws()
-		|		.sq()
-		|		.autoDetectNamespaces(<jk>false</jk>)
-		|		.namespaces(<js>"{per:'http://www.apache.org/person/'}"</js>)
-		|		.build();
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails.html
deleted file mode 100644
index 83b1e4624..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'HTML Details'}
-
-<div class='topic'>
-	<p>
-		Juneau supports converting arbitrary POJOs to and from HTML.
-		Built on top of the existing XML parser, it also uses a STaX parser and creates POJOs directly without intermediate DOM objects.
-	</p>
-	<p>
-		The primary use case for HTML serialization is rendering POJOs in easy-to-read format in REST interfaces.
-	</p>		
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/01.jm.HtmlMethodology.html b/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/01.jm.HtmlMethodology.html
deleted file mode 100644
index bef7b7de1..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/01.jm.HtmlMethodology.html
+++ /dev/null
@@ -1,526 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'HTML Methodology'}
-
-<div class='topic'>
-	<p>
-		The following examples show how different data types are represented in HTML.
-		They mirror how the data structures are represented in JSON.
-	</p>
-	
-	<h5 class='topic'>Simple types</h5>
-	<p>
-		The representation for simple types mirror those produced by the XML serializer.
-		Tags are added to help differentiate data types when they cannot be inferred through reflection.
-		These tags are ignored by browsers and treated as plain text.
-	</p>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>HTML</th>
-		</tr>
-		<tr>
-			<td>string</td>
-			<td class='code'><js>'foo'</js></td>
-			<td class='code'><xt>&lt;string&gt;</xt>foo<xt>&lt;/string&gt;</xt></td>
-		</tr>
-		<tr>
-			<td>boolean</td>
-			<td class='code'><jk>true</jk></td>
-			<td class='code'><xt>&lt;boolean&gt;</xt>true<xt>&lt;/boolean&gt;</xt></td>
-		</tr>
-		<tr>
-			<td>integer</td>
-			<td class='code'>123</td>
-			<td class='code'><xt>&lt;number&gt;</xt>123<xt>&lt;/number&gt;</xt></td>
-		</tr>
-		<tr>
-			<td>float</td>
-			<td class='code'>1.23</td>
-			<td class='code'><xt>&lt;number&gt;</xt>1.23<xt>&lt;/number&gt;</xt></td>
-		</tr>
-		<tr>
-			<td>null</td>
-			<td class='code'><jk>null</jk></td>
-			<td class='code'><xt>&lt;null/&gt;</xt></td>
-		</tr>
-	</table>
-	
-	<h5 class='topic'>Maps</h5>
-	<p>
-		Maps and beans are represented as tables.
-	</p>
-	<p>
-		The <xa>_type</xa> attribute is added to differentiate between objects (maps/beans) and arrays 
-		(arrays/collections).
-	</p>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>HTML</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	Map&lt;String,String&gt;
-			</td>
-			<td class='code'>
-				|	{
-				|		k1: <js>'v1'</js>
-				|		k2: <jk>null</jk>
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
-				|		&lt;tr&gt;
-				|			&lt;td&gt;<xv>k1</xv>&lt;/td&gt;
-				|			&lt;td&gt;<xv>v1</xv>&lt;/td&gt;
-				|		&lt;/tr&gt;
-				|		&lt;tr&gt;
-				|			&lt;td&gt;<xv>k2</xv>&lt;/td&gt;
-				|			&lt;td&gt;&lt;null/&gt;&lt;/td&gt;
-				|		&lt;/tr&gt;
-				|	&lt;/table&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	Map&lt;String,Number&gt;
-			</td>
-			<td class='code'>
-				|	{
-				|		k1: 123,
-				|		k2: 1.23,
-				|		k3: <jk>null</jk>
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
-				|		&lt;tr&gt;
-				|			&lt;td&gt;<xv>k1</xv>&lt;/td&gt;
-				|			&lt;td&gt;<xv>123</xv>&lt;/td&gt;
-				|		&lt;/tr&gt;
-				|		&lt;tr&gt;
-				|			&lt;td&gt;<xv>k2</xv>&lt;/td&gt;
-				|			&lt;td&gt;<xv>1.23</xv>&lt;/td&gt;
-				|		&lt;/tr&gt;
-				|		&lt;tr&gt;
-				|			&lt;td&gt;<xv>k3</xv>&lt;/td&gt;
-				|			&lt;td&gt;&lt;null/&gt;&lt;/td&gt;
-				|		&lt;/tr&gt;
-				|	&lt;/table&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	Map&lt;String,Object&gt;
-			</td>
-			<td class='code'>
-				|	{
-				|		k1: <js>'v1'</js>
-				|		k2: 123,
-				|		k3: 1.23,
-				|		k4: <jk>true</jk>,
-				|		k5: <jk>null</jk>
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
-				|		&lt;tr&gt;
-				|			&lt;td&gt;<xv>k1</xv>&lt;/td&gt;
-				|			&lt;td&gt;<xv>v1</xv>&lt;/td&gt;
-				|		&lt;/tr&gt;
-				|		&lt;tr&gt;
-				|			&lt;td&gt;<xv>k2</xv>&lt;/td&gt;
-				|			&lt;td&gt;&lt;number&gt;<xv>123</xv>&lt;/number&gt;&lt;/td&gt;
-				|		&lt;/tr&gt;
-				|		&lt;tr&gt;
-				|			&lt;td&gt;<xv>k3</xv>&lt;/td&gt;
-				|			&lt;td&gt;&lt;number&gt;<xv>1.23</xv>&lt;/number&gt;&lt;/td&gt;
-				|		&lt;/tr&gt;
-				|		&lt;tr&gt;
-				|			&lt;td&gt;<xv>k4</xv>&lt;/td&gt;
-				|			&lt;td&gt;&lt;boolean&gt;<xv>true</xv>&lt;/boolean&gt;&lt;/td&gt;
-				|		&lt;/tr&gt;
-				|		&lt;tr&gt;
-				|			&lt;td&gt;<xv>k5</xv>&lt;/td&gt;
-				|			&lt;td&gt;&lt;null/&gt;&lt;/td&gt;
-				|		&lt;/tr&gt;
-				|	&lt;/table&gt;
-			</xt></td>
-		</tr>
-	</table>
-	
-	<h5 class='topic'>Arrays</h5>
-	<p>
-		Collections and arrays are represented as ordered lists.
-	</p>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>HTML</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	String[]
-			</td>
-			<td class='code'>
-				|	[
-				|		<js>'foo'</js>
-				|		<jk>null</jk>
-				|	]
-			</td>
-			<td class='code'><xt>
-				|	&lt;ul&gt;
-				|		&lt;li&gt;<xv>foo</xv>&lt;/li&gt;
-				|		&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
-				|	&lt;/ul&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	Number[]
-			</td>
-			<td class='code'>
-				|	[
-				|		123,
-				|		1.23,
-				|		<jk>null</jk>
-				|	]
-			</td>
-			<td class='code'><xt>
-				|	&lt;ul&gt;
-				|		&lt;li&gt;<xv>123</xv>&lt;/li&gt;
-				|		&lt;li&gt;<xv>1.23</xv>&lt;/li&gt;
-				|		&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
-				|	&lt;/ul&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	Object[]
-			</td>
-			<td class='code'>
-				|	[
-				|		<js>'foo'</js>,
-				|		123,
-				|		1.23,
-				|		<jk>true</jk>,
-				|		<jk>null</jk>
-				|	]
-			</td>
-			<td class='code'><xt>
-				|	&lt;ul&gt;
-				|		&lt;li&gt;<xv>foo</xv>&lt;/li&gt;
-				|		&lt;li&gt;&lt;number&gt;<xv>123</xv>&lt;/number&gt;&lt;/li&gt;
-				|		&lt;li&gt;&lt;number&gt;<xv>1.23</xv>&lt;/number&gt;&lt;/li&gt;
-				|		&lt;li&gt;&lt;boolean&gt;<xv>true</xv>&lt;/boolean&gt;&lt;/li&gt;
-				|		&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
-				|	&lt;/ul&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	String[][]
-			</td>
-			<td class='code'>
-				|	[
-				|		[<js>'foo'</js>, <jk>null</jk>],
-				|		<jk>null</jk>,
-				|	]
-			</td>
-			<td class='code'><xt>
-				|	&lt;ul&gt;
-				|		&lt;li&gt;
-				|			&lt;ul&gt;
-				|				&lt;li&gt;<xv>foo</xv>&lt;/li&gt;
-				|				&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
-				|			&lt;/ul&gt;
-				|		&lt;/li&gt;
-				|		&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
-				|	&lt;/ul&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<jk>int</jk>[]
-			</td>
-			<td class='code'>
-				|	[
-				|		123
-				|	]
-			</td>
-			<td class='code'><xt>
-				|	&lt;ul&gt;
-				|		&lt;li&gt;<xv>123</xv>&lt;/li&gt;
-				|	&lt;/ul&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<jk>boolean</jk>[]
-			</td>
-			<td class='code'>
-				|	[
-				|		<jk>true</jk>
-				|	]
-			</td>
-			<td class='code'><xt>
-				|	&lt;ul&gt;
-				|		&lt;li&gt;<xv>true</xv>&lt;/li&gt;
-				|	&lt;/ul&gt;
-			</xt></td>
-		</tr>
-	</table>
-	
-	<h5 class='topic'>Collections</h5>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>HTML</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	List&lt;String&gt;
-			</td>
-			<td class='code'>
-				|	[
-				|		<js>'foo'</js>
-				|		<jk>null</jk>
-				|	]
-			</td>
-			<td class='code'><xt>
-				|	&lt;ul&gt;
-				|		&lt;li&gt;<xv>foo</xv>&lt;/li&gt;
-				|		&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
-				|	&lt;/ul&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	List&lt;Number&gt;
-			</td>
-			<td class='code'>
-				|	[
-				|		123,
-				|		1.23,
-				|		<jk>null</jk>
-				|	]
-			</td>
-			<td class='code'><xt>
-				|	&lt;ul&gt;
-				|		&lt;li&gt;<xv>123</xv>&lt;/li&gt;
-				|		&lt;li&gt;<xv>1.23</xv>&lt;/li&gt;
-				|		&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
-				|	&lt;/ul&gt;
-			</xt></td>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	List&lt;Object&gt;
-			</td>
-			<td class='code'>
-				|	[
-				|		<js>'foo'</js>,
-				|		123,
-				|		1.23,
-				|		<jk>true</jk>,
-				|		<jk>null</jk>
-				|	]
-			</td>
-			<td class='code'><xt>
-				|	&lt;ul&gt;
-				|		&lt;li&gt;<xv>foo</xv>&lt;/li&gt;
-				|		&lt;li&gt;&lt;number&gt;<xv>123</xv>&lt;/number&gt;&lt;/li&gt;
-				|		&lt;li&gt;&lt;number&gt;<xv>1.23</xv>&lt;/number&gt;&lt;/li&gt;
-				|		&lt;li&gt;&lt;boolean&gt;<xv>true</xv>&lt;/boolean&gt;&lt;/li&gt;
-				|		&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
-				|	&lt;/ul&gt;
-			</xt></td>
-		</tr>
-	</table>
-	
-	<h5 class='topic'>Beans</h5>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>HTML</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<jk>class</jk> MyBean {
-				|		<jk>public</jk> String <jf>a</jf>;
-				|		<jk>public</jk> <jk>int</jk> <jf>b</jf>;
-				|		<jk>public</jk> Object <jf>c</jf>;  <jc>// String value</jc>
-				|		<jk>public</jk> Object <jf>d</jf>;  <jc>// Integer value</jc>  	
-				|		<jk>public</jk> MyBean2 <jf>e</jf>;  
-				|		<jk>public</jk> String[] <jf>f</jf>;  
-				|	 	<jk>public</jk> <jk>int</jk>[] <jf>g</jf>;  	
-				|	}
-				|	<jk>class</jk> MyBean2 {
-				|		String <jf>h</jf>;  
-				|	}
-			</td>
-			<td class='code'>
-				|	{
-				|		<jok>a</jok>: <jov>'foo'</jov>,
-				|		<jok>b</jok>: <jov>123</jov>,
-				|		<jok>c</jok>: <jov>'bar'</jov>,
-				|		<jok>d</jok>: <jov>456</jov>,
-				|		<jok>e</jok>: {
-				|			<jok>h</jok>: <jov>'baz'</jov>
-				|		}
-				|		<jok>f</jok>: [<jov>'qux'</jov>]
-				|		<jok>g</jok>: [<jov>789</jov>]
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
-				|		&lt;tr&gt;
-				|			&lt;td&gt;<xv>a</xv>&lt;/td&gt;
-				|			&lt;td&gt;<xv>foo</xv>&lt;/td&gt;
-				|		&lt;/tr&gt;
-				|		&lt;tr&gt;
-				|			&lt;td&gt;<xv>b</xv>&lt;/td&gt;
-				|			&lt;td&gt;<xv>123</xv>&lt;/td&gt;
-				|		&lt;/tr&gt;
-				|		&lt;tr&gt;
-				|			&lt;td&gt;<xv>c</xv>&lt;/td&gt;
-				|			&lt;td&gt;<xv>bar</xv>&lt;/td&gt;
-				|		&lt;/tr&gt;
-				|		&lt;tr&gt;
-				|			&lt;td&gt;<xv>d</xv>&lt;/td&gt;
-				|			&lt;td&gt;&lt;number&gt;<xv>456</xv>&lt;/number&gt;&lt;/td&gt;
-				|		&lt;/tr&gt;
-				|		&lt;tr&gt;
-				|			&lt;td&gt;<xv>e</xv>&lt;/td&gt;
-				|			&lt;td&gt;
-				|				&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
-				|					&lt;tr&gt;
-				|						&lt;td&gt;<xv>h</xv>&lt;/td&gt;
-				|						&lt;td&gt;<xv>qux</xv>&lt;/td&gt;
-				|					&lt;/tr&gt;
-				|				&lt;/table&gt;
-				|			&lt;/td&gt;
-				|		&lt;/tr&gt;
-				|		&lt;tr&gt;
-				|			&lt;td&gt;<xv>f</xv>&lt;/td&gt;
-				|			&lt;td&gt;
-				|				&lt;ul&gt;
-				|					&lt;li&gt;<xv>baz</xv>&lt;/li&gt;
-				|				&lt;/ul&gt;
-				|			&lt;/td&gt;
-				|		&lt;/tr&gt;
-				|		&lt;tr&gt;
-				|			&lt;td&gt;<xv>g</xv>&lt;/td&gt;
-				|			&lt;td&gt;
-				|				&lt;ul&gt;
-				|					&lt;li&gt;<xv>789</xv>&lt;/li&gt;
-				|				&lt;/ul&gt;
-				|			&lt;/td&gt;
-				|		&lt;/tr&gt;
-				|	&lt;/table&gt;
-			</xt></td>
-		</tr>
-	</table>
-	
-	<h5 class='topic'>Beans with Map properties</h5>
-	<table class='styled w800'>
-		<tr>
-			<th>Data type</th>
-			<th>JSON example</th>
-			<th>HTML</th>
-		</tr>
-		<tr>
-			<td class='code'>
-				|	<jk>class</jk> MyBean {
-				|		<jk>public</jk> Map&lt;String,String&gt; <jf>a</jf>;
-				|		<jk>public</jk> Map&lt;String,Number&gt; <jf>b</jf>;
-				|		<jk>public</jk> Map&lt;String,Object&gt; <jf>c</jf>; 
-				|	}
-			</td>
-			<td class='code'>
-				|	{
-				|		<jok>a</jok>: {
-				|			<jok>k1</jok>: <jov>'foo'</jov>
-				|		},
-				|		<jok>b</jok>: {
-				|			<jok>k2</jok>: <jov>123</jov>
-				|		},
-				|		<jok>c</jok>: {
-				|			<jok>k3</jok>: <jov>'bar'</jov>,
-				|			<jok>k4</jok>: <jov>456</jov>,
-				|			<jok>k5</jok>: <jov>true</jov>,
-				|			<jok>k6</jok>: <jov>null</jov>
-				|		}
-				|	}
-			</td>
-			<td class='code'><xt>
-				|	&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
-				|		&lt;tr&gt;
-				|			&lt;td&gt;<xv>a</xv>&lt;/td&gt;
-				|			&lt;td&gt;
-				|				&lt;table _type='object'&gt;
-				|					&lt;tr&gt;
-				|						&lt;td&gt;<xv>k1</xv>&lt;/td&gt;
-				|						&lt;td&gt;<xv>foo</xv>&lt;/td&gt;
-					|				&lt;/tr&gt;
-				|				&lt;/table&gt;
-				|			&lt;/td&gt;
-				|		&lt;/tr&gt;
-				|		&lt;tr&gt;
-				|			&lt;td&gt;<xv>b</xv>&lt;/td&gt;
-				|			&lt;td&gt;
-				|				&lt;table _type='object'&gt;
-				|					&lt;tr&gt;
-				|						&lt;td&gt;<xv>k2</xv>&lt;/td&gt;
-				|						&lt;td&gt;<xv>123</xv>&lt;/td&gt;
-				|					&lt;/tr&gt;
-				|				&lt;/table&gt;
-				|			&lt;/td&gt;
-				|		&lt;/tr&gt;
-				|		&lt;tr&gt;
-				|			&lt;td&gt;<xv>c</xv>&lt;/td&gt;
-				|			&lt;td&gt;
-				|				&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
-				|					&lt;tr&gt;
-				|						&lt;td&gt;<xv>k3</xv>&lt;/td&gt;
-				|						&lt;td&gt;<xv>bar</xv>&lt;/td&gt;
-				|					&lt;/tr&gt;
-				|					&lt;tr&gt;
-				|						&lt;td&gt;<xv>k4</xv>&lt;/td&gt;
-				|						&lt;td&gt;&lt;number&gt;<xv>456</xv>&lt;/number&gt;&lt;/td&gt;
-				|					&lt;/tr&gt;
-				|					&lt;tr&gt;
-				|						&lt;td&gt;<xv>k5</xv>&lt;/td&gt;
-				|						&lt;td&gt;&lt;boolean&gt;<xv>true</xv>&lt;/boolean&gt;&lt;/td&gt;
-				|					&lt;/tr&gt;
-				|					&lt;tr&gt;
-				|						&lt;td&gt;<xv>k6</xv>&lt;/td&gt;
-				|						&lt;td&gt;&lt;null/&gt;&lt;/td&gt;
-				|					&lt;/tr&gt;
-				|				&lt;/table&gt;
-				|			&lt;/td&gt;
-				|		&lt;/tr&gt;
-				|	&lt;/table&gt;
-			</xt></td>
-		</tr>
-	</table>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/02.jm.HtmlSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/02.jm.HtmlSerializers.html
deleted file mode 100644
index ae5a6a344..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/02.jm.HtmlSerializers.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'HTML Serializers', updated:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.html.HtmlSerializer} class is used to serialize POJOs into HTML.
-	</p>	
-	<p>
-		The {@link oaj.html.HtmlDocSerializer} class is the same, but wraps the serialized POJO
-		inside a document template consisting of header, nav, aside, and footer sections.
-	</p>
-	<p>
-		The class hierarchy for the builder of this serializer is:
-	</p>
-	<ul class='javatree'>
-		<li class='jac'>{@link oaj.Context.Builder}
-			<ul>
-				<li class='jac'>{@link oaj.BeanContextable.Builder}
-					<ul>
-						<li class='jac'>{@link oaj.BeanTraverseContext.Builder}
-							<ul>
-								<li class='jac'>{@link oaj.serializer.Serializer.Builder}
-									<ul>
-										<li class='jac'>{@link oaj.serializer.WriterSerializer.Builder}
-											<ul>
-												<li class='jc'>{@link oaj.xml.XmlSerializer.Builder}
-													<ul>
-														<li class='jc'>{@link oaj.html.HtmlSerializer.Builder}
-													</ul>
-												</li>
-											</ul>
-										</li>
-									</ul>
-								</li>
-							</ul>
-						</li>
-					</ul>
-				</li>
-			</ul>
-		</li>
-	</ul>
-	<p>
-		Refer to the builder javadocs for configurable settings.
-	</p>
-	<p>
-		The following pre-configured serializers are provided for convenience:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.html.HtmlSerializer}
-			<ul class='javatreec'>
-				<li class='jf'>{@link oaj.html.HtmlSerializer#DEFAULT }
-				<li class='jf'>{@link oaj.html.HtmlSerializer#DEFAULT_SQ }
-				<li class='jf'>{@link oaj.html.HtmlSerializer#DEFAULT_SQ_READABLE }
-			</ul>
-		</li>
-		<li class='jc'>{@link oaj.html.HtmlDocSerializer}
-			<ul class='javatreec'>
-				<li class='jf'>{@link oaj.html.HtmlDocSerializer#DEFAULT }
-			</ul>
-		</li>
-	</ul>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/03.jm.HtmlParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/03.jm.HtmlParsers.html
deleted file mode 100644
index c8b90775a..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/03.jm.HtmlParsers.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'HTML Parsers', updated:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.html.HtmlParser} class is used to parse HTML into POJOs.
-		They can also parse the contents produced by {@link oaj.html.HtmlDocSerializer}.
-	</p>	
-	<p>
-		The class hierarchy for the builder of this parser is:
-	</p>
-	<ul class='javatree'>
-		<li class='jac'>{@link oaj.Context.Builder}
-			<ul>
-				<li class='jac'>{@link oaj.BeanContextable.Builder}
-					<ul>
-						<li class='jac'>{@link oaj.parser.Parser.Builder}
-							<ul>
-								<li class='jac'>{@link oaj.parser.ReaderParser.Builder}
-									<ul>
-										<li class='jc'>{@link oaj.html.HtmlParser.Builder}
-									</ul>
-								</li>
-							</ul>
-						</li>
-					</ul>
-				</li>
-			</ul>
-		</li>
-	</ul>
-	<p>
-		Refer to the builder javadocs for configurable settings.
-	</p>
-	<p>
-		The following pre-configured parsers are provided for convenience:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.html.HtmlParser}
-			<ul class='javatreec'>
-				<li class='jf'>{@link oaj.html.HtmlParser#DEFAULT DEFAULT}
-			</ul>
-		</li>
-	</ul>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/04.jm.HtmlAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/04.jm.HtmlAnnotation.html
deleted file mode 100644
index b70801b78..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/04.jm.HtmlAnnotation.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'@Html Annotation'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.html.annotation.Html @Html} annotation can be used to customize how POJOs are serialized to HTML on a per-class/field/method basis.
-	</p>
-	<ul class='javatree'>
-		<li class='ja'>{@link oaj.html.annotation.Html}
-			<ul class='javatreec'>
-				<li class='jma'>{@link oaj.html.annotation.Html#anchorText() anchorText}
-				<li class='jma'>{@link oaj.html.annotation.Html#format() format}
-				<li class='jma'>{@link oaj.html.annotation.Html#link() link}
-				<li class='jma'>{@link oaj.html.annotation.Html#noTableHeaders() noTableHeaders}
-				<li class='jma'>{@link oaj.html.annotation.Html#noTables() noTables}
-				<li class='jma'>{@link oaj.html.annotation.Html#render() render}
-			</ul>
-		</li>
-	</ul>		
-	<p>
-		The {@link oaj.html.annotation.Html#link @Html(link)} annotation adds a hyperlink to a bean property when rendered as HTML.
-	</p>
-	
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-		|	<jk>public class</jk> FileSpace {
-		|		<jc>// Add a hyperlink to this bean property.</jc>
-		|		<ja>@Html</ja>(link=<js>"servlet:/drive/{drive}"</js>)
-		|		<jk>public</jk> String getDrive() {...}
-		|	}			
-	</p>
-	<p>
-		The {@link oaj.html.annotation.Html#anchorText @Html(anchorText)} annotation is used to specify the anchor text of a hyperlink.
-	</p>
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-		|	<jc>// Produces &lt;a ...&gt;CLICK ME!&lt;/a&gt; when serialized to HTML.</jc>
-		|	<jk>public class</jk> FileSpace {
-		|		<jc>// Add a hyperlink to this bean property.</jc>
-		|		<ja>@Html</ja>(link=<js>"servlet:/drive/{drive}"</js>, anchorText=<js>"CLICK ME!"</js>)
-		|		<jk>public</jk> String getDrive() {...}
-		|	}			
-	</p>
-	<p>
-		The {@link oaj.html.annotation.Html#format @Html(format)} annotation is used to specify what format to use for HTML elements.
-		For example, the HTML beans defined in the {@link oaj.dto.html5} package use <c>format=<jsf>XML</jsf></c> so that
-		the beans get serialized as standard XML:
-	</p>
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-		|	<jc>// Parent class of all HTML DTO beans.</jc>
-		|	<ja>@Html</ja>(format=<jsf>XML</jsf>)	
-		|	<jk>public abstract class</jk> HtmlElement {...}
-	</p>
-	<p>
-		The {@link oaj.html.annotation.Html#noTableHeaders @Html(noTableHeaders)} annotation is used to prevent beans from being serialized with table headers.
-	</p>
-	<p>
-		The {@link oaj.html.annotation.Html#noTables @Html(noTables)} annotation is used to force beans to be serialized as trees instead of tables
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/05.jm.HtmlRenderAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/05.jm.HtmlRenderAnnotation.html
deleted file mode 100644
index 67ac51d60..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/05.jm.HtmlRenderAnnotation.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'@Html(render) Annotation'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.html.annotation.Html#render @Html(render)} annotation allows for custom rendering of bean property values when serialized as HTML. 
-		Using this class, you can alter the CSS style and HTML content of the bean property.
-	</p>
-	<p>
-		The following example shows two render classes that customize the appearance of the <c>pctFull</c> and
-		<c>status</c> columns in the code below:
-	</p>
-	<p class='bjava'>
-		|	<jk>import static</jk> org.apache.juneau.dto.html5.HtmlBuilder.*;	
-		|			
-		|	<jc>// Our bean class</jc>
-		|	<jk>public class</jk> FileSpace {
-		|
-		|		<jk>private final</jk> String <jf>drive</jf>;
-		|		<jk>private final long</jk> <jf>total</jf>, <jf>available</jf>;
-		|
-		|		<jk>public</jk> FileSpace(String <jv>drive</jv>, <jk>long</jk> <jv>total</jv>, <jk>long</jk> <jv>available</jv>) {
-		|			<jk>this</jk>.<jf>drive</jf> = <jv>drive</jv>;
-		|			<jk>this</jk>.<jf>total</jf> = <jv>total</jv>;
-		|			<jk>this</jk>.<jf>available</jf> = <jv>available</jv>;
-		|		}
-		|
-		|		<ja>@Html</ja>(link=<js>"drive/{drive}"</js>)
-		|		<jk>public</jk> String getDrive() {
-		|			<jk>return</jk> <jf>drive</jf>;
-		|		}
-		|
-		|		<jk>public long</jk> getTotal() {
-		|			<jk>return</jk> <jf>total</jf>;
-		|		}
-		|
-		|		<jk>public long</jk> getAvailable() {
-		|			<jk>return</jk> <jf>available</jf>;
-		|		}
-		|
-		|		<ja>@Html</ja>(render=FileSpacePctRender.<jk>class</jk>)
-		|		<jk>public float</jk> getPctFull() {
-		|			<jk>return</jk> ((100 * <jf>available</jf>) / <jf>total</jf>);
-		|		}
-		|
-		|		<ja>@Html</ja>(render=FileSpaceStatusRender.<jk>class</jk>)
-		|		<jk>public</jk> FileSpaceStatus getStatus() {
-		|			<jk>float</jk> <jv>pf</jv> = getPctFull();
-		|			<jk>if</jk> (<jv>pf</jv> &lt; 80)
-		|				<jk>return</jk> FileSpaceStatus.<jsf>OK</jsf>;
-		|			<jk>if</jk> (<jv>pf</jv> &lt; 90)
-		|				<jk>return</jk> FileSpaceStatus.<jsf>WARNING</jsf>;
-		|			<jk>return</jk> FileSpaceStatus.<jsf>SEVERE</jsf>;
-		|		}
-		|	}
-	</p>
-	<p class='bjava'>
-		|	<jc>// Possible values for the getStatus() method</jc>
-		|	<jk>public enum</jk> FileSpaceStatus {
-		|		<jsf>OK</jsf>, <jsf>WARNING</jsf>, <jsf>SEVERE</jsf>;
-		|	}
-	</p>
-	<p class='bjava'>
-		|	<jc>// Custom render for getPctFull() method</jc>
-		|	<jk>public class</jk> FileSpacePctRender <jk>extends</jk> HtmlRender&lt;Float&gt; {
-		|
-		|		<ja>@Override</ja>
-		|		<jk>public</jk> String getStyle(SerializerSession <jv>session</jv>, Float <jv>value</jv>) {
-		|			<jk>if</jk> (<jv>value</jv> &lt; 80)
-		|				<jk>return</jk> <js>"background-color:lightgreen;text-align:center"</js>;
-		|			<jk>if</jk> (<jv>value</jv> &lt; 90)
-		|				<jk>return</jk> <js>"background-color:yellow;text-align:center"</js>;
-		|			<jk>return</jk> <js>"background-color:red;text-align:center;border:;animation:color_change 0.5s infinite alternate"</js>;
-		|		}
-		|
-		|		<ja>@Override</ja>
-		|		<jk>public</jk> Object getContent(SerializerSession <jv>session</jv>, Float <jv>value</jv>) {
-		|			<jk>if</jk> (<jv>value</jv> >= 90)
-		|				<jk>return</jk> <jsm>div</jsm>(
-		|					String.<jsm>format</jsm>(<js>"%.0f%%"</js>, <jv>value</jv>),
-		|					<jsm>style</jsm>(<js>"@keyframes color_change { from { background-color: red; } to { background-color: yellow; }"</js>)
-		|				);
-		|			<jk>return</jk> String.<jsm>format</jsm>(<js>"%.0f%%"</js>, <jv>value</jv>);
-		|		}
-		|	}
-	</p>
-	<p class='bjava'>
-		|	<jc>// Custom render for getStatus() method</jc>
-		|	<jk>public class</jk> FileSpaceStatusRender <jk>extends</jk> HtmlRender&lt;FileSpaceStatus&gt; {
-		|
-		|		<ja>@Override</ja>
-		|		<jk>public</jk> String getStyle(SerializerSession <jv>session</jv>, FileSpaceStatus <jv>value</jv>) {
-		|			<jk>return</jk> <js>"text-align:center"</js>;
-		|		}
-		|
-		|		<ja>@Override</ja>
-		|		<jk>public</jk> Object getContent(SerializerSession <jv>session</jv>, FileSpaceStatus <jv>value</jv>) {
-		|			<jk>switch</jk> (<jv>value</jv>) {
-		|				<jk>case</jk> <jsf>OK</jsf>:  <jk>return</jk> <jsm>img</jsm>().src(URI.<jsm>create</jsm>(<js>"servlet:/htdocs/ok.png"</js>));
-		|				<jk>case</jk> <jsf>WARNING</jsf>:  <jk>return</jk> <jsm>img</jsm>().src(URI.<jsm>create</jsm>(<js>"servlet:/htdocs/warning.png"</js>));
-		|				<jk>default</jk>: <jk>return</jk> <jsm>img</jsm>().src(URI.<jsm>create</jsm>(<js>"servlet:/htdocs/severe.png"</js>));
-		|			}
-		|		}
-		|	}
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/06.jm.HtmlDocSerializer.html b/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/06.jm.HtmlDocSerializer.html
deleted file mode 100644
index f52547aee..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/06.jm.HtmlDocSerializer.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'HtmlDocSerializer', updated:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		{@link oaj.html.HtmlDocSerializer} is an extension of {@link oaj.html.HtmlSerializer}
-		that wraps serialized POJOs in a complete HTML document. 
-	</p>
-	<p>
-		The class hierarchy for the builder of this serializer is:
-	</p>
-	<ul class='javatree'>
-		<li class='jac'>{@link oaj.Context.Builder}
-			<ul>
-				<li class='jac'>{@link oaj.BeanContextable.Builder}
-					<ul>
-						<li class='jac'>{@link oaj.BeanTraverseContext.Builder}
-							<ul>
-								<li class='jac'>{@link oaj.serializer.Serializer.Builder}
-									<ul>
-										<li class='jac'>{@link oaj.serializer.WriterSerializer.Builder}
-											<ul>
-												<li class='jc'>{@link oaj.xml.XmlSerializer.Builder}
-													<ul>
-														<li class='jc'>{@link oaj.html.HtmlSerializer.Builder}
-															<ul>
-																<li class='jc'>{@link oaj.html.HtmlStrippedDocSerializer.Builder}
-																	<ul>
-																		<li class='jc'>{@link oaj.html.HtmlDocSerializer.Builder}
-																	</ul>
-																</li>
-															</ul>
-														</li>
-													</ul>
-												</li>
-											</ul>
-										</li>
-									</ul>
-								</li>
-							</ul>
-						</li>
-					</ul>
-				</li>
-			</ul>
-		</li>
-	</ul>
-	<p>
-		Refer to the builder javadocs for configurable settings.
-	</p>
-	<p>
-		This class is used extensively in the creation of POJO-based user interfaces in the REST API.
-	</p>
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-		|	<jd>/** 
-		|	 * Sample REST resource that prints out a simple "Hello world!" message.
-		|	 */</jd>
-		|	<ja>@Rest</ja>(path=<js>"/helloWorld"</js>)
-		|	<ja>@HtmlDocConfig</ja>(
-		|		navlinks={
-		|			<js>"up: request:/.."</js>,
-		|			<js>"options: servlet:/?method=OPTIONS"</js>
-		|		},
-		|		aside={
-		|			<js>"&lt;div style='max-width:400px' class='text'&gt;"</js>,
-		|			<js>"	&lt;p&gt;This page shows a resource that simply response with a 'Hello world!' message&lt;/p&gt;"</js>,
-		|			<js>"	&lt;p&gt;The POJO serialized is a simple String.&lt;/p&gt;"</js>,
-		|			<js>"&lt;/div&gt;"</js>
-		|		}
-		|	)
-		|	<jk>public class</jk> HelloWorldResource <jk>extends</jk> BasicRestServlet <jk>implements</jk> BasicUniversalConfig {...}
-	</p>
-	<p>
-		The {@link oaj.html.HtmlDocSerializer.Builder#template(Class)} setting defines
-		a template for the HTML page being generated.
-		The default template is described next.
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/07.jm.BasicHtmlDocTemplate.html b/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/07.jm.BasicHtmlDocTemplate.html
deleted file mode 100644
index bd710ffec..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/07.jm.BasicHtmlDocTemplate.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'BasicHtmlDocTemplate'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.html.BasicHtmlDocTemplate} class defines a default template for HTML documents
-		created by {@link oaj.html.HtmlDocSerializer}.
-	</p>
-	<p>
-		The HTML document created by this template consists of the following structure:
-	</p>
-	<p class='bxml'>
-		|	<xt>&lt;html&gt;
-		|		&lt;head&gt;
-		|			&lt;style <xa>type</xa>=<xs>'text/css'</xs>&gt;
-		|				<xv>CSS styles and links to stylesheets</xv>
-		|			&lt;/style&gt;
-		|		&lt;/head&gt;
-		|		&lt;body&gt;
-		|			&lt;header&gt;
-		|				<xv>Page header</xv>
-		|			&lt;/header&gt;
-		|			&lt;nav&gt;
-		|				<xv>Navigation links</xv>
-		|			&lt;/nav&gt;
-		|			&lt;aside&gt;
-		|				<xv>Side-bar text</xv>
-		|			&lt;/aside&gt;
-		|			&lt;article&gt;
-		|				<xv>Contents of serialized object</xv>
-		|			&lt;/article&gt;
-		|			&lt;footer&gt;
-		|				<xv>Footer message</xv>
-		|			&lt;/footer&gt;
-		|		&lt;/body&gt;
-		|	&lt;/html&gt;</xt>
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/08.jm.HtmlCustomTemplates.html b/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/08.jm.HtmlCustomTemplates.html
deleted file mode 100644
index 83b77df0d..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/28.jm.HtmlDetails/08.jm.HtmlCustomTemplates.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'Custom Templates'}
-
-<div class='topic'>
-	<p>
-		Custom page templates can be created by implementing the {@link oaj.html.HtmlDocTemplate}
-		interface and associating it with your {@link oaj.html.HtmlDocSerializer} using the {@link oaj.html.HtmlDocSerializer.Builder#template(Class)}
-		setting.
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.html.HtmlDocTemplate}
-			<ul class='javatreec'>
-				<li class='jm'>{@link oaj.html.HtmlDocTemplate#writeTo(HtmlDocSerializerSession,HtmlWriter,Object) writeTo(HtmlDocSerializerSession,HtmlWriter,Object)}
-			</ul>
-		</li>
-	</ul>
-	<p>
-		The interface implementation is open-ended allowing you to define the contents of the page any way you wish.
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/29.jm.HtmlSchema.html b/juneau-doc/docs/Topics/02.juneau-marshall/29.jm.HtmlSchema.html
deleted file mode 100644
index 4c3f82a85..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/29.jm.HtmlSchema.html
+++ /dev/null
@@ -1,197 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'HTML-Schema Support'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.html.HtmlSchemaSerializer} class is the HTML-equivalent to the
-		{@link oaj.json.JsonSchemaSerializer} class.
-		It's used to generate HTML versions of JSON-Schema documents that describe the output generated by the 
-		{@link oaj.json.JsonSerializer} class.
-	</p>
-	<h5 class='figure'>Sample Beans</h5>
-	<p class='bjava'>
-		|	<jk>public class</jk> Person {
-		|		
-		|		<jc>// Bean properties</jc>
-		|		<jk>public</jk> String <jf>name</jf>;
-		|		<jk>public</jk> Calendar <jf>birthDate</jf>;
-		|		<jk>public</jk> List&lt;Address&gt; <jf>addresses</jf>; 
-		|	
-		|		<jc>// Getters/setters omitted</jc>
-		|	}
-		|	
-		|	<jk>public class</jk> Address {
-		|
-		|		<jc>// Bean properties</jc>
-		|		<jk>public</jk> String <jf>street</jf>, <jf>city</jf>;
-		|		<jk>public</jk> StateEnum <jf>state</jf>;
-		|		<jk>public int</jk> <jf>zip</jf>;
-		|		<jk>public boolean</jk> <jf>isCurrent</jf>;
-		|
-		|		<jc>// Getters/setters omitted</jc>
-		|	}	
-	</p>
-	<p>
-		The code for creating our POJO model and generating HTML-Schema is shown below:
-	</p>
-	<p class='bjava'>
-		|	<jc>// Get the one of the default schema serializers.</jc>
-		|	HtmlSchemaSerializer <jv>serializer</jv> = HtmlSchemaSerializer.<jsf>DEFAULT_SIMPLE_READABLE</jsf>;
-		|	
-		|	<jc>// Get the HTML Schema for the POJO.</jc>
-		|	String <jv>htmlSchema</jv> = <jv>serializer</jv>.serialize(<jk>new</jk> Person());
-		|
-		|	<jc>// This also works.</jc>
-		|	<jv>htmlSchema</jv> = <jv>serializer</jv>.serialize(Person.<jk>class</jk>);
-	</p>
-	<p>
-		The result is the HTML table shown below:
-	</p>
-	<table class='bordered unstyled w800'>
-		<tr>
-			<td>type</td>
-			<td>object</td>
-		</tr>
-		<tr>
-			<td>properties</td>
-			<td>
-				<table>
-					<tr>
-						<td>name</td>
-						<td>
-							<table>
-								<tr>
-									<td>type</td>
-									<td>string</td>
-								</tr>
-							</table>
-						</td>
-					</tr>
-					<tr>
-						<td>birthDate</td>
-						<td>
-							<table>
-								<tr>
-									<td>type</td>
-									<td>string</td>
-								</tr>
-							</table>
-						</td>
-					</tr>
-					<tr>
-						<td>addresses</td>
-						<td>
-							<table>
-								<tr>
-									<td>type</td>
-									<td>array</td>
-								</tr>
-								<tr>
-									<td>items</td>
-									<td>
-										<table>
-											<tr>
-												<td>type</td>
-												<td>object</td>
-											</tr>
-											<tr>
-												<td>properties</td>
-												<td>
-													<table>
-														<tr>
-															<td>street</td>
-															<td>
-																<table>
-																	<tr>
-																		<td>type</td>
-																		<td>string</td>
-																	</tr>
-																</table>
-															</td>
-														</tr>
-														<tr>
-															<td>city</td>
-															<td>
-																<table>
-																	<tr>
-																		<td>type</td>
-																		<td>string</td>
-																	</tr>
-																</table>
-															</td>
-														</tr>
-														<tr>
-															<td>state</td>
-															<td>
-																<table>
-																	<tr>
-																		<td>type</td>
-																		<td>string</td>
-																	</tr>
-																	<tr>
-																		<td>enum</td>
-																		<td>
-																			<ul>
-																				<li>AL</li>
-																				<li>PA</li>
-																				<li>NC</li>
-																			</ul>
-																		</td>
-																	</tr>
-																</table>
-															</td>
-														</tr>
-														<tr>
-															<td>zip</td>
-															<td>
-																<table>
-																	<tr>
-																		<td>type</td>
-																		<td>integer</td>
-																	</tr>
-																	<tr>
-																		<td>format</td>
-																		<td>int32</td>
-																	</tr>
-																</table>
-															</td>
-														</tr>
-														<tr>
-															<td>isCurrent</td>
-															<td>
-																<table>
-																	<tr>
-																		<td>type</td>
-																		<td>boolean</td>
-																	</tr>
-																</table>
-															</td>
-														</tr>
-													</table>
-												</td>
-											</tr>
-										</table>
-									</td>
-								</tr>
-							</table>
-						</td>
-					</tr>
-				</table>
-			</td>
-		</tr>
-	</table>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UonDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UonDetails.html
deleted file mode 100644
index 292060c0e..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UonDetails.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'UON Details'}
-
-<div class='topic'>
-	<p>
-		Juneau supports converting arbitrary POJOs to and from UON strings using ultra-efficient serializers 
-		and parsers.
-		The serializer converts POJOs directly to UON strings without the need for intermediate DOM objects 
-		using a highly-efficient state machine.
-		Likewise, the parser creates POJOs directly from UON strings without the need for intermediate DOM 
-		objects. 
-	</p>
-	<p>
-		Juneau uses UON (URL-Encoded Object Notation) for representing POJOs.  
-		The UON specification can be found <a href='doc-files/rfc_uon.txt'>here</a>.
-	</p>
-	<p>
-		The following example shows JSON for a typical bean:
-	</p>
-	<h5 class='figure'>Sample Beans</h5>
-	<p class='bjava'>
-		|	<jk>public class</jk> Person {
-		|		
-		|		<jc>// Bean properties</jc>
-		|		<jk>public</jk> String <jf>name</jf>;
-		|		<ja>@Swap</ja>(TemporalCalendarSwap.IsoInstant.<jk>class</jk>) <jk>public</jk> Calendar <jf>birthDate</jf>;
-		|		<jk>public</jk> List&lt;Address&gt; <jf>addresses</jf>; 
-		|	
-		|		<jc>// Getters/setters omitted</jc>
-		|	}
-		|	
-		|	<jk>public class</jk> Address {
-		|
-		|		<jc>// Bean properties</jc>
-		|		<jk>public</jk> String <jf>street</jf>, <jf>city</jf>;
-		|		<jk>public</jk> StateEnum <jf>state</jf>;
-		|		<jk>public int</jk> <jf>zip</jf>;
-		|		<jk>public boolean</jk> <jf>isCurrent</jf>;
-		|
-		|		<jc>// Getters/setters omitted</jc>
-		|	}	
-	</p>
-	<h5 class='figure'>Sample Code</h5>
-	<p class='bjava'>
-		|	Person <jv>person</jv> = <jk>new</jk> Person()
-		|		.name(<js>"John Smith"</js>)
-		|		.birthDate(<js>"1946-08-12T00:00:00Z"</js>)
-		|		.addresses(
-		|			<jk>new</jk> Address() 
-		|				.street(<js>"100 Main Street"</js>)
-		|				.city(<js>"Anywhereville"</js>)
-		|				.state(<jsf>NY</jsf>)
-		|				.zip(12345)
-		|				.isCurrent(<jk>true</jk>);
-		|		);
-	</p>
-	<h5 class='figure'>UON</h5>
-	<p class='buon'>
-		|	(
-		|		<ua>name</ua>=<us>'John+Smith'</us>,
-		|		<ua>birthDate</ua>=<us>'1946-08-12T00:00:00Z'</us>,
-		|		<ua>addresses</ua>=@(
-		|			(
-		|				<ua>street</ua>=<us>'100 Main Street'</us>,
-		|				<ua>city</ua>=<us>Anywhereville</us>,
-		|				<ua>state</ua>=<us>NY</us>,
-		|				<ua>zip</ua>=<un>12345</un>,
-		|				<ua>isCurrent</ua>=<uk>true</uk>
-		|			)
-		|		)
-		|	) 
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UonDetails/01.jm.UonMethodology.html b/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UonDetails/01.jm.UonMethodology.html
deleted file mode 100644
index 7cedbec6e..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UonDetails/01.jm.UonMethodology.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'UON Methodology'}
-
-<div class='topic'>
-	<h5 class='figure'>General methodology:</h5>
-	<table class='styled w800' style='border-collapse:collapse'>
-		<tr><th>Java type</th><th>JSON equivalent</th><th>UON</th></tr>
-		<tr>
-			<td>Maps/beans</td>
-			<td>OBJECT</td>
-			<td class='code'>
-				|	<ua>a1</ua>=(<ua>b1</ua>=<us>x1</us>,<ua>b2</ua>=<us>x2</us>)
-				|	<ua>a1</ua>=(<ua>b1</ua>=(<ua>c1</ua>=<us>x1</us>,<ua>c2</ua>=<us>x2</us>))
-			</td>
-		</tr>
-		<tr>
-			<td>Collections/arrays</td>
-			<td>ARRAY</td>
-			<td class='code'>
-				|	<ua>a1</ua>=@(<us>x1</us>,<us>x2</us>)
-				|	<ua>a1</ua>=@(@(<us>x1</us>,<us>x2</us>),@(<us>x3</us>,<us>x4</us>))
-				|	<ua>a1</ua>=@((<ua>b1</ua>=<us>x1</us>,<ua>b2</ua>=<us>x2</us>),(<ua>c1</ua>=<us>x1</us>,<ua>c2</ua>=<us>x2</us>))
-			</td>
-		</tr>
-		<tr>
-			<td>Booleans</td>
-			<td>BOOLEAN</td>
-			<td class='code'>
-				|	<ua>a1</ua>=<uk>true</uk>&amp;<ua>a2</ua>=<uk>false</uk>
-			</td>
-		</tr>
-		<tr>
-			<td>int/float/double/...</td>
-			<td>NUMBER</td>
-			<td class='code'>
-				|	<ua>a1</ua>=<un>123</un>&amp;<ua>a2</ua>=<un>1.23e1</un>
-			</td>
-		</tr>
-		<tr>
-			<td>null</td>
-			<td>NULL</td>
-			<td class='code'>
-				|	<ua>a1</ua>=<uk>null</uk>
-			</td>
-		</tr>
-		<tr>
-			<td>String</td>
-			<td>STRING</td>
-			<td class='code'>
-				|	<ua>a1</ua>=<us>foobar</us>
-				|	<ua>a1</ua>=<us>'true'</us>
-				|	<ua>a1</ua>=<us>'null'</us>
-				|	<ua>a1</ua>=<us>'123'</us>
-				|	<ua>a1</ua>=<us>' string with whitespace '</us>
-				|	<ua>a1</ua>=<us>'string with ~'escaped~' quotes'</us>
-			</td>
-		</tr>
-	</table>
-	<p>
-		Refer to the <a href='doc-files/rfc_uon.txt'>UON specification</a> for a complete set of syntax rules.		
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UonDetails/02.jm.UonSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UonDetails/02.jm.UonSerializers.html
deleted file mode 100644
index 06e4cbd21..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UonDetails/02.jm.UonSerializers.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'UON Serializers', updated:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.uon.UonSerializer} class is used to serialize POJOs into UON.
-	</p>	
-	<p>
-		The class hierarchy for the builder of this serializer is:
-	</p>
-	<ul class='javatree'>
-		<li class='jac'>{@link oaj.Context.Builder}
-			<ul>
-				<li class='jac'>{@link oaj.BeanContextable.Builder}
-					<ul>
-						<li class='jac'>{@link oaj.BeanTraverseContext.Builder}
-							<ul>
-								<li class='jac'>{@link oaj.serializer.Serializer.Builder}
-									<ul>
-										<li class='jac'>{@link oaj.serializer.WriterSerializer.Builder}
-											<ul>
-												<li class='jc'>{@link oaj.uon.UonSerializer.Builder}
-											</ul>
-										</li>
-									</ul>
-								</li>
-							</ul>
-						</li>
-					</ul>
-				</li>
-			</ul>
-		</li>
-	</ul>
-	<p>
-		Refer to the builder javadocs for configurable settings.
-	</p>
-	<p>
-		The following pre-configured serializers are provided for convenience:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.uon.UonSerializer}
-			<ul class='javatreec'>
-				<li class='jf'>{@link oaj.uon.UonSerializer#DEFAULT DEFAULT}
-				<li class='jf'>{@link oaj.uon.UonSerializer#DEFAULT_ENCODING DEFAULT_ENCODING}
-				<li class='jf'>{@link oaj.uon.UonSerializer#DEFAULT_READABLE DEFAULT_READABLE}
-			</ul>
-		</li>
-	</ul>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UonDetails/03.jm.UonParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UonDetails/03.jm.UonParsers.html
deleted file mode 100644
index c3601d96c..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/30.jm.UonDetails/03.jm.UonParsers.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'UON Parsers', updated:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.uon.UonParser} class is used to parse UON into POJOs.
-	</p>	
-	<p>
-		The class hierarchy for the builder of this parser is:
-	</p>
-	<ul class='javatree'>
-		<li class='jac'>{@link oaj.Context.Builder}
-			<ul>
-				<li class='jac'>{@link oaj.BeanContextable.Builder}
-					<ul>
-						<li class='jac'>{@link oaj.parser.Parser.Builder}
-							<ul>
-								<li class='jac'>{@link oaj.parser.ReaderParser.Builder}
-									<ul>
-										<li class='jc'>{@link oaj.uon.UonParser.Builder}
-									</ul>
-								</li>
-							</ul>
-						</li>
-					</ul>
-				</li>
-			</ul>
-		</li>
-	</ul>
-	<p>
-		Refer to the builder javadocs for configurable settings.
-	</p>
-	<p>
-		The following pre-configured parsers are provided for convenience:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.uon.UonParser}
-			<ul class='javatreec'>
-				<li class='jf'>{@link oaj.uon.UonParser#DEFAULT DEFAULT}
-				<li class='jf'>{@link oaj.uon.UonParser#DEFAULT_DECODING DEFAULT_DECODING}			
-			</ul>
-		</li>
-	</ul>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.UrlEncodingDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.UrlEncodingDetails.html
deleted file mode 100644
index a6c7a9f42..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.UrlEncodingDetails.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'URL-Encoding Details'}
-
-<div class='topic'>
-	<p>
-		Juneau supports converting arbitrary POJOs to and from URL-encoded strings using ultra-efficient serializers 
-		and parsers.
-		The serializer converts POJOs directly to URL-encoded strings without the need for intermediate DOM objects 
-		using a highly-efficient state machine.
-		Likewise, the parser creates POJOs directly from URL-encoded strings without the need for intermediate DOM 
-		objects. 
-	</p>
-	<p>
-		Juneau uses UON (URL-Encoded Object Notation) for representing POJOs as URL-Encoded values in key-value pairs.  
-		The UON specification can be found <a href='doc-files/rfc_uon.txt'>here</a>.
-	</p>
-	<p>
-		The following example shows JSON for a typical bean:
-	</p>
-	<h5 class='figure'>Sample Beans</h5>
-	<p class='bjava'>
-		|	<jk>public class</jk> Person {
-		|		
-		|		<jc>// Bean properties</jc>
-		|		<jk>public</jk> String <jf>name</jf>;
-		|		<ja>@Swap</ja>(TemporalCalendarSwap.IsoInstant.<jk>class</jk>) <jk>public</jk> Calendar <jf>birthDate</jf>;
-		|		<jk>public</jk> List&lt;Address&gt; <jf>addresses</jf>; 
-		|	
-		|		<jc>// Getters/setters omitted</jc>
-		|	}
-		|	
-		|	<jk>public class</jk> Address {
-		|
-		|		<jc>// Bean properties</jc>
-		|		<jk>public</jk> String <jf>street</jf>, <jf>city</jf>;
-		|		<jk>public</jk> StateEnum <jf>state</jf>;
-		|		<jk>public int</jk> <jf>zip</jf>;
-		|		<jk>public boolean</jk> <jf>isCurrent</jf>;
-		|
-		|		<jc>// Getters/setters omitted</jc>
-		|	}	
-	</p>
-	<h5 class='figure'>Sample Code</h5>
-	<p class='bjava'>
-		|	Person <jv>person</jv> = <jk>new</jk> Person()
-		|		.name(<js>"John Smith"</js>)
-		|		.birthDate(<js>"1946-08-12T00:00:00Z"</js>)
-		|		.addresses(
-		|			<jk>new</jk> Address() 
-		|				.street(<js>"100 Main Street"</js>)
-		|				.city(<js>"Anywhereville"</js>)
-		|				.state(<jsf>NY</jsf>)
-		|				.zip(12345)
-		|				.isCurrent(<jk>true</jk>);
-		|		);
-	</p>
-	<h5 class='figure'>URL-Encoding</h5>
-	<p class='burlenc'>
-		|	<ua>name</ua>=<us>'John+Smith'</us>
-		|	&amp;<ua>birthDate</ua>=<us>'1946-08-12T00:00:00Z'</us>
-		|	&amp;<ua>addresses</ua>=@(
-		|		(
-		|			<ua>street</ua>=<us>'100 Main Street'</us>,
-		|			<ua>city</ua>=<us>Anywhereville</us>,
-		|			<ua>state</ua>=<us>NY</us>,
-		|			<ua>zip</ua>=<un>12345</un>,
-		|			<ua>isCurrent</ua>=<uk>true</uk>
-		|		)
-		|	)
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.UrlEncodingDetails/01.jm.UrlEncMethodology.html b/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.UrlEncodingDetails/01.jm.UrlEncMethodology.html
deleted file mode 100644
index dbb47709c..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.UrlEncodingDetails/01.jm.UrlEncMethodology.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'URL-Encoding Methodology'}
-
-<div class='topic'>
-	<h5 class='figure'>General methodology:</h5>
-	<table class='styled w800' style='border-collapse:collapse'>
-		<tr><th>Java type</th><th>JSON equivalent</th><th>UON</th></tr>
-		<tr>
-			<td>Maps/beans</td>
-			<td>OBJECT</td>
-			<td class='code'>
-				|	<ua>a1</ua>=(<ua>b1</ua>=<us>x1</us>,<ua>b2</ua>=<us>x2</us>)
-				|	<ua>a1</ua>=(<ua>b1</ua>=(<ua>c1</ua>=<us>x1</us>,<ua>c2</ua>=<us>x2</us>))
-			</td>
-		</tr>
-		<tr>
-			<td>Collections/arrays</td>
-			<td>ARRAY</td>
-			<td class='code'>
-				|	<ua>a1</ua>=@(<us>x1</us>,<us>x2</us>)
-				|	<ua>a1</ua>=@(@(<us>x1</us>,<us>x2</us>),@(<us>x3</us>,<us>x4</us>))
-				|	<ua>a1</ua>=@((<ua>b1</ua>=<us>x1</us>,<ua>b2</ua>=<us>x2</us>),(<ua>c1</ua>=<us>x1</us>,<ua>c2</ua>=<us>x2</us>))
-			</td>
-		</tr>
-		<tr>
-			<td>Booleans</td>
-			<td>BOOLEAN</td>
-			<td class='code'>
-				|	<ua>a1</ua>=<uk>true</uk>&amp;<ua>a2</ua>=<uk>false</uk>
-			</td>
-		</tr>
-		<tr>
-			<td>int/float/double/...</td>
-			<td>NUMBER</td>
-			<td class='code'>
-				|	<ua>a1</ua>=<un>123</un>&amp;<ua>a2</ua>=<un>1.23e1</un>
-			</td>
-		</tr>
-		<tr>
-			<td>null</td>
-			<td>NULL</td>
-			<td class='code'>
-				|	<ua>a1</ua>=<uk>null</uk>
-			</td>
-		</tr>
-		<tr>
-			<td>String</td>
-			<td>STRING</td>
-			<td class='code'>
-				|	<ua>a1</ua>=<us>foobar</us>
-				|	<ua>a1</ua>=<us>'true'</us>
-				|	<ua>a1</ua>=<us>'null'</us>
-				|	<ua>a1</ua>=<us>'123'</us>
-				|	<ua>a1</ua>=<us>' string with whitespace '</us>
-				|	<ua>a1</ua>=<us>'string with ~'escaped~' quotes'</us>
-			</td>
-		</tr>
-	</table>
-	<p>
-		Refer to the <a href='doc-files/rfc_uon.txt'>UON specification</a> for a complete set of syntax rules.		
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.UrlEncodingDetails/02.jm.UrlEncSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.UrlEncodingDetails/02.jm.UrlEncSerializers.html
deleted file mode 100644
index f3adbb671..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.UrlEncodingDetails/02.jm.UrlEncSerializers.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'URL-Encoding Serializers', updated:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.urlencoding.UrlEncodingSerializer} class is used to serialize POJOs into URL-Encoding.
-	</p>	
-	<p>
-		The class hierarchy for the builder of this serializer is:
-	</p>
-	<ul class='javatree'>
-		<li class='jac'>{@link oaj.Context.Builder}
-			<ul>
-				<li class='jac'>{@link oaj.BeanContextable.Builder}
-					<ul>
-						<li class='jac'>{@link oaj.BeanTraverseContext.Builder}
-							<ul>
-								<li class='jac'>{@link oaj.serializer.Serializer.Builder}
-									<ul>
-										<li class='jac'>{@link oaj.serializer.WriterSerializer.Builder}
-											<ul>
-												<li class='jc'>{@link oaj.uon.UonSerializer.Builder}
-													<ul>
-														<li class='jc'>{@link oaj.urlencoding.UrlEncodingSerializer.Builder}
-													</ul>
-												</li>
-											</ul>
-										</li>
-									</ul>
-								</li>
-							</ul>
-						</li>
-					</ul>
-				</li>
-			</ul>
-		</li>
-	</ul>
-	<p>
-		Refer to the builder javadocs for configurable settings.
-	</p>
-	<p>
-		The following pre-configured serializers are provided for convenience:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.urlencoding.UrlEncodingSerializer}
-			<ul class='javatreec'>
-				<li class='jf'>{@link oaj.urlencoding.UrlEncodingSerializer#DEFAULT DEFAULT}
-				<li class='jf'>{@link oaj.urlencoding.UrlEncodingSerializer#DEFAULT_EXPANDED DEFAULT_EXPANDED}
-				<li class='jf'>{@link oaj.urlencoding.UrlEncodingSerializer#DEFAULT_PLAINTEXT DEFAULT_PLAINTEXT}
-				<li class='jf'>{@link oaj.urlencoding.UrlEncodingSerializer#DEFAULT_READABLE DEFAULT_READABLE}		
-			</ul>
-		</li>
-	</ul>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.UrlEncodingDetails/03.jm.UrlEncParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.UrlEncodingDetails/03.jm.UrlEncParsers.html
deleted file mode 100644
index 546428348..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.UrlEncodingDetails/03.jm.UrlEncParsers.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'URL-Encoding Parsers', updated:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.urlencoding.UrlEncodingParser} class is used to parse URL-Encoding into POJOs.
-	</p>	
-	<p>
-		The class hierarchy for the builder of this parser is:
-	</p>
-	<ul class='javatree'>
-		<li class='jac'>{@link oaj.Context.Builder}
-			<ul>
-				<li class='jac'>{@link oaj.BeanContextable.Builder}
-					<ul>
-						<li class='jac'>{@link oaj.parser.Parser.Builder}
-							<ul>
-								<li class='jac'>{@link oaj.parser.ReaderParser.Builder}
-									<ul>
-										<li class='jc'>{@link oaj.uon.UonParser.Builder}
-											<ul>
-												<li class='jc'>{@link oaj.urlencoding.UrlEncodingParser.Builder}
-											</ul>
-										</li>
-									</ul>
-								</li>
-							</ul>
-						</li>
-					</ul>
-				</li>
-			</ul>
-		</li>
-	</ul>
-	<p>
-		Refer to the builder javadocs for configurable settings.
-	</p>
-	<p>
-		The following pre-configured parsers are provided for convenience:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.urlencoding.UrlEncodingParser}
-			<ul class='javatreec'>
-				<li class='jf'>{@link oaj.urlencoding.UrlEncodingParser#DEFAULT DEFAULT}
-			</ul>
-		</li>
-	</ul>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.UrlEncodingDetails/04.jm.UrlEncodingAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.UrlEncodingDetails/04.jm.UrlEncodingAnnotation.html
deleted file mode 100644
index ec9154e7b..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/31.jm.UrlEncodingDetails/04.jm.UrlEncodingAnnotation.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'@UrlEncoding Annotation'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.urlencoding.annotation.UrlEncoding @UrlEncoding} annotation
-		is used to override the behavior of {@link oaj.urlencoding.UrlEncodingSerializer} on individual bean classes or properties.
-	</p>
-	<ul class='javatree'>
-		<li class='ja'>{@link oaj.urlencoding.annotation.UrlEncoding}
-			<ul class='javatreec'>
-				<li class='jma'>{@link oaj.urlencoding.annotation.UrlEncoding#expandedParams() expandedParams}
-			</ul>
-		</li>
-	</ul>		
-	<p>
-		The {@link oaj.urlencoding.annotation.UrlEncoding#expandedParams() expandedParams} setting is
-		used to force bean properties of type array or Collection to be expanded into multiple key/value pairings.
-		It's identical in behavior to using the {@del oaj.urlencoding.UrlEncodingSerializer#URLENC_expandedParams}
-		and {@del oaj.urlencoding.UrlEncodingParser#URLENC_expandedParams} properties, but applies to only individual bean properties.
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.MsgPackDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.MsgPackDetails.html
deleted file mode 100644
index a185395c8..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.MsgPackDetails.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'MessagePack Details'}
-
-<div class='topic'>
-	<p>
-		Juneau supports converting arbitrary POJOs to and from MessagePack using ultra-efficient serializers 
-		and parsers.
-	</p>
-	<p>
-		MessagePack is a compact binary form of JSON.
-		The serialization support for MessagePack mirrors that of JSON.
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.MsgPackDetails/01.jm.MsgPackSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.MsgPackDetails/01.jm.MsgPackSerializers.html
deleted file mode 100644
index 84eac227c..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.MsgPackDetails/01.jm.MsgPackSerializers.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'MessagePack Serializers', updated:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.msgpack.MsgPackSerializer} class is used to serialize POJOs into MessagePack.
-	</p>	
-	<p>
-		The class hierarchy for the builder of this serializer is:
-	</p>
-	<ul class='javatree'>
-		<li class='jac'>{@link oaj.Context.Builder}
-			<ul>
-				<li class='jac'>{@link oaj.BeanContextable.Builder}
-					<ul>
-						<li class='jac'>{@link oaj.BeanTraverseContext.Builder}
-							<ul>
-								<li class='jac'>{@link oaj.serializer.Serializer.Builder}
-									<ul>
-										<li class='jac'>{@link oaj.serializer.OutputStreamSerializer.Builder}
-											<ul>
-												<li class='jc'>{@link oaj.msgpack.MsgPackSerializer.Builder}
-											</ul>
-										</li>
-									</ul>
-								</li>
-							</ul>
-						</li>
-					</ul>
-				</li>
-			</ul>
-		</li>
-	</ul>
-	<p>
-		Refer to the builder javadocs for configurable settings.
-	</p>
-	<p>
-		The following pre-configured serializers are provided for convenience:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.msgpack.MsgPackSerializer}
-			<ul class='javatreec'>
-				<li class='jf'>{@link oaj.msgpack.MsgPackSerializer#DEFAULT DEFAULT}
-			</ul>
-		</li>
-	</ul>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.MsgPackDetails/02.jm.MsgPackParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.MsgPackDetails/02.jm.MsgPackParsers.html
deleted file mode 100644
index 42b7aaece..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/32.jm.MsgPackDetails/02.jm.MsgPackParsers.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'MessagePack Parsers', updated:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.msgpack.MsgPackParser} class is used to parse MessagePack into POJOs.
-	</p>	
-	<p>
-		The class hierarchy for the builder of this parser is:
-	</p>
-	<ul class='javatree'>
-		<li class='jac'>{@link oaj.Context.Builder}
-			<ul>
-				<li class='jac'>{@link oaj.BeanContextable.Builder}
-					<ul>
-						<li class='jac'>{@link oaj.parser.Parser.Builder}
-							<ul>
-								<li class='jac'>{@link oaj.parser.InputStreamParser.Builder}
-									<ul>
-										<li class='jc'>{@link oaj.msgpack.MsgPackParser.Builder}
-									</ul>
-								</li>
-							</ul>
-						</li>
-					</ul>
-				</li>
-			</ul>
-		</li>
-	</ul>
-	<p>
-		Refer to the builder javadocs for configurable settings.
-	</p>
-	<p>
-		The following pre-configured parsers are provided for convenience:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.msgpack.MsgPackParser}
-			<ul class='javatreec'>
-				<li class='jf'>{@link oaj.msgpack.MsgPackParser#DEFAULT DEFAULT}
-			</ul>
-		</li>
-	</ul>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/33.jm.OpenApiDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/33.jm.OpenApiDetails.html
deleted file mode 100644
index ba5e40e6c..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/33.jm.OpenApiDetails.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'OpenAPI Details', updated:'8.2.0'} 
-
-<div class='topic'>
-	<p>
-		Juneau supports converting arbitrary POJOs to and from strings using OpenAPI-based schema rules. 
-	</p>
-	<p>
-		The relevant classes for using OpenAPI-based serialization are:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.oapi.OpenApiSerializer} - Converts POJOs to strings.
-		<li class='jc'>{@link oaj.oapi.OpenApiParser} - Converts strings to POJOs.
-		<li class='jc'>{@link oaj.httppart.HttpPartSchema} - Defines the schema for your POJO.
-	</ul>
-	<p>
-		The {@link oaj.httppart.HttpPartSchema} class is used to define the formatting and 
-		validations for a POJO.
-		It's used in conjunction with the serializer and parser to produce and consume HTTP parts based on 
-		OpenAPI rules.
-	</p>
-	<p>
-		Later in the rest-server and rest-client sections, we also describe how the following annotations
-		can be applied to method parameters and class types to define the schema for various HTTP parts:
-	</p>
-	<ul class='javatreec'>
-		<li class='ja'>{@link oaj.http.annotation.Content}
-		<li class='ja'>{@link oaj.http.annotation.Header}
-		<li class='ja'>{@link oaj.http.annotation.Query}
-		<li class='ja'>{@link oaj.http.annotation.FormData}
-		<li class='ja'>{@link oaj.http.annotation.Path}
-		<li class='ja'>{@link oaj.http.annotation.Response}
-		<li class='ja'>{@link oaj.http.annotation.ResponseHeader}
-	</ul>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/33.jm.OpenApiDetails/01.jm.OpenApiMethodology.html b/juneau-doc/docs/Topics/02.juneau-marshall/33.jm.OpenApiDetails/01.jm.OpenApiMethodology.html
deleted file mode 100644
index 9ff0bd55c..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/33.jm.OpenApiDetails/01.jm.OpenApiMethodology.html
+++ /dev/null
@@ -1,159 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'OpenAPI Methodology', updated:'8.2.0'} 
-
-<div class='topic'>
-	<p>
-		Unlike the other Juneau serializers and parsers that convert input and output directly to-and-from POJOs,
-		the OpenAPI serializers and parsers use intermediate objects based on the <c>type</c> and <c>format</c>
-		of the schema.
-	</p>
-	<p>
-		The following table shows the "natural" intermediate type of the object based on the <c>type/format</c>:
-	</p>
-	<table class='styled w800'>
-		<tr><th>Type</th><th>Format</th><th>Intermediate Java Type</th></tr>
-		<tr class='dark bb'>
-			<td rowspan='4'><c>string</c> or empty</td>
-			<td><c>byte<br>binary<br>binary-spaced</c></td>
-			<td><c><jk>byte</jk>[]</c></td>
-		</tr>
-		<tr class='dark bb'>
-			<td><c>date<br>date-time</c></td>
-			<td>{@link java.util.Calendar}</td>
-		</tr>
-		<tr class='dark bb'>
-			<td><c>uon</c></td>
-			<td>No intermediate type.<br>(serialized directly to/from POJO)</td>
-		</tr>
-		<tr class='dark bb'>
-			<td>empty</td>
-			<td>{@link java.lang.String}</td>
-		</tr>
-		<tr class='light bb'>
-			<td rowspan='1'><c>boolean</c></td>
-			<td>empty</td>
-			<td>{@link java.lang.Boolean}</td>
-		</tr>
-		<tr class='dark bb'>
-			<td rowspan='2'><c>integer</c></td>
-			<td><c>int32</c></td>
-			<td>{@link java.lang.Integer}</td>
-		</tr>
-		<tr class='dark bb'>
-			<td><c>int64</c></td>
-			<td>{@link java.lang.Long}</td>
-		</tr>
-		<tr class='light bb'>
-			<td rowspan='2'><c>number</c></td>
-			<td><c>float</c></td>
-			<td>{@link java.lang.Float}</td>
-		</tr>
-		<tr class='light bb'>
-			<td><c>double</c></td>
-			<td>{@link java.lang.Double}</td>
-		</tr>
-		<tr class='dark bb'>
-			<td rowspan='2'><c>array</c></td>
-			<td>empty</td>
-			<td>Arrays of intermediate types on this list.</td>
-		</tr>
-		<tr class='dark bb'>
-			<td><c>uon</c></td>
-			<td>No intermediate type.<br>(serialized directly to/from POJO)</td>
-		</tr>
-		<tr class='light bb'>
-			<td rowspan='2'><c>object</c></td>
-			<td>empty</td>
-			<td><c>Map&lt;String,Object&gt;</c></td>
-		</tr>
-		<tr class='light bb'>
-			<td><c>uon</c></td>
-			<td>No intermediate type.<br>(serialized directly to/from POJO)</td>
-		</tr>
-	</table>
-	<p>
-		The valid POJO types for serializing/parsing are based on the intermediate types above.
-		As a general rule, any POJOs that are the intermediate type or transformable to or from
-		the intermediate type are valid POJO types.
-	</p>
-	<p>
-		For example, the following POJO type can be transformed to and from a byte array.
-	</p>
-	<p class='bjava'>
-		|	<jc>// Sample POJO class convertable to and from a byte[].</jc>
-		|	<jk>public class</jk> MyPojo {
-		|		
-		|		<jc>// Constructor used by parser.</jc>
-		|		<jk>public</jk> MyPojo(<jk>byte</jk>[] <jv>value</jv>) {...}
-		|	
-		|		<jc>// toX method used by serializer.</jc>
-		|		<jk>public byte</jk>[] toBytes() {...}
-		|	}
-	</p>
-	<p>
-		This example shows how that POJO can be converted to a BASE64-encoded string.
-	</p>
-	<p class='bjava'>
-		|	<jc>// Construct a POJO.</jc>
-		|	MyPojo <jv>myPojo</jv> = ...;
-		|	
-		|	<jc>// Define a schema.</jc>
-		|	HttpPartSchema <jv>schema</jv> = HttpPartSchema.<jsm>tByte</jsm>().build();
-		|
-		|	<jc>// Convert POJO to BASE64-encoded string.</jc>
-		|	HttpPartSerializer <jv>serializer</jv> = OpenApiSerializer.<jsf>DEFAULT</jsf>;
-		|	String <jv>httpPart</jv> = <jv>serializer</jv>.serialize(<jv>schema</jv>, <jv>myPojo</jv>);
-		|	
-		|	<jc>// Convert BASE64-encoded string back into a POJO.</jc>
-		|	HttpPartParser <jv>parser</jv> = OpenApiParser.<jsf>DEFAULT</jsf>;
-		|	<jv>myPojo</jv> = <jv>parser</jv>.parse(<jv>schema</jv>, <jv>httpPart</jv>, MyPojo.<jk>class</jk>);
-	</p>
-	<p>
-		In addition to defining format, the schema also allows for validations of the serialized form.
-	</p>
-	<p class='bjava'>
-		|	<jc>// Construct a POJO.</jc>
-		|	MyPojo <jv>myPojo</jv> = ...;
-		|	
-		|	<jc>// Define a schema.</jc>
-		|	<jc>// Serialized string must be no smaller than 100 characters.</jc>
-		|	HttpPartSchema <jv>schema</jv> = HttpPartSchema.<jsm>tByte</jsm>().minLength(100).build();
-		|
-		|	<jc>// Convert POJO to BASE64-encoded string.</jc>
-		|	HttpPartSerializer <jv>serializer</jv> = OpenApiSerializer.<jsf>DEFAULT</jsf>;
-		|	String <jv>httpPart</jv>;
-		|	<jk>try</jk> {
-		|		<jv>httpPart</jv> = <jv>serializer</jv>.serialize(<jv>schema</jv>, <jv>myPojo</jv>);
-		|	} <jk>catch</jk> (SchemaValidationException <jv>e</jv>) {
-		|		<jc>// Oops, output too small.</jc>
-		|	}
-		|	
-		|	<jc>// Convert BASE64-encoded string back into a POJO.</jc>
-		|	HttpPartParser <jv>parser</jv> = OpenApiParser.<jsf>DEFAULT</jsf>;
-		|	<jk>try</jk> {
-		|		<jv>myPojo</jv> = <jv>parser</jv>.parse(<jv>schema</jv>, <jv>httpPart</jv>, MyPojo.<jk>class</jk>);
-		|	} <jk>catch</jk> (SchemaValidationException <jv>e</jv>) {
-		|		<jc>// Oops, input too small.</jc>
-		|	}
-	</p>
-	<p>
-		It looks simple, but the implementation is highly sophisticated being able to serialize and parse and validate using complex schemas.
-	</p>
-	<p>
-		The next sections go more into depth on serializing and parsing various POJO types.
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/33.jm.OpenApiDetails/02.jm.OpenApiSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/33.jm.OpenApiDetails/02.jm.OpenApiSerializers.html
deleted file mode 100644
index e32942402..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/33.jm.OpenApiDetails/02.jm.OpenApiSerializers.html
+++ /dev/null
@@ -1,527 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'OpenAPI Serializers', updated:'8.2.0,9.0.0'} 
-
-<div class='topic'>
-	<p>
-		The {@link oaj.oapi.OpenApiSerializer} class is used to convert POJOs to HTTP parts.
-	</p>
-	<p>
-		The class hierarchy for the builder of this serializer is:
-	</p>
-	<ul class='javatree'>
-		<li class='jac'>{@link oaj.Context.Builder}
-			<ul>
-				<li class='jac'>{@link oaj.BeanContextable.Builder}
-					<ul>
-						<li class='jac'>{@link oaj.BeanTraverseContext.Builder}
-							<ul>
-								<li class='jac'>{@link oaj.serializer.Serializer.Builder}
-									<ul>
-										<li class='jac'>{@link oaj.serializer.WriterSerializer.Builder}
-											<ul>
-												<li class='jc'>{@link oaj.uon.UonSerializer.Builder}
-													<ul>
-														<li class='jc'>{@link oaj.oapi.OpenApiSerializer.Builder}
-													</ul>
-												</li>
-											</ul>
-										</li>
-									</ul>
-								</li>
-							</ul>
-						</li>
-					</ul>
-				</li>
-			</ul>
-		</li>
-	</ul>
-	<p>
-		Refer to the builder javadocs for configurable settings.
-	</p>
-	<p>
-		Later we'll describe how to use HTTP-Part annotations to define OpenAPI schemas for serialization and parsing
-		of HTTP parts.  
-		The following example is a preview showing an HTTP body defined as pipe-delimited list of comma-delimited numbers (e.g. <js>"1,2,3|4,5,6|7,8,9"</js>):
-	</p>
-	<p class='bjava'>
-		|	<ja>@RestPost</ja>(<js>"/2dLongArray"</js>)	
-		|	<jk>public void</jk> post2dLongArray(
-		|		<ja>@Content</ja>(
-		|			schema=<ja>@Schema</ja>(
-		|				type=<js>"array"</js>,
-		|				collectionFormat=<js>"pipes"</js>,
-		|				items=<ja>@Items</ja>(
-		|					type=<js>"array"</js>,
-		|					collectionFormat=<js>"csv"</js>,
-		|					items=<ja>@SubItems</ja>(
-		|						type=<js>"integer"</js>, 
-		|						format=<js>"int64"</js>,
-		|						minimum=<js>"0"</js>,
-		|						maximum=<js>"100"</js>
-		|						minLength=1,
-		|						maxLength=10
-		|					)
-		|				)
-		|				minLength=1,
-		|				maxLength=10
-		|			)
-		|		)
-		|		Long[][] body
-		|	) {...}
-		|
-		|	<jc>// Alternate shortened format.</jc>
-		|	<ja>@RestPost</ja>(<js>"/2dLongArray"</js>)	
-		|	<jk>public void</jk> post2dLongArray(
-		|		<ja>@Content</ja>(
-		|			schema=<ja>@Schema</ja>(
-		|				t=<js>"array"</js>,
-		|				cf=<js>"pipes"</js>,
-		|				i=<ja>@Items</ja>(
-		|					t=<js>"array"</js>,
-		|					cf=<js>"csv"</js>,
-		|					i=<ja>@SubItems</ja>(
-		|						t=<js>"integer"</js>, 
-		|						f=<js>"int64"</js>,
-		|						min=<js>"0"</js>,
-		|						max=<js>"100"</js>
-		|						minl=1,
-		|						maxl=10
-		|					)
-		|				)
-		|				minl=1,
-		|				maxl=10
-		|			)
-		|		)
-		|		Long[][] body
-		|	) {...}
-	</p>
-	<p>
-		Under-the-covers, this gets converted to the following schema object:
-	</p>
-	<p class='bjava'>
-		|	HttpPartSchema <jv>schema</jv> = HttpPartSchema.<jsm>create</jsm>()
-		|		.items(
-		|			HttpPartSchema.<jsm>create</jsm>()
-		|				.type(<js>"array"</js>)
-		|				.collectionFormat(<js>"pipes"</js>)
-		|				.items(
-		|					HttpPartSchema.<jsm>create</jsm>()
-		|						.type(<js>"array"</js>)
-		|						.collectionFormat(<js>"csv"</js>)
-		|						.items(
-		|							HttpPartSchema.<jsm>create</jsm>()
-		|								.type(<js>"integer"</js>) 
-		|								.format(<js>"int64"</js>)
-		|								.minimum(0)
-		|								.maximum(100)
-		|								.minLength(1)
-		|								.maxLength(10)
-		|						)
-		|				)
-		|		)
-		|		.build();
-	</p>
-	<p>
-		Various convenience methods exist for shortening this code.
-	</p>
-	<p class='bjava'>
-		|	HttpPartSchema <jv>schema</jv> = HttpPartSchema.<jsm>tArrayPipes</jsm>(
-		|		<jsm>tArrayCsv</jsm>(
-		|			<jsm>tInt64</jsm>().minimum(0).maximum(100).minLength(1).maxLength(10)
-		|		)
-		|	).build();
-	</p>
-	<p>
-		The following code shows how the schema above can be used to create our pipe+csv list of numbers:
-	</p>
-	<p class='bjava'>
-		|	<jc>// Our POJO being serialized.</jc>
-		|	Long[][] <jv>input</jv> = ....
-		|	
-		|	<jc>// The serializer to use.</jc>
-		|	HttpPartSerializer <jv>serializer</jv> = OpenApiSerializer.<jsf>DEFAULT</jsf>;
-		|	
-		|	<jc>// Convert POJO to a string.</jc>
-		|	<jk>try</jk> {
-		|		String <jv>httpPart</jv> = <jv>serializer</jv>.serialize(<jv>schema</jv>, <jv>input</jv>);
-		|	} <jk>catch</jk> (SchemaValidationException <jv>e</jv>) {
-		|		<jc>// Oops, one of the restrictions were not met.</jc>
-		|	}
-	</p>
-	<p>
-		As a general rule, any POJO convertible to the intermediate type for the <c>type/format</c> of the schema can
-		be serialized using the OpenAPI serializer.
-		Here are the rules of POJO types allowed for various type/format combinations:
-	</p>
-	<table class='styled w800'>
-		<tr><th>Type</th><th>Format</th><th>Valid parameter types</th></tr>
-		<tr class='dark bb'>
-			<td rowspan='4'><c>string</c> or empty</td>
-			<td><c>byte<br>binary<br>binary-spaced</c></td>
-			<td>
-				<ul>
-					<li><c><jk>byte</jk>[]</c> (default)
-					<li>{@link java.io.InputStream}
-					<li>{@link java.io.Reader} - Read into String and then converted using {@link java.lang.String#getBytes()}.
-					<li>{@link java.lang.Object} - Converted to String and then converted using {@link java.lang.String#getBytes()}.
-					<li>Any POJO transformable to a <c><jk>byte</jk>[]</c> via the following methods:
-						<ul>
-							<li><c><jk>public byte</jk>[] toBytes() {...}</c>
-							<li><c><jk>public byte</jk>[]</jk> toFoo() {...}</c> (any method name starting with "to")
-						</ul>
-					<li>Any POJO transformable to a <c><jk>byte</jk>[]</c> via an {@link oaj.swap.ObjectSwap}.
-				</ul>
-			</td>
-		</tr>
-		<tr class='dark bb'>
-			<td><c>date<br>date-time</c></td>
-			<td>
-				<ul>
-					<li>{@link java.util.Calendar} (default)
-					<li>{@link java.util.Date}
-					<li>Any POJO transformable to a {@link java.util.Calendar} via the following methods:
-						<ul>
-							<li><c><jk>public</jk> Calendar toCalendar() {...}</c>
-							<li><c><jk>public</jk> Calendar toFoo() {...}</c> (any method name starting with "to")
-						</ul>
-					<li>Any POJO transformable to a {@link java.util.Calendar} via an {@link oaj.swap.ObjectSwap}.
-				</ul>
-			</td>
-		</tr>
-		<tr class='dark bb'>
-			<td><c>uon</c></td>
-			<td>
-				<ul>
-					<li>Any {@doc jm.PojoCategories Serializable POJO} type.
-				</ul>
-			</td>
-		</tr>
-		<tr class='dark bb'>
-			<td>empty</td>
-			<td>
-				<ul>
-					<li>{@link java.lang.String} (default)
-					<li>Any POJO transformable to a {@link java.lang.String} via the following methods:
-						<ul>
-							<li><c><jk>public</jk> String toString() {...}</c>
-						</ul>
-					<li>Any POJO transformable to a {@link java.lang.String} via an {@link oaj.swap.ObjectSwap}.
-				</ul>
-			</td>
-		</tr>
-		<tr class='light bb'>
-			<td rowspan='1'><c>boolean</c></td>
-			<td>empty</td>
-			<td>
-				<ul>
-					<li>{@link java.lang.Boolean} (default)
-					<li><jk>boolean</jk>
-					<li>{@link java.lang.String} - Converted to a {@link java.lang.Boolean}.
-					<li>Any POJO transformable to a {@link java.lang.Boolean} via the following methods:
-						<ul>
-							<li><c><jk>public</jk> Boolean toBoolean() {...}</c>
-							<li><c><jk>public</jk> Boolean toFoo() {...}</c> (any method name starting with "to")
-						</ul>
-					<li>Any POJO transformable to a {@link java.lang.Boolean} via an {@link oaj.swap.ObjectSwap}.
-				</ul>
-			</td>
-		</tr>
-		<tr class='dark bb'>
-			<td rowspan='2'><c>integer</c></td>
-			<td><c>int32</c></td>
-			<td>
-				<ul>
-					<li>{@link java.lang.Integer} (default)
-					<li><jk>int</jk>
-					<li>{@link java.lang.String} - Converted to an {@link java.lang.String}.
-					<li>Any POJO transformable to an {@link java.lang.Integer} via the following methods:
-						<ul>
-							<li><c><jk>public</jk> Integer toInteger() {...}</c>
-							<li><c><jk>public</jk> Integer toFoo() {...}</c> (any method name starting with "to")
-						</ul>
-					<li>Any POJO transformable to an {@link java.lang.Integer} via an {@link oaj.swap.ObjectSwap}.
-				</ul>
-			</td>
-		</tr>
-		<tr class='dark bb'>
-			<td><c>int64</c></td>
-			<td>
-				<ul>
-					<li>{@link java.lang.Long} (default)
-					<li><jk>long</jk>
-					<li>{@link java.lang.String} - Converted to a {@link java.lang.Long}.
-					<li>Any POJO transformable to a {@link java.lang.Long} via the following methods:
-						<ul>
-							<li><c><jk>public</jk> Long toLong() {...}</c>
-							<li><c><jk>public</jk> Long toFoo() {...}</c> (any method name starting with "to")
-						</ul>
-					<li>Any POJO transformable to a {@link java.lang.Long} via an {@link oaj.swap.ObjectSwap}.
-				</ul>
-			</td>
-		</tr>
-		<tr class='light bb'>
-			<td rowspan='2'><c>number</c></td>
-			<td><c>float</c></td>
-			<td>
-				<ul>
-					<li>{@link java.lang.Float} (default)
-					<li><jk>float</jk>
-					<li>{@link java.lang.String} - Converted to a {@link java.lang.Float}.
-					<li>Any POJO transformable to a {@link java.lang.Float} via the following methods:
-						<ul>
-							<li><c><jk>public</jk> Float toFloat() {...}</c>
-							<li><c><jk>public</jk> Float toFoo() {...}</c> (any method name starting with "to")
-						</ul>
-					<li>Any POJO transformable to a {@link java.lang.Float} via an {@link oaj.swap.ObjectSwap}.
-				</ul>
-			</td>
-		</tr>
-		<tr class='light bb'>
-			<td><c>double</c></td>
-			<td>
-				<ul>
-					<li>{@link java.lang.Double} (default)
-					<li><jk>double</jk>
-					<li>{@link java.lang.String} - Converted to a {@link java.lang.Double}.
-					<li>Any POJO transformable to a {@link java.lang.Double} via the following methods:
-						<ul>
-							<li><c><jk>public</jk> Double toDouble() {...}</c>
-							<li><c><jk>public</jk> Double toFoo() {...}</c> (any method name starting with "to")
-						</ul>
-					<li>Any POJO transformable to a {@link java.lang.Double} via an {@link oaj.swap.ObjectSwap}.
-				</ul>
-			</td>
-		</tr>
-		<tr class='dark bb'>
-			<td rowspan='2'><c>array</c></td>
-			<td>empty</td>
-			<td>
-				<ul>
-					<li>Arrays or Collections of any defaults on this list.
-					<li>Any POJO transformable to arrays of the default types (e.g. <c>Integer[]</c>, <c>Boolean[][]</c>, etc...).
-						<br>For example:
-						<ul>
-							<li><c><jk>public</jk> Boolean[][] toFoo() {...}</c> (any method name starting with "to")
-						</ul>
-					<li>Any POJO transformable to arrays of the default types via an {@link oaj.swap.ObjectSwap}
-				</ul>
-			</td>
-		</tr>
-		<tr class='dark bb'>
-			<td><c>uon</c></td>
-			<td>
-				<ul>
-					<li>Any {@doc jm.PojoCategories Serializable POJO} type.
-				</ul>
-			</td>
-		</tr>
-		<tr class='light bb'>
-			<td rowspan='2'><c>object</c></td>
-			<td>empty</td>
-			<td>
-				<ul>
-					<li><c>Map&lt;String,Object&gt;</c> (default)
-					<li>Beans with properties of anything on this list.
-					<li>Any POJO transformable to a map via an {@link oaj.swap.ObjectSwap}
-				</ul>
-			</td>
-		</tr>
-		<tr class='light bb'>
-			<td><c>uon</c></td>
-			<td>
-				<ul>
-					<li>Any {@doc jm.PojoCategories Serializable POJO} type.
-				</ul>
-			</td>
-		</tr>
-	</table>
-	<p>
-		For arrays, an example of "Any POJO transformable to arrays of the default types" is:
-	</p>
-	<p class='bjava'>
-		|	<jc>// Sample POJO class convertable to a Long[][].</jc>
-		|	<jk>public class</jk> MyPojo {
-		|		
-		|		<jc>// toX method used by serializer.</jc>
-		|		<jk>public</jk> Long[][] to2dLongs() {...}
-		|	}
-	</p>
-	<p>
-		In the example above, our POJO class can be used to create our pipe-delimited list of comma-delimited numbers: 
-	</p>
-	<p class='bjava'>
-		|	<jc>// Our POJO being serialized.</jc>
-		|	MyPojo <jv>input</jv> = ....
-		|	
-		|	<jc>// The serializer to use.</jc>
-		|	HttpPartSerializer <jv>serializer</jv> = OpenApiSerializer.<jsf>DEFAULT</jsf>;
-		|	
-		|	<jc>// Convert POJO to a string.</jc>
-		|	<jk>try</jk> {
-		|		String <jv>httpPart</jv> = <jv>serializer</jv>.serialize(<jv>schema</jv>, <jv>input</jv>);
-		|	} <jk>catch</jk> (SchemaValidationException <jv>e</jv>) {
-		|		<jc>// Oops, one of the restrictions were not met.</jc>
-		|	}
-	</p>
-	<p>
-		The <c>object</c> type is not officially part of the OpenAPI standard.  
-		However, Juneau supports serializing Maps and beans to HTTP parts using UON notation.
-	</p>
-	<p>
-		The following shows an example of a bean with several properties of various types.
-	</p>
-	<p class='bjava'>
-		|	<jk>public class</jk> MyBean {
-		|		<jk>private static byte</jk>[] <jsf>FOOB</jsf> = <js>"foo"</js>.getBytes();
-		|
-		|		<jk>public</jk> String <jf>f1</jf> = <js>"foo"</js>;
-		|		<jk>public byte</jk>[] <jf>f2</jf> = <jsf>FOOB</jsf>;
-		|		<jk>public byte</jk>[] <jf>f3</jf> = <jsf>FOOB</jsf>;
-		|		<jk>public byte</jk>[] <jf>f4</jf> = <jsf>FOOB</jsf>;
-		|		<jk>public</jk> Calendar <jf>f5</jf> = <jsm>parseIsoCalendar</jsm>(<js>"2012-12-21T12:34:56Z"</js>);
-		|		<jk>public</jk> String <jf>f6</jf> = <js>"foo"</js>;
-		|		<jk>public int</jk> <jf>f7</jf> = 1;
-		|		<jk>public</jk> Long <jf>f8</jf> = 2l;
-		|		<jk>public float</jk> <jf>f9</jf> = 1.0;
-		|		<jk>public</jk> Double <jf>f10</jf> = 1.0;
-		|		<jk>public</jk> Boolean <jf>f11</jf> = <jk>true</jk>;
-		|		<jk>public</jk> Object <jf>fExtra</jf> = "1";
-		|	}
-	</p>
-	<p>
-		We define the following schema:
-	</p>
-	<p class='bjava'>
-		|	<jk>import static</jk> org.apache.juneau.httppart.HttpPartSchema.*;
-		|	
-		|	HttpPartSchema <jv>schema</jv> = tObject()
-		|		.prop(<js>"f1"</js>, <jsm>tString</jsm>())
-		|		.prop(<js>"f2"</js>, <jsm>tByte</jsm>())
-		|		.prop(<js>"f3"</js>, <jsm>tBinary</jsm>())
-		|		.prop(<js>"f4"</js>, <jsm>tBinarySpaced</jsm>())
-		|		.prop(<js>"f5"</js>, <jsm>tDateTime</jsm>(>))
-		|		.prop(<js>"f6"</js>, <jsm>tUon</jsm>())
-		|		.prop(<js>"f7"</js>, <jsm>tInteger</jsm>())
-		|		.prop(<js>"f8"</js>, <jsm>tInt64</jsm>())
-		|		.prop(<js>"f9"</js>, <jsm>tNumber</jsm>())
-		|		.prop(<js>"f10"</js>, <jsm>tDouble</jsm>())
-		|		.prop(<js>"f11"</js>, <jsm>tBoolean</jsm>())
-		|		.ap(<jsm>tInteger</jsm>())
-		|		.build();
-	</p>
-	<p>
-		Then we serialize our bean:
-	</p>
-	<p class='bjava'>
-		|	HttpPartSerializer <jv>serializer</jv> = OpenApiSerializer.<jsf>DEFAULT</jsf>;
-		|	String <jv>httpPart</jv> = <jv>serializer</jv>.serialize(<jv>schema</jv>, <jk>new</jk> MyBean());
-	</p>
-	<p>
-		The results of this serialization is shown below:
-	</p>
-	<p class='buon'>
-		|	(
-		|		f1=foo,
-		|		f2=Zm9v,
-		|		f3=666F6F,
-		|		f4='66 6F 6F',
-		|		f5=2012-12-21T12:34:56Z,
-		|		f6=foo,
-		|		f7=1,
-		|		f8=2,
-		|		f9=1.0,
-		|		f10=1.0,
-		|		f11=true,
-		|		fExtra=1
-		|	)
-	</p>
-	<p>
-		The following is an example of a bean with various array property types:
-	</p>
-	<p class='bjava'>
-		|	<jk>public class</jk> MyBean {
-		|		<jk>private static byte</jk>[] <jsf>FOOB</jsf> = <js>"foo"</js>.getBytes();
-		|	
-		|		<jk>public</jk> String[] <jf>f1</jf> = {<js>"a,b"</js>,<jk>null</jk>}, 
-		|		<jk>public byte</jk>[][] <jf>f2</jf> = <jk>new byte</jk>[][]{<jsf>FOOB</jsf>,<jk>null</jk>}, 
-		|		<jk>public byte</jk>[][] <jf>f3</jf> = <jk>new byte</jk>[][]{<jsf>FOOB</jsf>,<jk>null</jk>},
-		|		<jk>public byte</jk>[][] <jf>f4</jf> = <jk>new byte</jk>[][]{<jsf>FOOB</jsf>,<jk>null</jk>},
-		|		<jk>public</jk> Calendar[] <jf>f5</jf> = <jk>new</jk> Calendar[]{<jsm>parseIsoCalendar</jsm>(<js>"2012-12-21T12:34:56Z"</js>),<jk>null</jk>},
-		|		<jk>public</jk> String[] <jf>f6</jf> = {<js>"a"</js>,<js>"b"</js>,<jk>null</jk>},
-		|		<jk>public int</jk>[] <jf>f7</jf> = <jk>new int</jk>[]{1,2,<jk>null</jk>}, 
-		|		<jk>public</jk> Integer[] <jf>f8</jf> = <jk>new</jk> Integer[]{3,4,<jk>null</jk>}, 
-		|		<jk>public float</jk>[] <jf>f9</jf> = <jk>new float</jk>[]{1f,2f,<jk>null</jk>}, 
-		|		<jk>public</jk> Float[] <jf>f10</jf> = <jk>new</jk> Float[]{3f,4f,<jk>null</jk>}, 
-		|		<jk>public</jk> Boolean[] <jf>f11</jf> = <jk>new</jk> Boolean[]{<jk>true</jk>,<jk>false</jk>,<jk>null</jk>}, 
-		|		<jk>public</jk> Object[] <jf>fExtra</jf> = <jk>new</jk> Object[]{1,<js>"2"</js>,<jk>null</jk>};
-		|	}
-	</p>
-	<p>
-		For this bean, we define the following schema:
-	</p>
-	<p class='bjava'>
-		|	<jk>import static</jk> org.apache.juneau.httppart.HttpPartSchema.*;
-		|
-		|	HttpPartSchema <jv>schema</jv> = <jsm>tObject</jsm>()
-		|		.prop(<js>"f1"</js>, <jsm>tArray</jsm>(<jsm>tString</jsm>()))
-		|		.prop(<js>"f2"</js>, <jsm>tArray</jsm>(<jsm>tByte</jsm>()))
-		|		.prop(<js>"f3"</js>, <jsm>tArray</jsm>(<jsm>tBinary</jsm>()))
-		|		.prop(<js>"f4"</js>, <jsm>tArray</jsm>(<jsm>tBinarySpaced</jsm>()))
-		|		.prop(<js>"f5"</js>, <jsm>tArray</jsm>(<jsm>tDateTime</jsm>()))
-		|		.prop(<js>"f6"</js>, <jsm>tArray</jsm>(<jsm>tUon</jsm>()))
-		|		.prop(<js>"f7"</js>, <jsm>tArray</jsm>(<jsm>tInteger</jsm>()))
-		|		.prop(<js>"f8"</js>, <jsm>tArray</jsm>(<jsm>tInt64</jsm>()))
-		|		.prop(<js>"f9"</js>, <jsm>tArray</jsm>(<jsm>tNumber</jsm>()))
-		|		.prop(<js>"f10"</js>, <jsm>tArray</jsm>(<jsm>tDouble</jsm>()))
-		|		.prop(<js>"f11"</js>, <jsm>tArray</jsm>(<jsm>tBoolean</jsm>()))
-		|		.ap(<jsm>tArray</jsm>(<jsm>tInteger</jsm>()))
-		|		.build();
-	</p>
-	<p>
-		Serializing this bean produces the following output:
-	</p>
-	<p class='buon'>
-		|	(
-		|		f1=@('a,b',null),
-		|		f2=@(Zm9v,null),
-		|		f4=@(2012-12-21T12:34:56Z,null),
-		|		f5=@(666F6F,null),
-		|		f6=@('66 6F 6F',null),
-		|		f7=@(a,b,null),
-		|		f8=@(1,2,null),
-		|		f9=@(3,4,null),
-		|		f10=@(1.0,2.0,null),
-		|		f11=@(3.0,4.0,null),
-		|		f12=@(true,false,null),
-		|		fExtra=@(1,2,null)
-		|	)
-	</p>
-	<ul class='notes'>
-		<li class='note'>
-			Array properties can also use CSV/SSV/PIPES for array notation.
-			<br>Various notations can be mixed throughout.
-		<li class='note'>
-			Schemas and POJOs can be defined arbitrarily deep.
-		<li class='note'>
-			Schemas are optional.
-			They can be skipped or partially defined.
-		<li class='note'>
-			We make our best attempt to convert the input to the matching type.  
-			However, you will get <c>SerializeExceptions</c> if you attempt an impossible conversion.
-			(e.g. trying to serialize the string "foo" as a boolean). 
-	</ul>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/33.jm.OpenApiDetails/03.jm.OpenApiParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/33.jm.OpenApiDetails/03.jm.OpenApiParsers.html
deleted file mode 100644
index 1459d392a..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/33.jm.OpenApiDetails/03.jm.OpenApiParsers.html
+++ /dev/null
@@ -1,368 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'OpenAPI Parsers', updated: '8.2.0,9.0.0'} 
-
-<div class='topic'>
-	<p>
-		The {@link oaj.oapi.OpenApiParser} class is used to convert HTTP parts back into POJOs.
-	</p>
-	<p>
-		The class hierarchy for the builder of this parser is:
-	</p>
-	<ul class='javatree'>
-		<li class='jac'>{@link oaj.Context.Builder}
-			<ul>
-				<li class='jac'>{@link oaj.BeanContextable.Builder}
-					<ul>
-						<li class='jac'>{@link oaj.parser.Parser.Builder}
-							<ul>
-								<li class='jac'>{@link oaj.parser.ReaderParser.Builder}
-									<ul>
-										<li class='jc'>{@link oaj.uon.UonParser.Builder}
-											<ul>
-												<li class='jc'>{@link oaj.oapi.OpenApiParser.Builder}
-											</ul>
-										</li>
-									</ul>
-								</li>
-							</ul>
-						</li>
-					</ul>
-				</li>
-			</ul>
-		</li>
-	</ul>
-	<p>
-		Refer to the builder javadocs for configurable settings.
-	</p>
-	<p>
-		The following is the previous example of a schema that defines the format of a pipe-delimited list of comma-delimited numbers (e.g. <js>"1,2,3|4,5,6|7,8,9"</js>):
-	</p>
-	<p class='bjava'>
-		|	<jk>import static</jk> org.apache.juneau.httppart.HttpPartSchema.*;
-		|
-		|	HttpPartSchema <jv>schema</jv> = <jsm>tArrayPipes</jsm>(
-		|		<jsm>tArrayCsv</jsm>(
-		|			<jsm>tInt64</jsm>().min(0).max(100).minl(1).maxl(10)
-		|		)
-		|	).build();
-	</p>
-	<p>
-		The following code shows how the schema above can be used to parse our input into a POJO:
-	</p>
-	<p class='bjava'>
-		|	<jc>// Our input being parsed.</jc>
-		|	String <jv>input</jv> = <js>"1,2,3|4,5,6|7,8,9"</js>
-		|	
-		|	<jc>// The parser to use.</jc>
-		|	HttpPartParser <jv>parser</jv> = OpenApiParser.<jsf>DEFAULT</jsf>;
-		|	
-		|	<jc>// Convert string to a POJO.</jc>
-		|	<jk>try</jk> {
-		|		Long[][] <jv>pojo</jv> = <jv>parser</jv>.parse(<jv>schema</jv>, <jv>input</jv>, Long[][].<jk>class</jk>);
-		|	} <jk>catch</jk> (SchemaValidationException <jv>e</jv>) {
-		|		<jc>// Oops, one of the restrictions were not met.</jc>
-		|	}
-	</p>
-	<p>
-		As a general rule, any POJO convertible from the intermediate type for the <c>type/format</c> of the schema can
-		be parsed using the OpenAPI parser.
-		Here are the rules of POJO types allowed for various type/format combinations:
-	</p>
-	<table class='styled w800'>
-		<tr><th>Type</th><th>Format</th><th>Valid parameter types</th></tr>
-		<tr class='dark bb'>
-			<td rowspan='4'><c>string</c> or empty</td>
-			<td><c>byte<br>binary<br>binary-spaced</c></td>
-			<td>
-				<ul>
-					<li><c><jk>byte</jk>[]</c> (default)
-					<li>{@link java.io.InputStream} - Returns a {@link java.io.ByteArrayInputStream}.
-					<li>{@link java.io.Reader} - Returns a {@link java.io.InputStreamReader} wrapped around a {@link java.io.ByteArrayInputStream}.
-					<li>{@link java.lang.String} - Constructed using {@link java.lang.String#String(byte[])}.
-					<li>{@link java.lang.Object} - Returns the default <c><jk>byte</jk>[]</c>.
-					<li>Any POJO transformable from a <c><jk>byte</jk>[]</c> (via constructors or static create methods).
-				</ul>
-			</td>
-		</tr>
-		<tr class='dark bb'>
-			<td><c>date<br>date-time</c></td>
-			<td>
-				<ul>
-					<li>{@link java.util.Calendar} (default)
-					<li>{@link java.util.Date}
-					<li>{@link java.util.GregorianCalendar}
-					<li>{@link java.lang.String} - Converted using {@link java.util.Calendar#toString()}.
-					<li>{@link java.lang.Object} - Returns the default {@link java.util.Calendar}.
-					<li>Any POJO transformable from a {@link java.util.Calendar} (via constructors or static create methods).
-				</ul>
-			</td>
-		</tr>
-		<tr class='dark bb'>
-			<td><c>uon</c></td>
-			<td>
-				<ul>
-					<li>Any {@doc jm.PojoCategories Parsable POJO} type.
-				</ul>
-			</td>
-		</tr>
-		<tr class='dark bb'>
-			<td>empty</td>
-			<td>
-				<ul>
-					<li>{@link java.lang.String} (default)
-					<li>{@link java.lang.Object} - Returns the default {@link java.lang.String}.
-					<li>Any POJO transformable from a {@link java.lang.String} (via constructors, static create methods, or swaps).
-				</ul>
-			</td>
-		</tr>
-		<tr class='light bb'>
-			<td rowspan='1'><c>boolean</c></td>
-			<td>empty</td>
-			<td>
-				<ul>
-					<li>{@link java.lang.Boolean} (default)
-					<li><jk>boolean</jk>
-					<li>{@link java.lang.String}
-					<li>{@link java.lang.Object} - Returns the default {@link java.lang.Boolean}.
-					<li>Any POJO transformable from a {@link java.lang.Boolean} (via constructors, static create methods, or swaps).
-				</ul>
-			</td>
-		</tr>
-		<tr class='dark bb'>
-			<td rowspan='2'><c>integer</c></td>
-			<td><c>int32</c></td>
-			<td>
-				<ul>
-					<li>{@link java.lang.Integer} (default)
-					<li>Any subclass of {@link java.lang.Number} 
-					<li>Any primitive number:  (e.g <jk>int</jk>, <jk>float</jk>...)
-					<li>{@link java.lang.String}
-					<li>{@link java.lang.Object} - Returns the default {@link java.lang.Integer}.
-					<li>Any POJO transformable from an {@link java.lang.Integer} (via constructors, static create methods, or swaps).
-				</ul>
-			</td>
-		</tr>
-		<tr class='dark bb'>
-			<td><c>int64</c></td>
-			<td>
-				<ul>
-					<li>{@link java.lang.Long} (default)
-					<li>Any subclass of {@link java.lang.Number} 
-					<li>Any primitive number:  (e.g <jk>int</jk>, <jk>float</jk>...)
-					<li>{@link java.lang.String}
-					<li>{@link java.lang.Object} - Returns the default {@link java.lang.Long}.
-					<li>Any POJO transformable from an {@link java.lang.Long} (via constructors, static create methods, or swaps).
-				</ul>
-			</td>
-		</tr>
-		<tr class='light bb'>
-			<td rowspan='2'><c>number</c></td>
-			<td><c>float</c></td>
-			<td>
-				<ul>
-					<li>{@link java.lang.Float} (default)
-					<li>Any subclass of {@link java.lang.Number} 
-					<li>Any primitive number:  (e.g <jk>int</jk>, <jk>float</jk>...)
-					<li>{@link java.lang.String}
-					<li>{@link java.lang.Object} - Returns the default {@link java.lang.Float}.
-					<li>Any POJO transformable from an {@link java.lang.Float} (via constructors, static create methods, or swaps).
-				</ul>
-			</td>
-		</tr>
-		<tr class='light bb'>
-			<td><c>double</c></td>
-			<td>
-				<ul>
-					<li>{@link java.lang.Double} (default)
-					<li>Any subclass of {@link java.lang.Number} 
-					<li>Any primitive number:  (e.g <jk>int</jk>, <jk>float</jk>...)
-					<li>{@link java.lang.String}
-					<li>{@link java.lang.Object} - Returns the default {@link java.lang.Double}.
-					<li>Any POJO transformable from an {@link java.lang.Double} (via constructors, static create methods, or swaps).
-				</ul>
-			</td>
-		</tr>
-		<tr class='dark bb'>
-			<td rowspan='2'><c>array</c></td>
-			<td>empty</td>
-			<td>
-				<ul>
-					<li>Arrays or Collections of anything on this list.
-					<li>Any POJO transformable from arrays of the default types (e.g. <c>Integer[]</c>, <c>Boolean[][]</c>, etc...).
-				</ul>
-			</td>
-		</tr>
-		<tr class='dark bb'>
-			<td><c>uon</c></td>
-			<td>
-				<ul>
-					<li>Any {@doc jm.PojoCategories Parsable POJO} type.
-				</ul>
-			</td>
-		</tr>
-		<tr class='light bb'>
-			<td rowspan='2'><c>object</c></td>
-			<td>empty</td>
-			<td>
-				<ul>
-					<li><c>Map&lt;String,Object&gt;</c> (default)
-					<li>Beans with properties of anything on this list.
-					<li>Maps with string keys.
-				</ul>
-			</td>
-		</tr>
-		<tr class='light bb'>
-			<td><c>uon</c></td>
-			<td>
-				<ul>
-					<li>Any {@doc jm.PojoCategories Parsable POJO} type.
-				</ul>
-			</td>
-		</tr>
-	</table>
-	<p>
-		Additionally, any of the type above can also be wrapped as {@link java.util.Optional Optionals}.
-	</p>
-	
-	<p>
-		For arrays, an example of "Any POJO transformable from arrays of the default types" is:
-	</p>
-	<p class='bjava'>
-		|	<jc>// Sample POJO class convertable from a Long[][].</jc>
-		|	<jk>public class</jk> MyPojo {
-		|		
-		|		<jc>// Constructor used by parser.</jc>
-		|		<jk>public</jk> MyPojo(Long[][] <jv>from2dLongs</jv>) {...}
-		|	}
-	</p>
-	<p>
-		In the example above, our POJO class can be constructed from our pipe-delimited list of comma-delimited numbers: 
-	</p>
-	<p class='bjava'>
-		|	<jc>// Our input being parsed.</jc>
-		|	String <jv>input</jv> = <js>"1,2,3|4,5,6|7,8,9"</js>
-		|	
-		|	<jc>// The parser to use.</jc>
-		|	HttpPartParser <jv>parser</jv> = OpenApiParser.<jsf>DEFAULT</jsf>;
-		|	
-		|	<jc>// Convert string to a POJO.</jc>
-		|	<jk>try</jk> {
-		|		MyPojo <jv>pojo</jv> = <jv>parser</jv>.parse(<jv>schema</jv>, <jv>input</jv>, MyPojo.<jk>class</jk>);
-		|	} <jk>catch</jk> (SchemaValidationException <jv>e</jv>) {
-		|		<jc>// Oops, one of the restrictions were not met.</jc>
-		|	}
-	</p>
-	<p>
-		Just like serialization, the <c>object</c> type is not officially part of the OpenAPI standard, but
-		Juneau supports parsing HTTP parts in UON notation to Maps and beans.
-	</p>
-	<p>
-		The following shows an example of a bean with several properties of various types.
-	</p>
-	<p class='bjava'>
-		|	<jk>public class</jk> MyBean {
-		|		<jk>public</jk> String <jf>f1</jf>;
-		|		<jk>public byte</jk>[] <jf>f2</jf>;
-		|		<jk>public byte</jk>[] <jf>f3</jf>;
-		|		<jk>public byte</jk>[] <jf>f4</jf>;
-		|		<jk>public</jk> Calendar <jf>f5</jf>;
-		|		<jk>public</jk> String <jf>f6</jf>;
-		|		<jk>public int</jk> <jf>f7</jf>;
-		|		<jk>public</jk> Long <jf>f8</jf>;
-		|		<jk>public float</jk> <jf>f9</jf>;
-		|		<jk>public</jk> Double <jf>f10</jf>;
-		|		<jk>public</jk> Boolean <jf>f11</jf>;
-		|		<jk>public</jk> Object <jf>fExtra</jf>;
-		|	}
-	</p>
-	<p>
-		We define the following schema again:
-	</p>
-	<p class='bjava'>
-		|	<jk>import static</jk> org.apache.juneau.httppart.HttpPartSchema.*;
-		|	
-		|	HttpPartSchema <jv>schema</jv> = <jsm>tObject</jsm>()
-		|		.prop(<js>"f1"</js>, <jsm>tString</jsm>())
-		|		.prop(<js>"f2"</js>, <jsm>tByte</jsm>())
-		|		.prop(<js>"f3"</js>, <jsm>tBinary</jsm>())
-		|		.prop(<js>"f4"</js>, <jsm>tBinarySpaced</jsm>())
-		|		.prop(<js>"f5"</js>, <jsm>tDateTime</jsm>())
-		|		.prop(<js>"f6"</js>, <jsm>tUon</jsm>())
-		|		.prop(<js>"f7"</js>, <jsm>tInteger</jsm>())
-		|		.prop(<js>"f8"</js>, <jsm>tInt64</jsm>())
-		|		.prop(<js>"f9"</js>, <jsm>tNumber</jsm>())
-		|		.prop(<js>"f10"</js>, <jsm>tDouble</jsm>())
-		|		.prop(<js>"f11"</js>, <jsm>tBoolean</jsm>())
-		|		.ap(<jsm>tInteger</jsm>())
-		|		.build();
-	</p>
-	<p>
-		Then we parse our input into our POJO:
-	</p>
-	<p class='bjava'>
-		|	String <jv>input</jv> = 
-		|		<js>"(f1=foo,f2=Zm9v,f3=666F6F,f4='66 6F 6F',f5=2012-12-21T12:34:56Z,f6=foo,"</js>
-		|		+ <js>"f7=1,f8=2,f9=1.0,f10=1.0,f11=true,fExtra=1)"</js>;
-		|	
-		|	HttpPartParser <jv>parser</jv> = OpenApiParser.<jsf>DEFAULT</jsf>;
-		|	MyBean <jv>bean</jv> = <jv>parser</jv>.parse(<jv>schema</jv>, <jv>input</jv>, MyBean.<jk>class</jk>);
-	</p>
-	<p>
-		Note that serializing into generic <c>Object</c> properties would have produced similar results:
-	</p>
-	<p class='bjava'>
-		|	<jk>public class</jk> MyBean {
-		|		<jk>public</jk> Object <jf>f1</jf>;
-		|		<jk>public</jk> Object <jf>f2</jf>;
-		|		<jk>public</jk> Object <jf>f3</jf>;
-		|		<jk>public</jk> Object <jf>f4</jf>;
-		|		<jk>public</jk> Object <jf>f5</jf>;
-		|		<jk>public</jk> Object <jf>f6</jf>;
-		|		<jk>public</jk> Object <jf>f7</jf>;
-		|		<jk>public</jk> Object <jf>f8</jf>;
-		|		<jk>public</jk> Object <jf>f9</jf>;
-		|		<jk>public</jk> Object <jf>f10</jf>;
-		|		<jk>public</jk> Object <jf>f11</jf>;
-		|		<jk>public</jk> Object <jf>fExtra</jf>;
-		|	}
-	</p>
-	<p>
-		We can also parse into Maps as well:
-	</p>
-	<p class='bjava'>
-		|	String <jv>input</jv> = 
-		|		<js>"(f1=foo,f2=Zm9v,f3=666F6F,f4='66 6F 6F',f5=2012-12-21T12:34:56Z,f6=foo,"</js>
-		|		+ <js>"f7=1,f8=2,f9=1.0,f10=1.0,f11=true,fExtra=1)"</js>;
-		|	
-		|	HttpPartParser <jv>parser</jv> = OpenApiParser.<jsf>DEFAULT</jsf>;
-		|	JsonMap <jv>map</jv> = <jv>parser</jv>.parse(<jv>schema</jv>, <jv>input</jv>, JsonMap.<jk>class</jk>);
-	</p>
-	<ul class='notes'>
-		<li class='note'>
-			Array properties can also use CSV/SSV/PIPES for array notation.
-			<br>Various notations can be mixed throughout.
-		<li class='note'>
-			Schemas and POJOs can be defined arbitrarily deep.
-		<li class='note'>
-			Schemas are optional.
-			They can be skipped or partially defined.
-		<li class='note'>
-			We make our best attempt to convert the output to the matching type.  
-			However, you will get <c>ParseExceptions</c> if you attempt an impossible conversion.
-			(e.g. trying to parse the string "foo" into a boolean). 
-	</ul>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/34.jm.BestPractices.html b/juneau-doc/docs/Topics/02.juneau-marshall/34.jm.BestPractices.html
deleted file mode 100644
index 197a07bf4..000000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/34.jm.BestPractices.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'Best Practices'}
-
-<div class='topic'>
-	<ol class='spaced-list'>
-		<li>
-			Reuse instances of serializers and parsers whenever possible.
-			<br>They are designed to be thread safe and maintain internal caches of bean metadata to increase performance.
-		<li>
-			The {@link oaj.BeanTraverseContext.Builder#detectRecursions()} 
-			option can cause a performance penalty of 
-			around 20%.  
-			<br>Therefore, it's recommended that this option be used only when necessary. 
-		<li>
-			In general, JSON serialization and parsing is about 20% faster than XML.  
-			JSON is also more compact than XML.
-			<br>MessagePack is fastest and most compact of all.
-		<li>
-			The RDF parsers are SLOW.
-			<br>RDF simply isn't efficient with node traversal, so creating tree structures out of RDF models
-			is highly inefficient.  	
-		<li>
-			The {@link oaj.parser.Parser} methods that take in {@link oaj.ClassMeta} 
-			parameters are slightly faster than methods that 
-			take in {@link java.lang.Class} or {@link java.lang.Object} parameters, since the latter methods involve 
-			hash lookups to resolve to {@link oaj.ClassMeta} parameters.
-	</ol>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/10.juneau-rest-server-springboot.html b/juneau-doc/docs/Topics/06.juneau-assertions.html
similarity index 75%
rename from juneau-doc/docs/Topics/10.juneau-rest-server-springboot.html
rename to juneau-doc/docs/Topics/06.juneau-assertions.html
index 54414380e..98a0cb09a 100644
--- a/juneau-doc/docs/Topics/10.juneau-rest-server-springboot.html
+++ b/juneau-doc/docs/Topics/06.juneau-assertions.html
@@ -13,30 +13,31 @@
  ***************************************************************************************************************************/
  -->
 
-{title:'juneau-rest-server-springboot', created:'8.0.0', updated:'9.0.0'}
+{title:'juneau-assertions', created:'9.0.0'}
 
 <div class='topic'>
 	<h5 class='figure'>Maven Dependency</h5>
 	<p class='bxml 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;artifactId&gt;</xt>juneau-assertions<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 
+		|	juneau-assertions-{@property juneauVersion}.jar 
 	</p>	
 	
 	<h5 class='figure'>OSGi Module</h5>
 	<p class='bcode w500'>
-		|	org.apache.juneau.rest.server.springboot_{@property juneauVersion}.jar 
+		|	org.apache.juneau.assertions_{@property juneauVersion}.jar 
 	</p>	
 	
 	<p>
-		The <c>juneau-rest-server-springboot</c> library provides classes to make it easy to integrate
-		Juneau REST resources with Spring and Spring Boot.
+		The {@link oaj.assertions} package in Juneau is a powerful API for performing fluent style assertions.
+		It is used to implement built-in assertion methods on both the server and client side APIs.
+		But it can also be used standalone for testing.
 	</p>
 </div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/21.jm.FluentAssertions.html b/juneau-doc/docs/Topics/06.juneau-assertions/01.ja.Overview.html
similarity index 99%
rename from juneau-doc/docs/Topics/02.juneau-marshall/21.jm.FluentAssertions.html
rename to juneau-doc/docs/Topics/06.juneau-assertions/01.ja.Overview.html
index 99a4c43a6..2ce30a3c6 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/21.jm.FluentAssertions.html
+++ b/juneau-doc/docs/Topics/06.juneau-assertions/01.ja.Overview.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-{title:'Fluent Assertions', created:'9.0.0'} 
+{title:'Overview', created:'9.0.0'} 
 
 <div class='topic'>
 	<p>
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-common.html b/juneau-doc/docs/Topics/06.juneau-rest-common.html
deleted file mode 100644
index 6901955de..000000000
--- a/juneau-doc/docs/Topics/06.juneau-rest-common.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'juneau-rest-common', created:'9.0.0'}
-
-<div class='topic'>
-	<h5 class='figure'>Maven Dependency</h5>
-	<p class='bxml 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-common<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-common-{@property juneauVersion}.jar 
-	</p>	
-	
-	<h5 class='figure'>OSGi Module</h5>
-	<p class='bcode w500'>
-		|	org.apache.juneau.rest.common_{@property juneauVersion}.jar 
-	</p>	
-	
-	<p>
-		The {@link oaj.http} package contains a slew of useful extensions to the Apache HttpComponents libraries
-		and define APIs used extensively in the REST server and client APIs.
-	</p>
-	<ul class='javatree'>
-		<li class='jp'>{@link oaj.http} - Utility classes used for HTTP parts/headers/entities.
-		<li class='jp'>{@link oaj.http.annotation} - Swagger-based annotations used on both server-side APIs and client-side proxy interfaces.
-		<li class='jp'>{@link oaj.http.entity} - HTTP entity classes.
-		<li class='jp'>{@link oaj.http.header} - HTTP header classes.
-		<li class='jp'>{@link oaj.http.part} - HTTP query/form-data/path classes.
-		<li class='jp'>{@link oaj.http.remote} - Remote proxy interface API
-		<li class='jp'>{@link oaj.http.resource} - HTTP resource classes.
-		<li class='jp'>{@link oaj.http.response} - HTTP response classes.
-	</ul>
-	
-	<p>
-		These APIs extend from the Apache HttpComponents libraries and can be used with libraries based on it such
-		as Apache HttpClient.  The REST Client API described later is built on top of Apache HttpClient and many
-		of the classes defined in this package make up integral components of that API.  Likewise, the APIs
-		defined here are also used in the REST Server APIs also described later.
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-common/01.jrc.org.apache.juneau.http.html b/juneau-doc/docs/Topics/06.juneau-rest-common/01.jrc.org.apache.juneau.http.html
deleted file mode 100644
index 4da507cce..000000000
--- a/juneau-doc/docs/Topics/06.juneau-rest-common/01.jrc.org.apache.juneau.http.html
+++ /dev/null
@@ -1,297 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'org.apache.juneau.http', created:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.http.header} package contains various convenience classes for creating
-		standard HTTP components using static imports.
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.http.HttpHeaders} - Utility class for standard HTTP headers.
-		<li class='jc'>{@link oaj.http.HttpParts} - Utility class for standard HTTP parts.
-		<li class='jc'>{@link oaj.http.HttpEntities} - Utility class for standard HTTP entities.
-		<li class='jc'>{@link oaj.http.HttpResources} - Utility class for standard HTTP resources.
-		<li class='jc'>{@link oaj.http.HttpResponses} - Utility class for standard HTTP resources.
-	</ul>
-	
-	<h5 class='topic'>HttpHeaders</h5>
-	<p>
-		The {@link oaj.http.HttpHeaders} class contains many convenience static methods and fields for working with standard HTTP request and response headers
-		and header lists.
-	</p>
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-		|	<jk>import static</jk> org.apache.juneau.http.HttpHeaders.*;
-		|
-		|	HeaderList <jv>headers</jv> = 
-		|		<jsm>headerList</jsm>(  <jc>// Arbitrary list of headers</jc>
-		|	
-		|			<jsf>CONTENTTYPE_TEXT_XML</jsf>,   <jc>// Static constants</jc>
-		|		
-		|			<jsm>contentType</jsm>(<js>"text/xml"</js>)   <jc>// Predefined headers</jc>
-		|		
-		|			<jsm>contentType</jsm>(() -&gt; <js>"text/xml"</js>)   <jc>// Predefined headers with supplied values</jc>
-		|		
-		|			<jsm>stringHeader</jsm>(<js>"Content-Type"</js>, <js>"text/xml"</js>)   <jc>// Freeform headers</jc>
-		|		
-		|			<jsm>stringHeader</jsm>(<js>"Content-Type"</js>, () -&gt; <js>"text/xml"</js>)   <jc>// Freeform headers with supplied values</jc>
-		|		);
-	</p>
-	<p>
-		This class is vast in scope and covers all request and response headers defined in RFC2616.
-	</p>
-	<p>
-		In addition to the predefined headers, various methods are provided for free-form headers.  Each accepts
-		either static values or values from {@link java.util.function.Supplier Suppliers}:
-	</p>
-	<ul class='javatreec'>
-		<li class='jm'>{@link oaj.http.HttpHeaders#basicHeader(String,Object) basicHeader}
-		<li class='jm'>{@link oaj.http.HttpHeaders#booleanHeader(String,String) booleanHeader}
-		<li class='jm'>{@link oaj.http.HttpHeaders#csvHeader(String,String) csvHeader}
-		<li class='jm'>{@link oaj.http.HttpHeaders#dateHeader(String,String) dateHeader}
-		<li class='jm'>{@link oaj.http.HttpHeaders#entityTagsHeader(String,String) entityTagsHeader}
-		<li class='jm'>{@link oaj.http.HttpHeaders#entityTagHeader(String,String) entityTagHeader}
-		<li class='jm'>{@link oaj.http.HttpHeaders#integerHeader(String,String) integerHeader}
-		<li class='jm'>{@link oaj.http.HttpHeaders#longHeader(String,String) longHeader}
-		<li class='jm'>{@link oaj.http.HttpHeaders#mediaRangesHeader(String,String) mediaRangesHeader}
-		<li class='jm'>{@link oaj.http.HttpHeaders#mediaTypeHeader(String,String) mediaTypeHeader}
-		<li class='jm'>{@link oaj.http.HttpHeaders#stringHeader(String,String) stringHeader}
-		<li class='jm'>{@link oaj.http.HttpHeaders#serializedHeader(String,Object) serializedHeader}
-		<li class='jm'>{@link oaj.http.HttpHeaders#stringRangesHeader(String,String) stringRangesHeader}
-		<li class='jm'>{@link oaj.http.HttpHeaders#uriHeader(String,String) uriHeader}
-	</ul>
-	<p>
-		The {@link oaj.http.HttpHeaders#serializedHeader(String,Object) serializedHeader} methods allows for headers 
-		serialized using schema-based serializers such as the OpenAPI serializer. 
-	</p>
-	
-	<p>
-		Static methods are also provided for instantiating {@link oaj.http.annotation.Header}-annotated or
-		other HttpComponent-defined header classes:
-	</p>
-	<ul class='javatree'>
-		<li class='jm'>{@link oaj.http.HttpHeaders#header(Class,String,Object) header(Class,String,Object)}
-		<li class='jm'>{@link oaj.http.HttpHeaders#header(Class,Object) header(Class,String,Object)}
-	</ul>
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-		|	<jk>import static</jk> org.apache.juneau.http.HttpHeaders.*;
-		|
-		|	ContentType <jv>contentType</jv> = <jsm>header</jsm>(ContentType.<jk>class</jk>, <js>"text/xml"</js>);
-	</p>
-	<p>
-		Lists of headers can be produced with the following methods:
-	</p>
-	<ul class='javatree'>
-		<li class='jm'>{@link oaj.http.HttpHeaders#headerList() headerList()}
-		<li class='jm'>{@link oaj.http.HttpHeaders#headerList(Header...) headerList(Header...)}
-		<li class='jm'>{@link oaj.http.HttpHeaders#headerList(List) headerList(List&lt;Header&gt;)}
-		<li class='jm'>{@link oaj.http.HttpHeaders#headerList(String...) headerList(String...)}
-	</ul>
-	<p>
-		The capabilities of the {@link oaj.http.header.HeaderList} class is described later.
-	</p>
-		
-	<h5 class='topic'>HttpParts</h5>
-	<p>
-		The {@link oaj.http.HttpParts} class contains convenience static methods for generating query/form-data/path parts and part lists.
-	</p>
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-		|	<jk>import static</jk> org.apache.juneau.http.HttpParts.*;
-		|
-		|	PartList <jv>formData</jv> = 
-		|		<jsm>partList</jsm>(  <jc>// Arbitrary list of parts</jc>
-		|			<jsm>stringPart</jsm>(<js>"Name"</js>, <js>"Bill"</js>)   <jc>// Freeform part</jc>
-		|			<jsm>integerPart</jsm>(<js>"Age"</js>, () -> <jsm>calculateAge</jsm>())   <jc>// Freeform part with supplied value</jc>
-		|		);
-	</p>
-	<p>
-		The following methods are provided for creating parts.  Each accepts
-		either static values or values from {@link java.util.function.Supplier Suppliers}:
-	</p>
-	<ul class='javatreec'>
-		<li class='jm'>{@link oaj.http.HttpParts#basicPart(String,Object) basicPart}
-		<li class='jm'>{@link oaj.http.HttpParts#booleanPart(String,Boolean) booleanPart}
-		<li class='jm'>{@link oaj.http.HttpParts#csvArrayPart(String,String...) csvArrayPart}
-		<li class='jm'>{@link oaj.http.HttpParts#datePart(String,ZonedDateTime) datePart}
-		<li class='jm'>{@link oaj.http.HttpParts#integerPart(String,Integer) integerPart}
-		<li class='jm'>{@link oaj.http.HttpParts#longPart(String,Long) longPart}
-		<li class='jm'>{@link oaj.http.HttpParts#serializedPart(String,Object) serializedPart}
-		<li class='jm'>{@link oaj.http.HttpParts#stringPart(String,String) stringPart}
-		<li class='jm'>{@link oaj.http.HttpParts#uriPart(String,URI) uriPart}
-	</ul>
-	<p>
-		The {@link oaj.http.HttpParts#serializedPart(String,Object) serializedPart} methods allows for parts 
-		serialized using schema-based serializers such as the OpenAPI serializer. 
-	</p>
-	<p>
-		Lists of parts can be produced with the following methods:
-	</p>
-	<ul class='javatree'>
-		<li class='jm'>{@link oaj.http.HttpParts#partList() partList()}
-		<li class='jm'>{@link oaj.http.HttpParts#partList(List) partList(List&lt;NameValuePair&gt;)}
-		<li class='jm'>{@link oaj.http.HttpParts#partList(NameValuePair...) partList(NameValuePair...)}
-		<li class='jm'>{@link oaj.http.HttpParts#partList(Object...) partList(Object...)}
-	</ul>
-	<p>
-		The capabilities of the {@link oaj.http.part.PartList} class is described later.
-	</p>
-	
-	<h5 class='topic'>HttpEntities</h5>
-	<p>
-		The {@link oaj.http.HttpEntities} class contains convenience static methods for generating HTTP message entities.
-		Returned objects extend from  {@code org.apache.http.HttpEntity} but provides the following additional features:
-	</p>
-	<ul class='spaced-list'>
-		<li>
-			Caching.
-		<li>
-			Fluent setters.
-		<li>
-			Fluent assertions.
-		<li>
-			Externally-supplied/dynamic content.
-	</ul>
-	<p>
-		The following methods are provided for creating entities.  Each accepts
-		either static values or values from {@link java.util.function.Supplier Suppliers} and returns builders:
-	</p>
-	<ul class='javatreec'>
-		<li class='jm'>{@link oaj.http.HttpEntities#byteArrayEntity(byte[]) byteArrayEntity}
-		<li class='jm'>{@link oaj.http.HttpEntities#fileEntity(File) fileEntity}
-		<li class='jm'>{@link oaj.http.HttpEntities#readerEntity(Reader) readerEntity}
-		<li class='jm'>{@link oaj.http.HttpEntities#serializedEntity(Object, Serializer) serializedEntity}
-		<li class='jm'>{@link oaj.http.HttpEntities#streamEntity(InputStream) streamEntity}
-		<li class='jm'>{@link oaj.http.HttpEntities#stringEntity(String) stringEntity}
-	</ul>
-	<p>
-		HTTP entities are automatically supported in both the server and client REST APIs for requests and responses.
-	</p>
-	
-	<h5 class='topic'>HttpResources</h5>
-	<p>
-		The {@link oaj.http.HttpResources} class contains convenience static methods for generating HTTP message resources.
-		Returned objects extend from {@link oaj.http.resource.HttpResource} which extends from {@link oaj.http.HttpEntity} but with
-		additional arbitrary headers.
-	</p>
-	<p>
-		The following methods are provided for creating entities.  Each accepts
-		either static values or values from {@link java.util.function.Supplier Suppliers} and are in the form of builders.
-	</p>
-	<ul class='javatreec'>
-		<li class='jm'>{@link oaj.http.HttpResources#byteArrayResource(byte[]) byteArrayResource}
-		<li class='jm'>{@link oaj.http.HttpResources#fileResource(File) fileResource}
-		<li class='jm'>{@link oaj.http.HttpResources#readerResource(Reader) readerResource}
-		<li class='jm'>{@link oaj.http.HttpResources#streamResource(InputStream) streamResource}
-		<li class='jm'>{@link oaj.http.HttpResources#stringResource(String) stringResource}
-	</ul>
-	<p>
-		The most common location where resources are used are as returned types of REST operation methods described later.
-	</p>
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-		|	<jk>import static</jk> org.apache.juneau.http.HttpResources.*;
-		|	
-		|	<ja>@RestDelete</ja>(path=<js>"/{id}"</js>)
-		|	<jk>public</jk> HttpResource helloWold(...) {
-		|		<jk>return</jk> <jsm>stringResource</jsm>(<js>"Hello!"</js>).contentType(<js>"text/plain"</js>).build();
-		|	}
-	</p>
-	
-	
-	<h5 class='topic'>HttpResponses</h5>
-	<p>
-		The {@link oaj.http.HttpResponses} class contains convenience static methods for standard HTTP responses.
-		Returned objects extend from {@code org.apache.http.HttpResponse} and are in the form of builders.
-	</p>
-	<p>
-		The following methods are provided for creating entities:
-	</p>
-	<ul class='javatreec'>
-		<li class='jm'>{@link oaj.http.HttpResponses#_continue() _continue}
-		<li class='jm'>{@link oaj.http.HttpResponses#accepted() accepted}
-		<li class='jm'>{@link oaj.http.HttpResponses#alreadyReported() alreadyReported}
-		<li class='jm'>{@link oaj.http.HttpResponses#badRequest() badRequest}
-		<li class='jm'>{@link oaj.http.HttpResponses#conflict() conflict}
-		<li class='jm'>{@link oaj.http.HttpResponses#created() created}
-		<li class='jm'>{@link oaj.http.HttpResponses#earlyHints() earlyHints}
-		<li class='jm'>{@link oaj.http.HttpResponses#expectationFailed() expectationFailed}
-		<li class='jm'>{@link oaj.http.HttpResponses#failedDependency() failedDependency}
-		<li class='jm'>{@link oaj.http.HttpResponses#forbidden() forbidden}
-		<li class='jm'>{@link oaj.http.HttpResponses#found(String) found}
-		<li class='jm'>{@link oaj.http.HttpResponses#gone() gone}
-		<li class='jm'>{@link oaj.http.HttpResponses#httpVersionNotSupported() httpVersionNotSupported}
-		<li class='jm'>{@link oaj.http.HttpResponses#imUsed() imUsed}
-		<li class='jm'>{@link oaj.http.HttpResponses#insufficientStorage() insufficientStorage}
-		<li class='jm'>{@link oaj.http.HttpResponses#internalServerError() internalServerError}
-		<li class='jm'>{@link oaj.http.HttpResponses#lengthRequired() lengthRequired}
-		<li class='jm'>{@link oaj.http.HttpResponses#locked() locked}
-		<li class='jm'>{@link oaj.http.HttpResponses#loopDetected() loopDetected}
-		<li class='jm'>{@link oaj.http.HttpResponses#methodNotAllowed() methodNotAllowed}
-		<li class='jm'>{@link oaj.http.HttpResponses#misdirectedRequest() misdirectedRequest}
-		<li class='jm'>{@link oaj.http.HttpResponses#movedPermanently(String) movedPermanently}
-		<li class='jm'>{@link oaj.http.HttpResponses#multipleChoices() multipleChoices}
-		<li class='jm'>{@link oaj.http.HttpResponses#multiStatus() multiStatus}
-		<li class='jm'>{@link oaj.http.HttpResponses#networkAuthenticationRequired() networkAuthenticationRequired}
-		<li class='jm'>{@link oaj.http.HttpResponses#noContent() noContent}
-		<li class='jm'>{@link oaj.http.HttpResponses#nonAuthoritiveInformation() nonAuthoritiveInformation}
-		<li class='jm'>{@link oaj.http.HttpResponses#notAcceptable() notAcceptable}
-		<li class='jm'>{@link oaj.http.HttpResponses#notExtended() notExtended}
-		<li class='jm'>{@link oaj.http.HttpResponses#notFound() notFound}
-		<li class='jm'>{@link oaj.http.HttpResponses#notImplemented() notImplemented}
-		<li class='jm'>{@link oaj.http.HttpResponses#notModified() notModified}
-		<li class='jm'>{@link oaj.http.HttpResponses#ok() ok}
-		<li class='jm'>{@link oaj.http.HttpResponses#partialContent() partialContent}
-		<li class='jm'>{@link oaj.http.HttpResponses#payloadTooLarge() payloadTooLarge}
-		<li class='jm'>{@link oaj.http.HttpResponses#permanentRedirect(String) permanentRedirect}
-		<li class='jm'>{@link oaj.http.HttpResponses#preconditionFailed() preconditionFailed}
-		<li class='jm'>{@link oaj.http.HttpResponses#preconditionRequired() preconditionRequired}
-		<li class='jm'>{@link oaj.http.HttpResponses#processing() processing}
-		<li class='jm'>{@link oaj.http.HttpResponses#rangeNotSatisfiable() rangeNotSatisfiable}
-		<li class='jm'>{@link oaj.http.HttpResponses#requestHeaderFieldsTooLarge() requestHeaderFieldsTooLarge}
-		<li class='jm'>{@link oaj.http.HttpResponses#resetContent() resetContent}
-		<li class='jm'>{@link oaj.http.HttpResponses#seeOther(String) seeOther}
-		<li class='jm'>{@link oaj.http.HttpResponses#serviceUnavailable() serviceUnavailable}
-		<li class='jm'>{@link oaj.http.HttpResponses#switchingProtocols() switchingProtocols}
-		<li class='jm'>{@link oaj.http.HttpResponses#temporaryRedirect(String) temporaryRedirect}
-		<li class='jm'>{@link oaj.http.HttpResponses#tooManyRequests() tooManyRequests}
-		<li class='jm'>{@link oaj.http.HttpResponses#unauthorized() unauthorized}
-		<li class='jm'>{@link oaj.http.HttpResponses#unavailableForLegalReasons() unavailableForLegalReasons}
-		<li class='jm'>{@link oaj.http.HttpResponses#unprocessableEntity() unprocessableEntity}
-		<li class='jm'>{@link oaj.http.HttpResponses#unsupportedMediaType() unsupportedMediaType}
-		<li class='jm'>{@link oaj.http.HttpResponses#upgradeRequired() upgradeRequired}
-		<li class='jm'>{@link oaj.http.HttpResponses#uriTooLong() uriTooLong}
-		<li class='jm'>{@link oaj.http.HttpResponses#useProxy() useProxy}
-		<li class='jm'>{@link oaj.http.HttpResponses#variantAlsoNegotiates() variantAlsoNegotiates}
-	</ul>
-	<p>
-		The most common location where these responses are used are in REST operation methods described later.
-	</p>
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-		|	<jk>import static</jk> org.apache.juneau.http.HttpResponses.*;
-		|	<jk>import static</jk> org.apache.juneau.http.HttpHeaders.*;
-		| 
-		|	<ja>@RestDelete</ja>(path=<js>"/{id}"</js>)
-		|	<jk>public</jk> Ok doDelete(...) <jk>throws</jk> Unauthorized {
-		|		<jk>if</jk> (<jc>/* user not authorized*/</jc>)
-		|			<jk>throw</jk> <jsm>unauthorized</jsm>().build();
-		|		<jk>return</jk> <jsm>ok</jsm>().content(<js>"OK"</js>).header(<jsm>contentType</jsm>(<js>"text/plain"</js>)).build();
-		|	}
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-common/02.jrc.org.apache.juneau.http.annotation.html b/juneau-doc/docs/Topics/06.juneau-rest-common/02.jrc.org.apache.juneau.http.annotation.html
deleted file mode 100644
index 9a2a19290..000000000
--- a/juneau-doc/docs/Topics/06.juneau-rest-common/02.jrc.org.apache.juneau.http.annotation.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'org.apache.juneau.http.annotation', created:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.http.annotation} package contains annotations for defining both server and client side 
-		APIs.  The server-side APIs also use it for producing auto-generated Swagger documentation through
-		the REST API itself.
-	</p>
-	<ul class='javatreec'>
-		<li class='ja'>{@link oaj.http.annotation.Contact}
-		<li class='ja'>{@link oaj.http.annotation.Content}
-		<li class='ja'>{@link oaj.http.annotation.ExternalDocs}
-		<li class='ja'>{@link oaj.http.annotation.FormData}
-		<li class='ja'>{@link oaj.http.annotation.HasFormData}
-		<li class='ja'>{@link oaj.http.annotation.HasQuery}
-		<li class='ja'>{@link oaj.http.annotation.Header}
-		<li class='ja'>{@link oaj.http.annotation.Items}
-		<li class='ja'>{@link oaj.http.annotation.License}
-		<li class='ja'>{@link oaj.http.annotation.Path}
-		<li class='ja'>{@link oaj.http.annotation.Query}
-		<li class='ja'>{@link oaj.http.annotation.Request}
-		<li class='ja'>{@link oaj.http.annotation.Response}
-		<li class='ja'>{@link oaj.http.annotation.Schema}
-		<li class='ja'>{@link oaj.http.annotation.StatusCode}
-		<li class='ja'>{@link oaj.http.annotation.SubItems}
-		<li class='ja'>{@link oaj.http.annotation.Tag}
-	</ul>
-	<p>
-		These annotations are used in a variety of places in the server and client side REST interfaces, especially for
-		remote proxies.
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-common/03.jrc.org.apache.juneau.http.header.html b/juneau-doc/docs/Topics/06.juneau-rest-common/03.jrc.org.apache.juneau.http.header.html
deleted file mode 100644
index 5e2655e1b..000000000
--- a/juneau-doc/docs/Topics/06.juneau-rest-common/03.jrc.org.apache.juneau.http.header.html
+++ /dev/null
@@ -1,250 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'org.apache.juneau.http.header', created:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.http.header} package contains implementations of <c>org.apache.http.Header</c> for all common HTTP
-		headers.
-	</p>
-	<ul class='javatreec'>
-		<li class='jc'>{@link oaj.http.header.Accept}
-		<li class='jc'>{@link oaj.http.header.AcceptCharset}
-		<li class='jc'>{@link oaj.http.header.AcceptEncoding}
-		<li class='jc'>{@link oaj.http.header.AcceptLanguage}
-		<li class='jc'>{@link oaj.http.header.AcceptRanges}
-		<li class='jc'>{@link oaj.http.header.Age}
-		<li class='jc'>{@link oaj.http.header.Allow}
-		<li class='jc'>{@link oaj.http.header.Authorization}
-		<li class='jc'>{@link oaj.http.header.CacheControl}
-		<li class='jc'>{@link oaj.http.header.ClientVersion}
-		<li class='jc'>{@link oaj.http.header.Connection}
-		<li class='jc'>{@link oaj.http.header.ContentDisposition}
-		<li class='jc'>{@link oaj.http.header.ContentEncoding}
-		<li class='jc'>{@link oaj.http.header.ContentLanguage}
-		<li class='jc'>{@link oaj.http.header.ContentLength}
-		<li class='jc'>{@link oaj.http.header.ContentLocation}
-		<li class='jc'>{@link oaj.http.header.ContentRange}
-		<li class='jc'>{@link oaj.http.header.ContentType}
-		<li class='jc'>{@link oaj.http.header.Date}
-		<li class='jc'>{@link oaj.http.header.Debug}
-		<li class='jc'>{@link oaj.http.header.ETag}
-		<li class='jc'>{@link oaj.http.header.Expect}
-		<li class='jc'>{@link oaj.http.header.Expires}
-		<li class='jc'>{@link oaj.http.header.Forwarded}
-		<li class='jc'>{@link oaj.http.header.From}
-		<li class='jc'>{@link oaj.http.header.Host}
-		<li class='jc'>{@link oaj.http.header.IfMatch}
-		<li class='jc'>{@link oaj.http.header.IfModifiedSince}
-		<li class='jc'>{@link oaj.http.header.IfNoneMatch}
-		<li class='jc'>{@link oaj.http.header.IfRange}
-		<li class='jc'>{@link oaj.http.header.IfUnmodifiedSince}
-		<li class='jc'>{@link oaj.http.header.LastModified}
-		<li class='jc'>{@link oaj.http.header.Location}
-		<li class='jc'>{@link oaj.http.header.MaxForwards}
-		<li class='jc'>{@link oaj.http.header.MediaRange}
-		<li class='jc'>{@link oaj.http.header.MediaRanges}
-		<li class='jc'>{@link oaj.http.header.MediaType}
-		<li class='jc'>{@link oaj.http.header.NoTrace}
-		<li class='jc'>{@link oaj.http.header.Origin}
-		<li class='jc'>{@link oaj.http.header.Pragma}
-		<li class='jc'>{@link oaj.http.header.ProxyAuthenticate}
-		<li class='jc'>{@link oaj.http.header.ProxyAuthorization}
-		<li class='jc'>{@link oaj.http.header.Range}
-		<li class='jc'>{@link oaj.http.header.Referer}
-		<li class='jc'>{@link oaj.http.header.RetryAfter}
-		<li class='jc'>{@link oaj.http.header.Server}
-		<li class='jc'>{@link oaj.http.header.TE}
-		<li class='jc'>{@link oaj.http.header.Thrown}
-		<li class='jc'>{@link oaj.http.header.Trailer}
-		<li class='jc'>{@link oaj.http.header.TransferEncoding}
-		<li class='jc'>{@link oaj.http.header.Upgrade}
-		<li class='jc'>{@link oaj.http.header.UserAgent}
-		<li class='jc'>{@link oaj.http.header.Vary}
-		<li class='jc'>{@link oaj.http.header.Via}
-		<li class='jc'>{@link oaj.http.header.Warning}
-		<li class='jc'>{@link oaj.http.header.WwwAuthenticate}
-	</ul>
-	<p>
-		These headers extend from the following classes that provide data-type specific functionality:
-	</p>
-	<ul class='javatree'>
-		<li class='jic'>{@code org.apache.http.NameValuePair}
-		<ul>
-			<li class='jic'>{@code org.apache.http.Header}
-			<ul>
-				<li class='jc'>{@link oaj.http.header.BasicHeader}
-				<ul class='javatreec'>
-					<li class='jc'>{@link oaj.http.header.BasicBooleanHeader}	
-					<li class='jc'>{@link oaj.http.header.BasicCsvHeader}
-					<li class='jc'>{@link oaj.http.header.BasicDateHeader}
-					<li class='jc'>{@link oaj.http.header.BasicEntityTagHeader}
-					<li class='jc'>{@link oaj.http.header.BasicEntityTagsHeader}
-					<li class='jc'>{@link oaj.http.header.BasicIntegerHeader}
-					<li class='jc'>{@link oaj.http.header.BasicLongHeader}
-					<li class='jc'>{@link oaj.http.header.BasicMediaRangesHeader}
-					<li class='jc'>{@link oaj.http.header.BasicMediaTypeHeader}
-					<li class='jc'>{@link oaj.http.header.BasicStringHeader}
-					<li class='jc'>{@link oaj.http.header.BasicStringRangesHeader}
-					<li class='jc'>{@link oaj.http.header.BasicUriHeader}
-				</ul>
-			</ul>
-		</ul>
-	</ul>
-	<p>
-		These subclasses provide various convenience methods to allow for easy fluent-style coding.
-	</p>
-	<h5 class='figure'>Examples</h5>
-	<p class='bjava'>
-		|	<jc>// Validates the response body content is not expired.</jc>
-		|	<jv>restClient</jv>
-		|		.get(<jsf>URL</jsf>)
-		|		.run()
-		|		.getHeader(<js>"Expires"</js>).asDateHeader().assertZonedDateTime().isLessThan(<jk>new</jk> Date());
-	</p>
-	
-	<h5 class='topic'>HeaderList</h5>
-	<p>
-		The {@link oaj.http.header.HeaderList} class is a thread-safe immutable list of HTTP headers.
-	</p>
-
-	<h5 class='figure'>Example</h5>
-	<p class='bjava'>
-		|	<jc>// Construct using builder.</jc>
-		|	HeaderList <jv>headers</jv> = HeaderList
-		|		.<jsm>create</jsm>()
-		|		.append(Accept.<jsm>of</jsm>(<js>"text/xml"</js>))
-		|		.append(<js>"Content-Type"</js>, ()-&gt;<jsm>getDynamicContentTypeFromSomewhere</jsm>())
-		|		.build();
-		|	
-		|	<jc>// Construct using convenience creator.</jc>
-		|	HeaderList <jv>headers</jv> = HeaderList.<jsm>of</jsm>(Accept.<jsf>TEXT_XML</jsf>, ContentType.<jsf>TEXT_XML</jsf>);
-	</p>
-	<p>
-		Header lists are immutable, but can be appended to using the {@link oaj.http.header.HeaderList#copy() copy()} method:	
-	</p>
-	<p class='bjava'>
-		|	<jv>headers</jv> = <jv>headers</jv>
-		|		.copy()
-		|		.append(AcceptEncoding.<jsm>of</jsm>(<js>"identity"</js>))
-		|		.build();
-	</p>
-	<p>
-		Static methods are provided on {@link oaj.http.HttpHeaders} to further simplify creation of header lists.
-	</p>
-	<p class='bjava'>
-		|	<jk>import static</jk> org.apache.juneau.http.HttpHeaders.*;
-		|
-		|	HeaderList <jv>headers</jv> = <jsm>headerList</jsm>(<jsm>accept</jsm>(<js>"text/xml"</js>), <jsm>contentType</jsm>(<js>"text/xml"</js>));
-	</p>
-	<p>
-		The builder class supports setting default header values (i.e. add a header to the list if it isn't otherwise in the list).
-		Note that this is different from simply setting a value twice as using default values will not overwrite existing
-		headers.
-		<br>The following example notes the distinction:
-	</p>
-	<p class='bjava'>
-		|	<jv>headers</jv> = HeaderList
-		|		.<jsm>create</jsm>()
-		|		.set(Accept.<jsf>TEXT_PLAIN</jsf>)
-		|		.set(Accept.<jsf>TEXT_XML</jsf>)
-		|		.build();
-		|	<jsm>assertObject</jsm>(<jv>headers</jv>).isString(<js>"[Accept: text/xml]"</js>);
-		|
-		|	<jv>headers</jv> = HeaderList
-		|		.create()
-		|		.set(Accept.<jsf>TEXT_PLAIN</jsf>)
-		|		.setDefault(Accept.<jsf>TEXT_XML</jsf>)
-		|		.build();
-		|	<jsm>assertObject</jsm>(<jv>headers</jv>).isString(<js>"[Accept: text/plain]"</js>);
-	</p>
-
-	<p>
-		Various methods are provided for iterating over the headers in this list to avoid array copies.
-	</p>
-	<ul class='javatree'>
-		<li class='jm'>{@link oaj.http.header.HeaderList#forEach(Consumer) forEach(Consumer)} / {@link oaj.http.header.HeaderList#forEach(String,Consumer) forEach(String,Consumer)} / {@link oaj.http.header.HeaderList#forEach(Predicate,Consumer) forEach(Predicate,Consumer)} - Use consumers to process headers.
-		<li class='jm'>{@link oaj.http.header.HeaderList#iterator() iterator()} / {@link oaj.http.header.HeaderList#iterator(String) iterator(String)} - Use an {@link HeaderIterator} to process headers.
-		<li class='jm'>{@link oaj.http.header.HeaderList#stream() stream()} / {@link oaj.http.header.HeaderList#stream(String) stream(String)} - Use a stream.
-	</ul>
-	<p>
-		In general, try to use these over the {@link oaj.http.header.HeaderList#getAll() getAll()} / {@link oaj.http.header.HeaderList#getAll(String) getAll(String)} methods that require array copies.
-	</p>
-	<p>
-		The {@link oaj.http.header.HeaderList#get(String) get(String)} method is special in that it will collapse multiple headers with the same name into
-		a single comma-delimited list (see <a href='https://tools.ietf.org/html/rfc2616#section-4.2'>RFC 2616 Section 4.2</a> for rules).
-	</p>
-	<p>
-		The {@link oaj.http.header.HeaderList#get(Class) get(Class)} and {@link oaj.http.header.HeaderList#get(String,Class) get(String,Class)} methods are provided for working with {@link oaj.http.annotation.Header}-annotated
-		beans.
-	</p>
-	<h5 class='figure'>Example</h5>
-	<p class='bjava'>
-		|	ContentType <jv>contentType</jv> = <jv>headers</jv>.get(ContentType.<jk>class</jk>);
-	</p>
-
-	<p>
-		By default, header names are treated as case-insensitive.  This can be changed using the {@link oaj.http.header.HeaderList.Builder#caseSensitive() caseSensitive()}
-		method.
-	</p>
-
-	<p>
-		A {@link oaj.svl.VarResolver} can be associated with this builder to create header values with embedded variables that
-		are resolved at runtime.
-	</p>
-
-	<h5 class='figure'>Example</h5>
-	<p class='bjava'>
-		|	<jc>// Create a header list with dynamically-resolving values pulled from a system property.</jc>
-		|
-		|	System.<jsm>setProperty</jsm>(<js>"foo"</js>, <js>"bar"</js>);
-		|
-		|	HeaderList <jv>headers</jv> = HeaderList
-		|		.<jsm>create</jsm>()
-		|		.resolving()
-		|		.append(<js>"X1"</js>, <js>"$S{foo}"</js>)
-		|		.append(<js>"X2"</js>, ()-&gt;<js>"$S{foo}"</js>)
-		|		.build();
-		|
-		|	<jsm>assertObject</jsm>(<jv>headers</jv>).isString(<js>"[X1: bar, X2: bar]"</js>);
-	</p>
-
-	<p>
-		The {@link oaj.http.header.HeaderList} object can be extended to defined pre-packaged lists of headers which can be used in various
-		annotations throughout the framework.
-	</p>
-	<h5 class='figure'>Example</h5>
-	<p class='bjava'>
-		|	<jc>// A predefined list of headers.</jc>
-		|	<jk>public class</jk> MyHeaderList <jk>extends</jk> HeaderList {
-		|		<jk>public</jk> MyHeaderList() {
-		|			<jk>super</jk>(Accept.<jsf>TEXT_XML</jsf>, ContentType.<jsf>TEXT_XML</jsf>);
-		|		}
-		|	}
-		|
-		|	<jc>// Use it on a remote proxy to add headers on all requests.</jc>
-		|	<ja>@Remote</ja>(path=<js>"/petstore"</js>, headerList=MyHeaderList.<jk>class</jk>)
-		|	<jk>public interface</jk> PetStore {
-		|
-		|		<ja>@RemotePost</ja>(<js>"/pets"</js>)
-		|		Pet addPet(
-		|			<ja>@Content</ja> CreatePet <jv>createPet</jv>,
-		|			<ja>@Header</ja>(<js>"E-Tag"</js>) UUID <jv>etag</jv>,
-		|			<ja>@Query</ja>(<js>"debug"</js>) <jk>boolean</jk> <jv>debug</jv>
-		|		);
-		|	}
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-common/04.jrc.org.apache.juneau.http.part.html b/juneau-doc/docs/Topics/06.juneau-rest-common/04.jrc.org.apache.juneau.http.part.html
deleted file mode 100644
index da081ef96..000000000
--- a/juneau-doc/docs/Topics/06.juneau-rest-common/04.jrc.org.apache.juneau.http.part.html
+++ /dev/null
@@ -1,164 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'org.apache.juneau.http.part', created:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.http.part} package contains implementations of <c>org.apache.http.NameValuePair</c> to 
-		be used for query/form-data/path parts and part lists.
-	</p>
-	<ul class='javatree'>
-		<li class='jic'>{@code org.apache.http.NameValuePair}
-		<ul>
-			<li class='jc'>{@link oaj.http.part.BasicPart}
-			<ul class='javatreec'>
-				<li class='jc'>{@link oaj.http.part.BasicBooleanPart}
-				<li class='jc'>{@link oaj.http.part.BasicCsvArrayPart}
-				<li class='jc'>{@link oaj.http.part.BasicDatePart}
-				<li class='jc'>{@link oaj.http.part.BasicIntegerPart}
-				<li class='jc'>{@link oaj.http.part.BasicLongPart}
-				<li class='jc'>{@link oaj.http.part.BasicPartIterator}
-				<li class='jc'>{@link oaj.http.part.BasicStringPart}
-				<li class='jc'>{@link oaj.http.part.BasicUriPart}
-			</ul>
-		</ul>
-	</ul>
-
-	<h5 class='topic'>PartList</h5>
-	<p>
-		The {@link oaj.http.part.PartList} class is a thread-safe immutable list of HTTP parts (form-data, query-parameters, path-parameters).
-	</p>
-	<h5 class='figure'>Example</h5>
-	<p class='bjava'>
-		|	PartList <jv>parts</jv> = PartList
-		|		.<jsm>create</jsm>()
-		|		.append(MyPart.<jsm>of</jsm>(<js>"foo"</js>))
-		|		.append(<js>"Bar"</js>, ()-&gt;<jsm>getDynamicValueFromSomewhere</jsm>())
-		|		.build();
-	</p>
-
-	<p>
-		Convenience creators are provided for creating lists with minimal code:
-	</p>
-	<p class='bjava'>
-		PartList <jv>parts</jv> = PartList.<jsm>of</jsm>(BasicIntegerPart.<jsm>of</jsm>(<js>"foo"</js>, 1));
-	</p>
-
-	<p>
-		Part lists are immutable, but can be appended to using the {@link oaj.http.part.PartList#copy() copy()} method:
-	</p>
-	<p class='bjava'>
-		|	<jv>parts</jv> = <jv>parts</jv>
-		|		.copy()
-		|		.append(BasicIntegerPart.<jsm>of</jsm>(<js>"foo"</js>, 1))
-		|		.build();
-	</p>
-
-	<p>
-		Static methods are provided on {@link oaj.http.HttpParts} to further simplify creation of part lists.
-	</p>
-	<p class='bjava'>
-		|	<jk>import static</jk> org.apache.juneau.http.HttpParts.*;
-		|
-		|	PartList <jv>parts</jv> = <jsm>partList</jsm>(<jsm>integerPart</jsm>(<js>"foo"</js>, 1), <jsm>booleanPart</jsm>(<js>"bar"</js>, <jk>false</jk>));
-	</p>
-
-	<p>
-		The builder class supports setting default part values (i.e. add a part to the list if it isn't otherwise in the list).
-		Note that this is different from simply setting a value twice as using default values will not overwrite existing
-		parts.
-		<br>The following example notes the distinction:
-	</p>
-
-	<p class='bjava'>
-		|	<jv>parts</jv> = PartList
-		|		.<jsm>create</jsm>()
-		|		.set(<js>"Foo"</js>, <js>"bar"</js>)
-		|		.set(<js>"Foo"</js>, <js>"baz"</js>)
-		|		.build();
-		|	<jsm>assertObject</jsm>(<jv>parts</jv>).isString(<js>"foo=baz"</js>);
-		|
-		|	<jv>parts</jv> = PartList
-		|		.create()
-		|		.set(<js>"Foo"</js>, <js>"bar"</js>)
-		|		.setDefault(<js>"Foo"</js>, <js>"baz"</js>)
-		|		.build();
-		|	<jsm>assertObject</jsm>(<jv>parts</jv>).isString(<js>"foo=bar"</js>);
-	</p>
-
-	<p>
-		Various methods are provided for iterating over the parts in this list to avoid array copies.
-	</p>
-	<ul class='javatree'>
-		<li class='jm'>{@link oaj.http.part.PartList#forEach(Consumer) forEach(Consumer)} / {@link oaj.http.part.PartList#forEach(String,Consumer) forEach(String,Consumer)} / {@link oaj.http.part.PartList#forEach(Predicate,Consumer) forEach(Predicate,Consumer)} - Use consumers to process parts.
-		<li class='jm'>{@link oaj.http.part.PartList#iterator() iterator()} / {@link oaj.http.part.PartList#iterator(String) iterator(String)} - Use an {@link PartIterator} to process parts.
-		<li class='jm'>{@link oaj.http.part.PartList#stream() stream()} / {@link oaj.http.part.PartList#stream(String) stream(String)} - Use a stream.
-	</ul>
-	<p>
-		In general, try to use these over the {@link oaj.http.part.PartList#getAll() getAll()} / {@link oaj.http.part.PartList#getAll(String) getAll(String)} methods that require array copies.
-	</p>
-
-	<p>
-		Similar to the way multiple headers can be collapsed into a single value, the {@link oaj.http.part.PartList#get(String) get(String)} method is special in that it will collapse multiple parts with the same name into
-		a single comma-delimited list.
-	</p>
-
-	<p>
-		The {@link oaj.http.part.PartList#get(Class) get(Class)} and {@link oaj.http.part.PartList#get(String,Class) get(String,Class)} methods are provided for working with {@link oaj.http.annotation.FormData} / {@link oaj.http.annotation.Query} / {@link oaj.http.annotation.Path}-annotated
-		beans.
-	</p>
-
-	<h5 class='figure'>Example</h5>
-	<p class='bjava'>
-		|	MyQueryBean <jv>foo</jv> = <jv>parts</jv>.get(MyQueryBean.<jk>class</jk>);
-	</p>
-
-	<p>
-		A {@link oaj.svl.VarResolver} can be associated with this builder to create part values with embedded variables that
-		are resolved at runtime.
-	</p>
-
-	<h5 class='figure'>Example</h5>
-	<p class='bjava'>
-		|	<jc>// Create a part list with dynamically-resolving values pulled from a system property.</jc>
-		|
-		|	System.<jsm>setProperty</jsm>(<js>"foo"</js>, <js>"bar"</js>);
-		|
-		|	PartList <jv>parts</jv> = PartList
-		|		.<jsm>create</jsm>()
-		|		.resolving()
-		|		.append(<js>"X1"</js>, <js>"$S{foo}"</js>)
-		|		.append(<js>"X2"</js>, ()-&gt;<js>"$S{foo}"</js>)
-		|		.build();
-		|
-		|	<jsm>assertObject</jsm>(<jv>parts</jv>).isString(<js>"X1=bar&amp;X2=bar"</js>);
-	</p>
-
-	<p>
-		The {@link oaj.http.part.PartList} object can be extended to defined pre-packaged lists of parts which can be used in various
-		annotations throughout the framework.
-	</p>
-
-	<h5 class='figure'>Example</h5>
-	<p class='bjava'>
-		|	<jc>// A predefined list of parts.</jc>
-		|	<jk>public class</jk> MyPartList <jk>extends</jk> PartList {
-		|		<jk>public</jk> MyPartList() {
-		|			<jk>super</jk>(BasicIntegerPart.<jsm>of</jsm>(<js>"foo"</js>,1), BasicBooleanPart.<jsm>of</jsm>(<js>"bar"</js>,<jk>false</jk>));
-		|		}
-		|	}
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-common/05.jrc.org.apache.juneau.http.entity.html b/juneau-doc/docs/Topics/06.juneau-rest-common/05.jrc.org.apache.juneau.http.entity.html
deleted file mode 100644
index eb5068f10..000000000
--- a/juneau-doc/docs/Topics/06.juneau-rest-common/05.jrc.org.apache.juneau.http.entity.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'org.apache.juneau.http.entity', created:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.http.entity} package contains implementations of <c>org.apache.http.HttpEntity</c>.
-	</p>
-	<ul class='javatree'>
-		<li class='jic'>{@code org.apache.http.HttpEntity}
-		<ul>
-			<li class='jc'>{@link oaj.http.entity.BasicHttpEntity}
-			<ul class='javatreec'>
-				<li class='jc'>{@link oaj.http.entity.ByteArrayEntity}
-				<li class='jc'>{@link oaj.http.entity.FileEntity}
-				<li class='jc'>{@link oaj.http.entity.InputStreamEntity}
-				<li class='jc'>{@link oaj.http.entity.ReaderEntity}
-				<li class='jc'>{@link oaj.http.entity.SerializedEntity}
-				<li class='jc'>{@link oaj.http.entity.StringEntity}
-			</ul>
-		</ul>
-	</ul>
-	
-	<h5 class='topic'>HttpEntityBuilder</h5>
-	<p>
-		HTTP entities are created through builders created in the {@link oaj.http.HttpEnties} class or individual <c>create()</c> methods
-		defined in the subclasses above.  The builder contains the following methods:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.http.entity.HttpEntityBuilder}
-		<ul>
-			<li class='jm'>{@link oaj.http.entity.HttpEntityBuilder#cached() cached()}
-			<li class='jm'>{@link oaj.http.entity.HttpEntityBuilder#chunked() chunked()}
-			<li class='jm'>{@link oaj.http.entity.HttpEntityBuilder#chunked(boolean) chunked(boolean)}
-			<li class='jm'>{@link oaj.http.entity.HttpEntityBuilder#content(Object) content(Object)}
-			<li class='jm'>{@link oaj.http.entity.HttpEntityBuilder#content(Supplier) content(Supplier)}
-			<li class='jm'>{@link oaj.http.entity.HttpEntityBuilder#contentEncoding(ContentEncoding) contentEncoding(ContentEncoding)}
-			<li class='jm'>{@link oaj.http.entity.HttpEntityBuilder#contentEncoding(String) contentEncoding(String)}
-			<li class='jm'>{@link oaj.http.entity.HttpEntityBuilder#contentLength(long) contentLength(long)}
-			<li class='jm'>{@link oaj.http.entity.HttpEntityBuilder#contentType(ContentType) contentType(ContentType)}
-			<li class='jm'>{@link oaj.http.entity.HttpEntityBuilder#contentType(String) contentType(String)}
-		</ul>
-	</ul>
-	
-	<h5 class='figure'>Example</h5>
-	<p class='bjava'>
-		|	<jk>import static</jk> org.apache.juneau.http.HttpEntities.*;
-		|
-		|	<jk>byte</jk>[] <jv>payload</jv> = {...};
-		|
-		|	<jc>// Create via type builder.</jc>
-		|	HttpEntity <jv>entity</jv> = ByteArrayEntity
-		|		.<jsm>create</jsm>()
-		|		.content(<jv>payload</jv>)
-		|		.contentType(ContentType.<jsf>APPLICATION_OCTET_STREAM</jsf>)
-		|		.build();
-		|
-		|	<jc>// Create via HttpEntities.</jc>
-		|	HttpEntity <jv>entity</jv> = <jsm>byteArrayEntity</jsm>(<jv>payload</jv>, ContentType.<jsf>APPLICATION_OCTET_STREAM</jsf>).build();
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-common/06.jrc.org.apache.juneau.http.resource.html b/juneau-doc/docs/Topics/06.juneau-rest-common/06.jrc.org.apache.juneau.http.resource.html
deleted file mode 100644
index 4bf0ccddc..000000000
--- a/juneau-doc/docs/Topics/06.juneau-rest-common/06.jrc.org.apache.juneau.http.resource.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'org.apache.juneau.http.resource', created:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.http.resource} package contains implementations of {@link oaj.http.resource.HttpResource} which are extensions of <c>org.apache.http.HttpEntity</c> with 
-		arbitrary headers added.
-	</p>
-	<ul class='javatree'>
-		<li class='jic'>{@code org.apache.http.HttpEntity}
-		<ul>
-			<li class='jic'>{@link oaj.http.resource.HttpResource}
-			<ul>
-				<li class='jc'>{@link oaj.http.resource.BasicResource}
-				<ul class='javatreec'>
-					<li class='jc'>{@link oaj.http.resource.ByteArrayResource}
-					<li class='jc'>{@link oaj.http.resource.FileResource}
-					<li class='jc'>{@link oaj.http.resource.InputStreamResource}
-					<li class='jc'>{@link oaj.http.resource.ReaderResource}
-					<li class='jc'>{@link oaj.http.resource.StringResource}
-				</ul>
-			</ul>
-		</ul>
-	</ul>
-	
-	<h5 class='topic'>HttpResourceBuilder</h5>
-	<p>
-		HTTP entities are created through builders created in the {@link oaj.http.HttpResources} class or individual <c>create()</c> methods
-		defined in the subclasses above.  The builder contains the following methods:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.http.resource.HttpResourceBuilder}
-		<ul>
-			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#cached() cached()}
-			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#chunked() chunked()}
-			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#chunked(boolean) chunked(boolean)}
-			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#content(Object) content(Object)}
-			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#content(Supplier) content(Supplier)}
-			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#contentEncoding(ContentEncoding) contentEncoding(ContentEncoding)}
-			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#contentEncoding(String) contentEncoding(String)}
-			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#contentLength(long) contentLength(long)}
-			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#contentType(ContentType) contentType(ContentType)}
-			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#contentType(String) contentType(String)}
-			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#copyFrom(HttpResponse) copyFrom(HttpResponse)}
-			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#getEntity() getEntity()}
-			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#getHeaders() getHeaders()}
-			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#header(Header) header(Header)}
-			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#header(String,String) header(String,String)}
-			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#headers(Header...) headers(Header...)}
-			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#headers(HeaderList) headers(HeaderList)}
-			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#headers(List) headers(List&lt;Header&gt;)}
-			<li class='jm'>{@link oaj.http.resource.HttpResourceBuilder#getHeaders() getHeaders()}
-		</ul>
-	</ul>
-	
-	<h5 class='figure'>Example</h5>
-	<p class='bjava'>
-		|	<jk>import static</jk> org.apache.juneau.http.HttpResources.*;
-		|
-		|	<jk>byte</jk>[] <jv>payload</jv> = {...};
-		|
-		|	<jc>// Create via type builder.</jc>
-		|	HttpResource <jv>resource</jv> = ByteArrayResource
-		|		.<jsm>create</jsm>()
-		|		.content(<jv>payload</jv>)
-		|		.contentType(ContentType.<jsf>APPLICATION_OCTET_STREAM</jsf>)
-		|		.build();
-		|
-		|	<jc>// Create via HttpResources.</jc>
-		|	HttpResource <jv>resource</jv> = <jsm>byteArrayResource</jsm>(<jv>payload</jv>, ContentType.<jsf>APPLICATION_OCTET_STREAM</jsf>).build();
-	</p>
-	
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-common/07.jrc.org.apache.juneau.http.response.html b/juneau-doc/docs/Topics/06.juneau-rest-common/07.jrc.org.apache.juneau.http.response.html
deleted file mode 100644
index b337a63fb..000000000
--- a/juneau-doc/docs/Topics/06.juneau-rest-common/07.jrc.org.apache.juneau.http.response.html
+++ /dev/null
@@ -1,146 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'org.apache.juneau.http.response', created:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.http.response} package contains predefined <c>org.apache.http.HttpResponse</c> implementations for most standard HTTP
-		responses. 
-	</p>
-	<ul class='javatreec'>
-		<li class='jc'>{@link oaj.http.response.Accepted}
-		<li class='jc'>{@link oaj.http.response.AlreadyReported}
-		<li class='jc'>{@link oaj.http.response.BadRequest}
-		<li class='jc'>{@link oaj.http.response.Conflict}
-		<li class='jc'>{@link oaj.http.response.Continue}
-		<li class='jc'>{@link oaj.http.response.Created}
-		<li class='jc'>{@link oaj.http.response.EarlyHints}
-		<li class='jc'>{@link oaj.http.response.ExpectationFailed}
-		<li class='jc'>{@link oaj.http.response.FailedDependency}
-		<li class='jc'>{@link oaj.http.response.Forbidden}
-		<li class='jc'>{@link oaj.http.response.Found}
-		<li class='jc'>{@link oaj.http.response.Gone}
-		<li class='jc'>{@link oaj.http.response.HttpVersionNotSupported}
-		<li class='jc'>{@link oaj.http.response.IMUsed}
-		<li class='jc'>{@link oaj.http.response.InsufficientStorage}
-		<li class='jc'>{@link oaj.http.response.InternalServerError}
-		<li class='jc'>{@link oaj.http.response.LengthRequired}
-		<li class='jc'>{@link oaj.http.response.Locked}
-		<li class='jc'>{@link oaj.http.response.LoopDetected}
-		<li class='jc'>{@link oaj.http.response.MethodNotAllowed}
-		<li class='jc'>{@link oaj.http.response.MisdirectedRequest}
-		<li class='jc'>{@link oaj.http.response.MovedPermanently}
-		<li class='jc'>{@link oaj.http.response.MultipleChoices}
-		<li class='jc'>{@link oaj.http.response.MultiStatus}
-		<li class='jc'>{@link oaj.http.response.NetworkAuthenticationRequired}
-		<li class='jc'>{@link oaj.http.response.NoContent}
-		<li class='jc'>{@link oaj.http.response.NonAuthoritiveInformation}
-		<li class='jc'>{@link oaj.http.response.NotAcceptable}
-		<li class='jc'>{@link oaj.http.response.NotExtended}
-		<li class='jc'>{@link oaj.http.response.NotFound}
-		<li class='jc'>{@link oaj.http.response.NotImplemented}
-		<li class='jc'>{@link oaj.http.response.NotModified}
-		<li class='jc'>{@link oaj.http.response.Ok}
-		<li class='jc'>{@link oaj.http.response.PartialContent}
-		<li class='jc'>{@link oaj.http.response.PayloadTooLarge}
-		<li class='jc'>{@link oaj.http.response.PermanentRedirect}
-		<li class='jc'>{@link oaj.http.response.PreconditionFailed}
-		<li class='jc'>{@link oaj.http.response.PreconditionRequired}
-		<li class='jc'>{@link oaj.http.response.Processing}
-		<li class='jc'>{@link oaj.http.response.RangeNotSatisfiable}
-		<li class='jc'>{@link oaj.http.response.RequestHeaderFieldsTooLarge}
-		<li class='jc'>{@link oaj.http.response.ResetContent}
-		<li class='jc'>{@link oaj.http.response.SeeOther}
-		<li class='jc'>{@link oaj.http.response.ServiceUnavailable}
-		<li class='jc'>{@link oaj.http.response.SwitchingProtocols}
-		<li class='jc'>{@link oaj.http.response.TemporaryRedirect}
-		<li class='jc'>{@link oaj.http.response.TooManyRequests}
-		<li class='jc'>{@link oaj.http.response.Unauthorized}
-		<li class='jc'>{@link oaj.http.response.UnavailableForLegalReasons}
-		<li class='jc'>{@link oaj.http.response.UnprocessableEntity}
-		<li class='jc'>{@link oaj.http.response.UnsupportedMediaType}
-		<li class='jc'>{@link oaj.http.response.UpgradeRequired}
-		<li class='jc'>{@link oaj.http.response.UriTooLong}
-		<li class='jc'>{@link oaj.http.response.UseProxy}
-		<li class='jc'>{@link oaj.http.response.VariantAlsoNegotiates}
-	</ul>	
-	
-	<p>
-		These are built upon existing HttpComponents APIs:
-	</p>
-	<ul class='javatree'>
-		<li class='jic'>{@code org.apache.http.HttpMessage}
-		<ul>
-			<li class='jic'>{@code org.apache.http.HttpResponse}
-			<ul>
-				<li class='jc'>{@link oaj.http.response.BasicHttpResponse} - 100-399 response codes
-				<li class='jc'>{@link oaj.http.response.BasicHttpException} - 400+ response codes
-			</ul>
-		</ul>
-	</ul>
-	
-	<p>
-		The most common location where these responses are used are in REST operation methods described later.
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-		|	<ja>@RestDelete</ja>(path=<js>"/{id}"</js>)
-		|	<jk>public</jk> Ok doDelete(<ja>@Path</ja> <jk>int</jk> <jv>id</jv>) <jk>throws</jk> NotFound, Unauthorized {
-		|		<jf>pojoService</jf>.delete(<jf>pojoService</jf>.find(<jv>id</jv>).orElseThrow(NotFound::<jk>new</jk>));
-		|		<jk>return</jk> Ok.OK;
-		|	}
-	</p>
-	
-	<p>
-		The following classes are also provided for constructing your own custom responses:
-	</p>
-	<ul class='javatreec'>
-		<li class='jc'>{@link oaj.http.response.BasicHttpException}
-		<li class='jc'>{@link oaj.http.response.BasicHttpResponse}
-		<li class='jc'>{@link oaj.http.response.HttpExceptionBuilder}
-		<li class='jc'>{@link oaj.http.response.HttpResponseBuilder}
-	</ul>
-	
-	<h5 class='topic'>HttpResponseBuilder / HttpExceptionBuilder</h5>
-	<p>
-		HTTP responses are created through builders created in the {@link oaj.http.HttpResponses} class or individual <c>create()</c> methods
-		defined in the basic classes above.  The builder contains the following methods:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oaj.http.response.HttpResponseBuilder}
-		<ul>
-			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#content(HttpEntity) content(HttpEntity)}
-			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#content(String) content(String)}
-			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#copyFrom(HttpResponse) copyFrom(HttpResponse)}
-			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#getHeaders() getHeaders()}
-			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#getStatusLine() getStatusLine()}
-			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#header(Header) header(Header)}
-			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#header(String,String) header(String,String)}
-			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#headers(Header...) headers(Header...)}
-			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#headers(HeaderList) headers(HeaderList)}
-			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#headers(List) headers(List&lt;Header&gt;)}
-			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#locale(Locale) locale(Locale)}
-			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#location(String) location(String)}
-			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#location(URI) location(URI)}
-			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#protocolVersion(ProtocolVersion) protocolVersion(ProtocolVersion)}
-			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#reasonPhrase(String) reasonPhrase(String)}
-			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#reasonPhraseCatalog(ReasonPhraseCatalog) reasonPhraseCatalog(ReasonPhraseCatalog)}
-			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#statusCode(int) statusCode(int)}
-			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#statusLine(BasicStatusLine) statusLine(BasicStatusLine)}
-			<li class='jm'>{@link oaj.http.response.HttpResponseBuilder#unmodifiable() unmodifiable()}
-		</ul>
-	</ul>
-	
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-common/08.jrc.org.apache.juneau.http.remote.html b/juneau-doc/docs/Topics/06.juneau-rest-common/08.jrc.org.apache.juneau.http.remote.html
deleted file mode 100644
index d8a82940a..000000000
--- a/juneau-doc/docs/Topics/06.juneau-rest-common/08.jrc.org.apache.juneau.http.remote.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'org.apache.juneau.http.remote', created:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oaj.http.remote} package contains the annotations used for defining client-side remote proxies.
-	</p>
-	<ul class='javatreec'>
-		<li class='ja'>{@link oaj.http.remote.Remote}
-		<li class='ja'>{@link oaj.http.remote.RemoteGet}
-		<li class='ja'>{@link oaj.http.remote.RemotePut}
-		<li class='ja'>{@link oaj.http.remote.RemotePost}
-		<li class='ja'>{@link oaj.http.remote.RemoteDelete}
-		<li class='ja'>{@link oaj.http.remote.RemoteOp}
-	</ul>
-	<p>
-		See {@doc jrc.Proxies Proxies} for more information on use of these annotations.
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/07.juneau-rest-server.html b/juneau-doc/docs/Topics/07.juneau-rest-server.html
deleted file mode 100644
index 653a14e99..000000000
--- a/juneau-doc/docs/Topics/07.juneau-rest-server.html
+++ /dev/null
@@ -1,133 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'juneau-rest-server', updated:'9.0.0'}
-
-<div class='topic'>
-	<h5 class='figure'>Maven Dependency</h5>
-	<p class='bxml 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 <l>juneau-rest-server</l> library allows you to quickly wrap POJOs and expose them as full-fledged REST 
-		resources served up in a servlet container using a bare-minimum amount of code.
-		The primary goal for Juneau was to make it as easy as possible to implement easy-to-read and self-documenting 
-		REST resources using very little code.
-	</p>
-	<p>
-		One of the biggest advantages of the Juneau REST framework over similar architectures is that it hides the 
-		serialization layer from the developer.  
-		The developer can work entirely with POJOs and let the Juneau framework handle all the serialization and 
-		parsing work.  
-		The developer need never know what the <l>Accept</l> or <l>Content-Type</l> or <l>Accept-Encoding</l> (etc...) 
-		header values are because those details are all handled by the framework. 
-	</p>
-	<p> 
-		The API builds upon the existing JEE Servlet API.  
-		The root class, {@link oajr.servlet.RestServlet} is nothing but a specialized 
-		{@link javax.servlet.http.HttpServlet}, and the {@link oajr.RestRequest} and 
-		{@link oajr.RestResponse} classes are nothing more than specialized 
-		{@link javax.servlet.http.HttpServletRequest} and {@link javax.servlet.http.HttpServletResponse} objects.  
-		This allows maximum flexibility for the developer since you can let Juneau handle operations such as 
-		serialization, or you can revert to the existing servlet APIs to do low-level processing of requests yourself.	
-		It also means you need nothing more than a Servlet container such as Jetty to use the REST framework.
-	</p>
-	
-	<h5 class='topic'>Features</h5>
-	<ul class='spaced-list'>
-		<li>
-			Deployable in standard Servlet containers.
-		<li>
-			Deployable in Spring Boot environments with full support for injected beans.
-		<li>
-			Serializes POJOs to JSON, XML, HTML, URL-Encoding, UON, RDF/XML, N-Triple, Turtle, N3, SOAP, or 
-			Java-serialized-object based on value of <l>Accept</l> header.  
-			<br>No user code is required to handle these types.
-			<ul>
-				<li>Extensible design that provides ability to override existing content type handlers, or add the 
-					ability to handle other kinds of content types.
-			</ul>
-		<li>
-			Parses content of POST/PUT request bodies to POJOs.
-		<li>
-			Automatic built-in ability to serialize POJO metadata to JSON+SCHEMA, XML+SCHEMA, or HTML+SCHEMA based on 
-			<l>Accept</l> header.
-		<li>
-			Automatic negotiation of output Writer based on HTTP headers.
-			<ul>
-				<li>Automatic handling of <l>Accept-Charset</l> header for all character sets supported by the JVM.
-				<li>Automatic handling of <l>Accept-Encoding</l> header with registered encoders.
-			</ul>
-		<li>
-			Automatic error handling.
-			<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.
-			</ul>
-		<li>
-			Support for parsing all HTTP parts (headers, query, formData, path variables) using Swagger formatting rules and validations.
-			<br>Not limited to simple POJOs, but rather you can represent arbitrarily-complex POJOs in any HTTP part using UON notation.
-		<li>
-			Auto-created Swagger JSON and Swagger UI available through OPTIONS requests of resources.
-		<li>
-			Various useful debugging features that make debugging using a browser extremely simple...
-			<ul>
-				<li>Ability to pass HTTP header values as URL GET parameters (e.g. <l>&amp;Accept=text/xml</l>).
-				<li>Ability to pass HTTP content on PUT/POST requests as a URL GET parameter 
-					(e.g. <l>&amp;content=(foo=bar)</l>).
-				<li>Ability to simulate non-GET requests using a <l>&amp;method</l> GET parameter 
-					(e.g. <l>&amp;method=POST</l>).
-				<li>Ability to force <js>"text/plain"</js> on response using GET parameter <l>&amp;plainText=true</l>.
-			</ul>
-		<li>
-			Ability to implement overloaded HTTP methods through the use of the <l>&amp;method</l> attribute 
-			(e.g. <l>&amp;method=FOO</l>).
-		<li>
-			Ability to match URL patterns (e.g. <l>/foo/{fooId}/bar/{barId}</l>) against URLs 
-			(e.g. <l>/foo/123/bar/456/bing</l>).
-		<li>
-			Ability to associate guards at the resource or method levels through annotations.
-			<br>Typically useful for security, but can be used for a variety of purposes.
-		<li>
-			Ability to associate converters at the resource or method levels through annotations.
-			<br>Typically useful for performing conversions on input and output, such as for supporting older input and 
-			output formats.
-	</ul>
-	<p>
-		Many of the examples in this document are pulled directly from <l>juneau-examples-rest</l>.
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/07.juneau-rest-server/01.jrs.Overview.html b/juneau-doc/docs/Topics/07.juneau-rest-server/01.jrs.Overview.html
deleted file mode 100644
index 38d378507..000000000
--- a/juneau-doc/docs/Topics/07.juneau-rest-server/01.jrs.Overview.html
+++ /dev/null
@@ -1,155 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'Overview', created:'9.0.0'}
-
-<div class='topic'>
-	<p>
-		A REST resource is simply a Java class annotated with {@link oajr.annotation.Rest @Rest}.
-		The most common case is a class that extends {@link oajr.servlet.BasicRestServlet}, which itself is simply an 
-		extension of {@link javax.servlet.http.HttpServlet} which allows it to be deployed as a servlet.  
-	</p>
-	<p>
-		Juneau has two sample applications for demonstrating how to use the REST API, one using Jetty and one using
-		Spring Boot:
-	</p>
-	<ul class='javatree'>
-		<li class='jp'>{@link oaj.examples.rest.jetty}
-		<li class='jp'>{@link oaj.examples.rest.springboot}
-	</ul>
-	<p>
-		The {@link oaj.examples.rest.springboot} application is described in the section {@doc jrss.Overview}.
-	</p>
-	<p>
-		The Jetty application consists of the following application class that registers our top-level servlet:
-	</p>
-	<p class='bjava'>
-		|	<jk>public class</jk> App {
-		|	
-		|		<jk>public static void</jk> main(String[] <jv>args</jv>) <jk>throws</jk> Exception {
-		|			JettyMicroservice
-		|				.<jsm>create</jsm>()
-		|				.args(<jv>args</jv>)
-		|				.servlet(RootResources.<jk>class</jk>)
-		|				.build()
-		|				.start()
-		|				.startConsole()
-		|				.join();
-		|		}
-		|	}
-	</p>
-	<p>
-		The root resources class is an example of a router page that is used to attach children to:
-	</p>
-	<p class='bjava'>
-		|	<ja>@Rest</ja>(
-		|		title=<js>"Root resources"</js>,
-		|		description=<js>"Example of a router resource page."</js>,
-		|		children={
-		|			HelloWorldResource.<jk>class</jk>,
-		|			DtoExamples.<jk>class</jk>,
-		|			UtilityBeansResource.<jk>class</jk>,
-		|			HtmlBeansResource.<jk>class</jk>,
-		|			ConfigResource.<jk>class</jk>,
-		|			ShutdownResource.<jk>class</jk>
-		|		}
-		|	)
-		|	<ja>@HtmlDocConfig</ja>(
-		|		widgets={
-		|			ContentTypeMenuItem.<jk>class</jk>
-		|		},
-		|		navlinks={
-		|			<js>"api: servlet:/api"</js>,
-		|			<js>"stats: servlet:/stats"</js>,
-		|			<js>"$W{ContentTypeMenuItem}"</js>,
-		|			<js>"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/RootResources.java"</js>
-		|		},
-		|		aside={
-		|			<js>"&lt;div 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;API&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;STATS&lt;/span&gt; link to view runtime statistics on this page.&lt;/p&gt;"</js>,
-		|			<js>"	&lt;p&gt;Also note the &lt;span class='link'&gt;SOURCE&lt;/span&gt; link to view the source code for the page.&lt;/p&gt;"</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>
-		|		},
-		|		asideFloat=<js>"RIGHT"</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>implements</jk> BasicUniversalJenaConfig {
-		|		<jc>// IMPORTANT!  If you don't need RDF support, change the parent interface to BasicUniversalConfig.
-		|		// It allows you to remove the Jena prerequisite.</jc>
-		|	
-		|		<jk>private static final long</jk> <jsf>serialVersionUID</jsf> = 1L;
-		|	}	
-	</p>
-	<p>
-		This is what it looks like in a browser:
-	</p>
-	
-	<h5 class='figure'>HTML representation</h5>
-	<img class='bordered w800' src='doc-files/jrs.Overview.RootResources.png'>
-	
-	<h5 class='figure'>JSON representation</h5>
-	<img class='bordered w800' src='doc-files/jrs.Overview.RootResources.json.png'>
-	
-	<p>
-		The {@link oaj.examples.rest.HelloWorldResource} class is our basic example of a child REST resource:
-	</p>
-	
-	<p class='bjava'>
-		|	<ja>@Rest</ja>(
-		|		title=<js>"Hello World"</js>,
-		|		description=<js>"An example of the simplest-possible resource"</js>,
-		|		path=<js>"/helloWorld"</js>
-		|	)
-		|	<ja>@HtmlDocConfig</ja>(
-		|		aside={
-		|			<js>"&lt;div style='max-width:400px' class='text'&gt;"</js>,
-		|			<js>"	&lt;p&gt;This page shows a resource that simply response with a 'Hello world!' message&lt;/p&gt;"</js>,
-		|			<js>"	&lt;p&gt;The POJO serialized is a simple String.&lt;/p&gt;"</js>,
-		|			<js>"&lt;/div&gt;"</js>
-		|		}
-		|	)
-		|	<jk>public class</jk> HelloWorldResource <jk>extends</jk> BasicRestObject <jk>implements</jk> BasicUniversalConfig {
-		|	
-		|		<ja>@RestGet</ja>(path=<js>"/*"</js>, summary=<js>"Responds with \"Hello world!\""</js>)
-		|		<jk>public</jk> String sayHello() {
-		|			<jk>return</jk> <js>"Hello world!"</js>;
-		|		}
-		|	}
-	</p>
-
-	<p>
-		This is what it looks like in a browser:
-	</p>
-
-	<h5 class='figure'>HTML representation</h5>
-	<img class='bordered w800' src='doc-files/jrs.Overview.HelloWorldResource.png'>
-	
-	<p>
-		It doesn't much simpler than that.  
-		In this case, we're simply returning a string that will be converted to any of the supported languages (e.g. 
-		JSON, XML, HTML, ...).
-		However, we could have returned any POJO consisting of beans, maps, collections, etc...
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/07.juneau-rest-server/02.jrs.AnnotatedClasses.html b/juneau-doc/docs/Topics/07.juneau-rest-server/02.jrs.AnnotatedClasses.html
deleted file mode 100644
index a5f4ae4f2..000000000
--- a/juneau-doc/docs/Topics/07.juneau-rest-server/02.jrs.AnnotatedClasses.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'@Rest-Annotated Classes', updated:'8.1.2,9.0.0'}
-
-<div class='topic'>
-	<p>
-		The {@link oajr.annotation.Rest @Rest} annotation is the primary way of defining
-		and configuring REST resource classes.
-		The functionality of the class itself is covered in detail in the topics below.
-	</p>
-	<ul class='javatree'>
-		<li class='ja'>{@link oajr.annotation.Rest}
-			<ul class='javatreec'>
-				<li class='jma'>{@link oajr.annotation.Rest#allowedHeaderParams() allowedHeaderParams}
-				<li class='jma'>{@link oajr.annotation.Rest#allowedMethodHeaders() allowedMethodHeaders}
-				<li class='jma'>{@link oajr.annotation.Rest#allowedMethodParams() allowedMethodParams}
-				<li class='jma'>{@link oajr.annotation.Rest#beanStore() beanStore}
-				<li class='jma'>{@link oajr.annotation.Rest#builder() builder}
-				<li class='jma'>{@link oajr.annotation.Rest#callLogger() callLogger}
-				<li class='jma'>{@link oajr.annotation.Rest#children() children}
-				<li class='jma'>{@link oajr.annotation.Rest#clientVersionHeader() clientVersionHeader}
-				<li class='jma'>{@link oajr.annotation.Rest#config() config}
-				<li class='jma'>{@link oajr.annotation.Rest#consumes() consumes}
-				<li class='jma'>{@link oajr.annotation.Rest#contextClass() contextClass}
-				<li class='jma'>{@link oajr.annotation.Rest#converters() converters}
-				<li class='jma'>{@link oajr.annotation.Rest#debug() debug}
-				<li class='jma'>{@link oajr.annotation.Rest#debugEnablement() debugEnablement}
-				<li class='jma'>{@link oajr.annotation.Rest#debugOn() debugOn}
-				<li class='jma'>{@link oajr.annotation.Rest#defaultAccept() defaultAccept}
-				<li class='jma'>{@link oajr.annotation.Rest#defaultCharset() defaultCharset}
-				<li class='jma'>{@link oajr.annotation.Rest#defaultContentType() defaultContentType}
-				<li class='jma'>{@link oajr.annotation.Rest#defaultRequestAttributes() defaultRequestAttributes}
-				<li class='jma'>{@link oajr.annotation.Rest#defaultRequestHeaders() defaultRequestHeaders}
-				<li class='jma'>{@link oajr.annotation.Rest#defaultResponseHeaders() defaultResponseHeaders}
-				<li class='jma'>{@link oajr.annotation.Rest#description() description}
-				<li class='jma'>{@link oajr.annotation.Rest#disableContentParam() disableContentParam}
-				<li class='jma'>{@link oajr.annotation.Rest#encoders() encoders}
-				<li class='jma'>{@link oajr.annotation.Rest#fileFinder() fileFinder}
-				<li class='jma'>{@link oajr.annotation.Rest#guards() guards}
-				<li class='jma'>{@link oajr.annotation.Rest#maxInput() maxInput}
-				<li class='jma'>{@link oajr.annotation.Rest#messages() messages}
-				<li class='jma'>{@link oajr.annotation.Rest#on() on}
-				<li class='jma'>{@link oajr.annotation.Rest#onClass() onClass}
-				<li class='jma'>{@link oajr.annotation.Rest#parsers() parsers}
-				<li class='jma'>{@link oajr.annotation.Rest#partParser() partParser}
-				<li class='jma'>{@link oajr.annotation.Rest#partSerializer() partSerializer}
-				<li class='jma'>{@link oajr.annotation.Rest#path() path}
-				<li class='jma'>{@link oajr.annotation.Rest#produces() produces}
-				<li class='jma'>{@link oajr.annotation.Rest#renderResponseStackTraces() renderResponseStackTraces}
-				<li class='jma'>{@link oajr.annotation.Rest#responseProcessors() responseProcessors}
-				<li class='jma'>{@link oajr.annotation.Rest#restChildrenClass() restChildrenClass}
-				<li class='jma'>{@link oajr.annotation.Rest#restOpArgs() restOpArgs}
-				<li class='jma'>{@link oajr.annotation.Rest#restOpContextClass() restOpContextClass}
-				<li class='jma'>{@link oajr.annotation.Rest#restOperationsClass() restOperationsClass}
-				<li class='jma'>{@link oajr.annotation.Rest#roleGuard() roleGuard}
-				<li class='jma'>{@link oajr.annotation.Rest#rolesDeclared() rolesDeclared}
-				<li class='jma'>{@link oajr.annotation.Rest#serializers() serializers}
-				<li class='jma'>{@link oajr.annotation.Rest#siteName() siteName}
-				<li class='jma'>{@link oajr.annotation.Rest#staticFiles() staticFiles}
-				<li class='jma'>{@link oajr.annotation.Rest#swagger() swagger}
-				<li class='jma'>{@link oajr.annotation.Rest#swaggerProvider() swaggerProvider}
-				<li class='jma'>{@link oajr.annotation.Rest#title() title}
-				<li class='jma'>{@link oajr.annotation.Rest#uriAuthority() uriAuthority}
-				<li class='jma'>{@link oajr.annotation.Rest#uriContext() uriContext}
-				<li class='jma'>{@link oajr.annotation.Rest#uriRelativity() uriRelativity}
-				<li class='jma'>{@link oajr.annotation.Rest#uriResolution() uriResolution}
-			</ul>
-		</li>
-	</ul>
-	<p>
-		The {@link oajr.annotation.Rest @Rest} annotation in inheritable from parents and interfaces of resource classes.
-		When multiple annotations are defined at different levels, the annotation values are combined.
-		This is a particularly useful feature because it allows you to define your own configured parent
-		resource classes that can be extended by all your child resources so that they all share common
-		settings.
-	</p>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/07.juneau-rest-server/02.jrs.AnnotatedClasses/01.jrs.PredefinedClasses.html b/juneau-doc/docs/Topics/07.juneau-rest-server/02.jrs.AnnotatedClasses/01.jrs.PredefinedClasses.html
deleted file mode 100644
index 1bf05a277..000000000
--- a/juneau-doc/docs/Topics/07.juneau-rest-server/02.jrs.AnnotatedClasses/01.jrs.PredefinedClasses.html
+++ /dev/null
@@ -1,214 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
... 18998 lines suppressed ...