juneau-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jamesbog...@apache.org
Subject [juneau] branch master updated: Revamp of Microservice API for Spring Boot support.
Date Fri, 07 Dec 2018 15:10:37 GMT
This is an automated email from the ASF dual-hosted git repository.

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


The following commit(s) were added to refs/heads/master by this push:
     new 5b83379  Revamp of Microservice API for Spring Boot support.
5b83379 is described below

commit 5b83379902742792b0922a209128a1bd8eadb235
Author: JamesBognar <jamesbognar@apache.org>
AuthorDate: Fri Dec 7 10:10:16 2018 -0500

    Revamp of Microservice API for Spring Boot support.
---
 .../main/java/org/apache/juneau/config/Config.java |  142 ++
 ...gMemoryStore.java => ConfigClasspathStore.java} |   52 +-
 .../config/store/ConfigClasspathStoreBuilder.java  |   34 +-
 .../juneau/config/store/ConfigFileStore.java       |   47 +-
 .../juneau/config/store/ConfigMemoryStore.java     |    9 +-
 .../apache/juneau/config/store/ConfigStore.java    |    8 +
 juneau-core/juneau-core-test/.classpath            |    1 +
 juneau-core/juneau-core-test/files/test2.txt       |   12 +
 .../java/org/apache/juneau/config/ConfigTest.java  |   11 +
 ...toreTest.java => ConfigClasspathStoreTest.java} |   41 +-
 ...FileStoreTest.java => ConfigFileStoreTest.java} |   19 +-
 ...ryStoreTest.java => ConfigMemoryStoreTest.java} |   15 +-
 .../java/org/apache/juneau/utils/IOUtilsTest.java  |   11 +
 .../juneau-core-test/src/test/resources/foo1.cfg   |   13 +
 .../src/test/resources/sub/foo2.cfg                |   13 +
 .../src/test/resources/sub/test4.txt               |   12 +
 .../juneau-core-test/src/test/resources/test3.txt  |   12 +
 juneau-core/juneau-core-test/test.cfg              |   12 +
 juneau-core/juneau-core-test/test1.txt             |   12 +
 .../org/apache/juneau/http/ReaderResource.java     |    2 +-
 .../java/org/apache/juneau/internal/IOUtils.java   |   36 +-
 .../main/java/org/apache/juneau/utils/Args.java    |   11 +
 .../java/org/apache/juneau/utils/ManifestFile.java |   35 +
 juneau-doc/docs/ReleaseNotes/8.0.0.html            |   72 +-
 .../06.juneau-config/14.SystemDefaultConfig.html   |   62 +
 ....html => 09.juneau-rest-server-springboot.html} |   17 +-
 .../01.TODO.html}                                  |    2 +-
 ...rest-client.html => 10.juneau-rest-client.html} |    0
 .../01.RestProxies.html                            |    0
 .../01.RestProxies/01.RemoteResource.html          |    0
 .../01.RestProxies/02.RemoteMethod.html            |    0
 .../01.RestProxies/03.Body.html                    |    0
 .../01.RestProxies/04.FormData.html                |    0
 .../01.RestProxies/05.Query.html                   |    0
 .../01.RestProxies/06.Header.html                  |    0
 .../01.RestProxies/07.Path.html                    |    0
 .../01.RestProxies/08.Request.html                 |    0
 .../01.RestProxies/09.Response.html                |    0
 .../01.RestProxies/10.DualPurposeInterfaces.html   |    0
 .../02.SSL.html                                    |    0
 .../03.Authentication.html                         |    0
 .../03.Authentication/01.BASIC.html                |    0
 .../03.Authentication/02.FORM.html                 |    0
 .../03.Authentication/03.OIDC.html                 |    0
 .../04.ResponsePatterns.html                       |    0
 .../05.PipingOutput.html                           |    0
 .../06.Debugging.html                              |    0
 .../07.Logging.html                                |    0
 .../08.Interceptors.html                           |    0
 .../09.UnitTesting.html                            |    0
 .../10.Other.html                                  |    0
 .../doc-files/juneau-examples-core.1.png           |  Bin 84524 -> 0 bytes
 .../doc-files/juneau-examples-core.2.png           |  Bin 91900 -> 0 bytes
 .../doc-files/juneau-examples-core.3.png           |  Bin 133875 -> 0 bytes
 ...erver.html => 11.juneau-microservice-core.html} |    2 +-
 .../01.Introduction.html                           |    2 +-
 .../02.GettingStarted.html                         |    2 +-
 .../02.GettingStarted/01.Installing.html           |    0
 .../02.GettingStarted/02.Running.html              |    0
 .../02.GettingStarted/03.Building.html             |    0
 .../03.Manifest.html                               |    2 +-
 .../03.Manifest/01.ManifestApi.html                |    0
 .../04.Config.html                                 |    2 +-
 .../04.Config/01.ConfigApi.html                    |    0
 .../05.ResourceClasses.html                        |    2 +-
 .../06.PredefinedResourceClasses.html              |    2 +-
 .../07.RestMicroservice.html                       |    2 +-
 .../07.RestMicroservice/01.Extending.html          |    0
 .../08.UiCustomization.html                        |    2 +-
 .../juneau-microservice-server.Installing.1.png    |  Bin
 .../juneau-microservice-server.Installing.2.png    |  Bin
 ...uneau-microservice-server.ResourceClasses.1.png |  Bin
 .../juneau-microservice-server.Running.1.png       |  Bin
 .../juneau-microservice.UiCustomization.1.png      |  Bin
 .../doc-files/juneau-examples-rest.1.png           |  Bin 84524 -> 0 bytes
 .../doc-files/juneau-examples-rest.2.png           |  Bin 91461 -> 0 bytes
 .../doc-files/juneau-examples-rest.3.png           |  Bin 55969 -> 0 bytes
 .../doc-files/juneau-examples-rest.4.png           |  Bin 98777 -> 0 bytes
 .../juneau-examples-rest.AtomFeedResource.1.png    |  Bin 176439 -> 0 bytes
 .../juneau-examples-rest.AtomFeedResource.2.png    |  Bin 266611 -> 0 bytes
 .../juneau-examples-rest.AtomFeedResource.3.png    |  Bin 147615 -> 0 bytes
 .../juneau-examples-rest.ConfigResource.1.png      |  Bin 153114 -> 0 bytes
 .../juneau-examples-rest.ConfigResource.2.png      |  Bin 269953 -> 0 bytes
 ...neau-examples-rest.DockerRegistryResource.1.png |  Bin 90236 -> 0 bytes
 .../juneau-examples-rest.HelloWorldResource.1.png  |  Bin 71562 -> 0 bytes
 .../juneau-examples-rest.HelloWorldResource.2.png  |  Bin 15098 -> 0 bytes
 .../juneau-examples-rest.JsonSchemaResource.1.png  |  Bin 172354 -> 0 bytes
 .../juneau-examples-rest.JsonSchemaResource.2.png  |  Bin 110715 -> 0 bytes
 .../juneau-examples-rest.LogsResource.1.png        |  Bin 206285 -> 0 bytes
 ...uneau-examples-rest.MethodExampleResource.1.png |  Bin 195777 -> 0 bytes
 ...uneau-examples-rest.MethodExampleResource.2.png |  Bin 191703 -> 0 bytes
 ...uneau-examples-rest.MethodExampleResource.3.png |  Bin 270821 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.1.png    |  Bin 1878139 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.10a.png  |  Bin 48069 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.10b.png  |  Bin 383659 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.10c.png  |  Bin 44965 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.11a.png  |  Bin 54673 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.11b.png  |  Bin 116960 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.2a.png   |  Bin 20939 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.2b.png   |  Bin 21099 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.2c.png   |  Bin 18792 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.2d.png   |  Bin 29067 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.3a.png   |  Bin 196893 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.3b.png   |  Bin 376985 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.4a.png   |  Bin 108151 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.4b.png   |  Bin 70385 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.5a.png   |  Bin 79909 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.5b.png   |  Bin 20719 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.6a.png   |  Bin 74215 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.6b.png   |  Bin 73533 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.7a.png   |  Bin 62296 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.7b.png   |  Bin 69269 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.8a.png   |  Bin 73445 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.9a.png   |  Bin 90539 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.9b.png   |  Bin 62821 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.9c.png   |  Bin 68444 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.9d.png   |  Bin 93241 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.9e.png   |  Bin 34398 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.9f.png   |  Bin 51092 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.9g.png   |  Bin 57639 -> 0 bytes
 .../juneau-examples-rest.PetStoreResource.9h.png   |  Bin 46782 -> 0 bytes
 .../juneau-examples-rest.PhotosResource.1.png      |  Bin 108693 -> 0 bytes
 .../juneau-examples-rest.PhotosResource.2.png      |  Bin 3006830 -> 0 bytes
 .../juneau-examples-rest.RequestEchoResource.1.png |  Bin 151959 -> 0 bytes
 .../juneau-examples-rest.RootResources.1.png       |  Bin 98777 -> 0 bytes
 .../juneau-examples-rest.SqlQueryResource.1.png    |  Bin 99530 -> 0 bytes
 .../juneau-examples-rest.SqlQueryResource.2.png    |  Bin 246365 -> 0 bytes
 ...au-examples-rest.SystemPropertiesResource.1.png |  Bin 162195 -> 0 bytes
 ...au-examples-rest.SystemPropertiesResource.2.png |  Bin 197935 -> 0 bytes
 ...au-examples-rest.SystemPropertiesResource.3.png |  Bin 90408 -> 0 bytes
 .../juneau-examples-rest.TempDirResource.1.png     |  Bin 163742 -> 0 bytes
 .../juneau-examples-rest.TempDirResource.2.png     |  Bin 92437 -> 0 bytes
 .../juneau-examples-rest.TempDirResource.3.png     |  Bin 193078 -> 0 bytes
 ...juneau-examples-rest.TumblrParserResource.1.png |  Bin 201475 -> 0 bytes
 ...neau-examples-rest.UrlEncodedFormResource.1.png |  Bin 102545 -> 0 bytes
 ...neau-examples-rest.UrlEncodedFormResource.2.png |  Bin 131215 -> 0 bytes
 ...rver.html => 12.juneau-microservice-jetty.html} |    2 +-
 .../01.Introduction.html                           |    2 +-
 .../02.GettingStarted.html                         |    2 +-
 .../02.GettingStarted/01.Installing.html           |    0
 .../02.GettingStarted/02.Running.html              |    0
 .../02.GettingStarted/03.Building.html             |    0
 .../03.Manifest.html                               |    2 +-
 .../03.Manifest/01.ManifestApi.html                |    0
 .../04.Config.html                                 |    2 +-
 .../04.Config/01.ConfigApi.html                    |    0
 .../05.ResourceClasses.html                        |    2 +-
 .../06.PredefinedResourceClasses.html              |    2 +-
 .../07.RestMicroservice.html                       |    2 +-
 .../07.RestMicroservice/01.Extending.html          |    0
 .../08.UiCustomization.html                        |    2 +-
 .../juneau-microservice-server.Installing.1.png    |  Bin
 .../juneau-microservice-server.Installing.2.png    |  Bin
 ...uneau-microservice-server.ResourceClasses.1.png |  Bin
 .../juneau-microservice-server.Running.1.png       |  Bin
 .../juneau-microservice.UiCustomization.1.png      |  Bin
 ... => 13.juneau-microservice-jetty-template.html} |    2 +-
 ...ples-core.html => 14.juneau-examples-core.html} |    0
 .../doc-files/juneau-examples-core.1.png           |  Bin
 .../doc-files/juneau-examples-core.2.png           |  Bin
 .../doc-files/juneau-examples-core.3.png           |  Bin
 ...ples-rest.html => 15.juneau-examples-rest.html} |    2 +-
 .../01.RootResources.html                          |    0
 .../02.HelloWorldResource.html                     |    0
 .../03.PetStoreResource.html                       |    0
 .../04.DtoExamples.html                            |    0
 .../05.ConfigResource.html                         |    0
 .../06.LogsResource.html                           |    0
 .../doc-files/juneau-examples-rest.1.png           |  Bin
 .../doc-files/juneau-examples-rest.2.png           |  Bin
 .../doc-files/juneau-examples-rest.3.png           |  Bin
 .../doc-files/juneau-examples-rest.4.png           |  Bin
 .../juneau-examples-rest.AtomFeedResource.1.png    |  Bin
 .../juneau-examples-rest.AtomFeedResource.2.png    |  Bin
 .../juneau-examples-rest.AtomFeedResource.3.png    |  Bin
 .../juneau-examples-rest.ConfigResource.1.png      |  Bin
 .../juneau-examples-rest.ConfigResource.2.png      |  Bin
 ...neau-examples-rest.DockerRegistryResource.1.png |  Bin
 .../juneau-examples-rest.HelloWorldResource.1.png  |  Bin
 .../juneau-examples-rest.HelloWorldResource.2.png  |  Bin
 .../juneau-examples-rest.JsonSchemaResource.1.png  |  Bin
 .../juneau-examples-rest.JsonSchemaResource.2.png  |  Bin
 .../juneau-examples-rest.LogsResource.1.png        |  Bin
 ...uneau-examples-rest.MethodExampleResource.1.png |  Bin
 ...uneau-examples-rest.MethodExampleResource.2.png |  Bin
 ...uneau-examples-rest.MethodExampleResource.3.png |  Bin
 .../juneau-examples-rest.PetStoreResource.1.png    |  Bin
 .../juneau-examples-rest.PetStoreResource.10a.png  |  Bin
 .../juneau-examples-rest.PetStoreResource.10b.png  |  Bin
 .../juneau-examples-rest.PetStoreResource.10c.png  |  Bin
 .../juneau-examples-rest.PetStoreResource.11a.png  |  Bin
 .../juneau-examples-rest.PetStoreResource.11b.png  |  Bin
 .../juneau-examples-rest.PetStoreResource.2a.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.2b.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.2c.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.2d.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.3a.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.3b.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.4a.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.4b.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.5a.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.5b.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.6a.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.6b.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.7a.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.7b.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.8a.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.9a.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.9b.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.9c.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.9d.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.9e.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.9f.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.9g.png   |  Bin
 .../juneau-examples-rest.PetStoreResource.9h.png   |  Bin
 .../juneau-examples-rest.PhotosResource.1.png      |  Bin
 .../juneau-examples-rest.PhotosResource.2.png      |  Bin
 .../juneau-examples-rest.RequestEchoResource.1.png |  Bin
 .../juneau-examples-rest.RootResources.1.png       |  Bin
 .../juneau-examples-rest.SqlQueryResource.1.png    |  Bin
 .../juneau-examples-rest.SqlQueryResource.2.png    |  Bin
 ...au-examples-rest.SystemPropertiesResource.1.png |  Bin
 ...au-examples-rest.SystemPropertiesResource.2.png |  Bin
 ...au-examples-rest.SystemPropertiesResource.3.png |  Bin
 .../juneau-examples-rest.TempDirResource.1.png     |  Bin
 .../juneau-examples-rest.TempDirResource.2.png     |  Bin
 .../juneau-examples-rest.TempDirResource.3.png     |  Bin
 ...juneau-examples-rest.TumblrParserResource.1.png |  Bin
 ...neau-examples-rest.UrlEncodedFormResource.1.png |  Bin
 ...neau-examples-rest.UrlEncodedFormResource.2.png |  Bin
 ...est.html => 16.juneau-examples-rest-jetty.html} |    2 +-
 .../01.Classes.html                                |    2 +-
 .../02.DeployingToHeroku.html                      |    0
 .../juneau-examples-rest-springboot.Classes.png    |  Bin
 ...tml => 17.juneau-examples-rest-springboot.html} |    2 +-
 .../01.Classes.html                                |    0
 .../02.DeployingToHeroku.html                      |    0
 .../juneau-examples-rest-springboot.Classes.png    |  Bin
 .../Topics/{14.Security.html => 18.Security.html}  |    0
 .../01.juneau-marshall.html                        |    0
 .../02.juneau-svl.html                             |    0
 .../03.juneau-rest-server.html                     |    0
 .../main/javadoc/doc-files/ReleaseNotes.630.1.png  |  Bin 60161 -> 0 bytes
 .../main/javadoc/doc-files/ReleaseNotes.630.2.png  |  Bin 426946 -> 0 bytes
 .../ReleaseNotes.631.ContentTypeMenuItem.png       |  Bin 166904 -> 0 bytes
 .../doc-files/ReleaseNotes.631.DevopsStyle.png     |  Bin 173865 -> 0 bytes
 .../doc-files/ReleaseNotes.631.LightStyle.png      |  Bin 187319 -> 0 bytes
 .../doc-files/ReleaseNotes.631.OriginalStyle.png   |  Bin 146147 -> 0 bytes
 .../doc-files/ReleaseNotes.631.QueryMenuItem.png   |  Bin 68307 -> 0 bytes
 .../doc-files/ReleaseNotes.631.StyleMenuItem.png   |  Bin 74135 -> 0 bytes
 .../doc-files/ReleaseNotes.632.DarkStyle.png       |  Bin 221326 -> 0 bytes
 .../doc-files/ReleaseNotes.632.PetStoreAdd.png     |  Bin 97319 -> 0 bytes
 .../main/javadoc/doc-files/ReleaseNotes.711.1.png  |  Bin 51582 -> 0 bytes
 .../doc-files/juneau-config.Serializing.1.png      |  Bin 39851 -> 0 bytes
 .../doc-files/juneau-config.Serializing.2.png      |  Bin 48881 -> 0 bytes
 .../doc-files/juneau-config.Serializing.3.png      |  Bin 59095 -> 0 bytes
 .../juneau-examples-rest-springboot.Classes.png    |  Bin
 .../juneau-rest-server.HelloWorldExample.1.png     |  Bin 73686 -> 0 bytes
 ...erver.HtmlDocAnnotation.PredefinedWidgets.1.png |  Bin 137327 -> 0 bytes
 ...erver.HtmlDocAnnotation.PredefinedWidgets.2.png |  Bin 68449 -> 0 bytes
 ...erver.HtmlDocAnnotation.PredefinedWidgets.3.png |  Bin 253370 -> 0 bytes
 ...erver.HtmlDocAnnotation.PredefinedWidgets.4.png |  Bin 5081 -> 0 bytes
 .../juneau-rest-server.OptionsPages.1.png          |  Bin 281814 -> 0 bytes
 .../juneau-rest-server.PredefinedLabelBeans.1.png  |  Bin 23665 -> 0 bytes
 .../juneau-rest-server.PredefinedLabelBeans.2.png  |  Bin 72375 -> 0 bytes
 .../juneau-rest-server.PredefinedLabelBeans.3.png  |  Bin 7975 -> 0 bytes
 .../juneau-rest-server.PredefinedLabelBeans.4.png  |  Bin 102963 -> 0 bytes
 .../doc-files/juneau-rest-server.RouterPages.1.png |  Bin 233223 -> 0 bytes
 .../doc-files/juneau-rest-server.Stylesheets.0.png |  Bin 233293 -> 0 bytes
 .../doc-files/juneau-rest-server.Stylesheets.1.png |  Bin 26898 -> 0 bytes
 .../doc-files/juneau-rest-server.Stylesheets.2.png |  Bin 334340 -> 0 bytes
 .../doc-files/juneau-rest-server.Stylesheets.3.png |  Bin 298163 -> 0 bytes
 .../doc-files/juneau-rest-server.Swagger.1.png     |  Bin 174380 -> 0 bytes
 .../doc-files/juneau-rest-server.Swagger.2.png     |  Bin 194455 -> 0 bytes
 .../doc-files/juneau-rest-server.Swagger.3.png     |  Bin 79498 -> 0 bytes
 .../doc-files/juneau-rest-server.Swagger.4.png     |  Bin 99968 -> 0 bytes
 .../doc-files/juneau-rest-server.Swagger.5.png     |  Bin 63056 -> 0 bytes
 .../juneau-rest-server.Swagger.Models.1.png        |  Bin 176855 -> 0 bytes
 .../juneau-rest-server.Swagger.Models.2.png        |  Bin 131057 -> 0 bytes
 .../juneau-rest-server.Swagger.Models.3.png        |  Bin 59691 -> 0 bytes
 .../juneau-rest-server.Swagger.Operations.1.png    |  Bin 168211 -> 0 bytes
 .../juneau-rest-server.Swagger.Operations.2.png    |  Bin 82846 -> 0 bytes
 .../juneau-rest-server.Swagger.Operations.3.png    |  Bin 303830 -> 0 bytes
 .../juneau-rest-server.Swagger.Operations.4.png    |  Bin 137041 -> 0 bytes
 .../juneau-rest-server.Swagger.Parameters.1.png    |  Bin 92998 -> 0 bytes
 .../juneau-rest-server.Swagger.Parameters.2.png    |  Bin 138574 -> 0 bytes
 .../juneau-rest-server.Swagger.Parameters.3.png    |  Bin 150192 -> 0 bytes
 .../juneau-rest-server.Swagger.Parameters.4.png    |  Bin 73142 -> 0 bytes
 ...neau-rest-server.Swagger.ResponseExamples.1.png |  Bin 105746 -> 0 bytes
 ...neau-rest-server.Swagger.ResponseExamples.2.png |  Bin 35135 -> 0 bytes
 ...neau-rest-server.Swagger.ResponseExamples.3.png |  Bin 32920 -> 0 bytes
 ...neau-rest-server.Swagger.ResponseExamples.4.png |  Bin 73190 -> 0 bytes
 .../juneau-rest-server.UiCustomization.1.png       |  Bin 267773 -> 0 bytes
 .../juneau-rest-server.UiCustomization.2.png       |  Bin 7196 -> 0 bytes
 .../juneau-rest-server.UiCustomization.3.png       |  Bin 6957 -> 0 bytes
 .../doc-files/juneau-rest-server.restRPC.1.png     |  Bin 231550 -> 0 bytes
 .../doc-files/juneau-rest-server.restRPC.2.png     |  Bin 130661 -> 0 bytes
 .../doc-files/juneau-rest-server.restRPC.3.png     |  Bin 170873 -> 0 bytes
 .../doc-files/juneau-rest-server.restRPC.4.png     |  Bin 96014 -> 0 bytes
 .../doc-files/juneau-rest-server.restRPC.5.png     |  Bin 62998 -> 0 bytes
 .../doc-files/juneau-rest-server.restRPC.6.png     |  Bin 158415 -> 0 bytes
 .../doc-files/juneau-rest-server.restRPC.7.png     |  Bin 110931 -> 0 bytes
 .../doc-files/juneau-rest-server.restRPC.8.png     |  Bin 122164 -> 0 bytes
 .../doc-files/juneau-rest-server.restRPC.9.png     |  Bin 114351 -> 0 bytes
 juneau-doc/src/main/javadoc/overview.html          | 1755 ++++++++++++++++----
 juneau-doc/src/main/javadoc/resources/docs.txt     |   52 +-
 .../main/javadoc/resources/fragments/about.html    |   36 -
 .../src/main/javadoc/resources/fragments/toc.html  |  380 -----
 .../.classpath                                     |   13 +-
 .../juneau-examples-rest-jetty}/.gitignore         |    1 +
 .../juneau-examples-rest-jetty/.project            |   26 +
 .../juneau-examples-rest-jetty/bin/.gitignore      |    1 +
 .../build-overlay/.classpath                       |    0
 .../build-overlay/pom.xml                          |    2 +-
 .../examples.cfg                                   |    7 -
 .../files/htdocs/images/asf.png                    |  Bin
 .../files/htdocs/images/juneau.png                 |  Bin
 .../files/htdocs/styles/SwaggerUI.css              |    0
 .../files/htdocs/themes/dark.css                   |    0
 .../files/htdocs/themes/devops.css                 |    0
 .../files/htdocs/themes/light.css                  |    0
 .../files/htdocs/themes/original.css               |    0
 .../files/jetty.xml                                |    4 -
 .../juneau-examples-rest-jetty.launch}             |    8 +-
 .../juneau-examples-rest-jetty}/pom.xml            |   81 +-
 .../src/assembly/bin.xml}                          |  105 +-
 .../org/apache/juneau/examples/rest/jetty/App.java |   56 +-
 .../juneau/examples/rest/ContentComboTestBase.java |    0
 .../apache/juneau/examples/rest/RestTestcase.java  |    0
 .../juneau/examples/rest/RootContentTest.java      |    0
 .../juneau/examples/rest/RootResourcesTest.java    |    0
 .../juneau/examples/rest/SamplesMicroservice.java  |    4 +-
 .../org/apache/juneau/examples/rest/TestUtils.java |    2 +-
 .../apache/juneau/examples/rest/_TestSuite.java    |    0
 .../.settings/org.eclipse.core.resources.prefs     |    1 -
 juneau-examples/juneau-examples-rest/pom.xml       |  100 +-
 .../apache/juneau/examples/rest/RootResources.java |    2 +-
 .../juneau/examples/rest/dto/AtomFeedResource.java |    2 +-
 .../juneau/examples/rest/dto/DtoExamples.java      |    2 +-
 .../examples/rest/dto/JsonSchemaResource.java      |    2 +-
 .../rest/petstore/rest/PetStoreResource.java       |    1 -
 juneau-examples/pom.xml                            |    1 +
 .../.classpath                                     |    0
 .../.gitignore                                     |    1 +
 .../.project                                       |    2 +-
 .../Dockerfile                                     |    0
 .../pom.xml                                        |   33 +-
 .../microservice/BasicMicroserviceListener.java}   |   50 +-
 .../org/apache/juneau/microservice/LogConfig.java  |  204 +++
 .../apache/juneau/microservice/Microservice.java   |  771 +++++++++
 .../juneau/microservice/MicroserviceBuilder.java   |  386 +++++
 .../juneau/microservice/MicroserviceListener.java} |   85 +-
 .../microservice/console/ConsoleCommand.java       |    2 +-
 .../juneau/microservice/console/ExitCommand.java   |    6 +-
 .../juneau/microservice/console/HelpCommand.java   |    0
 .../microservice/console/RestartCommand.java       |    0
 .../juneau/microservice/console/package-info.java  |    0
 .../apache/juneau/microservice/package-info.java   |    0
 .../juneau/microservice/resources/ConfigEdit.html  |    0
 .../microservice/resources/ConfigResource.java     |    0
 .../microservice/resources/DirectoryResource.java  |    0
 .../microservice/resources/LogEntryFormatter.java  |    0
 .../juneau/microservice/resources/LogParser.java   |    0
 .../microservice/resources/LogsResource.java       |    0
 .../microservice/resources/SampleRootResource.java |    0
 .../microservice/resources/ShutdownResource.java   |    2 +-
 .../microservice/resources/package-info.java       |    0
 .../juneau/microservice/Microservice.properties}   |   36 +-
 .../microservice/console}/Messages.properties      |   27 +-
 .../.classpath                                     |    0
 .../.gitignore                                     |    1 +
 .../.project                                       |    2 +-
 .../build-overlay/.classpath                       |    0
 .../build-overlay/.project                         |    0
 .../build-overlay/my-microservice.launch           |    0
 .../build-overlay/pom.xml                          |    0
 .../files/htdocs/images/asf.png                    |  Bin
 .../files/htdocs/images/juneau.png                 |  Bin
 .../files/htdocs/styles/SwaggerUI.css              |    0
 .../files/htdocs/themes/dark.css                   |    0
 .../files/htdocs/themes/devops.css                 |    0
 .../files/htdocs/themes/light.css                  |    0
 .../files/htdocs/themes/original.css               |    0
 .../files/jetty.xml                                |    4 -
 .../my-microservice.cfg                            |    2 +
 .../my-microservice.launch                         |    8 +-
 .../pom.xml                                        |    4 +-
 .../src/assembly/bin.xml                           |    0
 .../microservice/sample/HelloWorldResource.java    |    0
 .../juneau/microservice/sample/RootResources.java  |    0
 .../microservice/sample/nls/Messages.properties    |    0
 .../juneau/microservice/sample/package-info.java   |    0
 .../.classpath                                     |    0
 .../.gitignore                                     |    1 +
 .../.project                                       |   58 +-
 .../Dockerfile                                     |    0
 .../pom.xml                                        |   42 +-
 .../BasicJettyMicroserviceListener.java}           |   74 +-
 .../microservice/BasicJettyServerFactory.java}     |   73 +-
 .../apache/juneau/microservice/JettyLogger.java    |    0
 .../juneau/microservice/JettyMicroservice.java}    |  368 ++--
 .../microservice/JettyMicroserviceBuilder.java     |  347 ++++
 .../microservice/JettyMicroserviceListener.java}   |   94 +-
 .../juneau/microservice/JettyServerFactory.java}   |   76 +-
 .../apache/juneau/microservice/package-info.java   |    0
 .../microservice/resources/DebugResource.java      |    4 +-
 .../microservice/JettyMicroservice.properties}     |   35 +-
 .../.classpath                                     |    0
 .../.project                                       |   46 +-
 .../.settings/org.eclipse.core.resources.prefs     |    5 -
 .../.settings/org.eclipse.jdt.core.prefs           |  420 -----
 .../.settings/org.eclipse.jdt.ui.prefs             |   68 -
 .../.settings/org.eclipse.wst.html.core.prefs      |   43 -
 .../apache/juneau/microservice/Microservice.java   |  973 -----------
 .../.classpath                                     |    0
 .../.gitignore                                     |    1 +
 .../.project                                       |    2 +-
 .../build-overlay/.classpath                       |    0
 .../build-overlay/.project                         |    0
 .../build-overlay/my-microservice.launch           |    0
 .../build-overlay/pom.xml                          |    0
 .../files/htdocs/images/asf.png                    |  Bin
 .../files/htdocs/images/juneau.png                 |  Bin
 .../files/htdocs/styles/SwaggerUI.css              |    0
 .../files/htdocs/themes/dark.css                   |    0
 .../files/htdocs/themes/devops.css                 |    0
 .../files/htdocs/themes/light.css                  |    0
 .../files/htdocs/themes/original.css               |    0
 .../files/jetty.xml                                |    0
 .../my-microservice.cfg                            |    0
 .../my-microservice.launch                         |    8 +-
 .../pom.xml                                        |    2 +-
 .../src/assembly/bin.xml                           |    0
 .../microservice/sample/HelloWorldResource.java    |    0
 .../juneau/microservice/sample/RootResources.java  |    0
 .../microservice/sample/nls/Messages.properties    |    0
 .../juneau/microservice/sample/package-info.java   |    0
 .../.settings/org.eclipse.core.resources.prefs     |    4 -
 .../.settings/org.eclipse.jdt.core.prefs           |  420 -----
 .../.settings/org.eclipse.jdt.ui.prefs             |   68 -
 .../.settings/org.eclipse.wst.html.core.prefs      |   43 -
 .../.settings/org.eclipse.core.resources.prefs     |    2 -
 .../.settings/org.eclipse.jdt.core.prefs           |  400 -----
 .../juneau-microservice-test/files/jetty.xml       |    4 -
 .../juneau/rest/test/LargePojosResource.java       |    2 +-
 .../java/org/apache/juneau/rest/test/Root.java     |    2 +-
 .../rest/test/client/ThirdPartyProxyResource.java  |    1 -
 .../apache/juneau/rest/test/TestMicroservice.java  |   16 +-
 .../rest/test/client/InterfaceProxyTest.java       |    1 -
 juneau-microservice/pom.xml                        |    5 +-
 juneau-rest/.DS_Store                              |  Bin 6148 -> 6148 bytes
 .../juneau-rest-server-rdf}/.classpath             |    6 +
 .../juneau-rest-server-rdf}/.gitignore             |    1 +
 juneau-rest/juneau-rest-server-rdf/.project        |   26 +
 .../juneau-rest-server-rdf}/pom.xml                |  103 +-
 .../apache/juneau/rest}/BasicRestServletJena.java  |    3 +-
 .../juneau/rest}/BasicRestServletJenaGroup.java    |    3 +-
 .../juneau-rest-server-springboot}/.classpath      |    4 +-
 .../juneau-rest-server-springboot}/.gitignore      |    0
 juneau-rest/juneau-rest-server-springboot/.project |   28 +
 .../juneau-rest-server-springboot}/pom.xml         |   93 +-
 .../springboot/SpringRestResourceResolver.java     |   74 +
 .../org/apache/juneau/rest/BasicRestConfig.java    |    2 +-
 .../org/apache/juneau/rest/RestContextBuilder.java |   15 +-
 .../juneau/rest/annotation/RestResource.java       |    3 +
 juneau-rest/pom.xml                                |    2 +
 466 files changed, 4877 insertions(+), 4223 deletions(-)

diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
index f9f71da..eae82ad 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
@@ -45,6 +45,94 @@ import org.apache.juneau.svl.*;
  */
 public final class Config extends Context implements ConfigEventListener, Writable {
 
+	private static volatile Config SYSTEM_DEFAULT = findSystemDefault();
+
+	/**
+	 * Sets a system default configuration.
+	 *
+	 * @param systemDefault The new system default configuration.
+	 */
+	public synchronized static void setSystemDefault(Config systemDefault) {
+		SYSTEM_DEFAULT = systemDefault;
+	}
+
+	/**
+	 * Returns the system default configuration.
+	 *
+	 * @return The system default configuration, or <jk>null</jk> if it doesn't exist.
+	 */
+	public synchronized static Config getSystemDefault() {
+		return SYSTEM_DEFAULT;
+	}
+
+	private synchronized static Config findSystemDefault() {
+
+		for (String n : getCandidateSystemDefaultConfigNames()) {
+			Config config = find(n);
+			if (config != null)
+				return config;
+		}
+
+		return null;
+	}
+
+	/**
+	 * Returns the list of candidate system default configuration file names.
+	 *
+	 * <p>
+	 * If the <js>"juneau.configFile"</js> system property is set, returns a singleton of that value.
+	 * <br>Otherwise, returns a list consisting of the following values:
+	 * <ol>
+	 * 	<li>File with same name as jar file but with <js>".cfg"</js> extension.  (e.g. <js>"myjar.cfg"</js>)
+	 * 	<li>Any file ending in <js>".cfg"</js> in the home directory (names ordered alphabetically).
+	 * 	<li><js>"juneau.cfg"</js>
+	 * 	<li><js>"default.cfg"</js>
+	 * </ol>
+	 * <p>
+	 *
+	 * @return
+	 * 	A list of candidate file names.
+	 * 	<br>The returned list is modifiable.
+	 * 	<br>Each call constructs a new list.
+	 */
+	public synchronized static List<String> getCandidateSystemDefaultConfigNames() {
+		List<String> l = new ArrayList<>();
+
+		String s = System.getProperty("juneau.configFile");
+		if (s != null) {
+			l.add(s);
+			return l;
+		}
+
+		String cmd = System.getProperty("sun.java.command", "not_found").split("\\s+")[0];
+		if (cmd.endsWith(".jar") && ! cmd.contains("surefirebooter")) {
+			cmd = cmd.replaceAll(".*?([^\\\\\\/]+)\\.jar$", "$1");
+			l.add(cmd + ".cfg");
+			cmd = cmd.replaceAll("[\\.\\_].*$", "");  // Try also without version in jar name.
+			l.add(cmd + ".cfg");
+		}
+
+		Set<File> files = new TreeSet<>(Arrays.asList(new File(".").listFiles()));
+		for (File f : files)
+			if (f.getName().endsWith(".cfg"))
+				l.add(f.getName());
+
+		l.add("juneau.cfg");
+		l.add("default.cfg");
+
+		return l;
+	}
+
+	private synchronized static Config find(String name) {
+		if (name == null)
+			return null;
+		if (ConfigFileStore.DEFAULT.exists(name))
+			return Config.create(name).store(ConfigFileStore.DEFAULT).build();
+		if (ConfigClasspathStore.DEFAULT.exists(name))
+			return Config.create(name).store(ConfigClasspathStore.DEFAULT).build();
+		return null;
+	}
+
 	//-------------------------------------------------------------------------------------------------------------------
 	// Configurable properties
 	//-------------------------------------------------------------------------------------------------------------------
@@ -374,6 +462,14 @@ public final class Config extends Context implements ConfigEventListener, Writab
 		return new Config(this, varSession);
 	}
 
+	/**
+	 * Returns the name associated with this config (usually a file name).
+	 *
+	 * @return The name associated with this config, or <jk>null</jk> if it has no name.
+	 */
+	public String getName() {
+		return name;
+	}
 
 	//-----------------------------------------------------------------------------------------------------------------
 	// Workhorse getters
@@ -1113,6 +1209,52 @@ public final class Config extends Context implements ConfigEventListener, Writab
 	}
 
 	/**
+	 * Convenience method for returning a config entry as an {@link ObjectMap}.
+	 *
+	 * @param key The key.
+	 * @return The value, or <jk>null</jk> if the section or key does not exist.
+	 * @throws ParseException
+	 */
+	public ObjectMap getObjectMap(String key) throws ParseException {
+		return getObject(key, ObjectMap.class);
+	}
+
+	/**
+	 * Convenience method for returning a config entry as an {@link ObjectMap}.
+	 *
+	 * @param key The key.
+	 * @param def The default value.
+	 * @return The value, or the default value if the section or key does not exist.
+	 * @throws ParseException
+	 */
+	public ObjectMap getObjectMap(String key, ObjectMap def) throws ParseException {
+		return getObjectWithDefault(key, def, ObjectMap.class);
+	}
+
+	/**
+	 * Convenience method for returning a config entry as an {@link ObjectList}.
+	 *
+	 * @param key The key.
+	 * @return The value, or <jk>null</jk> if the section or key does not exist.
+	 * @throws ParseException
+	 */
+	public ObjectList getObjectList(String key) throws ParseException {
+		return getObject(key, ObjectList.class);
+	}
+
+	/**
+	 * Convenience method for returning a config entry as an {@link ObjectList}.
+	 *
+	 * @param key The key.
+	 * @param def The default value.
+	 * @return The value, or the default value if the section or key does not exist.
+	 * @throws ParseException
+	 */
+	public ObjectList getObjectList(String key, ObjectList def) throws ParseException {
+		return getObjectWithDefault(key, def, ObjectList.class);
+	}
+
+	/**
 	 * Returns the keys of the entries in the specified section.
 	 *
 	 * @param section
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStore.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStore.java
similarity index 69%
copy from juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStore.java
copy to juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStore.java
index fe6cc90..188dfb6 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStore.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStore.java
@@ -18,21 +18,25 @@ import java.io.*;
 import java.util.concurrent.*;
 
 import org.apache.juneau.*;
+import org.apache.juneau.internal.*;
 
 /**
- * Filesystem-based storage location for configuration files.
+ * Classpath-based storage location for configuration files.
  *
  * <p>
- * Points to a file system directory containing configuration files.
+ * Looks inside the JVM classpath for configuration files.
+ *
+ * <p>
+ * Configuration files retrieved from the classpath can be modified but not persisted.
  */
-public class ConfigMemoryStore extends ConfigStore {
+public class ConfigClasspathStore extends ConfigStore {
 
 	//-------------------------------------------------------------------------------------------------------------------
 	// Predefined instances
 	//-------------------------------------------------------------------------------------------------------------------
 
 	/** Default memory store, all default values.*/
-	public static final ConfigMemoryStore DEFAULT = ConfigMemoryStore.create().build();
+	public static final ConfigClasspathStore DEFAULT = ConfigClasspathStore.create().build();
 
 
 	//-------------------------------------------------------------------------------------------------------------------
@@ -44,13 +48,13 @@ public class ConfigMemoryStore extends ConfigStore {
 	 *
 	 * @return A new builder for this object.
 	 */
-	public static ConfigMemoryStoreBuilder create() {
-		return new ConfigMemoryStoreBuilder();
+	public static ConfigClasspathStoreBuilder create() {
+		return new ConfigClasspathStoreBuilder();
 	}
 
 	@Override /* Context */
-	public ConfigMemoryStoreBuilder builder() {
-		return new ConfigMemoryStoreBuilder(getPropertyStore());
+	public ConfigClasspathStoreBuilder builder() {
+		return new ConfigClasspathStoreBuilder(getPropertyStore());
 	}
 
 	private final ConcurrentHashMap<String,String> cache = new ConcurrentHashMap<>();
@@ -60,17 +64,26 @@ public class ConfigMemoryStore extends ConfigStore {
 	 *
 	 * @param ps The settings for this content store.
 	 */
-	protected ConfigMemoryStore(PropertyStore ps) {
+	protected ConfigClasspathStore(PropertyStore ps) {
 		super(ps);
 	}
 
 	@Override /* ConfigStore */
-	public synchronized String read(String name) {
+	public synchronized String read(String name) throws IOException {
+		String s = cache.get(name);
+		if (s != null)
+			return s;
+
+		ClassLoader cl = Thread.currentThread().getContextClassLoader();
+		try (InputStream in = cl.getResourceAsStream(name)) {
+			if (in != null)
+				cache.put(name, IOUtils.read(in, IOUtils.UTF8));
+		}
 		return emptyIfNull(cache.get(name));
 	}
 
 	@Override /* ConfigStore */
-	public synchronized String write(String name, String expectedContents, String newContents) {
+	public synchronized String write(String name, String expectedContents, String newContents) throws IOException {
 
 		// This is a no-op.
 		if (isEquals(expectedContents, newContents))
@@ -86,11 +99,22 @@ public class ConfigMemoryStore extends ConfigStore {
 		return null;
 	}
 
+	@Override /* ConfigStore */
+	public synchronized boolean exists(String name) {
+		try {
+			return ! read(name).isEmpty();
+		} catch (IOException e) {
+			return false;
+		}
+	}
 
 	@Override /* ConfigStore */
-	public synchronized ConfigMemoryStore update(String name, String newContents) {
-		cache.put(name, newContents);
-		super.update(name, newContents);  // Trigger any listeners.
+	public synchronized ConfigClasspathStore update(String name, String newContents) {
+		if (newContents == null)
+			cache.remove(name);
+		else
+			cache.put(name, newContents);
+		super.update(name, newContents);
 		return this;
 	}
 
diff --git a/juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/RestTestcase.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStoreBuilder.java
similarity index 72%
copy from juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/RestTestcase.java
copy to juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStoreBuilder.java
index 8b7471a..412b563 100644
--- a/juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/RestTestcase.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStoreBuilder.java
@@ -10,27 +10,33 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
 // * specific language governing permissions and limitations under the License.                                              *
 // ***************************************************************************************************************************
-package org.apache.juneau.examples.rest;
+package org.apache.juneau.config.store;
 
-import org.junit.*;
+import org.apache.juneau.*;
 
 /**
- * Superclass of REST testcases that start up the REST test microservice before running the tests locally.
- *
- * @author James Bognar (james.bognar@salesforce.com)
+ * Builder for {@link ConfigClasspathStore} objects.
  */
-public class RestTestcase {
+public class ConfigClasspathStoreBuilder extends ConfigStoreBuilder {
 
-	private static boolean microserviceStarted;
+	/**
+	 * Constructor, default settings.
+	 */
+	public ConfigClasspathStoreBuilder() {
+		super();
+	}
 
-	@BeforeClass
-	public static void setUp() {
-		microserviceStarted = SamplesMicroservice.startMicroservice();
+	/**
+	 * Constructor.
+	 *
+	 * @param ps The initial configuration settings for this builder.
+	 */
+	public ConfigClasspathStoreBuilder(PropertyStore ps) {
+		super(ps);
 	}
 
-	@AfterClass
-	public static void tearDown() {
-		if (microserviceStarted)
-			SamplesMicroservice.stopMicroservice();
+	@Override /* ContextBuilder */
+	public ConfigClasspathStore build() {
+		return new ConfigClasspathStore(getPropertyStore());
 	}
 }
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStore.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStore.java
index fd0bf4b..2256a04 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStore.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStore.java
@@ -259,27 +259,31 @@ public class ConfigFileStore extends ConfigStore {
 			return "";
 
 		if (isWritable(p)) {
-			try (FileChannel fc = FileChannel.open(p, READ, WRITE, CREATE)) {
-				try (FileLock lock = fc.lock()) {
-					String currentContents = "";
-					if (exists) {
-						ByteBuffer buf = ByteBuffer.allocate(1024);
-						StringBuilder sb = new StringBuilder();
-						while (fc.read(buf) != -1) {
-							sb.append(charset.decode((ByteBuffer)(buf.flip())));
-							buf.clear();
+			if (newContents == null)
+				Files.delete(p);
+			else {
+				try (FileChannel fc = FileChannel.open(p, READ, WRITE, CREATE)) {
+					try (FileLock lock = fc.lock()) {
+						String currentContents = "";
+						if (exists) {
+							ByteBuffer buf = ByteBuffer.allocate(1024);
+							StringBuilder sb = new StringBuilder();
+							while (fc.read(buf) != -1) {
+								sb.append(charset.decode((ByteBuffer)(buf.flip())));
+								buf.clear();
+							}
+							currentContents = sb.toString();
 						}
-						currentContents = sb.toString();
-					}
-					if (expectedContents != null && ! isEquals(currentContents, expectedContents)) {
-						if (currentContents == null)
-							cache.remove(name);
-						else
-							cache.put(name, currentContents);
-						return currentContents;
+						if (expectedContents != null && ! isEquals(currentContents, expectedContents)) {
+							if (currentContents == null)
+								cache.remove(name);
+							else
+								cache.put(name, currentContents);
+							return currentContents;
+						}
+						fc.position(0);
+						fc.write(charset.encode(newContents));
 					}
-					fc.position(0);
-					fc.write(charset.encode(newContents));
 				}
 			}
 		}
@@ -292,6 +296,11 @@ public class ConfigFileStore extends ConfigStore {
 		return null;
 	}
 
+	@Override /* ConfigStore */
+	public synchronized boolean exists(String name) {
+		return Files.exists(dir.toPath().resolve(name));
+	}
+
 	private synchronized boolean isWritable(Path p) {
 		try {
 			if (! Files.exists(p)) {
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStore.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStore.java
index fe6cc90..5c1d4c1 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStore.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStore.java
@@ -86,10 +86,17 @@ public class ConfigMemoryStore extends ConfigStore {
 		return null;
 	}
 
+	@Override /* ConfigStore */
+	public synchronized boolean exists(String name) {
+		return cache.containsKey(name);
+	}
 
 	@Override /* ConfigStore */
 	public synchronized ConfigMemoryStore update(String name, String newContents) {
-		cache.put(name, newContents);
+		if (newContents == null)
+			cache.remove(name);
+		else
+			cache.put(name, newContents);
 		super.update(name, newContents);  // Trigger any listeners.
 		return this;
 	}
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStore.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStore.java
index 5f36bf4..34d1129 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStore.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStore.java
@@ -69,6 +69,14 @@ public abstract class ConfigStore extends Context implements Closeable {
 	public abstract String write(String name, String expectedContents, String newContents) throws IOException;
 
 	/**
+	 * Checks whether the configuration with the specified name exists in this store.
+	 *
+	 * @param name The config name.
+	 * @return <jk>true</jk> if the configuration with the specified name exists in this store.
+	 */
+	public abstract boolean exists(String name);
+
+	/**
 	 * Registers a new listener on this store.
 	 *
 	 * @param name The configuration name to listen for.
diff --git a/juneau-core/juneau-core-test/.classpath b/juneau-core/juneau-core-test/.classpath
index 3759907..d5ec1a3 100644
--- a/juneau-core/juneau-core-test/.classpath
+++ b/juneau-core/juneau-core-test/.classpath
@@ -12,6 +12,7 @@
 			<attribute name="maven.pomderived" value="true"/>
 		</attributes>
 	</classpathentry>
+	<classpathentry kind="src" path="src/test/resources"/>
 	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
 		<attributes>
 			<attribute name="maven.pomderived" value="true"/>
diff --git a/juneau-core/juneau-core-test/files/test2.txt b/juneau-core/juneau-core-test/files/test2.txt
new file mode 100644
index 0000000..917e02b
--- /dev/null
+++ b/juneau-core/juneau-core-test/files/test2.txt
@@ -0,0 +1,12 @@
+***************************************************************************************************************************
+* 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.                                              *
+***************************************************************************************************************************
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigTest.java
index 4a1e2d0..17b37a9 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigTest.java
@@ -1734,4 +1734,15 @@ public class ConfigTest {
 			return this;
 		}
 	}
+
+	@Test
+	public void testGetCandidateSystemDefaultConfigNames() {
+
+		System.setProperty("juneau.configFile", "foo.txt");
+		assertObjectEquals("['foo.txt']", Config.getCandidateSystemDefaultConfigNames());
+
+		System.clearProperty("juneau.configFile");
+		assertObjectEquals("['test.cfg','juneau.cfg','default.cfg']", Config.getCandidateSystemDefaultConfigNames());
+	}
+
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/store/MemoryStoreTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/store/ConfigClasspathStoreTest.java
similarity index 67%
copy from juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/store/MemoryStoreTest.java
copy to juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/store/ConfigClasspathStoreTest.java
index b2b7f69..7b734c4 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/store/MemoryStoreTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/store/ConfigClasspathStoreTest.java
@@ -13,29 +13,47 @@
 package org.apache.juneau.config.store;
 
 import static org.junit.Assert.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 
 import java.util.concurrent.*;
 
 import org.junit.*;
 
-public class MemoryStoreTest {
+public class ConfigClasspathStoreTest {
 
 	@Test
 	public void testNoFile() throws Exception {
-		ConfigMemoryStore fs = ConfigMemoryStore.create().build();
+		ConfigClasspathStore fs = ConfigClasspathStore.create().build();
 		assertEquals("", fs.read("X.cfg"));
 	}
 
 	@Test
+	public void testRealFiles() throws Exception {
+		ConfigClasspathStore fs = ConfigClasspathStore.create().build();
+		assertContains(fs.read("foo1.cfg"), "bar1");
+		assertContains(fs.read("sub/foo2.cfg"), "bar2");
+		assertEquals("", fs.read("sub/bad.cfg"));
+		assertEquals("", fs.read("bad/bad.cfg"));
+	}
+
+	@Test
+	public void testOverwriteRealFiles() throws Exception {
+		ConfigClasspathStore fs = ConfigClasspathStore.create().build();
+		assertContains(fs.read("foo1.cfg"), "bar1");
+		fs.write("foo1.cfg", fs.read("foo1.cfg"), "xxx");
+		assertEquals("xxx", fs.read("foo1.cfg"));
+	}
+
+	@Test
 	public void testSimpleCreate() throws Exception {
-		ConfigMemoryStore fs = ConfigMemoryStore.create().build();
+		ConfigClasspathStore fs = ConfigClasspathStore.create().build();
 		assertNull(fs.write("X.cfg", null, "foo"));
 		assertEquals("foo", fs.read("X.cfg"));
 	}
 
 	@Test
 	public void testFailOnMismatch() throws Exception {
-		ConfigMemoryStore fs = ConfigMemoryStore.create().build();
+		ConfigClasspathStore fs = ConfigClasspathStore.create().build();
 		assertNotNull(fs.write("X.cfg", "xxx", "foo"));
 		assertEquals("", fs.read("X.cfg"));
 		assertNull(fs.write("X.cfg", null, "foo"));
@@ -48,7 +66,7 @@ public class MemoryStoreTest {
 
 	@Test
 	public void testUpdate() throws Exception {
-		ConfigMemoryStore fs = ConfigMemoryStore.create().build();
+		ConfigClasspathStore fs = ConfigClasspathStore.create().build();
 
 		final CountDownLatch latch = new CountDownLatch(2);
 		fs.register("X.cfg", new ConfigStoreListener() {
@@ -71,4 +89,17 @@ public class MemoryStoreTest {
 		if (! latch.await(10, TimeUnit.SECONDS))
 			throw new Exception("CountDownLatch never reached zero.");
 	}
+
+	@Test
+	public void testExists() throws Exception {
+		ConfigClasspathStore.DEFAULT.write("foo.cfg", null, "foo");
+
+		assertTrue(ConfigClasspathStore.DEFAULT.exists("foo.cfg"));
+		assertFalse(ConfigClasspathStore.DEFAULT.exists("foo2.cfg"));
+
+		ConfigClasspathStore.DEFAULT.write("foo.cfg", "foo", null);
+
+		assertFalse(ConfigClasspathStore.DEFAULT.exists("foo.cfg"));
+		assertFalse(ConfigClasspathStore.DEFAULT.exists("foo2.cfg"));
+	}
 }
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/store/FileStoreTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/store/ConfigFileStoreTest.java
similarity index 87%
rename from juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/store/FileStoreTest.java
rename to juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/store/ConfigFileStoreTest.java
index deac35c..dd5f7fa 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/store/FileStoreTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/store/ConfigFileStoreTest.java
@@ -20,7 +20,7 @@ import java.util.concurrent.*;
 import org.apache.juneau.internal.*;
 import org.junit.*;
 
-public class FileStoreTest {
+public class ConfigFileStoreTest {
 
 	private static final File DIR = new File("./config");
 
@@ -126,6 +126,23 @@ public class FileStoreTest {
 			throw new Exception("CountDownLatch never reached zero.");
 	}
 
+	@Test
+	public void testExists() throws IOException {
+		assertTrue(ConfigFileStore.DEFAULT.exists("test.cfg"));
+		assertFalse(ConfigFileStore.DEFAULT.exists("test2.cfg"));
+
+		assertFalse(ConfigFileStore.DEFAULT.exists("foo.cfg"));
+		ConfigFileStore.DEFAULT.write("foo.cfg", null, "foo");
+		assertTrue(ConfigFileStore.DEFAULT.exists("foo.cfg"));
+		ConfigFileStore.DEFAULT.write("foo.cfg", "foo", null);
+		assertFalse(ConfigFileStore.DEFAULT.exists("foo.cfg"));
+
+		IOUtils.write(new File("Foo.cfg"), new StringReader("xxx"));
+		assertTrue(ConfigFileStore.DEFAULT.exists("foo.cfg"));
+		new File("Foo.cfg").delete();
+		assertFalse(ConfigFileStore.DEFAULT.exists("foo.cfg"));
+	}
+
 	private void assertFileExists(String name) {
 		assertTrue(new File(DIR, name).exists());
 	}
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/store/MemoryStoreTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/store/ConfigMemoryStoreTest.java
similarity index 87%
rename from juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/store/MemoryStoreTest.java
rename to juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/store/ConfigMemoryStoreTest.java
index b2b7f69..f4e32fa 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/store/MemoryStoreTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/store/ConfigMemoryStoreTest.java
@@ -18,7 +18,7 @@ import java.util.concurrent.*;
 
 import org.junit.*;
 
-public class MemoryStoreTest {
+public class ConfigMemoryStoreTest {
 
 	@Test
 	public void testNoFile() throws Exception {
@@ -71,4 +71,17 @@ public class MemoryStoreTest {
 		if (! latch.await(10, TimeUnit.SECONDS))
 			throw new Exception("CountDownLatch never reached zero.");
 	}
+
+	@Test
+	public void testExists() {
+		ConfigMemoryStore.DEFAULT.write("foo.cfg", null, "foo");
+
+		assertTrue(ConfigMemoryStore.DEFAULT.exists("foo.cfg"));
+		assertFalse(ConfigMemoryStore.DEFAULT.exists("foo2.cfg"));
+
+		ConfigMemoryStore.DEFAULT.write("foo.cfg", "foo", null);
+
+		assertFalse(ConfigMemoryStore.DEFAULT.exists("foo.cfg"));
+		assertFalse(ConfigMemoryStore.DEFAULT.exists("foo2.cfg"));
+	}
 }
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/IOUtilsTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/IOUtilsTest.java
index 35326d7..c697751 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/IOUtilsTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/IOUtilsTest.java
@@ -41,6 +41,17 @@ public class IOUtilsTest {
 		assertEquals("foobar", out.toString());
 	}
 
+	@Test
+	public void testLoadSystemResourceAsString() throws Exception {
+		assertNotNull(loadSystemResourceAsString("test1.txt", "."));
+		assertNull(loadSystemResourceAsString("test2.txt", "."));
+		assertNotNull(loadSystemResourceAsString("test2.txt", ".", "files"));
+		assertNull(loadSystemResourceAsString("test3.txt", "sub"));
+		assertNull(loadSystemResourceAsString("test3.txt", "sub2"));
+		assertNotNull(loadSystemResourceAsString("test3.txt", "."));
+		assertNotNull(loadSystemResourceAsString("test4.txt", ".", "sub"));
+		assertNotNull(loadSystemResourceAsString("test4.txt", "sub"));
+	}
 
 	public static class TestReader extends StringReader {
 		boolean closed;
diff --git a/juneau-core/juneau-core-test/src/test/resources/foo1.cfg b/juneau-core/juneau-core-test/src/test/resources/foo1.cfg
new file mode 100644
index 0000000..f101f3f
--- /dev/null
+++ b/juneau-core/juneau-core-test/src/test/resources/foo1.cfg
@@ -0,0 +1,13 @@
+# ***************************************************************************************************************************
+# * 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.                                              *
+# ***************************************************************************************************************************
+bar1
\ No newline at end of file
diff --git a/juneau-core/juneau-core-test/src/test/resources/sub/foo2.cfg b/juneau-core/juneau-core-test/src/test/resources/sub/foo2.cfg
new file mode 100644
index 0000000..8f495d5
--- /dev/null
+++ b/juneau-core/juneau-core-test/src/test/resources/sub/foo2.cfg
@@ -0,0 +1,13 @@
+# ***************************************************************************************************************************
+# * 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.                                              *
+# ***************************************************************************************************************************
+bar2
\ No newline at end of file
diff --git a/juneau-core/juneau-core-test/src/test/resources/sub/test4.txt b/juneau-core/juneau-core-test/src/test/resources/sub/test4.txt
new file mode 100644
index 0000000..917e02b
--- /dev/null
+++ b/juneau-core/juneau-core-test/src/test/resources/sub/test4.txt
@@ -0,0 +1,12 @@
+***************************************************************************************************************************
+* 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.                                              *
+***************************************************************************************************************************
diff --git a/juneau-core/juneau-core-test/src/test/resources/test3.txt b/juneau-core/juneau-core-test/src/test/resources/test3.txt
new file mode 100644
index 0000000..917e02b
--- /dev/null
+++ b/juneau-core/juneau-core-test/src/test/resources/test3.txt
@@ -0,0 +1,12 @@
+***************************************************************************************************************************
+* 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.                                              *
+***************************************************************************************************************************
diff --git a/juneau-core/juneau-core-test/test.cfg b/juneau-core/juneau-core-test/test.cfg
new file mode 100644
index 0000000..c8a351b
--- /dev/null
+++ b/juneau-core/juneau-core-test/test.cfg
@@ -0,0 +1,12 @@
+# ***************************************************************************************************************************
+# * 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.                                              *
+# ***************************************************************************************************************************
diff --git a/juneau-core/juneau-core-test/test1.txt b/juneau-core/juneau-core-test/test1.txt
new file mode 100644
index 0000000..917e02b
--- /dev/null
+++ b/juneau-core/juneau-core-test/test1.txt
@@ -0,0 +1,12 @@
+***************************************************************************************************************************
+* 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.                                              *
+***************************************************************************************************************************
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ReaderResource.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ReaderResource.java
index 0372903..8b9fe17 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ReaderResource.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ReaderResource.java
@@ -82,7 +82,7 @@ public class ReaderResource implements Writable {
 	public ReaderResource(MediaType mediaType, Map<String,Object> headers, boolean cached, Object...contents) throws IOException {
 		this.mediaType = mediaType;
 		this.headers = immutableMap(headers);
-		this.contents = cached ? new Object[]{read(contents)} : contents;
+		this.contents = cached ? new Object[]{readAll(contents)} : contents;
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/IOUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/IOUtils.java
index 074baa2..acc32d0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/IOUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/IOUtils.java
@@ -80,7 +80,7 @@ public final class IOUtils {
 	 * @return The objects serialized to a string, never <jk>null</jk>.
 	 * @throws IOException
 	 */
-	public static String read(Object...in) throws IOException {
+	public static String readAll(Object...in) throws IOException {
 		if (in.length == 1)
 			return read(in[0]);
 		StringWriter sw = new StringWriter();
@@ -672,4 +672,38 @@ public final class IOUtils {
 	public static void write(String path, String contents) throws IOException {
 		write(new File(path), new StringReader(contents));
 	}
+
+	/**
+	 * Loads a text file from either the file system or classpath.
+	 *
+	 * @param name The file name.
+	 * @param paths The paths to search.
+	 * @return The file contents, or <jk>null</jk> if not found.
+	 * @throws IOException
+	 */
+	public static String loadSystemResourceAsString(String name, String...paths) throws IOException {
+		for (String path : paths) {
+			File p = new File(path);
+			if (p.exists()) {
+	 			File f = new File(p, name);
+	 			if (f.exists() && f.canRead())
+	 				return read(f);
+			}
+		}
+		ClassLoader cl = Thread.currentThread().getContextClassLoader();
+		if (cl == null)
+			cl = ClassLoader.getSystemClassLoader();
+		for (String path : paths) {
+			String n = ".".equals(path) ? name : path + '/' + name;
+			try (InputStream is = cl.getResourceAsStream(n)) {
+				if (is != null)
+					return read(is);
+			}
+			try (InputStream is = ClassLoader.getSystemResourceAsStream(n)) {
+				if (is != null)
+					return read(is);
+			}
+		}
+		return null;
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/Args.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/Args.java
index 9f92d7e..994c4d4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/Args.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/Args.java
@@ -192,6 +192,17 @@ public final class Args extends ObjectMap {
 	}
 
 	/**
+	 * Returns <jk>true</jk> if the named argument exists.
+	 *
+	 * @param name The argument name.
+	 * @return <jk>true</jk> if the named argument exists.
+	 */
+	public boolean hasArg(String name) {
+		ObjectList l = (ObjectList)get(name);
+		return l != null;
+	}
+
+	/**
 	 * Returns the optional argument value, or blank if the optional argument was not specified.
 	 *
 	 * <p>
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ManifestFile.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ManifestFile.java
index 25c2ecd..d7c0d67 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ManifestFile.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ManifestFile.java
@@ -20,6 +20,7 @@ import java.util.*;
 import java.util.jar.*;
 
 import org.apache.juneau.*;
+import org.apache.juneau.internal.*;
 
 /**
  * Utility class for working with Jar manifest files.
@@ -80,8 +81,42 @@ public class ManifestFile extends ObjectMap {
 		}
 	}
 
+	/**
+	 * Create an instance of this class loaded from the contents of a reader.
+	 *
+	 * <p>
+	 * Note that the input must end in a newline to pick up the last line!
+	 *
+	 * @param r The manifest file contents.
+	 * @throws IOException If a problem occurred while trying to read the manifest file.
+	 */
+	public ManifestFile(Reader r) throws IOException {
+		load(new Manifest(IOUtils.toInputStream(r)));
+	}
+
+	/**
+	 * Create an instance of this class loaded from the contents of an input stream.
+	 *
+	 * <p>
+	 * Note that the input must end in a newline to pick up the last line!
+	 *
+	 * @param is The manifest file contents.
+	 * @throws IOException If a problem occurred while trying to read the manifest file.
+	 */
+	public ManifestFile(InputStream is) throws IOException {
+		load(new Manifest(is));
+	}
+
 	private void load(Manifest mf) {
 		for (Map.Entry<Object,Object> e : mf.getMainAttributes().entrySet())
 			put(e.getKey().toString(), e.getValue().toString());
 	}
+
+	@Override /* Object */
+	public String toString() {
+		StringBuilder sb = new StringBuilder();
+		for (Map.Entry<String,Object> e : entrySet())
+			sb.append(e.getKey()).append(": ").append(e.getValue());
+		return sb.toString();
+	}
 }
diff --git a/juneau-doc/docs/ReleaseNotes/8.0.0.html b/juneau-doc/docs/ReleaseNotes/8.0.0.html
index e3a314d..b5437a1 100644
--- a/juneau-doc/docs/ReleaseNotes/8.0.0.html
+++ b/juneau-doc/docs/ReleaseNotes/8.0.0.html
@@ -19,6 +19,36 @@
 	This release primarily cleans up deprecated APIs from the 7.2.0 release.
 </p>
 
+<p>
+	The project structures of the REST, Microservice, and Examples have been modified to fit new Spring Boot
+	integration support.
+	The structure is now as follows:
+</p>
+<ul>
+	<li><code>juneau-rest</code>
+	<ul>
+		<li><code>juneau-rest-client</code>
+		<li><code>juneau-rest-server</code>
+		<li><code>juneau-rest-server-jaxrs</code>
+		<li><code>juneau-rest-server-rdf</code>
+		<li><b><code>juneau-rest-server-springboot</code></b> - New Spring Boot integration support classes. 
+	</ul>
+	<li><code>juneau-microservice</code>
+	<ul>
+		<li><b><code>juneau-microservice-core</code></b> - New.  Contains base {@link oaj.microservice.Microservice} class.
+		<li><b><code>juneau-microservice-jetty</code></b> - New.  Contains new {@link oaj.microservice.JettyMicroservice} class.
+		<li><b><code>juneau-microservice-jetty-template</code></b> - New.  Template starter project for Jetty-based microservices.
+		<li><b><code>juneau-microservice-springboot-template</code></b> - New.  Template starter project for Spring-Boot-based microservices.
+	</ul>
+	<li><code>juneau-<examples/code>
+	<ul>
+		<li><code>juneau-core</code>
+		<li><b><code>juneau-microservice-rest</code></b> - Now contains only servlet example classes.  No Jetty configuration.
+		<li><b><code>juneau-microservice-rest-jetty</code></b> - Servlet examples deployed using Jetty.
+		<li><b><code>juneau-microservice-rest-springboot</code></b> - Servlet examples deployed using Spring Boot.
+	</ul>
+</ul>
+
 <h5 class='topic w800'>juneau-svl</h5>
 <ul class='spaced-list'>
 	<li>
@@ -31,6 +61,32 @@
 		</ul>
 </ul>
 
+<h5 class='topic w800'>juneau-config</h5>
+<ul class='spaced-list'>
+	<li>
+		New methods for setting a system default configuration:
+		<ul class='doctree'>
+			<li class='jc'>{@link oaj.config.Config}
+			<ul>
+				<li class='jm'>{@link oaj.config.Config#getSystemDefault() getSystemDefault()}
+				<li class='jm'>{@link oaj.config.Config#setSystemDefault(Config) setSystemDefault(Config)}
+			</ul>
+		</ul>
+	<li>
+		New classpath store.
+		<ul class='doctree'>
+			<li class='jc'>{@link oaj.config.store.ConfigClasspathStore}
+		</ul>
+	<li>
+		New API method:
+		<ul class='doctree'>
+			<li class='jc'>{@link oaj.config.ConfigStore}
+			<ul>
+				<li class='jm'>{@link oaj.config.ConfigStore#exists(String) exists(String)}
+			</ul>
+			
+</ul>
+
 <h5 class='topic w800'>juneau-server</h5>
 <ul class='spaced-list'>
 	<li>
@@ -44,12 +100,26 @@
 		<br>This allows for any of those instance to be injectable beans.
 </ul>
 
-<h5 class='topic w800'>juneau-microservice-server</h5>
+<h5 class='topic w800'>juneau-microservice-core</h5>
 <ul class='spaced-list'>
 	<li>
+		New project that consist of just the core {@link oaj.microservice.Microservice} class and console support.
+	<li>
+		The Microservice API has been revamped to use a builder-based approach to creating microservices.
+		<br>The new API is considerably more flexible in design and allows for the configuration and external
+		files to be located in either the home directory or inside the jar classpath.
+	<li>
 		If the microservice cannot find a config file in the home directory with the same name as the jar and
 		the <js>"juneau.configFile"</js> system property is not found, it will try to find any file in the home
 		directory that ends with <js>".cfg"</js>.
+	<li>
+		New {@link oaj.microservice.MicroserviceListener} API for defining lifecycle event listeners.
+</ul>
+
+<h5 class='topic w800'>juneau-microservice-jetty</h5>
+<ul class='spaced-list'>
+	<li>
+		New {@link oaj.microservice.JettyMicroservice} class replaces the previous <code>RestMicroservice</code>.
 </ul>
 
 <h5 class='topic w800'>juneau-examples-rest</h5>
diff --git a/juneau-doc/docs/Topics/06.juneau-config/14.SystemDefaultConfig.html b/juneau-doc/docs/Topics/06.juneau-config/14.SystemDefaultConfig.html
new file mode 100644
index 0000000..89cce01
--- /dev/null
+++ b/juneau-doc/docs/Topics/06.juneau-config/14.SystemDefaultConfig.html
@@ -0,0 +1,62 @@
+<!--
+/***************************************************************************************************************************
+ * 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.
+ ***************************************************************************************************************************/
+ -->
+
+{new} System Default Config
+
+<p>
+	Each JVM has a system default config.  This is a configuration file that serves as the default
+	configuration for the system.  It's accessed using the following static methods:
+</p>
+<ul class='doctree'>
+	<li class='jc'>{@link oaj.config.Config}
+	<ul>
+		<li class='jm'>{@link oaj.config.Config#getSystemDefault() getSystemDefault()}
+		<li class='jm'>{@link oaj.config.Config#setSystemDefault(Config) setSystemDefault(Config)}
+	</ul>
+</ul>
+<p>
+	If you do not specify a system default config, one will be automatically searched for.
+	The search is done in the following order:
+</p>
+<ol class='spaced-list'>
+	<li>
+		If the system property <js>"juneau.configFile"</js> is set, we search for this file in first the home
+		directory and then the classpath.
+	<li>
+		In the home directory:
+		<ol>
+			<li><code>&lt;jar-name&gt;.cfg</code>
+			<li>Any file that end with <code>.cfg</code>.  First one matched alphabetically is used.
+		</ol>
+	<li>
+		In the context classpath (i.e. inside the jar itself):
+		<ol>
+			<li><code>&lt;jar-name&gt;.cfg</code>
+			<li><code>juneau.cfg</code>
+			<li><code>default.cfg</code>
+		</ol>
+</ol>
+<p>
+	Later in the section on REST resources, we describe how to associate configurations with REST resources
+	using the {@link oajr.annotation.RestResource#config() @RestResource(config)} annotation.
+	The system default configuration can be referenced with the keyword <code>SYSTEM_DEFAULT</code> like so:
+</p>
+<p class='bpcode w800'>
+	<jc>// Always use system default.</jc>
+	<ja>@RestResource</ja>(config=<js>"SYSTEM_DEFAULT"</js>)
+
+	<jc>// Use system property if set or the system default if not.</jc>
+	<ja>@RestResource</ja>(config=<js>"$S{juneau.configFile,SYSTEM_DEFAULT}"</js>)
+</p>
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server.html b/juneau-doc/docs/Topics/09.juneau-rest-server-springboot.html
similarity index 72%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server.html
copy to juneau-doc/docs/Topics/09.juneau-rest-server-springboot.html
index b9ea92c..f098172 100644
--- a/juneau-doc/docs/Topics/10.juneau-microservice-server.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-server-springboot.html
@@ -13,33 +13,28 @@
  ***************************************************************************************************************************/
  -->
 
-juneau-microservice-server
+{todo} juneau-rest-server-springboot
 
 <h5 class='figure'>Maven Dependency</h5>
 <p class='bpcode 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-microservice-server<xt>&lt;/artifactId&gt;</xt>
+		<xt>&lt;artifactId&gt;</xt>juneau-rest-server-springboot<xt>&lt;/artifactId&gt;</xt>
 		<xt>&lt;version&gt;</xt>{@property juneauVersion}<xt>&lt;/version&gt;</xt>
 	<xt>&lt;/dependency&gt;</xt>
 </p>	
 
 <h5 class='figure'>Java Library</h5>
 <p class='bpcode w500'>
-	juneau-microservice-server-{@property juneauVersion}.jar 
+	juneau-rest-server-springboot-{@property juneauVersion}.jar 
 </p>	
 
 <h5 class='figure'>OSGi Module</h5>
 <p class='bpcode w500'>
-	org.apache.juneau.microservice.server_{@property juneauVersion}.jar 
-</p>	
-
-<h5 class='figure'>Microservice Starter Project</h5>
-<p class='bpcode w500'>
-	my-microservice.zip 
+	org.apache.juneau.rest.springboot_{@property juneauVersion}.jar 
 </p>	
 
 <p>
-	Juneau Microservice is an API for creating stand-alone executable jars that can be used to 
-	start lightweight configurable REST interfaces with all the power of the Juneau REST server and client APIs.
+	The <code>juneau-rest-server-springboot</code> library provides classes to make it easy to deploy Juneau
+	REST resources within the Spring Boot framework.
 </p>
diff --git a/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/02.DeployingToHeroku.html b/juneau-doc/docs/Topics/09.juneau-rest-server-springboot/01.TODO.html
similarity index 97%
copy from juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/02.DeployingToHeroku.html
copy to juneau-doc/docs/Topics/09.juneau-rest-server-springboot/01.TODO.html
index 8f71344..d2b8e42 100644
--- a/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/02.DeployingToHeroku.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-server-springboot/01.TODO.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-{todo} Deploying to Heroku
+{todo} TODO
 
 <p>
 	TODO
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client.html b/juneau-doc/docs/Topics/10.juneau-rest-client.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies.html b/juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies/01.RemoteResource.html b/juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies/01.RemoteResource.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies/01.RemoteResource.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies/01.RemoteResource.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies/02.RemoteMethod.html b/juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies/02.RemoteMethod.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies/02.RemoteMethod.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies/02.RemoteMethod.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies/03.Body.html b/juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies/03.Body.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies/03.Body.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies/03.Body.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies/04.FormData.html b/juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies/04.FormData.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies/04.FormData.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies/04.FormData.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies/05.Query.html b/juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies/05.Query.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies/05.Query.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies/05.Query.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies/06.Header.html b/juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies/06.Header.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies/06.Header.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies/06.Header.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies/07.Path.html b/juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies/07.Path.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies/07.Path.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies/07.Path.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies/08.Request.html b/juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies/08.Request.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies/08.Request.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies/08.Request.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies/09.Response.html b/juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies/09.Response.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies/09.Response.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies/09.Response.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies/10.DualPurposeInterfaces.html b/juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies/10.DualPurposeInterfaces.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/01.RestProxies/10.DualPurposeInterfaces.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/01.RestProxies/10.DualPurposeInterfaces.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/02.SSL.html b/juneau-doc/docs/Topics/10.juneau-rest-client/02.SSL.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/02.SSL.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/02.SSL.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/03.Authentication.html b/juneau-doc/docs/Topics/10.juneau-rest-client/03.Authentication.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/03.Authentication.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/03.Authentication.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/03.Authentication/01.BASIC.html b/juneau-doc/docs/Topics/10.juneau-rest-client/03.Authentication/01.BASIC.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/03.Authentication/01.BASIC.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/03.Authentication/01.BASIC.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/03.Authentication/02.FORM.html b/juneau-doc/docs/Topics/10.juneau-rest-client/03.Authentication/02.FORM.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/03.Authentication/02.FORM.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/03.Authentication/02.FORM.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/03.Authentication/03.OIDC.html b/juneau-doc/docs/Topics/10.juneau-rest-client/03.Authentication/03.OIDC.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/03.Authentication/03.OIDC.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/03.Authentication/03.OIDC.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/04.ResponsePatterns.html b/juneau-doc/docs/Topics/10.juneau-rest-client/04.ResponsePatterns.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/04.ResponsePatterns.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/04.ResponsePatterns.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/05.PipingOutput.html b/juneau-doc/docs/Topics/10.juneau-rest-client/05.PipingOutput.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/05.PipingOutput.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/05.PipingOutput.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/06.Debugging.html b/juneau-doc/docs/Topics/10.juneau-rest-client/06.Debugging.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/06.Debugging.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/06.Debugging.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/07.Logging.html b/juneau-doc/docs/Topics/10.juneau-rest-client/07.Logging.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/07.Logging.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/07.Logging.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/08.Interceptors.html b/juneau-doc/docs/Topics/10.juneau-rest-client/08.Interceptors.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/08.Interceptors.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/08.Interceptors.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/09.UnitTesting.html b/juneau-doc/docs/Topics/10.juneau-rest-client/09.UnitTesting.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/09.UnitTesting.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/09.UnitTesting.html
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/10.Other.html b/juneau-doc/docs/Topics/10.juneau-rest-client/10.Other.html
similarity index 100%
rename from juneau-doc/docs/Topics/09.juneau-rest-client/10.Other.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/10.Other.html
diff --git a/juneau-doc/docs/Topics/11.juneau-examples-core/doc-files/juneau-examples-core.1.png b/juneau-doc/docs/Topics/11.juneau-examples-core/doc-files/juneau-examples-core.1.png
deleted file mode 100644
index 3b9b4e1..0000000
Binary files a/juneau-doc/docs/Topics/11.juneau-examples-core/doc-files/juneau-examples-core.1.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/11.juneau-examples-core/doc-files/juneau-examples-core.2.png b/juneau-doc/docs/Topics/11.juneau-examples-core/doc-files/juneau-examples-core.2.png
deleted file mode 100644
index dc73f29..0000000
Binary files a/juneau-doc/docs/Topics/11.juneau-examples-core/doc-files/juneau-examples-core.2.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/11.juneau-examples-core/doc-files/juneau-examples-core.3.png b/juneau-doc/docs/Topics/11.juneau-examples-core/doc-files/juneau-examples-core.3.png
deleted file mode 100644
index 6c8521c..0000000
Binary files a/juneau-doc/docs/Topics/11.juneau-examples-core/doc-files/juneau-examples-core.3.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server.html b/juneau-doc/docs/Topics/11.juneau-microservice-core.html
similarity index 98%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server.html
copy to juneau-doc/docs/Topics/11.juneau-microservice-core.html
index b9ea92c..17d02ab 100644
--- a/juneau-doc/docs/Topics/10.juneau-microservice-server.html
+++ b/juneau-doc/docs/Topics/11.juneau-microservice-core.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-juneau-microservice-server
+{todo} juneau-microservice-server
 
 <h5 class='figure'>Maven Dependency</h5>
 <p class='bpcode w500'>
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/01.Introduction.html b/juneau-doc/docs/Topics/11.juneau-microservice-core/01.Introduction.html
similarity index 98%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server/01.Introduction.html
copy to juneau-doc/docs/Topics/11.juneau-microservice-core/01.Introduction.html
index 2f3b875..1f572ff 100644
--- a/juneau-doc/docs/Topics/10.juneau-microservice-server/01.Introduction.html
+++ b/juneau-doc/docs/Topics/11.juneau-microservice-core/01.Introduction.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-Microservice Introduction
+{todo} Microservice Introduction
 
 <p>
 	The Microservice API consists of a combination of the Juneau Core, Server, and Client APIs and an embedded
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/02.GettingStarted.html b/juneau-doc/docs/Topics/11.juneau-microservice-core/02.GettingStarted.html
similarity index 98%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server/02.GettingStarted.html
copy to juneau-doc/docs/Topics/11.juneau-microservice-core/02.GettingStarted.html
index ee6e6da..b09fffe 100644
--- a/juneau-doc/docs/Topics/10.juneau-microservice-server/02.GettingStarted.html
+++ b/juneau-doc/docs/Topics/11.juneau-microservice-core/02.GettingStarted.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-Getting Started
+{todo} Getting Started
 
 <p>
 	The <l>my-microservice.zip</l> file is a zipped eclipse project that includes everything you 
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/02.GettingStarted/01.Installing.html b/juneau-doc/docs/Topics/11.juneau-microservice-core/02.GettingStarted/01.Installing.html
similarity index 100%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server/02.GettingStarted/01.Installing.html
copy to juneau-doc/docs/Topics/11.juneau-microservice-core/02.GettingStarted/01.Installing.html
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/02.GettingStarted/02.Running.html b/juneau-doc/docs/Topics/11.juneau-microservice-core/02.GettingStarted/02.Running.html
similarity index 100%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server/02.GettingStarted/02.Running.html
copy to juneau-doc/docs/Topics/11.juneau-microservice-core/02.GettingStarted/02.Running.html
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/02.GettingStarted/03.Building.html b/juneau-doc/docs/Topics/11.juneau-microservice-core/02.GettingStarted/03.Building.html
similarity index 100%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server/02.GettingStarted/03.Building.html
copy to juneau-doc/docs/Topics/11.juneau-microservice-core/02.GettingStarted/03.Building.html
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/03.Manifest.html b/juneau-doc/docs/Topics/11.juneau-microservice-core/03.Manifest.html
similarity index 98%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server/03.Manifest.html
copy to juneau-doc/docs/Topics/11.juneau-microservice-core/03.Manifest.html
index 1e7cae5..ba558e4 100644
--- a/juneau-doc/docs/Topics/10.juneau-microservice-server/03.Manifest.html
+++ b/juneau-doc/docs/Topics/11.juneau-microservice-core/03.Manifest.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-Manifest File
+{todo} Manifest File
 
 <p>
 	The generated <l>META-INF/MANIFEST.MF</l> file is used to describe the microservice. 
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/03.Manifest/01.ManifestApi.html b/juneau-doc/docs/Topics/11.juneau-microservice-core/03.Manifest/01.ManifestApi.html
similarity index 100%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server/03.Manifest/01.ManifestApi.html
copy to juneau-doc/docs/Topics/11.juneau-microservice-core/03.Manifest/01.ManifestApi.html
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/04.Config.html b/juneau-doc/docs/Topics/11.juneau-microservice-core/04.Config.html
similarity index 98%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server/04.Config.html
copy to juneau-doc/docs/Topics/11.juneau-microservice-core/04.Config.html
index 4c177b3..0c6f87c 100644
--- a/juneau-doc/docs/Topics/10.juneau-microservice-server/04.Config.html
+++ b/juneau-doc/docs/Topics/11.juneau-microservice-core/04.Config.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-Config
+{todo} Config
 
 <p>
 	The microservice config file is an external INI-style configuration file that is used to configure
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/04.Config/01.ConfigApi.html b/juneau-doc/docs/Topics/11.juneau-microservice-core/04.Config/01.ConfigApi.html
similarity index 100%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server/04.Config/01.ConfigApi.html
copy to juneau-doc/docs/Topics/11.juneau-microservice-core/04.Config/01.ConfigApi.html
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/05.ResourceClasses.html b/juneau-doc/docs/Topics/11.juneau-microservice-core/05.ResourceClasses.html
similarity index 99%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server/05.ResourceClasses.html
copy to juneau-doc/docs/Topics/11.juneau-microservice-core/05.ResourceClasses.html
index 3c6ed8d..2d2b548 100644
--- a/juneau-doc/docs/Topics/10.juneau-microservice-server/05.ResourceClasses.html
+++ b/juneau-doc/docs/Topics/11.juneau-microservice-core/05.ResourceClasses.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-Resource Classes
+{todo} Resource Classes
 
 <p>
 	Now let's take a look at the resource classes themselves.  
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/06.PredefinedResourceClasses.html b/juneau-doc/docs/Topics/11.juneau-microservice-core/06.PredefinedResourceClasses.html
similarity index 98%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server/06.PredefinedResourceClasses.html
copy to juneau-doc/docs/Topics/11.juneau-microservice-core/06.PredefinedResourceClasses.html
index d99fe27..cd6dea2 100644
--- a/juneau-doc/docs/Topics/10.juneau-microservice-server/06.PredefinedResourceClasses.html
+++ b/juneau-doc/docs/Topics/11.juneau-microservice-core/06.PredefinedResourceClasses.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-Predefined Resource Classes
+{todo} Predefined Resource Classes
 
 <p>
 	The following predefined resource classes are also provided for easy inclusion into your microservice:
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/07.RestMicroservice.html b/juneau-doc/docs/Topics/11.juneau-microservice-core/07.RestMicroservice.html
similarity index 98%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server/07.RestMicroservice.html
copy to juneau-doc/docs/Topics/11.juneau-microservice-core/07.RestMicroservice.html
index 1c79781..cf04791 100644
--- a/juneau-doc/docs/Topics/10.juneau-microservice-server/07.RestMicroservice.html
+++ b/juneau-doc/docs/Topics/11.juneau-microservice-core/07.RestMicroservice.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-RestMicroservice
+{todo} RestMicroservice
 
 <p>
 	The {@link oaj.microservice.RestMicroservice} class is the main application entry-point for REST 
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/07.RestMicroservice/01.Extending.html b/juneau-doc/docs/Topics/11.juneau-microservice-core/07.RestMicroservice/01.Extending.html
similarity index 100%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server/07.RestMicroservice/01.Extending.html
copy to juneau-doc/docs/Topics/11.juneau-microservice-core/07.RestMicroservice/01.Extending.html
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/08.UiCustomization.html b/juneau-doc/docs/Topics/11.juneau-microservice-core/08.UiCustomization.html
similarity index 99%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server/08.UiCustomization.html
copy to juneau-doc/docs/Topics/11.juneau-microservice-core/08.UiCustomization.html
index d7e76e8..f31d2be 100644
--- a/juneau-doc/docs/Topics/10.juneau-microservice-server/08.UiCustomization.html
+++ b/juneau-doc/docs/Topics/11.juneau-microservice-core/08.UiCustomization.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-UI Customization
+{todo} UI Customization
 
 <p>
 	The Microservice project contains a <code>files/htdocs</code> working directly folder with predefined stylesheets and
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/doc-files/juneau-microservice-server.Installing.1.png b/juneau-doc/docs/Topics/11.juneau-microservice-core/doc-files/juneau-microservice-server.Installing.1.png
similarity index 100%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server/doc-files/juneau-microservice-server.Installing.1.png
copy to juneau-doc/docs/Topics/11.juneau-microservice-core/doc-files/juneau-microservice-server.Installing.1.png
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/doc-files/juneau-microservice-server.Installing.2.png b/juneau-doc/docs/Topics/11.juneau-microservice-core/doc-files/juneau-microservice-server.Installing.2.png
similarity index 100%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server/doc-files/juneau-microservice-server.Installing.2.png
copy to juneau-doc/docs/Topics/11.juneau-microservice-core/doc-files/juneau-microservice-server.Installing.2.png
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/doc-files/juneau-microservice-server.ResourceClasses.1.png b/juneau-doc/docs/Topics/11.juneau-microservice-core/doc-files/juneau-microservice-server.ResourceClasses.1.png
similarity index 100%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server/doc-files/juneau-microservice-server.ResourceClasses.1.png
copy to juneau-doc/docs/Topics/11.juneau-microservice-core/doc-files/juneau-microservice-server.ResourceClasses.1.png
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/doc-files/juneau-microservice-server.Running.1.png b/juneau-doc/docs/Topics/11.juneau-microservice-core/doc-files/juneau-microservice-server.Running.1.png
similarity index 100%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server/doc-files/juneau-microservice-server.Running.1.png
copy to juneau-doc/docs/Topics/11.juneau-microservice-core/doc-files/juneau-microservice-server.Running.1.png
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/doc-files/juneau-microservice.UiCustomization.1.png b/juneau-doc/docs/Topics/11.juneau-microservice-core/doc-files/juneau-microservice.UiCustomization.1.png
similarity index 100%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server/doc-files/juneau-microservice.UiCustomization.1.png
copy to juneau-doc/docs/Topics/11.juneau-microservice-core/doc-files/juneau-microservice.UiCustomization.1.png
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.1.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.1.png
deleted file mode 100644
index 3b9b4e1..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.1.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.2.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.2.png
deleted file mode 100644
index bb30587..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.2.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.3.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.3.png
deleted file mode 100644
index 320fc6e..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.3.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.4.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.4.png
deleted file mode 100644
index 3eff3a5..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.4.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.AtomFeedResource.1.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.AtomFeedResource.1.png
deleted file mode 100644
index 89ad0cb..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.AtomFeedResource.1.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.AtomFeedResource.2.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.AtomFeedResource.2.png
deleted file mode 100644
index 3f7ff40..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.AtomFeedResource.2.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.AtomFeedResource.3.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.AtomFeedResource.3.png
deleted file mode 100644
index 1c6aebd..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.AtomFeedResource.3.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.ConfigResource.1.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.ConfigResource.1.png
deleted file mode 100644
index 38fb734..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.ConfigResource.1.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.ConfigResource.2.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.ConfigResource.2.png
deleted file mode 100644
index 0a33d35..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.ConfigResource.2.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.DockerRegistryResource.1.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.DockerRegistryResource.1.png
deleted file mode 100644
index 3937264..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.DockerRegistryResource.1.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.HelloWorldResource.1.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.HelloWorldResource.1.png
deleted file mode 100644
index a826c98..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.HelloWorldResource.1.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.HelloWorldResource.2.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.HelloWorldResource.2.png
deleted file mode 100644
index 9772635..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.HelloWorldResource.2.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.JsonSchemaResource.1.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.JsonSchemaResource.1.png
deleted file mode 100644
index e275534..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.JsonSchemaResource.1.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.JsonSchemaResource.2.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.JsonSchemaResource.2.png
deleted file mode 100644
index 68c65d3..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.JsonSchemaResource.2.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.LogsResource.1.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.LogsResource.1.png
deleted file mode 100644
index f6cea03..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.LogsResource.1.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.MethodExampleResource.1.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.MethodExampleResource.1.png
deleted file mode 100644
index 3cb4322..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.MethodExampleResource.1.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.MethodExampleResource.2.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.MethodExampleResource.2.png
deleted file mode 100644
index c69e18c..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.MethodExampleResource.2.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.MethodExampleResource.3.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.MethodExampleResource.3.png
deleted file mode 100644
index 8552e3d..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.MethodExampleResource.3.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.1.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.1.png
deleted file mode 100644
index fc65f06..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.1.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.10a.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.10a.png
deleted file mode 100644
index 6ca5314..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.10a.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.10b.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.10b.png
deleted file mode 100644
index 86c1242..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.10b.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.10c.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.10c.png
deleted file mode 100644
index b58bde2..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.10c.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.11a.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.11a.png
deleted file mode 100644
index 54db86f..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.11a.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.11b.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.11b.png
deleted file mode 100644
index 9c4f3a8..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.11b.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.2a.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.2a.png
deleted file mode 100644
index 9515c5c..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.2a.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.2b.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.2b.png
deleted file mode 100644
index 2afcbcf..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.2b.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.2c.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.2c.png
deleted file mode 100644
index 7e27708..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.2c.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.2d.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.2d.png
deleted file mode 100644
index 014fcf6..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.2d.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.3a.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.3a.png
deleted file mode 100644
index ae029d8..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.3a.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.3b.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.3b.png
deleted file mode 100644
index 9193b1d..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.3b.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.4a.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.4a.png
deleted file mode 100644
index dd91a17..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.4a.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.4b.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.4b.png
deleted file mode 100644
index 76f1378..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.4b.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.5a.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.5a.png
deleted file mode 100644
index bedf2c0..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.5a.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.5b.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.5b.png
deleted file mode 100644
index 46cd848..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.5b.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.6a.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.6a.png
deleted file mode 100644
index ebf918f..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.6a.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.6b.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.6b.png
deleted file mode 100644
index ca6edcd..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.6b.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.7a.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.7a.png
deleted file mode 100644
index d31cc91..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.7a.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.7b.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.7b.png
deleted file mode 100644
index 5275642..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.7b.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.8a.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.8a.png
deleted file mode 100644
index a7ea65e..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.8a.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9a.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9a.png
deleted file mode 100644
index b6a96d8..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9a.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9b.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9b.png
deleted file mode 100644
index 73a7129..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9b.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9c.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9c.png
deleted file mode 100644
index d229cc1..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9c.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9d.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9d.png
deleted file mode 100644
index 7735103..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9d.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9e.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9e.png
deleted file mode 100644
index ff0d72b..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9e.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9f.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9f.png
deleted file mode 100644
index 971affd..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9f.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9g.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9g.png
deleted file mode 100644
index 0e25185..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9g.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9h.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9h.png
deleted file mode 100644
index 3c11f64..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9h.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PhotosResource.1.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PhotosResource.1.png
deleted file mode 100644
index e20ac0c..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PhotosResource.1.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PhotosResource.2.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PhotosResource.2.png
deleted file mode 100644
index c6278d5..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.PhotosResource.2.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.RequestEchoResource.1.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.RequestEchoResource.1.png
deleted file mode 100644
index c28f184..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.RequestEchoResource.1.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.RootResources.1.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.RootResources.1.png
deleted file mode 100644
index 3eff3a5..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.RootResources.1.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.SqlQueryResource.1.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.SqlQueryResource.1.png
deleted file mode 100644
index 2e8d95a..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.SqlQueryResource.1.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.SqlQueryResource.2.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.SqlQueryResource.2.png
deleted file mode 100644
index dd1d38b..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.SqlQueryResource.2.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.SystemPropertiesResource.1.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.SystemPropertiesResource.1.png
deleted file mode 100644
index 6779ace..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.SystemPropertiesResource.1.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.SystemPropertiesResource.2.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.SystemPropertiesResource.2.png
deleted file mode 100644
index 5e79a4d..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.SystemPropertiesResource.2.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.SystemPropertiesResource.3.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.SystemPropertiesResource.3.png
deleted file mode 100644
index a40ac54..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.SystemPropertiesResource.3.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.TempDirResource.1.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.TempDirResource.1.png
deleted file mode 100644
index 0cdbaca..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.TempDirResource.1.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.TempDirResource.2.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.TempDirResource.2.png
deleted file mode 100644
index 42ba0ea..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.TempDirResource.2.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.TempDirResource.3.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.TempDirResource.3.png
deleted file mode 100644
index 125edb0..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.TempDirResource.3.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.TumblrParserResource.1.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.TumblrParserResource.1.png
deleted file mode 100644
index b11b2e4..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.TumblrParserResource.1.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.UrlEncodedFormResource.1.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.UrlEncodedFormResource.1.png
deleted file mode 100644
index 49e8dfe..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.UrlEncodedFormResource.1.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.UrlEncodedFormResource.2.png b/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.UrlEncodedFormResource.2.png
deleted file mode 100644
index f1684c8..0000000
Binary files a/juneau-doc/docs/Topics/12.juneau-examples-rest/doc-files/juneau-examples-rest.UrlEncodedFormResource.2.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server.html b/juneau-doc/docs/Topics/12.juneau-microservice-jetty.html
similarity index 98%
copy from juneau-doc/docs/Topics/10.juneau-microservice-server.html
copy to juneau-doc/docs/Topics/12.juneau-microservice-jetty.html
index b9ea92c..17d02ab 100644
--- a/juneau-doc/docs/Topics/10.juneau-microservice-server.html
+++ b/juneau-doc/docs/Topics/12.juneau-microservice-jetty.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-juneau-microservice-server
+{todo} juneau-microservice-server
 
 <h5 class='figure'>Maven Dependency</h5>
 <p class='bpcode w500'>
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/01.Introduction.html b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/01.Introduction.html
similarity index 98%
rename from juneau-doc/docs/Topics/10.juneau-microservice-server/01.Introduction.html
rename to juneau-doc/docs/Topics/12.juneau-microservice-jetty/01.Introduction.html
index 2f3b875..1f572ff 100644
--- a/juneau-doc/docs/Topics/10.juneau-microservice-server/01.Introduction.html
+++ b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/01.Introduction.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-Microservice Introduction
+{todo} Microservice Introduction
 
 <p>
 	The Microservice API consists of a combination of the Juneau Core, Server, and Client APIs and an embedded
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/02.GettingStarted.html b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/02.GettingStarted.html
similarity index 98%
rename from juneau-doc/docs/Topics/10.juneau-microservice-server/02.GettingStarted.html
rename to juneau-doc/docs/Topics/12.juneau-microservice-jetty/02.GettingStarted.html
index ee6e6da..b09fffe 100644
--- a/juneau-doc/docs/Topics/10.juneau-microservice-server/02.GettingStarted.html
+++ b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/02.GettingStarted.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-Getting Started
+{todo} Getting Started
 
 <p>
 	The <l>my-microservice.zip</l> file is a zipped eclipse project that includes everything you 
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/02.GettingStarted/01.Installing.html b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/02.GettingStarted/01.Installing.html
similarity index 100%
rename from juneau-doc/docs/Topics/10.juneau-microservice-server/02.GettingStarted/01.Installing.html
rename to juneau-doc/docs/Topics/12.juneau-microservice-jetty/02.GettingStarted/01.Installing.html
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/02.GettingStarted/02.Running.html b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/02.GettingStarted/02.Running.html
similarity index 100%
rename from juneau-doc/docs/Topics/10.juneau-microservice-server/02.GettingStarted/02.Running.html
rename to juneau-doc/docs/Topics/12.juneau-microservice-jetty/02.GettingStarted/02.Running.html
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/02.GettingStarted/03.Building.html b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/02.GettingStarted/03.Building.html
similarity index 100%
rename from juneau-doc/docs/Topics/10.juneau-microservice-server/02.GettingStarted/03.Building.html
rename to juneau-doc/docs/Topics/12.juneau-microservice-jetty/02.GettingStarted/03.Building.html
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/03.Manifest.html b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/03.Manifest.html
similarity index 98%
rename from juneau-doc/docs/Topics/10.juneau-microservice-server/03.Manifest.html
rename to juneau-doc/docs/Topics/12.juneau-microservice-jetty/03.Manifest.html
index 1e7cae5..ba558e4 100644
--- a/juneau-doc/docs/Topics/10.juneau-microservice-server/03.Manifest.html
+++ b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/03.Manifest.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-Manifest File
+{todo} Manifest File
 
 <p>
 	The generated <l>META-INF/MANIFEST.MF</l> file is used to describe the microservice. 
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/03.Manifest/01.ManifestApi.html b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/03.Manifest/01.ManifestApi.html
similarity index 100%
rename from juneau-doc/docs/Topics/10.juneau-microservice-server/03.Manifest/01.ManifestApi.html
rename to juneau-doc/docs/Topics/12.juneau-microservice-jetty/03.Manifest/01.ManifestApi.html
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/04.Config.html b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/04.Config.html
similarity index 98%
rename from juneau-doc/docs/Topics/10.juneau-microservice-server/04.Config.html
rename to juneau-doc/docs/Topics/12.juneau-microservice-jetty/04.Config.html
index 4c177b3..0c6f87c 100644
--- a/juneau-doc/docs/Topics/10.juneau-microservice-server/04.Config.html
+++ b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/04.Config.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-Config
+{todo} Config
 
 <p>
 	The microservice config file is an external INI-style configuration file that is used to configure
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/04.Config/01.ConfigApi.html b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/04.Config/01.ConfigApi.html
similarity index 100%
rename from juneau-doc/docs/Topics/10.juneau-microservice-server/04.Config/01.ConfigApi.html
rename to juneau-doc/docs/Topics/12.juneau-microservice-jetty/04.Config/01.ConfigApi.html
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/05.ResourceClasses.html b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/05.ResourceClasses.html
similarity index 99%
rename from juneau-doc/docs/Topics/10.juneau-microservice-server/05.ResourceClasses.html
rename to juneau-doc/docs/Topics/12.juneau-microservice-jetty/05.ResourceClasses.html
index 3c6ed8d..2d2b548 100644
--- a/juneau-doc/docs/Topics/10.juneau-microservice-server/05.ResourceClasses.html
+++ b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/05.ResourceClasses.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-Resource Classes
+{todo} Resource Classes
 
 <p>
 	Now let's take a look at the resource classes themselves.  
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/06.PredefinedResourceClasses.html b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/06.PredefinedResourceClasses.html
similarity index 98%
rename from juneau-doc/docs/Topics/10.juneau-microservice-server/06.PredefinedResourceClasses.html
rename to juneau-doc/docs/Topics/12.juneau-microservice-jetty/06.PredefinedResourceClasses.html
index d99fe27..cd6dea2 100644
--- a/juneau-doc/docs/Topics/10.juneau-microservice-server/06.PredefinedResourceClasses.html
+++ b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/06.PredefinedResourceClasses.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-Predefined Resource Classes
+{todo} Predefined Resource Classes
 
 <p>
 	The following predefined resource classes are also provided for easy inclusion into your microservice:
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/07.RestMicroservice.html b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/07.RestMicroservice.html
similarity index 98%
rename from juneau-doc/docs/Topics/10.juneau-microservice-server/07.RestMicroservice.html
rename to juneau-doc/docs/Topics/12.juneau-microservice-jetty/07.RestMicroservice.html
index 1c79781..cf04791 100644
--- a/juneau-doc/docs/Topics/10.juneau-microservice-server/07.RestMicroservice.html
+++ b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/07.RestMicroservice.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-RestMicroservice
+{todo} RestMicroservice
 
 <p>
 	The {@link oaj.microservice.RestMicroservice} class is the main application entry-point for REST 
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/07.RestMicroservice/01.Extending.html b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/07.RestMicroservice/01.Extending.html
similarity index 100%
rename from juneau-doc/docs/Topics/10.juneau-microservice-server/07.RestMicroservice/01.Extending.html
rename to juneau-doc/docs/Topics/12.juneau-microservice-jetty/07.RestMicroservice/01.Extending.html
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/08.UiCustomization.html b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/08.UiCustomization.html
similarity index 99%
rename from juneau-doc/docs/Topics/10.juneau-microservice-server/08.UiCustomization.html
rename to juneau-doc/docs/Topics/12.juneau-microservice-jetty/08.UiCustomization.html
index d7e76e8..f31d2be 100644
--- a/juneau-doc/docs/Topics/10.juneau-microservice-server/08.UiCustomization.html
+++ b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/08.UiCustomization.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-UI Customization
+{todo} UI Customization
 
 <p>
 	The Microservice project contains a <code>files/htdocs</code> working directly folder with predefined stylesheets and
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/doc-files/juneau-microservice-server.Installing.1.png b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/doc-files/juneau-microservice-server.Installing.1.png
similarity index 100%
rename from juneau-doc/docs/Topics/10.juneau-microservice-server/doc-files/juneau-microservice-server.Installing.1.png
rename to juneau-doc/docs/Topics/12.juneau-microservice-jetty/doc-files/juneau-microservice-server.Installing.1.png
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/doc-files/juneau-microservice-server.Installing.2.png b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/doc-files/juneau-microservice-server.Installing.2.png
similarity index 100%
rename from juneau-doc/docs/Topics/10.juneau-microservice-server/doc-files/juneau-microservice-server.Installing.2.png
rename to juneau-doc/docs/Topics/12.juneau-microservice-jetty/doc-files/juneau-microservice-server.Installing.2.png
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/doc-files/juneau-microservice-server.ResourceClasses.1.png b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/doc-files/juneau-microservice-server.ResourceClasses.1.png
similarity index 100%
rename from juneau-doc/docs/Topics/10.juneau-microservice-server/doc-files/juneau-microservice-server.ResourceClasses.1.png
rename to juneau-doc/docs/Topics/12.juneau-microservice-jetty/doc-files/juneau-microservice-server.ResourceClasses.1.png
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/doc-files/juneau-microservice-server.Running.1.png b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/doc-files/juneau-microservice-server.Running.1.png
similarity index 100%
rename from juneau-doc/docs/Topics/10.juneau-microservice-server/doc-files/juneau-microservice-server.Running.1.png
rename to juneau-doc/docs/Topics/12.juneau-microservice-jetty/doc-files/juneau-microservice-server.Running.1.png
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server/doc-files/juneau-microservice.UiCustomization.1.png b/juneau-doc/docs/Topics/12.juneau-microservice-jetty/doc-files/juneau-microservice.UiCustomization.1.png
similarity index 100%
rename from juneau-doc/docs/Topics/10.juneau-microservice-server/doc-files/juneau-microservice.UiCustomization.1.png
rename to juneau-doc/docs/Topics/12.juneau-microservice-jetty/doc-files/juneau-microservice.UiCustomization.1.png
diff --git a/juneau-doc/docs/Topics/10.juneau-microservice-server.html b/juneau-doc/docs/Topics/13.juneau-microservice-jetty-template.html
similarity index 97%
rename from juneau-doc/docs/Topics/10.juneau-microservice-server.html
rename to juneau-doc/docs/Topics/13.juneau-microservice-jetty-template.html
index b9ea92c..04c0e5f 100644
--- a/juneau-doc/docs/Topics/10.juneau-microservice-server.html
+++ b/juneau-doc/docs/Topics/13.juneau-microservice-jetty-template.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-juneau-microservice-server
+{todo} juneau-microservice-jetty-template
 
 <h5 class='figure'>Maven Dependency</h5>
 <p class='bpcode w500'>
diff --git a/juneau-doc/docs/Topics/11.juneau-examples-core.html b/juneau-doc/docs/Topics/14.juneau-examples-core.html
similarity index 100%
rename from juneau-doc/docs/Topics/11.juneau-examples-core.html
rename to juneau-doc/docs/Topics/14.juneau-examples-core.html
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-core.1.png b/juneau-doc/docs/Topics/14.juneau-examples-core/doc-files/juneau-examples-core.1.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-core.1.png
rename to juneau-doc/docs/Topics/14.juneau-examples-core/doc-files/juneau-examples-core.1.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-core.2.png b/juneau-doc/docs/Topics/14.juneau-examples-core/doc-files/juneau-examples-core.2.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-core.2.png
rename to juneau-doc/docs/Topics/14.juneau-examples-core/doc-files/juneau-examples-core.2.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-core.3.png b/juneau-doc/docs/Topics/14.juneau-examples-core/doc-files/juneau-examples-core.3.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-core.3.png
rename to juneau-doc/docs/Topics/14.juneau-examples-core/doc-files/juneau-examples-core.3.png
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest.html b/juneau-doc/docs/Topics/15.juneau-examples-rest.html
similarity index 98%
copy from juneau-doc/docs/Topics/12.juneau-examples-rest.html
copy to juneau-doc/docs/Topics/15.juneau-examples-rest.html
index b425db4..55b23f5 100644
--- a/juneau-doc/docs/Topics/12.juneau-examples-rest.html
+++ b/juneau-doc/docs/Topics/15.juneau-examples-rest.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-{updated} juneau-examples-rest
+{todo} juneau-examples-rest
 
 <h5 class='figure'>Archive File</h5>
 <p class='bpcode w500'>
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/01.RootResources.html b/juneau-doc/docs/Topics/15.juneau-examples-rest/01.RootResources.html
similarity index 100%
rename from juneau-doc/docs/Topics/12.juneau-examples-rest/01.RootResources.html
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/01.RootResources.html
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/02.HelloWorldResource.html b/juneau-doc/docs/Topics/15.juneau-examples-rest/02.HelloWorldResource.html
similarity index 100%
rename from juneau-doc/docs/Topics/12.juneau-examples-rest/02.HelloWorldResource.html
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/02.HelloWorldResource.html
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/03.PetStoreResource.html b/juneau-doc/docs/Topics/15.juneau-examples-rest/03.PetStoreResource.html
similarity index 100%
rename from juneau-doc/docs/Topics/12.juneau-examples-rest/03.PetStoreResource.html
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/03.PetStoreResource.html
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/04.DtoExamples.html b/juneau-doc/docs/Topics/15.juneau-examples-rest/04.DtoExamples.html
similarity index 100%
rename from juneau-doc/docs/Topics/12.juneau-examples-rest/04.DtoExamples.html
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/04.DtoExamples.html
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/05.ConfigResource.html b/juneau-doc/docs/Topics/15.juneau-examples-rest/05.ConfigResource.html
similarity index 100%
rename from juneau-doc/docs/Topics/12.juneau-examples-rest/05.ConfigResource.html
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/05.ConfigResource.html
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest/06.LogsResource.html b/juneau-doc/docs/Topics/15.juneau-examples-rest/06.LogsResource.html
similarity index 100%
rename from juneau-doc/docs/Topics/12.juneau-examples-rest/06.LogsResource.html
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/06.LogsResource.html
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.1.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.1.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.1.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.1.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.2.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.2.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.2.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.2.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.3.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.3.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.3.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.3.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.4.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.4.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.4.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.4.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.AtomFeedResource.1.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.AtomFeedResource.1.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.AtomFeedResource.1.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.AtomFeedResource.1.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.AtomFeedResource.2.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.AtomFeedResource.2.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.AtomFeedResource.2.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.AtomFeedResource.2.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.AtomFeedResource.3.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.AtomFeedResource.3.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.AtomFeedResource.3.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.AtomFeedResource.3.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.ConfigResource.1.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.ConfigResource.1.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.ConfigResource.1.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.ConfigResource.1.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.ConfigResource.2.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.ConfigResource.2.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.ConfigResource.2.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.ConfigResource.2.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.DockerRegistryResource.1.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.DockerRegistryResource.1.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.DockerRegistryResource.1.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.DockerRegistryResource.1.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.HelloWorldResource.1.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.HelloWorldResource.1.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.HelloWorldResource.1.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.HelloWorldResource.1.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.HelloWorldResource.2.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.HelloWorldResource.2.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.HelloWorldResource.2.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.HelloWorldResource.2.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.JsonSchemaResource.1.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.JsonSchemaResource.1.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.JsonSchemaResource.1.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.JsonSchemaResource.1.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.JsonSchemaResource.2.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.JsonSchemaResource.2.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.JsonSchemaResource.2.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.JsonSchemaResource.2.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.LogsResource.1.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.LogsResource.1.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.LogsResource.1.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.LogsResource.1.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.MethodExampleResource.1.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.MethodExampleResource.1.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.MethodExampleResource.1.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.MethodExampleResource.1.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.MethodExampleResource.2.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.MethodExampleResource.2.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.MethodExampleResource.2.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.MethodExampleResource.2.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.MethodExampleResource.3.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.MethodExampleResource.3.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.MethodExampleResource.3.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.MethodExampleResource.3.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.1.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.1.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.1.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.1.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.10a.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.10a.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.10a.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.10a.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.10b.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.10b.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.10b.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.10b.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.10c.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.10c.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.10c.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.10c.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.11a.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.11a.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.11a.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.11a.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.11b.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.11b.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.11b.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.11b.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.2a.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.2a.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.2a.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.2a.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.2b.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.2b.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.2b.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.2b.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.2c.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.2c.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.2c.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.2c.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.2d.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.2d.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.2d.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.2d.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.3a.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.3a.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.3a.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.3a.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.3b.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.3b.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.3b.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.3b.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.4a.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.4a.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.4a.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.4a.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.4b.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.4b.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.4b.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.4b.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.5a.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.5a.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.5a.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.5a.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.5b.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.5b.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.5b.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.5b.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.6a.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.6a.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.6a.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.6a.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.6b.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.6b.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.6b.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.6b.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.7a.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.7a.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.7a.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.7a.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.7b.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.7b.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.7b.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.7b.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.8a.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.8a.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.8a.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.8a.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.9a.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9a.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.9a.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9a.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.9b.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9b.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.9b.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9b.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.9c.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9c.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.9c.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9c.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.9d.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9d.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.9d.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9d.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.9e.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9e.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.9e.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9e.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.9f.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9f.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.9f.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9f.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.9g.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9g.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.9g.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9g.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.9h.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9h.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PetStoreResource.9h.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PetStoreResource.9h.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PhotosResource.1.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PhotosResource.1.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PhotosResource.1.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PhotosResource.1.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PhotosResource.2.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PhotosResource.2.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.PhotosResource.2.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.PhotosResource.2.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.RequestEchoResource.1.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.RequestEchoResource.1.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.RequestEchoResource.1.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.RequestEchoResource.1.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.RootResources.1.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.RootResources.1.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.RootResources.1.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.RootResources.1.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.SqlQueryResource.1.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.SqlQueryResource.1.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.SqlQueryResource.1.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.SqlQueryResource.1.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.SqlQueryResource.2.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.SqlQueryResource.2.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.SqlQueryResource.2.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.SqlQueryResource.2.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.SystemPropertiesResource.1.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.SystemPropertiesResource.1.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.SystemPropertiesResource.1.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.SystemPropertiesResource.1.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.SystemPropertiesResource.2.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.SystemPropertiesResource.2.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.SystemPropertiesResource.2.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.SystemPropertiesResource.2.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.SystemPropertiesResource.3.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.SystemPropertiesResource.3.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.SystemPropertiesResource.3.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.SystemPropertiesResource.3.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.TempDirResource.1.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.TempDirResource.1.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.TempDirResource.1.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.TempDirResource.1.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.TempDirResource.2.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.TempDirResource.2.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.TempDirResource.2.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.TempDirResource.2.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.TempDirResource.3.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.TempDirResource.3.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.TempDirResource.3.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.TempDirResource.3.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.TumblrParserResource.1.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.TumblrParserResource.1.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.TumblrParserResource.1.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.TumblrParserResource.1.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.UrlEncodedFormResource.1.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.UrlEncodedFormResource.1.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.UrlEncodedFormResource.1.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.UrlEncodedFormResource.1.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.UrlEncodedFormResource.2.png b/juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.UrlEncodedFormResource.2.png
similarity index 100%
rename from juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest.UrlEncodedFormResource.2.png
rename to juneau-doc/docs/Topics/15.juneau-examples-rest/doc-files/juneau-examples-rest.UrlEncodedFormResource.2.png
diff --git a/juneau-doc/docs/Topics/12.juneau-examples-rest.html b/juneau-doc/docs/Topics/16.juneau-examples-rest-jetty.html
similarity index 98%
rename from juneau-doc/docs/Topics/12.juneau-examples-rest.html
rename to juneau-doc/docs/Topics/16.juneau-examples-rest-jetty.html
index b425db4..55b23f5 100644
--- a/juneau-doc/docs/Topics/12.juneau-examples-rest.html
+++ b/juneau-doc/docs/Topics/16.juneau-examples-rest-jetty.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-{updated} juneau-examples-rest
+{todo} juneau-examples-rest
 
 <h5 class='figure'>Archive File</h5>
 <p class='bpcode w500'>
diff --git a/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/01.Classes.html b/juneau-doc/docs/Topics/16.juneau-examples-rest-jetty/01.Classes.html
similarity index 99%
copy from juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/01.Classes.html
copy to juneau-doc/docs/Topics/16.juneau-examples-rest-jetty/01.Classes.html
index d569c44..9e57646 100644
--- a/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/01.Classes.html
+++ b/juneau-doc/docs/Topics/16.juneau-examples-rest-jetty/01.Classes.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-{new} Classes
+{todo} Classes
 
 <p>
 	The <code>juneau-examples-rest-springboot</code> project contains the same classes as found in <code>juneau-examples-rest</code>
diff --git a/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/02.DeployingToHeroku.html b/juneau-doc/docs/Topics/16.juneau-examples-rest-jetty/02.DeployingToHeroku.html
similarity index 100%
copy from juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/02.DeployingToHeroku.html
copy to juneau-doc/docs/Topics/16.juneau-examples-rest-jetty/02.DeployingToHeroku.html
diff --git a/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/doc-files/juneau-examples-rest-springboot.Classes.png b/juneau-doc/docs/Topics/16.juneau-examples-rest-jetty/doc-files/juneau-examples-rest-springboot.Classes.png
similarity index 100%
copy from juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/doc-files/juneau-examples-rest-springboot.Classes.png
copy to juneau-doc/docs/Topics/16.juneau-examples-rest-jetty/doc-files/juneau-examples-rest-springboot.Classes.png
diff --git a/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot.html b/juneau-doc/docs/Topics/17.juneau-examples-rest-springboot.html
similarity index 98%
rename from juneau-doc/docs/Topics/13.juneau-examples-rest-springboot.html
rename to juneau-doc/docs/Topics/17.juneau-examples-rest-springboot.html
index 46b648e..131151b 100644
--- a/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot.html
+++ b/juneau-doc/docs/Topics/17.juneau-examples-rest-springboot.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-{new} juneau-examples-rest-springboot
+{todo} juneau-examples-rest-springboot
 
 <h5 class='figure'>Archive File</h5>
 <p class='bpcode w500'>
diff --git a/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/01.Classes.html b/juneau-doc/docs/Topics/17.juneau-examples-rest-springboot/01.Classes.html
similarity index 100%
rename from juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/01.Classes.html
rename to juneau-doc/docs/Topics/17.juneau-examples-rest-springboot/01.Classes.html
diff --git a/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/02.DeployingToHeroku.html b/juneau-doc/docs/Topics/17.juneau-examples-rest-springboot/02.DeployingToHeroku.html
similarity index 100%
rename from juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/02.DeployingToHeroku.html
rename to juneau-doc/docs/Topics/17.juneau-examples-rest-springboot/02.DeployingToHeroku.html
diff --git a/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/doc-files/juneau-examples-rest-springboot.Classes.png b/juneau-doc/docs/Topics/17.juneau-examples-rest-springboot/doc-files/juneau-examples-rest-springboot.Classes.png
similarity index 100%
copy from juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/doc-files/juneau-examples-rest-springboot.Classes.png
copy to juneau-doc/docs/Topics/17.juneau-examples-rest-springboot/doc-files/juneau-examples-rest-springboot.Classes.png
diff --git a/juneau-doc/docs/Topics/14.Security.html b/juneau-doc/docs/Topics/18.Security.html
similarity index 100%
rename from juneau-doc/docs/Topics/14.Security.html
rename to juneau-doc/docs/Topics/18.Security.html
diff --git a/juneau-doc/docs/Topics/14.Security/01.juneau-marshall.html b/juneau-doc/docs/Topics/18.Security/01.juneau-marshall.html
similarity index 100%
rename from juneau-doc/docs/Topics/14.Security/01.juneau-marshall.html
rename to juneau-doc/docs/Topics/18.Security/01.juneau-marshall.html
diff --git a/juneau-doc/docs/Topics/14.Security/02.juneau-svl.html b/juneau-doc/docs/Topics/18.Security/02.juneau-svl.html
similarity index 100%
rename from juneau-doc/docs/Topics/14.Security/02.juneau-svl.html
rename to juneau-doc/docs/Topics/18.Security/02.juneau-svl.html
diff --git a/juneau-doc/docs/Topics/14.Security/03.juneau-rest-server.html b/juneau-doc/docs/Topics/18.Security/03.juneau-rest-server.html
similarity index 100%
rename from juneau-doc/docs/Topics/14.Security/03.juneau-rest-server.html
rename to juneau-doc/docs/Topics/18.Security/03.juneau-rest-server.html
diff --git a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.630.1.png b/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.630.1.png
deleted file mode 100644
index f070aea..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.630.1.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.630.2.png b/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.630.2.png
deleted file mode 100644
index 265e727..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.630.2.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.631.ContentTypeMenuItem.png b/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.631.ContentTypeMenuItem.png
deleted file mode 100644
index 02cc672..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.631.ContentTypeMenuItem.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.631.DevopsStyle.png b/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.631.DevopsStyle.png
deleted file mode 100644
index 9675ac8..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.631.DevopsStyle.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.631.LightStyle.png b/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.631.LightStyle.png
deleted file mode 100644
index 600ee47..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.631.LightStyle.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.631.OriginalStyle.png b/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.631.OriginalStyle.png
deleted file mode 100644
index 6edcc5b..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.631.OriginalStyle.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.631.QueryMenuItem.png b/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.631.QueryMenuItem.png
deleted file mode 100644
index 92b6d7c..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.631.QueryMenuItem.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.631.StyleMenuItem.png b/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.631.StyleMenuItem.png
deleted file mode 100644
index e3d1ff3..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.631.StyleMenuItem.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.632.DarkStyle.png b/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.632.DarkStyle.png
deleted file mode 100644
index 73732dc..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.632.DarkStyle.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.632.PetStoreAdd.png b/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.632.PetStoreAdd.png
deleted file mode 100644
index 3052050..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.632.PetStoreAdd.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.711.1.png b/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.711.1.png
deleted file mode 100644
index 784c479..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/ReleaseNotes.711.1.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-config.Serializing.1.png b/juneau-doc/src/main/javadoc/doc-files/juneau-config.Serializing.1.png
deleted file mode 100644
index 531f280..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-config.Serializing.1.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-config.Serializing.2.png b/juneau-doc/src/main/javadoc/doc-files/juneau-config.Serializing.2.png
deleted file mode 100644
index 7f5a4b3..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-config.Serializing.2.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-config.Serializing.3.png b/juneau-doc/src/main/javadoc/doc-files/juneau-config.Serializing.3.png
deleted file mode 100644
index 749da14..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-config.Serializing.3.png and /dev/null differ
diff --git a/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/doc-files/juneau-examples-rest-springboot.Classes.png b/juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest-springboot.Classes.png
similarity index 100%
rename from juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/doc-files/juneau-examples-rest-springboot.Classes.png
rename to juneau-doc/src/main/javadoc/doc-files/juneau-examples-rest-springboot.Classes.png
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.HelloWorldExample.1.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.HelloWorldExample.1.png
deleted file mode 100644
index d7d0684..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.HelloWorldExample.1.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.HtmlDocAnnotation.PredefinedWidgets.1.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.HtmlDocAnnotation.PredefinedWidgets.1.png
deleted file mode 100644
index 6c8db5c..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.HtmlDocAnnotation.PredefinedWidgets.1.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.HtmlDocAnnotation.PredefinedWidgets.2.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.HtmlDocAnnotation.PredefinedWidgets.2.png
deleted file mode 100644
index a577695..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.HtmlDocAnnotation.PredefinedWidgets.2.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.HtmlDocAnnotation.PredefinedWidgets.3.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.HtmlDocAnnotation.PredefinedWidgets.3.png
deleted file mode 100644
index 71679f9..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.HtmlDocAnnotation.PredefinedWidgets.3.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.HtmlDocAnnotation.PredefinedWidgets.4.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.HtmlDocAnnotation.PredefinedWidgets.4.png
deleted file mode 100644
index 7273413..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.HtmlDocAnnotation.PredefinedWidgets.4.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.OptionsPages.1.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.OptionsPages.1.png
deleted file mode 100644
index 82ca9d6..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.OptionsPages.1.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.PredefinedLabelBeans.1.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.PredefinedLabelBeans.1.png
deleted file mode 100644
index 76a85e2..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.PredefinedLabelBeans.1.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.PredefinedLabelBeans.2.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.PredefinedLabelBeans.2.png
deleted file mode 100644
index 9a56c43..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.PredefinedLabelBeans.2.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.PredefinedLabelBeans.3.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.PredefinedLabelBeans.3.png
deleted file mode 100644
index 0ccbc37..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.PredefinedLabelBeans.3.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.PredefinedLabelBeans.4.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.PredefinedLabelBeans.4.png
deleted file mode 100644
index 35c0c27..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.PredefinedLabelBeans.4.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.RouterPages.1.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.RouterPages.1.png
deleted file mode 100644
index 40918c4..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.RouterPages.1.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Stylesheets.0.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Stylesheets.0.png
deleted file mode 100644
index 6b59ab4..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Stylesheets.0.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Stylesheets.1.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Stylesheets.1.png
deleted file mode 100644
index ab4d89f..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Stylesheets.1.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Stylesheets.2.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Stylesheets.2.png
deleted file mode 100644
index 3e2bf37..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Stylesheets.2.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Stylesheets.3.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Stylesheets.3.png
deleted file mode 100644
index f37dd2c..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Stylesheets.3.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.1.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.1.png
deleted file mode 100644
index 69b656f..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.1.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.2.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.2.png
deleted file mode 100644
index 284fa85..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.2.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.3.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.3.png
deleted file mode 100644
index c642c41..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.3.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.4.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.4.png
deleted file mode 100644
index 42762e0..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.4.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.5.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.5.png
deleted file mode 100644
index d889fa7..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.5.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Models.1.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Models.1.png
deleted file mode 100644
index 56f02b3..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Models.1.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Models.2.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Models.2.png
deleted file mode 100644
index d57032f..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Models.2.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Models.3.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Models.3.png
deleted file mode 100644
index 01df721..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Models.3.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Operations.1.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Operations.1.png
deleted file mode 100644
index b565c45..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Operations.1.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Operations.2.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Operations.2.png
deleted file mode 100644
index 9cbc361..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Operations.2.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Operations.3.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Operations.3.png
deleted file mode 100644
index 4bc1127..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Operations.3.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Operations.4.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Operations.4.png
deleted file mode 100644
index 2ce33be..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Operations.4.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Parameters.1.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Parameters.1.png
deleted file mode 100644
index 9ce4970..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Parameters.1.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Parameters.2.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Parameters.2.png
deleted file mode 100644
index 50c3426..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Parameters.2.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Parameters.3.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Parameters.3.png
deleted file mode 100644
index e95de2c..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Parameters.3.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Parameters.4.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Parameters.4.png
deleted file mode 100644
index 2b47cd1..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.Parameters.4.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.ResponseExamples.1.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.ResponseExamples.1.png
deleted file mode 100644
index 160a0a4..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.ResponseExamples.1.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.ResponseExamples.2.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.ResponseExamples.2.png
deleted file mode 100644
index 408241b..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.ResponseExamples.2.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.ResponseExamples.3.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.ResponseExamples.3.png
deleted file mode 100644
index 0ed1318..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.ResponseExamples.3.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.ResponseExamples.4.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.ResponseExamples.4.png
deleted file mode 100644
index ca6002f..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.Swagger.ResponseExamples.4.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.UiCustomization.1.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.UiCustomization.1.png
deleted file mode 100644
index f05d0f5..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.UiCustomization.1.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.UiCustomization.2.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.UiCustomization.2.png
deleted file mode 100644
index a2a6a07..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.UiCustomization.2.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.UiCustomization.3.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.UiCustomization.3.png
deleted file mode 100644
index e196d1a..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.UiCustomization.3.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.1.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.1.png
deleted file mode 100644
index e052e7b..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.1.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.2.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.2.png
deleted file mode 100644
index f880d51..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.2.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.3.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.3.png
deleted file mode 100644
index e3f25df..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.3.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.4.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.4.png
deleted file mode 100644
index c9c0f1c..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.4.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.5.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.5.png
deleted file mode 100644
index bf38b24..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.5.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.6.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.6.png
deleted file mode 100644
index c42c775..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.6.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.7.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.7.png
deleted file mode 100644
index ef4b7ab..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.7.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.8.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.8.png
deleted file mode 100644
index 9b3a139..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.8.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.9.png b/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.9.png
deleted file mode 100644
index 2d6ff54..0000000
Binary files a/juneau-doc/src/main/javadoc/doc-files/juneau-rest-server.restRPC.9.png and /dev/null differ
diff --git a/juneau-doc/src/main/javadoc/overview.html b/juneau-doc/src/main/javadoc/overview.html
index 5ac5d79..750189b 100644
--- a/juneau-doc/src/main/javadoc/overview.html
+++ b/juneau-doc/src/main/javadoc/overview.html
@@ -247,6 +247,7 @@
 		</ol>
 		<li><p class=''><a class='doclink' href='#juneau-config.ReadOnlyConfigs'>Read-only Configs</a></p>
 		<li><p class=''><a class='doclink' href='#juneau-config.ClosingConfigs'>Closing Configs</a></p>
+		<li><p class='new'><a class='doclink' href='#juneau-config.SystemDefaultConfig'>System Default Config</a></p>
 	</ol>
 	<li><p class='toc2 '><a class='doclink' href='#juneau-rest-server'>juneau-rest-server</a></p>
 	<ol>
@@ -358,6 +359,10 @@
 	<ol>
 		<li><p class=''><a class='doclink' href='#juneau-rest-server-jaxrs.BaseProvider'>Juneau JAX-RS Provider</a></p>
 	</ol>
+	<li><p class='toc2 todo'><a class='doclink' href='#juneau-rest-server-springboot'>juneau-rest-server-springboot</a></p>
+	<ol>
+		<li><p class='todo'><a class='doclink' href='#juneau-rest-server-springboot.TODO'>TODO</a></p>
+	</ol>
 	<li><p class='toc2 '><a class='doclink' href='#juneau-rest-client'>juneau-rest-client</a></p>
 	<ol>
 		<li><p class=''><a class='doclink' href='#juneau-rest-client.RestProxies'>REST Proxies</a></p>
@@ -388,33 +393,59 @@
 		<li><p class=''><a class='doclink' href='#juneau-rest-client.UnitTesting'>Serverless Unit Testing</a></p>
 		<li><p class=''><a class='doclink' href='#juneau-rest-client.Other'>Other Useful Methods</a></p>
 	</ol>
-	<li><p class='toc2 '><a class='doclink' href='#juneau-microservice-server'>juneau-microservice-server</a></p>
+	<li><p class='toc2 todo'><a class='doclink' href='#juneau-microservice-core'>juneau-microservice-server</a></p>
+	<ol>
+		<li><p class=''><a class='doclink' href='#juneau-microservice-core.Introduction'>Microservice Introduction</a></p>
+		<li><p class=''><a class='doclink' href='#juneau-microservice-core.GettingStarted'>Getting Started</a></p>
+		<ol>
+			<li><p class=''><a class='doclink' href='#juneau-microservice-core.GettingStarted.Installing'>Installing in Eclipse</a></p>
+			<li><p class=''><a class='doclink' href='#juneau-microservice-core.GettingStarted.Running'>Running in Eclipse</a></p>
+			<li><p class=''><a class='doclink' href='#juneau-microservice-core.GettingStarted.Building'>Building and Running from Command-Line</a></p>
+		</ol>
+		<li><p class=''><a class='doclink' href='#juneau-microservice-core.Manifest'>Manifest File</a></p>
+		<ol>
+			<li><p class=''><a class='doclink' href='#juneau-microservice-core.Manifest.ManifestApi'>Manifest API</a></p>
+		</ol>
+		<li><p class=''><a class='doclink' href='#juneau-microservice-core.Config'>Config</a></p>
+		<ol>
+			<li><p class=''><a class='doclink' href='#juneau-microservice-core.Config.ConfigApi'>Config File API</a></p>
+		</ol>
+		<li><p class=''><a class='doclink' href='#juneau-microservice-core.ResourceClasses'>Resource Classes</a></p>
+		<li><p class=''><a class='doclink' href='#juneau-microservice-core.PredefinedResourceClasses'>Predefined Resource Classes</a></p>
+		<li><p class=''><a class='doclink' href='#juneau-microservice-core.RestMicroservice'>RestMicroservice</a></p>
+		<ol>
+			<li><p class=''><a class='doclink' href='#juneau-microservice-core.RestMicroservice.Extending'>Extending RestMicroservice</a></p>
+		</ol>
+		<li><p class=''><a class='doclink' href='#juneau-microservice-core.UiCustomization'>UI Customization</a></p>
+	</ol>
+	<li><p class='toc2 todo'><a class='doclink' href='#juneau-microservice-jetty'>juneau-microservice-server</a></p>
 	<ol>
-		<li><p class=''><a class='doclink' href='#juneau-microservice-server.Introduction'>Microservice Introduction</a></p>
-		<li><p class=''><a class='doclink' href='#juneau-microservice-server.GettingStarted'>Getting Started</a></p>
+		<li><p class=''><a class='doclink' href='#juneau-microservice-jetty.Introduction'>Microservice Introduction</a></p>
+		<li><p class=''><a class='doclink' href='#juneau-microservice-jetty.GettingStarted'>Getting Started</a></p>
 		<ol>
-			<li><p class=''><a class='doclink' href='#juneau-microservice-server.GettingStarted.Installing'>Installing in Eclipse</a></p>
-			<li><p class=''><a class='doclink' href='#juneau-microservice-server.GettingStarted.Running'>Running in Eclipse</a></p>
-			<li><p class=''><a class='doclink' href='#juneau-microservice-server.GettingStarted.Building'>Building and Running from Command-Line</a></p>
+			<li><p class=''><a class='doclink' href='#juneau-microservice-jetty.GettingStarted.Installing'>Installing in Eclipse</a></p>
+			<li><p class=''><a class='doclink' href='#juneau-microservice-jetty.GettingStarted.Running'>Running in Eclipse</a></p>
+			<li><p class=''><a class='doclink' href='#juneau-microservice-jetty.GettingStarted.Building'>Building and Running from Command-Line</a></p>
 		</ol>
-		<li><p class=''><a class='doclink' href='#juneau-microservice-server.Manifest'>Manifest File</a></p>
+		<li><p class=''><a class='doclink' href='#juneau-microservice-jetty.Manifest'>Manifest File</a></p>
 		<ol>
-			<li><p class=''><a class='doclink' href='#juneau-microservice-server.Manifest.ManifestApi'>Manifest API</a></p>
+			<li><p class=''><a class='doclink' href='#juneau-microservice-jetty.Manifest.ManifestApi'>Manifest API</a></p>
 		</ol>
-		<li><p class=''><a class='doclink' href='#juneau-microservice-server.Config'>Config</a></p>
+		<li><p class=''><a class='doclink' href='#juneau-microservice-jetty.Config'>Config</a></p>
 		<ol>
-			<li><p class=''><a class='doclink' href='#juneau-microservice-server.Config.ConfigApi'>Config File API</a></p>
+			<li><p class=''><a class='doclink' href='#juneau-microservice-jetty.Config.ConfigApi'>Config File API</a></p>
 		</ol>
-		<li><p class=''><a class='doclink' href='#juneau-microservice-server.ResourceClasses'>Resource Classes</a></p>
-		<li><p class=''><a class='doclink' href='#juneau-microservice-server.PredefinedResourceClasses'>Predefined Resource Classes</a></p>
-		<li><p class=''><a class='doclink' href='#juneau-microservice-server.RestMicroservice'>RestMicroservice</a></p>
+		<li><p class=''><a class='doclink' href='#juneau-microservice-jetty.ResourceClasses'>Resource Classes</a></p>
+		<li><p class=''><a class='doclink' href='#juneau-microservice-jetty.PredefinedResourceClasses'>Predefined Resource Classes</a></p>
+		<li><p class=''><a class='doclink' href='#juneau-microservice-jetty.RestMicroservice'>RestMicroservice</a></p>
 		<ol>
-			<li><p class=''><a class='doclink' href='#juneau-microservice-server.RestMicroservice.Extending'>Extending RestMicroservice</a></p>
+			<li><p class=''><a class='doclink' href='#juneau-microservice-jetty.RestMicroservice.Extending'>Extending RestMicroservice</a></p>
 		</ol>
-		<li><p class=''><a class='doclink' href='#juneau-microservice-server.UiCustomization'>UI Customization</a></p>
+		<li><p class=''><a class='doclink' href='#juneau-microservice-jetty.UiCustomization'>UI Customization</a></p>
 	</ol>
+	<li><p class='toc2 todo'><a class='doclink' href='#juneau-microservice-jetty-template'>juneau-microservice-server</a></p>
 	<li><p class='toc2 '><a class='doclink' href='#juneau-examples-core'>juneau-examples-core</a></p>
-	<li><p class='toc2 updated'><a class='doclink' href='#juneau-examples-rest'>juneau-examples-rest</a></p>
+	<li><p class='toc2 todo'><a class='doclink' href='#juneau-examples-rest'>juneau-examples-rest</a></p>
 	<ol>
 		<li><p class='updated'><a class='doclink' href='#juneau-examples-rest.RootResources'>RootResources</a></p>
 		<li><p class='updated'><a class='doclink' href='#juneau-examples-rest.HelloWorldResource'>HelloWorldResource</a></p>
@@ -423,9 +454,14 @@
 		<li><p class=''><a class='doclink' href='#juneau-examples-rest.ConfigResource'>ConfigResource</a></p>
 		<li><p class=''><a class='doclink' href='#juneau-examples-rest.LogsResource'>LogsResource</a></p>
 	</ol>
-	<li><p class='toc2 new'><a class='doclink' href='#juneau-examples-rest-springboot'>juneau-examples-rest-springboot</a></p>
+	<li><p class='toc2 todo'><a class='doclink' href='#juneau-examples-rest-jetty'>juneau-examples-rest</a></p>
 	<ol>
-		<li><p class='todo'><a class='doclink' href='#juneau-examples-rest-springboot.Classes'>Classes</a></p>
+		<li><p class='new'><a class='doclink' href='#juneau-examples-rest-jetty.Classes'>Classes</a></p>
+		<li><p class='todo'><a class='doclink' href='#juneau-examples-rest-jetty.DeployingToHeroku'>Deploying to Heroku</a></p>
+	</ol>
+	<li><p class='toc2 todo'><a class='doclink' href='#juneau-examples-rest-springboot'>juneau-examples-rest-springboot</a></p>
+	<ol>
+		<li><p class='new'><a class='doclink' href='#juneau-examples-rest-springboot.Classes'>Classes</a></p>
 		<li><p class='todo'><a class='doclink' href='#juneau-examples-rest-springboot.DeployingToHeroku'>Deploying to Heroku</a></p>
 	</ol>
 	<li><p class='toc2 '><a class='doclink' href='#Security'>Security Best-Practices</a></p>
@@ -2726,7 +2762,7 @@
 		<jk>private final</jk> String <jf>name</jf>;
 		<jk>private final int</jk> <jf>age</jf>;
 
-		<ja>@BeanConstructor</ja>(properties=<js>"name,age"</js>)
+		<ja>@BeanConstructor</ja>(properties=<js>"name,age"</js>})
 		<jk>public</jk> Person(String name, <jk>int</jk> age) {
 			<jk>this</jk>.<jf>name</jf> = name;
 			<jk>this</jk>.<jf>age</jf> = age;
@@ -12665,6 +12701,57 @@
 	c.close();
 </p>
 </div><!-- END: 6.13 - juneau-config.ClosingConfigs -->
+
+<!-- ==================================================================================================== -->
+
+<h3 class='topic new' onclick='toggle(this)'><a href='#juneau-config.SystemDefaultConfig' id='juneau-config.SystemDefaultConfig'>6.14 - System Default Config</a></h3>
+<div class='topic'><!-- START: 6.14 - juneau-config.SystemDefaultConfig -->
+<p>
+	Each JVM has a system default config.  This is a configuration file that serves as the default
+	configuration for the system.  It's accessed using the following static methods:
+</p>
+<ul class='doctree'>
+	<li class='jc'>{@link org.apache.juneau.config.Config}
+	<ul>
+		<li class='jm'>{@link org.apache.juneau.config.Config#getSystemDefault() getSystemDefault()}
+		<li class='jm'>{@link org.apache.juneau.config.Config#setSystemDefault(Config) setSystemDefault(Config)}
+	</ul>
+</ul>
+<p>
+	If you do not specify a system default config, one will be automatically searched for.
+	The search is done in the following order:
+</p>
+<ol class='spaced-list'>
+	<li>
+		If the system property <js>"juneau.configFile"</js> is set, we search for this file in first the home
+		directory and then the classpath.
+	<li>
+		In the home directory:
+		<ol>
+			<li><code>&lt;jar-name&gt;.cfg</code>
+			<li>Any file that end with <code>.cfg</code>.  First one matched alphabetically is used.
+		</ol>
+	<li>
+		In the context classpath (i.e. inside the jar itself):
+		<ol>
+			<li><code>&lt;jar-name&gt;.cfg</code>
+			<li><code>juneau.cfg</code>
+			<li><code>default.cfg</code>
+		</ol>
+</ol>
+<p>
+	Later in the section on REST resources, we describe how to associate configurations with REST resources
+	using the {@link org.apache.juneau.rest.annotation.RestResource#config() @RestResource(config)} annotation.
+	The system default configuration can be referenced with the keyword <code>SYSTEM_DEFAULT</code> like so:
+</p>
+<p class='bpcode w800'>
+	<jc>// Always use system default.</jc>
+	<ja>@RestResource</ja>(config=<js>"SYSTEM_DEFAULT"</js>)
+
+	<jc>// Use system property if set or the system default if not.</jc>
+	<ja>@RestResource</ja>(config=<js>"$S{juneau.configFile,SYSTEM_DEFAULT}"</js>)
+</p>
+</div><!-- END: 6.14 - juneau-config.SystemDefaultConfig -->
 </div><!-- END: 6 - juneau-config -->
 
 <!-- ==================================================================================================== -->
@@ -21299,8 +21386,46 @@
 
 <!-- ==================================================================================================== -->
 
-<h2 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client' id='juneau-rest-client'>9 - juneau-rest-client</a></h2>
-<div class='topic'><!-- START: 9 - juneau-rest-client -->
+<h2 class='topic todo' onclick='toggle(this)'><a href='#juneau-rest-server-springboot' id='juneau-rest-server-springboot'>9 - juneau-rest-server-springboot</a></h2>
+<div class='topic'><!-- START: 9 - juneau-rest-server-springboot -->
+<h5 class='figure'>Maven Dependency</h5>
+<p class='bpcode w500'>
+	<xt>&lt;dependency&gt;</xt>
+		<xt>&lt;groupId&gt;</xt>org.apache.juneau<xt>&lt;/groupId&gt;</xt>
+		<xt>&lt;artifactId&gt;</xt>juneau-rest-server-springboot<xt>&lt;/artifactId&gt;</xt>
+		<xt>&lt;version&gt;</xt>{@property juneauVersion}<xt>&lt;/version&gt;</xt>
+	<xt>&lt;/dependency&gt;</xt>
+</p>	
+
+<h5 class='figure'>Java Library</h5>
+<p class='bpcode w500'>
+	juneau-rest-server-springboot-{@property juneauVersion}.jar 
+</p>	
+
+<h5 class='figure'>OSGi Module</h5>
+<p class='bpcode w500'>
+	org.apache.juneau.rest.springboot_{@property juneauVersion}.jar 
+</p>	
+
+<p>
+	The <code>juneau-rest-server-springboot</code> library provides classes to make it easy to deploy Juneau
+	REST resources within the Spring Boot framework.
+</p>
+
+<!-- ==================================================================================================== -->
+
+<h3 class='topic todo' onclick='toggle(this)'><a href='#juneau-rest-server-springboot.TODO' id='juneau-rest-server-springboot.TODO'>9.1 - TODO</a></h3>
+<div class='topic'><!-- START: 9.1 - juneau-rest-server-springboot.TODO -->
+<p>
+	TODO
+</p>
+</div><!-- END: 9.1 - juneau-rest-server-springboot.TODO -->
+</div><!-- END: 9 - juneau-rest-server-springboot -->
+
+<!-- ==================================================================================================== -->
+
+<h2 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client' id='juneau-rest-client'>10 - juneau-rest-client</a></h2>
+<div class='topic'><!-- START: 10 - juneau-rest-client -->
 <h5 class='figure'>Maven Dependency</h5>
 <p class='bpcode w500'>
 	<xt>&lt;dependency&gt;</xt>
@@ -21488,8 +21613,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies' id='juneau-rest-client.RestProxies'>9.1 - REST Proxies</a></h3>
-<div class='topic'><!-- START: 9.1 - juneau-rest-client.RestProxies -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies' id='juneau-rest-client.RestProxies'>10.1 - REST Proxies</a></h3>
+<div class='topic'><!-- START: 10.1 - juneau-rest-client.RestProxies -->
 <p>
 	The <code>juneau-rest-client</code> library can also be used to define interface proxies against 3rd-party REST interfaces.
 	<br>This is an extremely powerful feature that allows you to quickly define easy-to-use interfaces against 
@@ -21566,8 +21691,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.RemoteResource' id='juneau-rest-client.RestProxies.RemoteResource'>9.1.1 - @RemoteResource</a></h4>
-<div class='topic'><!-- START: 9.1.1 - juneau-rest-client.RestProxies.RemoteResource -->
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.RemoteResource' id='juneau-rest-client.RestProxies.RemoteResource'>10.1.1 - @RemoteResource</a></h4>
+<div class='topic'><!-- START: 10.1.1 - juneau-rest-client.RestProxies.RemoteResource -->
 <p>
 	The {@link org.apache.juneau.rest.client.remote.RemoteResource @RemoteResource} annotation is used on your interface class
 	to identify it as a REST proxy interface.
@@ -21622,12 +21747,12 @@
 	RestClient client = RestClient.<jsm>create</jsm>().json().rootUrl(<js>"http://localhost:10000/petstore"</js>).build();	
 	PetStore p = client.getRemoteResource(PetStore.<jk>class</jk>);
 </p>
-</div><!-- END: 9.1.1 - juneau-rest-client.RestProxies.RemoteResource -->
+</div><!-- END: 10.1.1 - juneau-rest-client.RestProxies.RemoteResource -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.RemoteMethod' id='juneau-rest-client.RestProxies.RemoteMethod'>9.1.2 - @RemoteMethod</a></h4>
-<div class='topic'><!-- START: 9.1.2 - juneau-rest-client.RestProxies.RemoteMethod -->
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.RemoteMethod' id='juneau-rest-client.RestProxies.RemoteMethod'>10.1.2 - @RemoteMethod</a></h4>
+<div class='topic'><!-- START: 10.1.2 - juneau-rest-client.RestProxies.RemoteMethod -->
 <p>
 	The {@link org.apache.juneau.rest.client.remote.RemoteMethod @RemoteMethod} annotation is applied to methods
 	of <ja>@RemoteResource</ja>-annotated interfaces to identify REST endpoints.
@@ -21777,12 +21902,12 @@
 	If your <code>RestClient</code> does not have a parser associated with it, then the value is converted directly from a String using
 	the rules defined in {@doc PojosConveribleToStrings}. 
 </p>
-</div><!-- END: 9.1.2 - juneau-rest-client.RestProxies.RemoteMethod -->
+</div><!-- END: 10.1.2 - juneau-rest-client.RestProxies.RemoteMethod -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.Body' id='juneau-rest-client.RestProxies.Body'>9.1.3 - @Body</a></h4>
-<div class='topic'><!-- START: 9.1.3 - juneau-rest-client.RestProxies.Body -->
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.Body' id='juneau-rest-client.RestProxies.Body'>10.1.3 - @Body</a></h4>
+<div class='topic'><!-- START: 10.1.3 - juneau-rest-client.RestProxies.Body -->
 <p>
 	The {@link org.apache.juneau.http.annotation.Body @Body} annotation can be applied to arguments of <ja>@RemoteMethod</ja>-annotated methods
 	to denote that they are the HTTP body of the request.
@@ -21872,12 +21997,12 @@
 	If your <code>RestClient</code> class does not have a serializer associated with it, the body will automatically be serialized to a 
 	string using the rules defined in {@doc PojosConveribleToStrings}.
 </p>
-</div><!-- END: 9.1.3 - juneau-rest-client.RestProxies.Body -->
+</div><!-- END: 10.1.3 - juneau-rest-client.RestProxies.Body -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.FormData' id='juneau-rest-client.RestProxies.FormData'>9.1.4 - @FormData</a></h4>
-<div class='topic'><!-- START: 9.1.4 - juneau-rest-client.RestProxies.FormData -->
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.FormData' id='juneau-rest-client.RestProxies.FormData'>10.1.4 - @FormData</a></h4>
+<div class='topic'><!-- START: 10.1.4 - juneau-rest-client.RestProxies.FormData -->
 <p>
 	The {@link org.apache.juneau.http.annotation.FormData @FormData} annotation can be applied to arguments of <ja>@RemoteMethod</ja>-annotated methods
 	to denote that they are form-data parameters on the request.
@@ -21980,12 +22105,12 @@
 <ul>
 	<li class='link'>{@doc juneau-marshall.OpenApiDetails.Serializers}
 </ul>
-</div><!-- END: 9.1.4 - juneau-rest-client.RestProxies.FormData -->
+</div><!-- END: 10.1.4 - juneau-rest-client.RestProxies.FormData -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.Query' id='juneau-rest-client.RestProxies.Query'>9.1.5 - @Query</a></h4>
-<div class='topic'><!-- START: 9.1.5 - juneau-rest-client.RestProxies.Query -->
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.Query' id='juneau-rest-client.RestProxies.Query'>10.1.5 - @Query</a></h4>
+<div class='topic'><!-- START: 10.1.5 - juneau-rest-client.RestProxies.Query -->
 <p>
 	The {@link org.apache.juneau.http.annotation.Query @Query} annotation can be applied to arguments of <ja>@RemoteMethod</ja>-annotated methods
 	to denote that they are query parameters on the request.
@@ -22091,12 +22216,12 @@
 <ul>
 	<li class='link'>{@doc juneau-marshall.OpenApiDetails.Serializers}
 </ul>
-</div><!-- END: 9.1.5 - juneau-rest-client.RestProxies.Query -->
+</div><!-- END: 10.1.5 - juneau-rest-client.RestProxies.Query -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.Header' id='juneau-rest-client.RestProxies.Header'>9.1.6 - @Header</a></h4>
-<div class='topic'><!-- START: 9.1.6 - juneau-rest-client.RestProxies.Header -->
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.Header' id='juneau-rest-client.RestProxies.Header'>10.1.6 - @Header</a></h4>
+<div class='topic'><!-- START: 10.1.6 - juneau-rest-client.RestProxies.Header -->
 <p>
 	The {@link org.apache.juneau.http.annotation.Header @Header} annotation can be applied to arguments of <ja>@RemoteMethod</ja>-annotated methods
 	to denote that they are header parameters on the request.
@@ -22188,12 +22313,12 @@
 <ul>
 	<li class='link'>{@doc juneau-marshall.OpenApiDetails.Serializers}
 </ul>
-</div><!-- END: 9.1.6 - juneau-rest-client.RestProxies.Header -->
+</div><!-- END: 10.1.6 - juneau-rest-client.RestProxies.Header -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.Path' id='juneau-rest-client.RestProxies.Path'>9.1.7 - @Path</a></h4>
-<div class='topic'><!-- START: 9.1.7 - juneau-rest-client.RestProxies.Path -->
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.Path' id='juneau-rest-client.RestProxies.Path'>10.1.7 - @Path</a></h4>
+<div class='topic'><!-- START: 10.1.7 - juneau-rest-client.RestProxies.Path -->
 <p>
 	The {@link org.apache.juneau.http.annotation.Path @Path} annotation can be applied to arguments of <ja>@RemoteMethod</ja>-annotated methods
 	to denote that they are path parameters on the request.
@@ -22278,12 +22403,12 @@
 <ul>
 	<li class='link'>{@doc juneau-marshall.OpenApiDetails.Serializers}
 </ul>
-</div><!-- END: 9.1.7 - juneau-rest-client.RestProxies.Path -->
+</div><!-- END: 10.1.7 - juneau-rest-client.RestProxies.Path -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.Request' id='juneau-rest-client.RestProxies.Request'>9.1.8 - @Request</a></h4>
-<div class='topic'><!-- START: 9.1.8 - juneau-rest-client.RestProxies.Request -->
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.Request' id='juneau-rest-client.RestProxies.Request'>10.1.8 - @Request</a></h4>
+<div class='topic'><!-- START: 10.1.8 - juneau-rest-client.RestProxies.Request -->
 <p>
 	The {@link org.apache.juneau.http.annotation.Request @Request} annotation can be applied to a type of a <ja>@RemoteMethod</ja>-annotated method 
 	to identify it as a bean for setting HTTP parts through a bean-like interface.
@@ -22397,12 +22522,12 @@
 	 	}
 	}
 </p>
-</div><!-- END: 9.1.8 - juneau-rest-client.RestProxies.Request -->
+</div><!-- END: 10.1.8 - juneau-rest-client.RestProxies.Request -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.Response' id='juneau-rest-client.RestProxies.Response'>9.1.9 - @Response</a></h4>
-<div class='topic'><!-- START: 9.1.9 - juneau-rest-client.RestProxies.Response -->
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.Response' id='juneau-rest-client.RestProxies.Response'>10.1.9 - @Response</a></h4>
+<div class='topic'><!-- START: 10.1.9 - juneau-rest-client.RestProxies.Response -->
 <p>
 	The {@link org.apache.juneau.http.annotation.Response @Response} annotation can be applied to types returned by <ja>@RemoteMethod</ja>-annotated methods.
 </p>
@@ -22460,12 +22585,12 @@
 <p>
 	The behavior and functionality of all of the annotations are the same as if they were used on method arguments directly. This means full support for OpenAPI serialization and validation.
 </p>
-</div><!-- END: 9.1.9 - juneau-rest-client.RestProxies.Response -->
+</div><!-- END: 10.1.9 - juneau-rest-client.RestProxies.Response -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic new' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.DualPurposeInterfaces' id='juneau-rest-client.RestProxies.DualPurposeInterfaces'>9.1.10 - Dual-purpose (end-to-end) interfaces</a></h4>
-<div class='topic'><!-- START: 9.1.10 - juneau-rest-client.RestProxies.DualPurposeInterfaces -->
+<h4 class='topic new' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.DualPurposeInterfaces' id='juneau-rest-client.RestProxies.DualPurposeInterfaces'>10.1.10 - Dual-purpose (end-to-end) interfaces</a></h4>
+<div class='topic'><!-- START: 10.1.10 - juneau-rest-client.RestProxies.DualPurposeInterfaces -->
 <p>
 	A common coding practice is to use the same Java interface to define both your server and client side REST interfaces.
 	The advantage to this approach is that changes that you make to your REST interface can be reflected in both places
@@ -22564,13 +22689,13 @@
 	Note how we didn't need to use the <ja>@Header</ja> and <ja>@Path</ja> annotations in our implementation since
 	the annotations were inherited from the interface.
 </p>
-</div><!-- END: 9.1.10 - juneau-rest-client.RestProxies.DualPurposeInterfaces -->
-</div><!-- END: 9.1 - juneau-rest-client.RestProxies -->
+</div><!-- END: 10.1.10 - juneau-rest-client.RestProxies.DualPurposeInterfaces -->
+</div><!-- END: 10.1 - juneau-rest-client.RestProxies -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.SSL' id='juneau-rest-client.SSL'>9.2 - SSL Support</a></h3>
-<div class='topic'><!-- START: 9.2 - juneau-rest-client.SSL -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.SSL' id='juneau-rest-client.SSL'>10.2 - SSL Support</a></h3>
+<div class='topic'><!-- START: 10.2 - juneau-rest-client.SSL -->
 <p>
 	The simplest way to enable SSL support in the client is to use the 
 	{@link org.apache.juneau.rest.client.RestClientBuilder#enableLaxSSL()} method.
@@ -22604,12 +22729,12 @@
 <p>
 	SSL support can also be enabled by passing in your own connection manager using {@link org.apache.juneau.rest.client.RestClientBuilder#httpClientConnectionManager(HttpClientConnectionManager)}.
 </p>
-</div><!-- END: 9.2 - juneau-rest-client.SSL -->
+</div><!-- END: 10.2 - juneau-rest-client.SSL -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.Authentication' id='juneau-rest-client.Authentication'>9.3 - Authentication</a></h3>
-<div class='topic'><!-- START: 9.3 - juneau-rest-client.Authentication -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.Authentication' id='juneau-rest-client.Authentication'>10.3 - Authentication</a></h3>
+<div class='topic'><!-- START: 10.3 - juneau-rest-client.Authentication -->
 <p>
 	The Juneau REST client itself does not implement any support for authentication.  
 	Instead, it delegates it to the underlying Apache HTTP Client interface.
@@ -22620,8 +22745,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.Authentication.BASIC' id='juneau-rest-client.Authentication.BASIC'>9.3.1 - BASIC Authentication</a></h4>
-<div class='topic'><!-- START: 9.3.1 - juneau-rest-client.Authentication.BASIC -->
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.Authentication.BASIC' id='juneau-rest-client.Authentication.BASIC'>10.3.1 - BASIC Authentication</a></h4>
+<div class='topic'><!-- START: 10.3.1 - juneau-rest-client.Authentication.BASIC -->
 <p>
 	The {@link org.apache.juneau.rest.client.RestClientBuilder#basicAuth(String,int,String,String)} method 
 	can be used to quickly enable BASIC authentication support.
@@ -22645,12 +22770,12 @@
 	p.setCredentials(scope, up);
 	builder.setDefaultCredentialsProvider(p);
 </p>
-</div><!-- END: 9.3.1 - juneau-rest-client.Authentication.BASIC -->
+</div><!-- END: 10.3.1 - juneau-rest-client.Authentication.BASIC -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.Authentication.FORM' id='juneau-rest-client.Authentication.FORM'>9.3.2 - FORM-based Authentication</a></h4>
-<div class='topic'><!-- START: 9.3.2 - juneau-rest-client.Authentication.FORM -->
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.Authentication.FORM' id='juneau-rest-client.Authentication.FORM'>10.3.2 - FORM-based Authentication</a></h4>
+<div class='topic'><!-- START: 10.3.2 - juneau-rest-client.Authentication.FORM -->
 <p>
 	The {@link org.apache.juneau.rest.client.RestClientBuilder} class does not itself provide FORM-based 
 	authentication since there is no standard way of providing such support. 
@@ -22734,12 +22859,12 @@
 		}
 	}
 </p>
-</div><!-- END: 9.3.2 - juneau-rest-client.Authentication.FORM -->
+</div><!-- END: 10.3.2 - juneau-rest-client.Authentication.FORM -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.Authentication.OIDC' id='juneau-rest-client.Authentication.OIDC'>9.3.3 - OIDC Authentication</a></h4>
-<div class='topic'><!-- START: 9.3.3 - juneau-rest-client.Authentication.OIDC -->
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.Authentication.OIDC' id='juneau-rest-client.Authentication.OIDC'>10.3.3 - OIDC Authentication</a></h4>
+<div class='topic'><!-- START: 10.3.3 - juneau-rest-client.Authentication.OIDC -->
 <p>
 	The following example shows how the <code>JazzRestClient</code> class provides OIDC authentication 
 	support.
@@ -22862,13 +22987,13 @@
 		}
 	}
 </p>
-</div><!-- END: 9.3.3 - juneau-rest-client.Authentication.OIDC -->
-</div><!-- END: 9.3 - juneau-rest-client.Authentication -->
+</div><!-- END: 10.3.3 - juneau-rest-client.Authentication.OIDC -->
+</div><!-- END: 10.3 - juneau-rest-client.Authentication -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.ResponsePatterns' id='juneau-rest-client.ResponsePatterns'>9.4 - Using Response Patterns</a></h3>
-<div class='topic'><!-- START: 9.4 - juneau-rest-client.ResponsePatterns -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.ResponsePatterns' id='juneau-rest-client.ResponsePatterns'>10.4 - Using Response Patterns</a></h3>
+<div class='topic'><!-- START: 10.4 - juneau-rest-client.ResponsePatterns -->
 <p>
 	One issue with REST (and HTTP in general) is that the HTTP response code must be set as a header before the 
 	body of the request is sent.  
@@ -22958,12 +23083,12 @@
 	use {@link org.apache.juneau.rest.client.RestCall#getCapturedResponse()} since this method will not absorb 
 	the response for those other methods.
 </p>
-</div><!-- END: 9.4 - juneau-rest-client.ResponsePatterns -->
+</div><!-- END: 10.4 - juneau-rest-client.ResponsePatterns -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.PipingOutput' id='juneau-rest-client.PipingOutput'>9.5 - Piping Response Output</a></h3>
-<div class='topic'><!-- START: 9.5 - juneau-rest-client.PipingOutput -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.PipingOutput' id='juneau-rest-client.PipingOutput'>10.5 - Piping Response Output</a></h3>
+<div class='topic'><!-- START: 10.5 - juneau-rest-client.PipingOutput -->
 <p>
 	The {@link org.apache.juneau.rest.client.RestCall} class provides various convenience <code>pipeTo()</code> 
 	methods to pipe output to output streams and writers.
@@ -22981,12 +23106,12 @@
 	<jc>// Pipe output from REST call to System.out in real-time.</jc>
 	restClient.doPost(<jsf>URL</jsf>).byLines().pipeTo(<jk>new</jk> PrintWriter(System.<jk>out</jk>)).run();
 </p>
-</div><!-- END: 9.5 - juneau-rest-client.PipingOutput -->
+</div><!-- END: 10.5 - juneau-rest-client.PipingOutput -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.Debugging' id='juneau-rest-client.Debugging'>9.6 - Debugging</a></h3>
-<div class='topic'><!-- START: 9.6 - juneau-rest-client.Debugging -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.Debugging' id='juneau-rest-client.Debugging'>10.6 - Debugging</a></h3>
+<div class='topic'><!-- START: 10.6 - juneau-rest-client.Debugging -->
 <p>
 	Use the {@link org.apache.juneau.rest.client.RestClientBuilder#debug()} method to enable logging for HTTP requests
 	made from the client.
@@ -23040,12 +23165,12 @@
 	{"foo":"bar","baz":123}
 	=== END ========================================================================
 </p>
-</div><!-- END: 9.6 - juneau-rest-client.Debugging -->
+</div><!-- END: 10.6 - juneau-rest-client.Debugging -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.Logging' id='juneau-rest-client.Logging'>9.7 - Logging</a></h3>
-<div class='topic'><!-- START: 9.7 - juneau-rest-client.Logging -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.Logging' id='juneau-rest-client.Logging'>10.7 - Logging</a></h3>
+<div class='topic'><!-- START: 10.7 - juneau-rest-client.Logging -->
 <p>
 	Use the {@link org.apache.juneau.rest.client.RestClientBuilder#logTo(Level,Logger)} and 
 	{@link org.apache.juneau.rest.client.RestCall#logTo(Level,Logger)} methods to log HTTP calls.
@@ -23064,12 +23189,12 @@
 	Customized logging can be handled by sub-classing the {@link org.apache.juneau.rest.client.RestCallLogger} 
 	class and using the  {@link org.apache.juneau.rest.client.RestCall#interceptor(RestCallInterceptor)} method.
 </p>
-</div><!-- END: 9.7 - juneau-rest-client.Logging -->
+</div><!-- END: 10.7 - juneau-rest-client.Logging -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.Interceptors' id='juneau-rest-client.Interceptors'>9.8 - Interceptors</a></h3>
-<div class='topic'><!-- START: 9.8 - juneau-rest-client.Interceptors -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.Interceptors' id='juneau-rest-client.Interceptors'>10.8 - Interceptors</a></h3>
+<div class='topic'><!-- START: 10.8 - juneau-rest-client.Interceptors -->
 <p>
 	The {@link org.apache.juneau.rest.client.RestClientBuilder#interceptors(RestCallInterceptor...)} and 
 	{@link org.apache.juneau.rest.client.RestCall#interceptor(RestCallInterceptor)} methods can be used to 
@@ -23168,12 +23293,12 @@
 		}
 	}
 </p>
-</div><!-- END: 9.8 - juneau-rest-client.Interceptors -->
+</div><!-- END: 10.8 - juneau-rest-client.Interceptors -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.UnitTesting' id='juneau-rest-client.UnitTesting'>9.9 - Serverless Unit Testing</a></h3>
-<div class='topic'><!-- START: 9.9 - juneau-rest-client.UnitTesting -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.UnitTesting' id='juneau-rest-client.UnitTesting'>10.9 - Serverless Unit Testing</a></h3>
+<div class='topic'><!-- START: 10.9 - juneau-rest-client.UnitTesting -->
 <p>
 	The {@link org.apache.juneau.rest.mock.MockRest} class is used for performing serverless unit testing of REST interfaces.
 </p>
@@ -23252,12 +23377,12 @@
 		<jsm>assertEquals</jsm>(123, r.echoQuery(123));
 	}
 </p>
-</div><!-- END: 9.9 - juneau-rest-client.UnitTesting -->
+</div><!-- END: 10.9 - juneau-rest-client.UnitTesting -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.Other' id='juneau-rest-client.Other'>9.10 - Other Useful Methods</a></h3>
-<div class='topic'><!-- START: 9.10 - juneau-rest-client.Other -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-rest-client.Other' id='juneau-rest-client.Other'>10.10 - Other Useful Methods</a></h3>
+<div class='topic'><!-- START: 10.10 - juneau-rest-client.Other -->
 <p>
 	The {@link org.apache.juneau.rest.client.RestClientBuilder#rootUrl(Object)} method can be used to specify a 
 	root URL on all requests so that you don't have to use absolute paths on individual calls.
@@ -23294,13 +23419,13 @@
 		.retryable(180, 10000, RetryOn.<jsf>DEFAULT</jsf>)
 		.run();
 </p>
-</div><!-- END: 9.10 - juneau-rest-client.Other -->
-</div><!-- END: 9 - juneau-rest-client -->
+</div><!-- END: 10.10 - juneau-rest-client.Other -->
+</div><!-- END: 10 - juneau-rest-client -->
 
 <!-- ==================================================================================================== -->
 
-<h2 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-server' id='juneau-microservice-server'>10 - juneau-microservice-server</a></h2>
-<div class='topic'><!-- START: 10 - juneau-microservice-server -->
+<h2 class='topic todo' onclick='toggle(this)'><a href='#juneau-microservice-core' id='juneau-microservice-core'>11 - juneau-microservice-server</a></h2>
+<div class='topic'><!-- START: 11 - juneau-microservice-core -->
 <h5 class='figure'>Maven Dependency</h5>
 <p class='bpcode w500'>
 	<xt>&lt;dependency&gt;</xt>
@@ -23332,8 +23457,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-server.Introduction' id='juneau-microservice-server.Introduction'>10.1 - Microservice Introduction</a></h3>
-<div class='topic'><!-- START: 10.1 - juneau-microservice-server.Introduction -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-core.Introduction' id='juneau-microservice-core.Introduction'>11.1 - Microservice Introduction</a></h3>
+<div class='topic'><!-- START: 11.1 - juneau-microservice-core.Introduction -->
 <p>
 	The Microservice API consists of a combination of the Juneau Core, Server, and Client APIs and an embedded
 	Eclipse Jetty Servlet Container.  
@@ -23373,12 +23498,12 @@
 				other features such as logging.  
 		</ul>
 </ul>
-</div><!-- END: 10.1 - juneau-microservice-server.Introduction -->
+</div><!-- END: 11.1 - juneau-microservice-core.Introduction -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-server.GettingStarted' id='juneau-microservice-server.GettingStarted'>10.2 - Getting Started</a></h3>
-<div class='topic'><!-- START: 10.2 - juneau-microservice-server.GettingStarted -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-core.GettingStarted' id='juneau-microservice-core.GettingStarted'>11.2 - Getting Started</a></h3>
+<div class='topic'><!-- START: 11.2 - juneau-microservice-core.GettingStarted -->
 <p>
 	The <l>my-microservice.zip</l> file is a zipped eclipse project that includes everything you 
 	need to create a REST microservice in an Eclipse workspace.
@@ -23386,8 +23511,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-server.GettingStarted.Installing' id='juneau-microservice-server.GettingStarted.Installing'>10.2.1 - Installing in Eclipse</a></h4>
-<div class='topic'><!-- START: 10.2.1 - juneau-microservice-server.GettingStarted.Installing -->
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-core.GettingStarted.Installing' id='juneau-microservice-core.GettingStarted.Installing'>11.2.1 - Installing in Eclipse</a></h4>
+<div class='topic'><!-- START: 11.2.1 - juneau-microservice-core.GettingStarted.Installing -->
 <p>
 	Follow these instructions to create a new template project in Eclipse.
 </p>		
@@ -23597,12 +23722,12 @@
 <p>
 	At this point, you're ready to start the microservice from your workspace.
 </p>
-</div><!-- END: 10.2.1 - juneau-microservice-server.GettingStarted.Installing -->
+</div><!-- END: 11.2.1 - juneau-microservice-core.GettingStarted.Installing -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-server.GettingStarted.Running' id='juneau-microservice-server.GettingStarted.Running'>10.2.2 - Running in Eclipse</a></h4>
-<div class='topic'><!-- START: 10.2.2 - juneau-microservice-server.GettingStarted.Running -->
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-core.GettingStarted.Running' id='juneau-microservice-core.GettingStarted.Running'>11.2.2 - Running in Eclipse</a></h4>
+<div class='topic'><!-- START: 11.2.2 - juneau-microservice-core.GettingStarted.Running -->
 <p>
 	The <l>my-microservice.launch</l> file is already provided to allow you to quickly start
 	your new microservice.
@@ -23634,12 +23759,12 @@
 	You have started a REST interface on port 10000.
 	<br>You can enter the command <code>exit</code> to shut it down.
 </p>
-</div><!-- END: 10.2.2 - juneau-microservice-server.GettingStarted.Running -->
+</div><!-- END: 11.2.2 - juneau-microservice-core.GettingStarted.Running -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-server.GettingStarted.Building' id='juneau-microservice-server.GettingStarted.Building'>10.2.3 - Building and Running from Command-Line</a></h4>
-<div class='topic'><!-- START: 10.2.3 - juneau-microservice-server.GettingStarted.Building -->
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-core.GettingStarted.Building' id='juneau-microservice-core.GettingStarted.Building'>11.2.3 - Building and Running from Command-Line</a></h4>
+<div class='topic'><!-- START: 11.2.3 - juneau-microservice-core.GettingStarted.Building -->
 <p>
 	The <l>pom.xml</l> file is a basic Maven build script for creating your microservice
 	as an executable uber-jar.
@@ -23682,13 +23807,13 @@
 	If you get this error message: <code class='snippet'>java.net.BindException: Address already in use</code>, 
 	then this microservice is already running elsewhere and so it cannot bind to port 10000.
 </p>
-</div><!-- END: 10.2.3 - juneau-microservice-server.GettingStarted.Building -->
-</div><!-- END: 10.2 - juneau-microservice-server.GettingStarted -->
+</div><!-- END: 11.2.3 - juneau-microservice-core.GettingStarted.Building -->
+</div><!-- END: 11.2 - juneau-microservice-core.GettingStarted -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-server.Manifest' id='juneau-microservice-server.Manifest'>10.3 - Manifest File</a></h3>
-<div class='topic'><!-- START: 10.3 - juneau-microservice-server.Manifest -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-core.Manifest' id='juneau-microservice-core.Manifest'>11.3 - Manifest File</a></h3>
+<div class='topic'><!-- START: 11.3 - juneau-microservice-core.Manifest -->
 <p>
 	The generated <l>META-INF/MANIFEST.MF</l> file is used to describe the microservice. 
 	<br>If you open it, you'll see the following:
@@ -23712,8 +23837,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-server.Manifest.ManifestApi' id='juneau-microservice-server.Manifest.ManifestApi'>10.3.1 - Manifest API</a></h4>
-<div class='topic'><!-- START: 10.3.1 - juneau-microservice-server.Manifest.ManifestApi -->
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-core.Manifest.ManifestApi' id='juneau-microservice-core.Manifest.ManifestApi'>11.3.1 - Manifest API</a></h4>
+<div class='topic'><!-- START: 11.3.1 - juneau-microservice-core.Manifest.ManifestApi -->
 <p>
 	The {@link org.apache.juneau.microservice.Microservice#getManifest()} method is a static method that
 	can be used to retrieve the manifest file as a {@link org.apache.juneau.utils.ManifestFile}.  
@@ -23727,13 +23852,13 @@
 	making it possible to retrieve entries as a wide variety of object types such as java primitives, arrays, collections, 
 	maps, or even POJOs serialized as JSON.
 </p>
-</div><!-- END: 10.3.1 - juneau-microservice-server.Manifest.ManifestApi -->
-</div><!-- END: 10.3 - juneau-microservice-server.Manifest -->
+</div><!-- END: 11.3.1 - juneau-microservice-core.Manifest.ManifestApi -->
+</div><!-- END: 11.3 - juneau-microservice-core.Manifest -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-server.Config' id='juneau-microservice-server.Config'>10.4 - Config</a></h3>
-<div class='topic'><!-- START: 10.4 - juneau-microservice-server.Config -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-core.Config' id='juneau-microservice-core.Config'>11.4 - Config</a></h3>
+<div class='topic'><!-- START: 11.4 - juneau-microservice-core.Config -->
 <p>
 	The microservice config file is an external INI-style configuration file that is used to configure
 	your microservice.
@@ -23745,8 +23870,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-server.Config.ConfigApi' id='juneau-microservice-server.Config.ConfigApi'>10.4.1 - Config File API</a></h4>
-<div class='topic'><!-- START: 10.4.1 - juneau-microservice-server.Config.ConfigApi -->
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-core.Config.ConfigApi' id='juneau-microservice-core.Config.ConfigApi'>11.4.1 - Config File API</a></h4>
+<div class='topic'><!-- START: 11.4.1 - juneau-microservice-core.Config.ConfigApi -->
 <p>
 	There are 3 primary ways of getting access to the config file.
 </p>
@@ -23859,13 +23984,13 @@
 	This particular example is needlessly complex, but it gives an idea of how variables can be used 
 	recursively to produce sophisticated results
 </p>
-</div><!-- END: 10.4.1 - juneau-microservice-server.Config.ConfigApi -->
-</div><!-- END: 10.4 - juneau-microservice-server.Config -->
+</div><!-- END: 11.4.1 - juneau-microservice-core.Config.ConfigApi -->
+</div><!-- END: 11.4 - juneau-microservice-core.Config -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-server.ResourceClasses' id='juneau-microservice-server.ResourceClasses'>10.5 - Resource Classes</a></h3>
-<div class='topic'><!-- START: 10.5 - juneau-microservice-server.ResourceClasses -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-core.ResourceClasses' id='juneau-microservice-core.ResourceClasses'>11.5 - Resource Classes</a></h3>
+<div class='topic'><!-- START: 11.5 - juneau-microservice-core.ResourceClasses -->
 <p>
 	Now let's take a look at the resource classes themselves.  
 	<br>The top-level page...
@@ -23934,12 +24059,12 @@
 		}
 	}		
 </p>
-</div><!-- END: 10.5 - juneau-microservice-server.ResourceClasses -->
+</div><!-- END: 11.5 - juneau-microservice-core.ResourceClasses -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-server.PredefinedResourceClasses' id='juneau-microservice-server.PredefinedResourceClasses'>10.6 - Predefined Resource Classes</a></h3>
-<div class='topic'><!-- START: 10.6 - juneau-microservice-server.PredefinedResourceClasses -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-core.PredefinedResourceClasses' id='juneau-microservice-core.PredefinedResourceClasses'>11.6 - Predefined Resource Classes</a></h3>
+<div class='topic'><!-- START: 11.6 - juneau-microservice-core.PredefinedResourceClasses -->
 <p>
 	The following predefined resource classes are also provided for easy inclusion into your microservice:
 </p>
@@ -23955,12 +24080,12 @@
 	<li class='jc'>{@link org.apache.juneau.microservice.resources.ShutdownResource}
 		- Shutdown and/or restart the JVM.
 </ul>
-</div><!-- END: 10.6 - juneau-microservice-server.PredefinedResourceClasses -->
+</div><!-- END: 11.6 - juneau-microservice-core.PredefinedResourceClasses -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-server.RestMicroservice' id='juneau-microservice-server.RestMicroservice'>10.7 - RestMicroservice</a></h3>
-<div class='topic'><!-- START: 10.7 - juneau-microservice-server.RestMicroservice -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-core.RestMicroservice' id='juneau-microservice-core.RestMicroservice'>11.7 - RestMicroservice</a></h3>
+<div class='topic'><!-- START: 11.7 - juneau-microservice-core.RestMicroservice -->
 <p>
 	The {@link org.apache.juneau.microservice.RestMicroservice} class is the main application entry-point for REST 
 	microservices. 
@@ -23987,8 +24112,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-server.RestMicroservice.Extending' id='juneau-microservice-server.RestMicroservice.Extending'>10.7.1 - Extending RestMicroservice</a></h4>
-<div class='topic'><!-- START: 10.7.1 - juneau-microservice-server.RestMicroservice.Extending -->
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-core.RestMicroservice.Extending' id='juneau-microservice-core.RestMicroservice.Extending'>11.7.1 - Extending RestMicroservice</a></h4>
+<div class='topic'><!-- START: 11.7.1 - juneau-microservice-core.RestMicroservice.Extending -->
 <p>
 	This example shows how the {@link org.apache.juneau.microservice.RestMicroservice} class
 	can be extended to implement lifecycle listener methods or override existing methods.
@@ -24036,13 +24161,13 @@
 	<li class='jac'>{@link org.apache.juneau.microservice.Microservice}
 	<li class='jc'>{@link org.apache.juneau.microservice.RestMicroservice}
 </ul>
-</div><!-- END: 10.7.1 - juneau-microservice-server.RestMicroservice.Extending -->
-</div><!-- END: 10.7 - juneau-microservice-server.RestMicroservice -->
+</div><!-- END: 11.7.1 - juneau-microservice-core.RestMicroservice.Extending -->
+</div><!-- END: 11.7 - juneau-microservice-core.RestMicroservice -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-server.UiCustomization' id='juneau-microservice-server.UiCustomization'>10.8 - UI Customization</a></h3>
-<div class='topic'><!-- START: 10.8 - juneau-microservice-server.UiCustomization -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-core.UiCustomization' id='juneau-microservice-core.UiCustomization'>11.8 - UI Customization</a></h3>
+<div class='topic'><!-- START: 11.8 - juneau-microservice-core.UiCustomization -->
 <p>
 	The Microservice project contains a <code>files/htdocs</code> working directly folder with predefined stylesheets and
 	images.
@@ -24152,158 +24277,1050 @@
 	<ck>RestContext.useClasspathResourceCaching.b</ck> = <cv>false</cv>
 
 </p>
-</div><!-- END: 10.8 - juneau-microservice-server.UiCustomization -->
-</div><!-- END: 10 - juneau-microservice-server -->
+</div><!-- END: 11.8 - juneau-microservice-core.UiCustomization -->
+</div><!-- END: 11 - juneau-microservice-core -->
 
 <!-- ==================================================================================================== -->
 
-<h2 class='topic ' onclick='toggle(this)'><a href='#juneau-examples-core' id='juneau-examples-core'>11 - juneau-examples-core</a></h2>
-<div class='topic'><!-- START: 11 - juneau-examples-core -->
-<h5 class='figure'>Archive File</h5>
+<h2 class='topic todo' onclick='toggle(this)'><a href='#juneau-microservice-jetty' id='juneau-microservice-jetty'>12 - juneau-microservice-server</a></h2>
+<div class='topic'><!-- START: 12 - juneau-microservice-jetty -->
+<h5 class='figure'>Maven Dependency</h5>
 <p class='bpcode w500'>
-	juneau-examples-core-{@property juneauVersion}.zip 
+	<xt>&lt;dependency&gt;</xt>
+		<xt>&lt;groupId&gt;</xt>org.apache.juneau<xt>&lt;/groupId&gt;</xt>
+		<xt>&lt;artifactId&gt;</xt>juneau-microservice-server<xt>&lt;/artifactId&gt;</xt>
+		<xt>&lt;version&gt;</xt>{@property juneauVersion}<xt>&lt;/version&gt;</xt>
+	<xt>&lt;/dependency&gt;</xt>
 </p>	
 
-<p>
-	The <code>juneau-examples-core</code> project contains various code examples for using the core APIs. 
-</p>
-<p>
-	The project project can be loaded into your workspace by importing the 
-	<code>juneau-examples-core-{@property juneauVersion}.zip</code> file. 
-</p>
-
-<h5 class='topic'>juneau-examples-core install instructions</h5>
-<p>
-	Download the <code>juneau-examples-core-{@property juneauVersion}.zip</code> file from the downloads page
-	(located in the binaries) and import it into your workspace as an existing project:
-</p>
-<img class='bordered' src='doc-files/juneau-examples-core.1.png' style='width:512px'>
-<p>
-	Select the archive file and import the project:
-</p>
-<img class='bordered' src='doc-files/juneau-examples-core.2.png' style='width:523px'>
-<p>
-	Once loaded, you should see the following project structure:
-</p>
-<img class='bordered' src='doc-files/juneau-examples-core.3.png' style='width:459px'>
-
-<p>
-	The Core library samples are currently a work-in-progress so there's not much here yet.
-	This section will be updated as new code is added.
-</p>
-</div><!-- END: 11 - juneau-examples-core -->
-
-<!-- ==================================================================================================== -->
+<h5 class='figure'>Java Library</h5>
+<p class='bpcode w500'>
+	juneau-microservice-server-{@property juneauVersion}.jar 
+</p>	
 
-<h2 class='topic updated' onclick='toggle(this)'><a href='#juneau-examples-rest' id='juneau-examples-rest'>12 - juneau-examples-rest</a></h2>
-<div class='topic'><!-- START: 12 - juneau-examples-rest -->
-<h5 class='figure'>Archive File</h5>
+<h5 class='figure'>OSGi Module</h5>
 <p class='bpcode w500'>
-	juneau-examples-rest-{@property juneauVersion}.zip 
+	org.apache.juneau.microservice.server_{@property juneauVersion}.jar 
 </p>	
 
-<p>
-	The <code>juneau-examples-rest</code> project includes everything you need to start the Samples REST 
-	microservice in an Eclipse workspace.
-</p>
-<p>
-	This project is packaged as a Juneau Microservice project that allows REST resources to be started
-	using embedded Jetty.
+<h5 class='figure'>Microservice Starter Project</h5>
+<p class='bpcode w500'>
+	my-microservice.zip 
 </p>	
 
-<h5 class='topic'>juneau-examples-rest install instructions</h5>
-<p>
-	Download the <code>juneau-examples-rest-{@property juneauVersion}.zip</code> file from the downloads page
-	(located in the binaries) and import it into your workspace as an existing project:
-</p>
-<img class='bordered' src='doc-files/juneau-examples-rest.1.png' style='width:524px'>
 <p>
-	Select the archive file and import the project:
-</p>
-<img class='bordered' src='doc-files/juneau-examples-rest.2.png' style='width:523px'>
-<p>
-	Once loaded, you should see the following project structure:
-</p>
-<img class='bordered' src='doc-files/juneau-examples-rest.3.png' style='width:325px'>
-<p>
-	The microservice can be started from the <code>juneau-examples-rest.launch</code> file.
-	It will start up the microservice on port 10000 which you can then view through a browser:
+	Juneau Microservice is an API for creating stand-alone executable jars that can be used to 
+	start lightweight configurable REST interfaces with all the power of the Juneau REST server and client APIs.
 </p>
-<p class='bpcode w400'>
-	http://localhost:10000
-</p>			
-<img class='bordered w400' src='doc-files/juneau-examples-rest.4.png'>
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic updated' onclick='toggle(this)'><a href='#juneau-examples-rest.RootResources' id='juneau-examples-rest.RootResources'>12.1 - RootResources</a></h3>
-<div class='topic'><!-- START: 12.1 - juneau-examples-rest.RootResources -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-jetty.Introduction' id='juneau-microservice-jetty.Introduction'>12.1 - Microservice Introduction</a></h3>
+<div class='topic'><!-- START: 12.1 - juneau-microservice-jetty.Introduction -->
 <p>
-	The <l>RootResources</l> class is the main page for the REST microservice.
-	It serves as the jumping-off point for the other resources.
+	The Microservice API consists of a combination of the Juneau Core, Server, and Client APIs and an embedded
+	Eclipse Jetty Servlet Container.  
+	<br>It includes all libraries needed to execute in a Java 1.7+ environment.
 </p>
 <p>
-	The class hierarchy for this class is:
+	Features include:
+</p>
+<ul class='spaced-list'>
+	<li>
+		An out-of-the-box zipped Eclipse project to get started quickly.
+	<li>
+		Packaged as a simple executable jar and configuration file.
+	<li>
+		All the power of the Juneau ecosystem for defining REST servlets and clients with the ability to 
+		serialize and parse POJOs as HTML, JSON, XML, RDF, URL-Encoding, and others.
+	<li>
+		An extensible API that allows you to hook into various lifecycle events.
+	<li>
+		Simple-to-use APIs for accessing manifest file entries, command-line arguments, and external configuration 
+		file properties.
+	<li>
+		Predefined REST resources for configuring microservice and accessing log files.
+</ul>
+<p>
+	The <code>juneau-microservice-server</code> library consists of the following classes:
 </p>
 <ul class='doctree'>
 	<li class='jac'>
-		{@link org.apache.juneau.rest.RestServlet} - Contains all the REST servlet logic.
+		{@link org.apache.juneau.microservice.Microservice} 
+		- Defines basic lifecycle methods for microservices in general.
 		<ul>
-			<li class='jac'>
-				{@link org.apache.juneau.rest.BasicRestServlet} - Defines default serializers and parsers, and OPTIONs page logic.
-				<ul>
-					<li class='jac'>
-						{@link org.apache.juneau.rest.BasicRestServletGroup} - Specialized subclass for grouping other resources.
-						<ul>
-							<li class='jac'>
-								{@link org.apache.juneau.microservice.BasicRestServletJenaGroup} - Group resource with added RDF support.
-								<ul>
-									<li class='jc'>
-										<code>RootResources</code>
-								</ul>
-							</li>
-						</ul>
-					</li>
-				</ul>
-			</li>
+			<li class='jc'>
+				{@link org.apache.juneau.microservice.RestMicroservice}
+				- Defines additional lifecycle methods for REST microservices.
+				<br>Starts up an externally-configured Jetty server, registers servlets, and sets up 
+				other features such as logging.  
 		</ul>
-	</li>
 </ul>
+</div><!-- END: 12.1 - juneau-microservice-jetty.Introduction -->
+
+<!-- ==================================================================================================== -->
+
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-jetty.GettingStarted' id='juneau-microservice-jetty.GettingStarted'>12.2 - Getting Started</a></h3>
+<div class='topic'><!-- START: 12.2 - juneau-microservice-jetty.GettingStarted -->
 <p>
-	Pointing a browser to the resource shows the following:
+	The <l>my-microservice.zip</l> file is a zipped eclipse project that includes everything you 
+	need to create a REST microservice in an Eclipse workspace.
 </p>
-<p class='bpcode w800'>
-	http://localhost:10000
-</p>			
-<img class='bordered w800' src='doc-files/juneau-examples-rest.RootResources.1.png'>
+
+<!-- ==================================================================================================== -->
+
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-jetty.GettingStarted.Installing' id='juneau-microservice-jetty.GettingStarted.Installing'>12.2.1 - Installing in Eclipse</a></h4>
+<div class='topic'><!-- START: 12.2.1 - juneau-microservice-jetty.GettingStarted.Installing -->
 <p>
-	The <l>RootResources</l> class can also be defined as a servlet in a <l>web.xml</l> file:
-</p>
-<p class='bpcode w800'>
-	<xt>&lt;web-app</xt> <xa>version</xa>=<xs>'3.0'</xs><xt>&gt;</xt>
-		<xt>&lt;servlet&gt;</xt>
-			<xt>&lt;servlet-name&gt;</xt>RootResources<xt>&lt;/servlet-name&gt;</xt>
-			<xt>&lt;servlet-class&gt;</xt>org.apache.juneau.examples.rest.RootResources<xt>&lt;/servlet-class&gt;</xt>
-		<xt>&lt;/servlet&gt;</xt>
-		<xt>&lt;servlet-mapping&gt;</xt>
-			<xt>&lt;servlet-name&gt;</xt>RootResources<xt>&lt;/servlet-name&gt;</xt>
-			<xt>&lt;url-pattern&gt;</xt>/*<xt>&lt;/url-pattern&gt;</xt>
-		<xt>&lt;/servlet-mapping&gt;</xt>
-	<xt>&lt;/web-app&gt;</xt>
-</p>
+	Follow these instructions to create a new template project in Eclipse.
+</p>		
+<ol class='spaced-list'>
+	<li>
+		Download the latest microservice-project zip file (e.g. <l>my-microservice.zip</l>).
+	<li>
+		In your Eclipse workspace, go to <b>File -&gt; Import -&gt; General -&gt; Existing Projects into Workspace</b> 
+		and select the zip file and click <b>Finish</b>.
+		<br><br>
+		<img class='bordered' src='doc-files/juneau-microservice-server.Installing.1.png' style='width:549px'>
+	<li>
+		In your workspace, you should now see the following project:
+		<br><br>
+		<img class='bordered' src='doc-files/juneau-microservice-server.Installing.2.png' style='width:299px'>
+</ol>
 <p>
-	The <l>RootResources</l> class consists entirely of annotations:
+	The important elements in this project are:
 </p>
-
-<h5 class='figure'>RootResources.java</h5>
-<p class='bpcode w800'>
-	<jd>/**
-	 * Sample REST resource showing how to implement a "router" resource page.
-	 */</jd>
+<ul class='spaced-list'>
+	<li>
+		<l>RootResources.java</l> - The top-level REST resource. 
+		<br>This class routes HTTP requests to child resources:
+		<br><br>
+		<p class='bcode w800'>
 	<ja>@RestResource</ja>(
 		path=<js>"/"</js>,
-		title=<js>"Root resources"</js>,
-		description=<js>"Example of a router resource page."</js>,
+		title=<js>"My Microservice"</js>,
+		description=<js>"Top-level resources page"</js>,
+		htmldoc=<ja>@HtmlDoc</ja>(
+			widgets={
+				ContentTypeMenuItem.<jk>class</jk>,
+				StyleMenuItem.<jk>class</jk>
+			},
+			navlinks={
+				<js>"options: servlet:/?method=OPTIONS"</js>
+			}
+		),
+		children={
+			HelloWorldResource.<jk>class</jk>,
+			ConfigResource.<jk>class</jk>,
+			LogsResource.<jk>class</jk>
+		}
+	)
+	<jk>public class</jk> RootResources <jk>extends</jk> BasicRestServletJenaGroup {
+		<jc>// No code</jc>
+	}
+		</p>
+	<li>
+		<l>my-microservice.cfg</l> - The external configuration file. 
+		<br>Contains various useful settings.
+		<br>Can be used for your own resource configurations.
+		<br><br>
+		<p class='bcode w800'>
+	<cc>#=======================================================================================================================
+	# Basic configuration file for REST microservices
+	# Subprojects can use this as a starting point.
+	#=======================================================================================================================</cc>
+	
+	<cc># What to do when the config file is saved.
+	# Possible values:
+	# 	NOTHING - Don't do anything. (default)
+	#	RESTART_SERVER - Restart the Jetty server.
+	#	RESTART_SERVICE - Shutdown and exit with code '3'.</cc>
+	<ck>saveConfigAction</ck> = <cv>RESTART_SERVER</cv>
+	
+	<cc>#=======================================================================================================================
+	# Jetty settings
+	#=======================================================================================================================</cc>
+	<cs>[Jetty]</cs>
+	
+	<cc># Path of the jetty.xml file used to configure the Jetty server.</cc>
+	<ck>config</ck> = <cv>jetty.xml</cv>
+	
+	<cc># Resolve Juneau variables in the jetty.xml file.</cc>
+	<ck>resolveVars</ck> = <cv>true</cv>
+	
+	<cc># Port to use for the jetty server.
+	# You can specify multiple ports.  The first available will be used.  '0' indicates to try a random port.
+	# The resulting available port gets set as the system property "availablePort" which can be referenced in the 
+	# jetty.xml file as "$S{availablePort}" (assuming resolveVars is enabled).</cc>
+	<ck>port</ck> = <cv>10000,0,0,0</cv>
+	
+	<cc>#=======================================================================================================================
+	# REST settings
+	#=======================================================================================================================</cc>
+	<cs>[REST]</cs>
+	
+	<cc># Stylesheet to use for HTML views.
+	# The default options are:
+	#  - servlet:/styles/juneau.css
+	#  - servlet:/styles/devops.css
+	# Other stylesheets can be referenced relative to the servlet package or working directory.</cc>
+	<ck>stylesheet</ck> = <cv>servlet:/styles/devops.css</cv>
+	
+	<cc>#=======================================================================================================================
+	# Console settings
+	#=======================================================================================================================</cc>
+	<cs>[Console]</cs>
+	
+	<ck>enabled</ck> = <cv>true</cv>
+	
+	<cc># List of available console commands.
+	# These are classes that implements ConsoleCommand that allow you to submit commands to the microservice via
+	# the console.
+	# When listed here, the implementations must provide a no-arg constructor.
+	# They can also be provided dynamically by overriding the Microservice.createConsoleCommands() method.</cc>
+	<ck>commands</ck> = 
+		<cv>org.apache.juneau.microservice.console.ExitCommand,
+		org.apache.juneau.microservice.console.RestartCommand,
+		org.apache.juneau.microservice.console.HelpCommand</cv>
+		
+	<cc>#=======================================================================================================================
+	# Logger settings
+	#-----------------------------------------------------------------------------------------------------------------------
+	# See FileHandler Java class for details.
+	#=======================================================================================================================</cc>
+	<cs>[Logging]</cs>
+
+	...
+	
+	<cc>#=======================================================================================================================
+	# System properties
+	#-----------------------------------------------------------------------------------------------------------------------
+	# These are arbitrary system properties that are set during startup.
+	#=======================================================================================================================</cc>
+	<cs>[SystemProperties]</cs>
+	
+	<cc># Configure Jetty for StdErrLog Logging
+	# org.eclipse.jetty.util.log.class = org.eclipse.jetty.util.log.StrErrLog</cc>
+	
+	<cc># Configure Jetty to log using java-util logging</cc>
+	<ck>org.eclipse.jetty.util.log.class</ck> = <cv>org.apache.juneau.microservice.JettyLogger</cv>
+	
+	<cc># Jetty logging level
+	# Possible values:  ALL, DEBUG, INFO, WARN, OFF</cc>
+	<ck>org.eclipse.jetty.LEVEL</ck> = <cv>WARN
+	
+	<ck>derby.stream.error.file</ck> = <cv>$C{Logging/logDir}/derby-errors.log</cv>					
+	</p>
+	<li>
+		<l>jetty.xml</l> - The Jetty configuration file. 
+		<br>A bare-bones config file that can be extended to use any Jetty features.
+		<br><br>
+		<p class='bcode w800'>
+	<xt>&lt;Configure</xt> <xa>id</xa>=<xs>"ExampleServer"</xs> <xa>class</xa>=<xs>"org.eclipse.jetty.server.Server"</xs>&gt;</xt>
+	
+		<xt>&lt;Set</xt> <xa>name</xa>=<xs>"connectors"</xs><xt>&gt;</xt>
+			<xt>&lt;Array</xt> <xa>type</xa>=<xs>"org.eclipse.jetty.server.Connector"</xs><xt>&gt;</xt>
+				<xt>&lt;Item&gt;</xt>
+					<xt>&lt;New</xt> <xa>class</xa>=<xs>"org.eclipse.jetty.server.ServerConnector"</xs><xt>&gt;</xt>
+						<xt>&lt;Arg&gt;</xt>
+							<xt>&lt;Ref</xt> <xa>refid</xa>=<xs>"ExampleServer"</xs><xt>/&gt;</xt>
+						<xt>&lt;/Arg&gt;</xt>
+						<xt>&lt;Set</xt> <xa>name</xa>=<xs>"port"</xs><xt>&gt;</xt>$S{availablePort,8080}<xt>&lt;/Set&gt;</xt>
+					<xt>&lt;/New&gt;</xt>
+				<xt>&lt;/Item&gt;</xt>
+			<xt>&lt;/Array&gt;</xt>
+		<xt>&lt;/Set&gt;</xt>
+	
+		<xt>&lt;New</xt> <xa>id</xa>=<xs>"context"</xs> <xa>class</xa>=<xs>"org.eclipse.jetty.servlet.ServletContextHandler"</xs><xt>&gt;</xt>
+			<xt>&lt;Set</xt> <xa>name</xa>=<xs>"contextPath"</xs><xt>&gt;/&lt;/Set&gt;</xt>
+			<xt>&lt;Call</xt> <xa>name</xa>=<xs>"addServlet"</xs><xt>&gt;</xt>
+				<xt>&lt;Arg&gt;</xt>org.apache.juneau.microservice.sample.RootResources<xt>&lt;/Arg&gt;</xt>
+				<xt>&lt;Arg&gt;</xt>/*<xt>&lt;/Arg&gt;</xt>
+			<xt>&lt;/Call&gt;</xt>
+			<xt>&lt;Set</xt> <xa>name</xa>=<xs>"sessionHandler"</xs><xt>&gt;</xt>
+				<xt>&lt;New</xt> <xa>class</xa>=<xs>"org.eclipse.jetty.server.session.SessionHandler"</xs><xt>/&gt;</xt>
+			<xt>&lt;/Set&gt;</xt>
+		<xt>&lt;/New&gt;</xt>
+	
+		<xt>&lt;Set</xt> <xa>name</xa>=<xs>"handler"</xs><xt>&gt;</xt>
+			<xt>&lt;New</xt> <xa>class</xa>=<xs>"org.eclipse.jetty.server.handler.HandlerCollection"</xs><xt>&gt;</xt>
+				<xt>&lt;Set</xt> <xa>name</xa>=<xs>"handlers"</xs><xt>&gt;</xt>
+					<xt>&lt;Array</xt> <xa>type</xa>=<xs>"org.eclipse.jetty.server.Handler"</xs><xt>&gt;</xt>
+						<xt>&lt;Item&gt;</xt>
+							<xt>&lt;Ref</xt> <xa>refid</xa>=<xs>"context"</xs><xt>/&gt;</xt>
+						<xt>&lt;/Item&gt;</xt>
+						<xt>&lt;Item&gt;</xt>
+							<xt>&lt;New</xt> <xa>class</xa>=<xs>"org.eclipse.jetty.server.handler.DefaultHandler"</xs><xt>/&gt;</xt>
+						<xt>&lt;/Item&gt;</xt>
+					<xt>&lt;/Array&gt;</xt>
+				<xt>&lt;/Set&gt;</xt>
+			<xt>&lt;/New&gt;</xt>
+		<xt>&lt;/Set&gt;</xt>
+	
+		<xt>&lt;Set</xt> <xa>name</xa>=<xs>"requestLog"</xs><xt>&gt;</xt>
+			<xt>&lt;New</xt> <xa>id</xa>=<xs>"RequestLogImpl"</xs> <xa>class</xa>=<xs>"org.eclipse.jetty.server.NCSARequestLog"</xs><xt>&gt;</xt>
+				<xt>&lt;Set</xt> <xa>name</xa>=<xs>"filename"</xs><xt>&gt;&lt;Property</xt> <xa>name</xa>=<xs>"jetty.logs"</xs> <xa>default</xa>=<xs>"$C{Logging/logDir,logs}"</xs><xt>/&gt;</xt>/jetty-requests.log<xt>&lt;/Set&gt;</xt>
+				<xt>&lt;Set</xt> <xa>name</xa>=<xs>"filenameDateFormat</xs><xt>"&gt;</xt>yyyy_MM_dd<xt>&lt;/Set&gt;</xt>
+				<xt>&lt;Set</xt> <xa>name</xa>=<xs>"LogTimeZone"</xs><xt>&gt;</xt>GMT<xt>&lt;/Set&gt;</xt>
+				<xt>&lt;Set</xt> <xa>name</xa>=<xs>"retainDays"</xs><xt>&gt;</xt>90<xt>&lt;/Set&gt;</xt>
+				<xt>&lt;Set</xt> <xa>name</xa>=<xs>"append"</xs><xt>&gt;</xt>false<xt>&lt;/Set&gt;</xt>
+				<xt>&lt;Set</xt> <xa>name</xa>=<xs>"LogLatency"</xs><xt>&gt;</xt>true<xt>&lt;/Set&gt;</xt>
+			<xt>&lt;/New&gt;</xt>
+		<xt>&lt;/Set&gt;</xt>
+	
+	    <xt>&lt;Get</xt> <xa>name</xa>=<xs>"ThreadPool"</xs><xt>&gt;</xt>
+	        <xt>&lt;Set</xt> <xa>name</xa>=<xs>"minThreads"</xs> <xa>type</xa>=<xs>"int"</xs><xt>&gt;</xt>10<xt>&lt;/Set&gt;</xt>
+	        <xt>&lt;Set</xt> <xa>name</xa>=<xs>"maxThreads"</xs> <xa>type</xa>=<xs>"int"</xs><xt>&gt;</xt>100<xt>&lt;/Set&gt;</xt>
+	        <xt>&lt;Set</xt> <xa>name</xa>=<xs>"idleTimeout"</xs> <xa>type</xa>=<xs>"int"</xs><xt>&gt;</xt>60000<xt>&lt;/Set&gt;</xt>
+	        <xt>&lt;Set</xt> <xa>name</xa>=<xs>"detailedDump"</xs><xt>&gt;</xt>true<xt>&lt;/Set&gt;</xt>
+	    <xt>&lt;/Get&gt;</xt>
+	<xt>&lt;/Configure&gt;</xt>
+		</p>
+</ul>
+<p>
+	At this point, you're ready to start the microservice from your workspace.
+</p>
+</div><!-- END: 12.2.1 - juneau-microservice-jetty.GettingStarted.Installing -->
+
+<!-- ==================================================================================================== -->
+
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-jetty.GettingStarted.Running' id='juneau-microservice-jetty.GettingStarted.Running'>12.2.2 - Running in Eclipse</a></h4>
+<div class='topic'><!-- START: 12.2.2 - juneau-microservice-jetty.GettingStarted.Running -->
+<p>
+	The <l>my-microservice.launch</l> file is already provided to allow you to quickly start
+	your new microservice.
+</p>
+<p>
+	Go to <b>Run -&gt; Run Configurations -&gt; Java Application -&gt; my-microservice</b> and click <b>Run</b>.
+	<br>In your console view, you should see the following output:
+</p>
+<p class='bpcode w800'>
+	Running class 'RestMicroservice' using config file 'my-microservice.cfg'.
+	Server started on port 10000
+	
+	List of available commands:
+		exit -- Shut down service
+		restart -- Restarts service
+		help -- Commands help
+	
+	> 			
+</p>
+<p>
+	Now open your browser and point to <l>http://localhost:10000</l>.  
+	You should see the following:
+</p>
+<p class='bpcode w400'>
+	http://localhost:10000
+</p>			
+<img class='bordered w400' src='doc-files/juneau-microservice-server.Running.1.png'>
+<p>
+	You have started a REST interface on port 10000.
+	<br>You can enter the command <code>exit</code> to shut it down.
+</p>
+</div><!-- END: 12.2.2 - juneau-microservice-jetty.GettingStarted.Running -->
+
+<!-- ==================================================================================================== -->
+
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-jetty.GettingStarted.Building' id='juneau-microservice-jetty.GettingStarted.Building'>12.2.3 - Building and Running from Command-Line</a></h4>
+<div class='topic'><!-- START: 12.2.3 - juneau-microservice-jetty.GettingStarted.Building -->
+<p>
+	The <l>pom.xml</l> file is a basic Maven build script for creating your microservice
+	as an executable uber-jar.
+</p>
+<p>
+	The easiest way to build your microservice is to run the following from the project root.
+</p>
+<p class='bpcode w800'>
+	mvn clean install
+</p>
+<p>
+	Your <code>target</code> directory should now contain the following files:
+</p>
+<ul>
+	<li><code>my-microservice-1.0.jar</code>
+	<li><code>my-microservice.cfg</code>
+	<li><code>jetty.xml</code>
+</ul>
+<p>
+	To start from a command line, run the following command from inside your <code>target</code> directory:
+</p>
+<p class='bpcode w800'>
+	java -jar my-microservice-1.0.jar
+</p>
+<p>
+	You should see the following console output:
+</p>
+<p class='bpcode w800'>
+	Running class 'RestMicroservice' using config file 'my-microservice.cfg'.
+	Server started on port 10000
+	
+	List of available commands:
+		exit -- Shut down service
+		restart -- Restarts service
+		help -- Commands help
+	
+	> 			
+</p>
+<p>
+	If you get this error message: <code class='snippet'>java.net.BindException: Address already in use</code>, 
+	then this microservice is already running elsewhere and so it cannot bind to port 10000.
+</p>
+</div><!-- END: 12.2.3 - juneau-microservice-jetty.GettingStarted.Building -->
+</div><!-- END: 12.2 - juneau-microservice-jetty.GettingStarted -->
+
+<!-- ==================================================================================================== -->
+
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-jetty.Manifest' id='juneau-microservice-jetty.Manifest'>12.3 - Manifest File</a></h3>
+<div class='topic'><!-- START: 12.3 - juneau-microservice-jetty.Manifest -->
+<p>
+	The generated <l>META-INF/MANIFEST.MF</l> file is used to describe the microservice. 
+	<br>If you open it, you'll see the following:
+</p>
+<p class='bpcode w800'>
+	<mk>Main-Class</mk>: <mv>org.apache.juneau.microservice.RestMicroservice</mv>
+	<mk>Main-ConfigFile</mk>: <mv>my-microservice.cfg</mv>
+<p>
+ 	The <mk>Main-Class</mk> entry is the standard manifest entry describing the entry point for the executable jar.
+ 	<br>In most cases, this value will always be <l>org.apache.juneau.microservice.RestMicroservice</l>.
+ 	<br>However, it is possible to extend this class or implement your own microservice, in which case you'll need
+ 	to modify this value to point to the new class.
+</p>
+<p>
+	The <mk>Main-ConfigFile</mk> entry points to the location of an external configuration file for our microservice.
+</p>		
+<p>
+	In addition to these predefined manifest entries, you can add your own particular entries to the manifest file
+	and access them through the Manifest API described next. 
+</p>
+
+<!-- ==================================================================================================== -->
+
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-jetty.Manifest.ManifestApi' id='juneau-microservice-jetty.Manifest.ManifestApi'>12.3.1 - Manifest API</a></h4>
+<div class='topic'><!-- START: 12.3.1 - juneau-microservice-jetty.Manifest.ManifestApi -->
+<p>
+	The {@link org.apache.juneau.microservice.Microservice#getManifest()} method is a static method that
+	can be used to retrieve the manifest file as a {@link org.apache.juneau.utils.ManifestFile}.  
+</p>
+<p class='bpcode w800'>
+	<jc>// Get Main-Class from manifest file.</jc>
+	String mainClass = Microservice.<jsm>getInstance</jsm>().getManifest().getString(<js>"Main-Class"</js>, <js>"unknown"</js>);
+</p>
+<p>
+	The {@link org.apache.juneau.utils.ManifestFile} class extends {@link org.apache.juneau.ObjectMap},
+	making it possible to retrieve entries as a wide variety of object types such as java primitives, arrays, collections, 
+	maps, or even POJOs serialized as JSON.
+</p>
+</div><!-- END: 12.3.1 - juneau-microservice-jetty.Manifest.ManifestApi -->
+</div><!-- END: 12.3 - juneau-microservice-jetty.Manifest -->
+
+<!-- ==================================================================================================== -->
+
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-jetty.Config' id='juneau-microservice-jetty.Config'>12.4 - Config</a></h3>
+<div class='topic'><!-- START: 12.4 - juneau-microservice-jetty.Config -->
+<p>
+	The microservice config file is an external INI-style configuration file that is used to configure
+	your microservice.
+</p>
+<h5 class='section'>See Also:</h5>
+<ul class='doctree'>
+	<li class='link'>{@doc juneau-config}
+</ul>
+
+<!-- ==================================================================================================== -->
+
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-jetty.Config.ConfigApi' id='juneau-microservice-jetty.Config.ConfigApi'>12.4.1 - Config File API</a></h4>
+<div class='topic'><!-- START: 12.4.1 - juneau-microservice-jetty.Config.ConfigApi -->
+<p>
+	There are 3 primary ways of getting access to the config file.
+</p>
+<ul class='doctree'>
+	<li class='jm'>{@link org.apache.juneau.microservice.Microservice#getConfig()} 
+		<br>Any {@doc DefaultRestSvlVariables initialization-time variables} can be used.
+	<li class='jm'>{@link org.apache.juneau.rest.RestContext#getConfig()} 
+		<br>Any {@doc DefaultRestSvlVariables initialization-time variables} can be used.
+		<h5 class='figure'>Example usage:</h5>
+		<p class='bcode w800'>
+	<cc>#-------------------------------</cc>
+	<cc># Properties for MyHelloResource </cc>
+	<cc>#-------------------------------</cc>
+	<cs>[MyHelloResource]</cs>
+	<ck>greeting</ck> = <cv>Hello world!</cv> 
+				</p>
+				<p class='bcode w800'>
+	<ja>@RestResource</ja>(...)
+	<jk>public class</jk> MyHelloResource <jk>extends</jk> BasicRestServlet {
+		<jc>// Access config file when initializing fields.</jc>
+		<jk>private</jk> String greeting = getConfig().getString(<js>"MyHelloResource/greeting"</js>); 
+		
+		<jc>// Or access config file in servlet init method.</jc>
+		<ja>@Override</ja> <jc>/* Servlet */</jc>
+		<jk>public void</jk> init() {
+			String greeting = getConfig().getString(<js>"MyHelloResource/greeting"</js>); 
+		}
+	}		
+		</p>
+		<p>
+			Additional user-defined variables can be defined at this level by adding a  
+			{@link org.apache.juneau.rest.annotation.HookEvent#INIT} hook method
+			and using the {@link org.apache.juneau.rest.RestContextBuilder#vars(Class...)} method.
+		</p>
+	<li class='jm'>
+		{@link org.apache.juneau.rest.RestRequest#getConfig()} 
+		- An instance method to access it from inside a REST method.
+		<br>Any {@doc DefaultRestSvlVariables initialization-time or request-time variables} can be used.
+		
+		<h5 class='figure'>Example usage:</h5>
+		<p class='bcode w800'>
+	<cc>#-----------------------------</cc>
+	<cc># Contents of microservice.cfg </cc>
+	<cc>#-----------------------------</cc>
+	<cs>[MyHelloResource]</cs>
+	<ck>greeting</ck> = <cv>Hello $RP{person}!</cv> 
+	<ck>localizedGreeting</ck> = <cv>$L{HelloMessage,$RP{person}}</cv> 
+				</p>
+				<p class='bcode w800'>
+	<cc>#---------------------------------</cc>
+	<cc># Contents of MyHelloResource.java </cc>
+	<cc>#---------------------------------</cc>
+	<ja>@RestResource</ja>(
+		path=<js>"/hello"</js>,
+		messages=<js>"nls/Messages"</js>,
+		...
+	)
+	<jk>public class</jk> MyHelloResource <jk>extends</jk> BasicRestServlet {
+
+		<jd>/** Standard hello message. */</jd>
+		<ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/{person}"</js>)
+		<jk>public</jk> String sayHello(RestRequest req) {
+			<jk>return</jk> req.getConfig().getString(<js>"MyHelloResource/greeting"</js>);
+		}
+
+		<jd>/** Hello message in users language. */</jd>
+		<ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/localized/{person}"</js>)
+		<jk>public</jk> String sayLocalizedHello(RestRequest req) {
+			<jk>return</jk> req.getConfig().getString(<js>"MyHelloResource/localizedGreeting"</js>);
+		}
+	}		
+		</p>
+		<p class='bcode w800'>
+	<cc>#---------------------------------------</cc>
+	<cc># Contents of nls/Messages_en.properties </cc>
+	<cc>#---------------------------------------</cc>
+	<ck>MyHelloResource.HelloMessage</ck> = <cv>Hello {0}!</cv> 
+		</p>
+		<p>
+			Additional user-defined variables can be defined at this level by overriding the 
+			{@link org.apache.juneau.rest.RestContextBuilder#vars(Class...)} method.
+		</p>
+</ul>
+<p>
+	That <l>sayLocalizedHello()</l> example might need some explanation since there's a lot going on there.
+	<br>Here's what happens when an HTTP call is made to <l>GET /hello/localized/Bob</l>:
+</p>
+<ol class='spaced-list'>
+	<li>
+		The HTTP call matches the <l>/hello</l> path on the <l>MyHelloResource</l> class.
+	<li>
+		The HTTP call matches the <l>/localized/{person}</l> path on the <l>sayLocalizedHello()</l> method.
+	<li>
+		The request attribute <l>person</l> gets assigned the value <l>"Bob"</l>.
+	<li>
+		The call to <l>req.getConfig().getString("MyHelloResource/localizedGreeting")</l> 
+		finds the value <l>"$L{HelloMessage,$RP{person}}"</l>.
+	<li>
+		The arguments in the <l>$L{}</l> variable get resolved, resulting in <l>"$L{HelloMessage,Bob}"</l>.
+	<li>
+		The <l>$L{}</l> variable gets resolved to the message <l>"Hello {0}!"</l> in the localized properties 
+		file of the servlet based on the <l>Accept-Language</l> header on the request.
+	<li>
+		The arguments get replaced in the message resulting in <l>"Hello Bob!"</l>. 
+	<li>
+		The resulting message <l>"Hello Bob!"</l> is returned as a POJO to be serialized to whatever content 
+		type was specified on the <l>Accept</l> header on the request.
+</ol>
+<p>
+	This particular example is needlessly complex, but it gives an idea of how variables can be used 
+	recursively to produce sophisticated results
+</p>
+</div><!-- END: 12.4.1 - juneau-microservice-jetty.Config.ConfigApi -->
+</div><!-- END: 12.4 - juneau-microservice-jetty.Config -->
+
+<!-- ==================================================================================================== -->
+
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-jetty.ResourceClasses' id='juneau-microservice-jetty.ResourceClasses'>12.5 - Resource Classes</a></h3>
+<div class='topic'><!-- START: 12.5 - juneau-microservice-jetty.ResourceClasses -->
+<p>
+	Now let's take a look at the resource classes themselves.  
+	<br>The top-level page...
+</p>
+<p class='bpcode w800'>
+	http://localhost:10000
+</p>			
+<img class='bordered w800' src='doc-files/juneau-microservice-server.Running.1.png'>
+<p>
+	...is generated by this class...
+<p class='bpcode w800'>
+	<ja>@RestResource</ja>(
+		path=<js>"/"</js>,
+		title=<js>"My Microservice"</js>,
+		description=<js>"Top-level resources page"</js>,
+		htmldoc=<ja>@HtmlDoc</ja>(
+			navlinks={
+				<js>"options: servlet:/?method=OPTIONS"</js>
+			}
+		),
+		children={
+			HelloWorldResource.<jk>class</jk>,
+			ConfigResource.<jk>class</jk>,
+			LogsResource.<jk>class</jk>
+		}
+	)
+	<jk>public class</jk> RootResources <jk>extends</jk> BasicRestServletJenaGroup {
+		<jc>// No code! </jc>
+	}
+</p>
+<ul class='spaced-list'>
+	<li>
+		The </l>title</l> and <l>description</l> annotations define the titles on the page.
+		<br>These can be globalized using <l>$L{...}</l> variables, or by defining specially-named properties in the 
+		properties file for the resource.
+	<li>
+		In this case, the <l>path</l> annotation defines the context root of your application since it was 
+		not specified in the manifest or config file.
+		<br>Therefore, this resource is mapped to <l>http://localhost:10000</l>.
+	<li>
+		The <l>children</l> annotation make up the list of child resources.
+		<br>These child resources can be anything that extends from <l>Servlet</l>, although usually
+		they will be subclasses of {@link org.apache.juneau.rest.BasicRestServlet} or other resource groups.
+</ul>
+<p>
+	If you click the <l>helloWorld</l> link in your application, you'll get a simple hello world message:
+</p>
+<p class='bpcode w800'>
+	http://localhost:10000/helloWorld
+</p>			
+<img class='bordered w800' src='doc-files/juneau-microservice-server.ResourceClasses.1.png'>
+<p>
+	...which is generated by this class...
+</p>
+<p class='bpcode w800'>
+	<ja>@RestResource</ja>(
+		path=<js>"/helloWorld"</js>,
+		title=<js>"Hello World example"</js>,
+		description=<js>"Simplest possible REST resource"</js>
+	)
+	<jk>public class</jk> HelloWorldResource <jk>extends</jk> BasicRestServlet {
+	
+		<ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>)
+		<jk>public</jk> String sayHello() {
+			<jk>return</jk> <js>"Hello world!"</js>;
+		}
+	}		
+</p>
+</div><!-- END: 12.5 - juneau-microservice-jetty.ResourceClasses -->
+
+<!-- ==================================================================================================== -->
+
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-jetty.PredefinedResourceClasses' id='juneau-microservice-jetty.PredefinedResourceClasses'>12.6 - Predefined Resource Classes</a></h3>
+<div class='topic'><!-- START: 12.6 - juneau-microservice-jetty.PredefinedResourceClasses -->
+<p>
+	The following predefined resource classes are also provided for easy inclusion into your microservice:
+</p>
+<ul class='doctree'>
+	<li class='jc'>{@link org.apache.juneau.microservice.resources.ConfigResource}
+		- View and modify the external INI config file.
+	<li class='jc'>{@link org.apache.juneau.microservice.resources.DirectoryResource}
+		- View and modify file system directories.
+	<li class='jc'>{@link org.apache.juneau.microservice.resources.LogsResource}
+		- View and control generated log files.
+	<li class='jc'>{@link org.apache.juneau.microservice.resources.SampleRootResource}
+		- A sample root resource class to get started from.
+	<li class='jc'>{@link org.apache.juneau.microservice.resources.ShutdownResource}
+		- Shutdown and/or restart the JVM.
+</ul>
+</div><!-- END: 12.6 - juneau-microservice-jetty.PredefinedResourceClasses -->
+
+<!-- ==================================================================================================== -->
+
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-jetty.RestMicroservice' id='juneau-microservice-jetty.RestMicroservice'>12.7 - RestMicroservice</a></h3>
+<div class='topic'><!-- START: 12.7 - juneau-microservice-jetty.RestMicroservice -->
+<p>
+	The {@link org.apache.juneau.microservice.RestMicroservice} class is the main application entry-point for REST 
+	microservices. 
+</p>
+<p>
+	The class hierarchy is:
+</p>
+<ul class='doctree'>
+	<li class='jac'>
+		{@link org.apache.juneau.microservice.Microservice} 
+		- Abstract class that defines simple start/stop methods and access to the manifest file, config file, and 
+		arguments.
+		<ul>
+			<li class='jc'>
+				{@link org.apache.juneau.microservice.RestMicroservice} 
+				- Specialized microservice for starting up REST interfaces using Jetty and specifying REST servlets
+				through the manifest file or config file.
+		</ul>
+	</li>
+</ul>
+<p>
+	Refer to the Javadocs for these class for more information.
+</p>
+
+<!-- ==================================================================================================== -->
+
+<h4 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-jetty.RestMicroservice.Extending' id='juneau-microservice-jetty.RestMicroservice.Extending'>12.7.1 - Extending RestMicroservice</a></h4>
+<div class='topic'><!-- START: 12.7.1 - juneau-microservice-jetty.RestMicroservice.Extending -->
+<p>
+	This example shows how the {@link org.apache.juneau.microservice.RestMicroservice} class
+	can be extended to implement lifecycle listener methods or override existing methods.
+	<br>We'll create a new class <l>com.foo.SampleCustomRestMicroservice</l>.
+</p>
+<p>
+	First, the manifest file needs to be modified to point to our new microservice:
+</p>
+<p class='bpcode w800'>
+	<mk>Main-Class:</mk> com.foo.SampleCustomRestMicroservice
+</p>
+<p>
+	Then we define the following class:
+</p>
+<p class='bpcode w800'>
+	<jd>/**
+	 * Sample subclass of a RestMicroservice that provides customized behavior.
+	 * This class must be specified in the Main-Class entry in the manifest file and optionally
+	 * 	a Main-ConfigFile entry.
+	 */</jd>
+	<jk>public class</jk> SampleCustomRestMicroservice <jk>extends</jk> RestMicroservice {
+	
+		<jd>/**
+		 * Must implement a main method and call start()!
+		 */</jd>
+		<jk>public static void</jk> main(String[] args) <jk>throws</jk> Exception {
+			<jk>new</jk> SampleCustomRestMicroservice(args).start().join();
+		}
+	
+		<jd>/**
+		 * Must implement a constructor!
+		 * 
+		 * <ja>@param</ja> args Command line arguments. 
+		 * <ja>@throws</ja> Exception 
+		 */</jd>
+		<jk>public</jk> SampleCustomRestMicroservice(String[] args) <jk>throws</jk> Exception {
+			<jk>super</jk>(args);
+		}
+</p>
+<p>
+	The microservice APIs provide several useful methods that can be used or extended.
+</p>
+<h5 class='section'>See Also:</h5>
+<ul class='doctree'>
+	<li class='jac'>{@link org.apache.juneau.microservice.Microservice}
+	<li class='jc'>{@link org.apache.juneau.microservice.RestMicroservice}
+</ul>
+</div><!-- END: 12.7.1 - juneau-microservice-jetty.RestMicroservice.Extending -->
+</div><!-- END: 12.7 - juneau-microservice-jetty.RestMicroservice -->
+
+<!-- ==================================================================================================== -->
+
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-microservice-jetty.UiCustomization' id='juneau-microservice-jetty.UiCustomization'>12.8 - UI Customization</a></h3>
+<div class='topic'><!-- START: 12.8 - juneau-microservice-jetty.UiCustomization -->
+<p>
+	The Microservice project contains a <code>files/htdocs</code> working directly folder with predefined stylesheets and
+	images.
+</p>
+<img style='width:200px' src='doc-files/juneau-microservice.UiCustomization.1.png'>
+<p>
+	These files can be used to tailor the look-and-feel of your microservice.
+</p>
+<p class='bpcode w800'>
+	http://localhost:10000/helloWorld
+</p>
+<img class='bordered w800' src='doc-files/juneau-rest-server.UiCustomization.1.png'>
+<p>
+	The REST configuration section of your microservice configuration file can be used to tailor the header and footer on the pages:
+</p>
+<p class='bpcode w800'>
+	<cc>#=======================================================================================================================
+	# REST settings
+	#=======================================================================================================================</cc>
+	<cs>[REST]</cs>
+	
+	<ck>staticFiles</ck> = <cv>htdocs:files/htdocs</cv>
+	
+	<cc># Stylesheet to use for HTML views.</cc>
+	<ck>theme</ck> = <cv>servlet:/htdocs/themes/devops.css</cv>
+	
+	<ck>headerIcon</ck> = <cv>servlet:/htdocs/images/juneau.png</cv>
+	<ck>headerLink</ck> = <cv>http://juneau.apache.org</cv>
+	<ck>footerIcon</ck> = <cv>servlet:/htdocs/images/asf.png</cv>
+	<ck>footerLink</ck> = <cv>http://www.apache.org</cv>
+	
+	<ck>favicon</ck> = <cv>$C{REST/headerIcon}</cv>
+	<ck>header</ck> = 
+		<cv>&lt;a href='$U{$C{REST/headerLink}}'&gt;</cv>
+			<cv>&lt;img src='$U{$C{REST/headerIcon}}' style='position:absolute;top:5;right:5;background-color:transparent;height:30px'/&gt;</cv>
+		<cv>&lt;/a&gt;</cv>
+	<ck>footer</ck> = 
+		<cv>&lt;a href='$U{$C{REST/footerLink}}'&gt;</cv>
+			<cv>&lt;img src='$U{$C{REST/footerIcon}}' style='float:right;padding-right:20px;height:32px'/&gt;</cv>
+		<cv>&lt;/a&gt;</cv>
+</p>
+<p>
+	The {@link org.apache.juneau.rest.BasicRestConfig} interface (which defines the default settings for {@link org.apache.juneau.rest.BasicRestServlet} 
+	pulls in this information using {@link org.apache.juneau.config.vars.ConfigVar $C} and {@link org.apache.juneau.rest.vars.UrlVar $U} variables:
+</p>
+<p class='bpcode w800'>
+	<ja>@RestResource</ja>(
+		...
+		<jc>// HTML-page specific settings</jc>
+		htmldoc=<ja>@HtmlDoc</ja>(
+	
+			<jc>// Default page header contents.</jc>
+			header={
+				<js>"&lt;h1&gt;$R{resourceTitle}&lt;/h1&gt;"</js>,  <jc>// Use @RestResource(title)</jc>
+				<js>"&lt;h2&gt;$R{methodSummary,resourceDescription}&lt;/h2&gt;"</js>, <jc>// Use either @RestMethod(summary) or @RestResource(description)</jc>
+				<js>"$C{REST/header}"</js>  <jc>// Extra header HTML defined in external config file.</jc>
+			},
+	
+			<jc>// Default stylesheet to use for the page.
+			// Can be overridden from external config file.
+			// Default is DevOps look-and-feel (aka Depression look-and-feel).</jc>
+			stylesheet=<js>"$C{REST/theme,servlet:/htdocs/themes/devops.css}"</js>,
+	
+			<jc>// Default contents to add to the &lt;head&gt; section of the HTML page.
+			// Use it to add a favicon link to the page.</jc>
+			head={
+				<js>"&lt;link rel='icon' href='$U{$C{REST/favicon}}'/&gt;"</js>
+			},
+	
+			<jc>// No default page footer contents.
+			// Can be overridden from external config file.</jc>
+			footer=<js>"$C{REST/footer}"</js>
+		),
+	
+		<jc>// Optional external configuration file.</jc>
+		config=<js>"$S{juneau.configFile}"</js>,
+	
+		<jc>// These are static files that are served up by the servlet under the specified sub-paths.
+		// For example, "/servletPath/htdocs/javadoc.css" resolves to the file "[servlet-package]/htdocs/javadoc.css"
+		// By default, we define static files through the external configuration file.</jc>
+		staticFiles=<js>"$C{REST/staticFiles}"</js>
+	)
+	<jk>public interface</jk> BasicRestConfig {}
+</p>
+<p>
+	Note that the <code>files/htdocs</code> directory is mapped to <js>"servlet:/htdocs"</js> using the <code>staticFiles</code>
+	setting.  This allows those files to be served up through the servlet through the URL <js>"/[servlet-path]/htdocs"</js>
+</p>
+<p>
+	The theme files are externally accessible and can be modified to produce any look-and-feel you desire.
+	The microservice still works without the files directory.  An embedded <code>devops.css</code> is included in the jar as a default spreadsheet.
+</p>
+<p>
+	If you're testing out changes in the theme stylesheets, you may want to set the following system property that prevents caching of those files so 
+	that you don't need to restart the microservice each time a change is made:
+</p>
+<p class='bpcode w800'>
+	<cc>#=======================================================================================================================
+	# System properties
+	#-----------------------------------------------------------------------------------------------------------------------
+	# These are arbitrary system properties that are set during startup.
+	#=======================================================================================================================</cc>
+	<cs>[SystemProperties]</cs>
+	
+	<cc># Disable classpath resource caching.
+	# Useful if you're attached using a debugger and you're modifying classpath resources while running.</cc>
+	<ck>RestContext.useClasspathResourceCaching.b</ck> = <cv>false</cv>
+
+</p>
+</div><!-- END: 12.8 - juneau-microservice-jetty.UiCustomization -->
+</div><!-- END: 12 - juneau-microservice-jetty -->
+
+<!-- ==================================================================================================== -->
+
+<h2 class='topic todo' onclick='toggle(this)'><a href='#juneau-microservice-jetty-template' id='juneau-microservice-jetty-template'>13 - juneau-microservice-server</a></h2>
+<div class='topic'><!-- START: 13 - juneau-microservice-jetty-template -->
+<h5 class='figure'>Maven Dependency</h5>
+<p class='bpcode 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-microservice-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='bpcode w500'>
+	juneau-microservice-server-{@property juneauVersion}.jar 
+</p>	
+
+<h5 class='figure'>OSGi Module</h5>
+<p class='bpcode w500'>
+	org.apache.juneau.microservice.server_{@property juneauVersion}.jar 
+</p>	
+
+<h5 class='figure'>Microservice Starter Project</h5>
+<p class='bpcode w500'>
+	my-microservice.zip 
+</p>	
+
+<p>
+	Juneau Microservice is an API for creating stand-alone executable jars that can be used to 
+	start lightweight configurable REST interfaces with all the power of the Juneau REST server and client APIs.
+</p>
+</div><!-- END: 13 - juneau-microservice-jetty-template -->
+
+<!-- ==================================================================================================== -->
+
+<h2 class='topic ' onclick='toggle(this)'><a href='#juneau-examples-core' id='juneau-examples-core'>14 - juneau-examples-core</a></h2>
+<div class='topic'><!-- START: 14 - juneau-examples-core -->
+<h5 class='figure'>Archive File</h5>
+<p class='bpcode w500'>
+	juneau-examples-core-{@property juneauVersion}.zip 
+</p>	
+
+<p>
+	The <code>juneau-examples-core</code> project contains various code examples for using the core APIs. 
+</p>
+<p>
+	The project project can be loaded into your workspace by importing the 
+	<code>juneau-examples-core-{@property juneauVersion}.zip</code> file. 
+</p>
+
+<h5 class='topic'>juneau-examples-core install instructions</h5>
+<p>
+	Download the <code>juneau-examples-core-{@property juneauVersion}.zip</code> file from the downloads page
+	(located in the binaries) and import it into your workspace as an existing project:
+</p>
+<img class='bordered' src='doc-files/juneau-examples-core.1.png' style='width:512px'>
+<p>
+	Select the archive file and import the project:
+</p>
+<img class='bordered' src='doc-files/juneau-examples-core.2.png' style='width:523px'>
+<p>
+	Once loaded, you should see the following project structure:
+</p>
+<img class='bordered' src='doc-files/juneau-examples-core.3.png' style='width:459px'>
+
+<p>
+	The Core library samples are currently a work-in-progress so there's not much here yet.
+	This section will be updated as new code is added.
+</p>
+</div><!-- END: 14 - juneau-examples-core -->
+
+<!-- ==================================================================================================== -->
+
+<h2 class='topic todo' onclick='toggle(this)'><a href='#juneau-examples-rest' id='juneau-examples-rest'>15 - juneau-examples-rest</a></h2>
+<div class='topic'><!-- START: 15 - juneau-examples-rest -->
+<h5 class='figure'>Archive File</h5>
+<p class='bpcode w500'>
+	juneau-examples-rest-{@property juneauVersion}.zip 
+</p>	
+
+<p>
+	The <code>juneau-examples-rest</code> project includes everything you need to start the Samples REST 
+	microservice in an Eclipse workspace.
+</p>
+<p>
+	This project is packaged as a Juneau Microservice project that allows REST resources to be started
+	using embedded Jetty.
+</p>	
+
+<h5 class='topic'>juneau-examples-rest install instructions</h5>
+<p>
+	Download the <code>juneau-examples-rest-{@property juneauVersion}.zip</code> file from the downloads page
+	(located in the binaries) and import it into your workspace as an existing project:
+</p>
+<img class='bordered' src='doc-files/juneau-examples-rest.1.png' style='width:524px'>
+<p>
+	Select the archive file and import the project:
+</p>
+<img class='bordered' src='doc-files/juneau-examples-rest.2.png' style='width:523px'>
+<p>
+	Once loaded, you should see the following project structure:
+</p>
+<img class='bordered' src='doc-files/juneau-examples-rest.3.png' style='width:325px'>
+<p>
+	The microservice can be started from the <code>juneau-examples-rest.launch</code> file.
+	It will start up the microservice on port 10000 which you can then view through a browser:
+</p>
+<p class='bpcode w400'>
+	http://localhost:10000
+</p>			
+<img class='bordered w400' src='doc-files/juneau-examples-rest.4.png'>
+
+<!-- ==================================================================================================== -->
+
+<h3 class='topic updated' onclick='toggle(this)'><a href='#juneau-examples-rest.RootResources' id='juneau-examples-rest.RootResources'>15.1 - RootResources</a></h3>
+<div class='topic'><!-- START: 15.1 - juneau-examples-rest.RootResources -->
+<p>
+	The <l>RootResources</l> class is the main page for the REST microservice.
+	It serves as the jumping-off point for the other resources.
+</p>
+<p>
+	The class hierarchy for this class is:
+</p>
+<ul class='doctree'>
+	<li class='jac'>
+		{@link org.apache.juneau.rest.RestServlet} - Contains all the REST servlet logic.
+		<ul>
+			<li class='jac'>
+				{@link org.apache.juneau.rest.BasicRestServlet} - Defines default serializers and parsers, and OPTIONs page logic.
+				<ul>
+					<li class='jac'>
+						{@link org.apache.juneau.rest.BasicRestServletGroup} - Specialized subclass for grouping other resources.
+						<ul>
+							<li class='jac'>
+								{@link org.apache.juneau.microservice.BasicRestServletJenaGroup} - Group resource with added RDF support.
+								<ul>
+									<li class='jc'>
+										<code>RootResources</code>
+								</ul>
+							</li>
+						</ul>
+					</li>
+				</ul>
+			</li>
+		</ul>
+	</li>
+</ul>
+<p>
+	Pointing a browser to the resource shows the following:
+</p>
+<p class='bpcode w800'>
+	http://localhost:10000
+</p>			
+<img class='bordered w800' src='doc-files/juneau-examples-rest.RootResources.1.png'>
+<p>
+	The <l>RootResources</l> class can also be defined as a servlet in a <l>web.xml</l> file:
+</p>
+<p class='bpcode w800'>
+	<xt>&lt;web-app</xt> <xa>version</xa>=<xs>'3.0'</xs><xt>&gt;</xt>
+		<xt>&lt;servlet&gt;</xt>
+			<xt>&lt;servlet-name&gt;</xt>RootResources<xt>&lt;/servlet-name&gt;</xt>
+			<xt>&lt;servlet-class&gt;</xt>org.apache.juneau.examples.rest.RootResources<xt>&lt;/servlet-class&gt;</xt>
+		<xt>&lt;/servlet&gt;</xt>
+		<xt>&lt;servlet-mapping&gt;</xt>
+			<xt>&lt;servlet-name&gt;</xt>RootResources<xt>&lt;/servlet-name&gt;</xt>
+			<xt>&lt;url-pattern&gt;</xt>/*<xt>&lt;/url-pattern&gt;</xt>
+		<xt>&lt;/servlet-mapping&gt;</xt>
+	<xt>&lt;/web-app&gt;</xt>
+</p>
+<p>
+	The <l>RootResources</l> class consists entirely of annotations:
+</p>
+
+<h5 class='figure'>RootResources.java</h5>
+<p class='bpcode w800'>
+	<jd>/**
+	 * Sample REST resource showing how to implement a "router" resource page.
+	 */</jd>
+	<ja>@RestResource</ja>(
+		path=<js>"/"</js>,
+		title=<js>"Root resources"</js>,
+		description=<js>"Example of a router resource page."</js>,
 		htmldoc=<ja>@HtmlDoc</ja>(
 			widgets={
 				ContentTypeMenuItem.<jk>class</jk>,
@@ -24377,12 +25394,12 @@
 	The request passed to the child resource is the same as if the child resource had been deployed 
 	independently (e.g. path-info, resource-URI, and so forth).
 </p>
-</div><!-- END: 12.1 - juneau-examples-rest.RootResources -->
+</div><!-- END: 15.1 - juneau-examples-rest.RootResources -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic updated' onclick='toggle(this)'><a href='#juneau-examples-rest.HelloWorldResource' id='juneau-examples-rest.HelloWorldResource'>12.2 - HelloWorldResource</a></h3>
-<div class='topic'><!-- START: 12.2 - juneau-examples-rest.HelloWorldResource -->
+<h3 class='topic updated' onclick='toggle(this)'><a href='#juneau-examples-rest.HelloWorldResource' id='juneau-examples-rest.HelloWorldResource'>15.2 - HelloWorldResource</a></h3>
+<div class='topic'><!-- START: 15.2 - juneau-examples-rest.HelloWorldResource -->
 <p>
 	The <l>HelloWorldResource</l> class is a simple resource that prints a "Hello world!" message.
 </p>
@@ -24446,12 +25463,12 @@
 	http://localhost:10000/helloWorld?Accept=text/json&amp;plainText=true
 </p>			
 <img class='bordered w800' src='doc-files/juneau-examples-rest.HelloWorldResource.2.png'>
-</div><!-- END: 12.2 - juneau-examples-rest.HelloWorldResource -->
+</div><!-- END: 15.2 - juneau-examples-rest.HelloWorldResource -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic new' onclick='toggle(this)'><a href='#juneau-examples-rest.PetStoreResource' id='juneau-examples-rest.PetStoreResource'>12.3 - PetStore</a></h3>
-<div class='topic'><!-- START: 12.3 - juneau-examples-rest.PetStoreResource -->
+<h3 class='topic new' onclick='toggle(this)'><a href='#juneau-examples-rest.PetStoreResource' id='juneau-examples-rest.PetStoreResource'>15.3 - PetStore</a></h3>
+<div class='topic'><!-- START: 15.3 - juneau-examples-rest.PetStoreResource -->
 <p>
 	The <code>PetStore</code> application is an functional application meant to demonstrate the following:
 </p>
@@ -25814,12 +26831,12 @@
 <p>
 	Note that we could have also used <ja>@FormData</ja> parameters as well.
 </p>
-</div><!-- END: 12.3 - juneau-examples-rest.PetStoreResource -->
+</div><!-- END: 15.3 - juneau-examples-rest.PetStoreResource -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic new' onclick='toggle(this)'><a href='#juneau-examples-rest.DtoExamples' id='juneau-examples-rest.DtoExamples'>12.4 - DtoExamples</a></h3>
-<div class='topic'><!-- START: 12.4 - juneau-examples-rest.DtoExamples -->
+<h3 class='topic new' onclick='toggle(this)'><a href='#juneau-examples-rest.DtoExamples' id='juneau-examples-rest.DtoExamples'>15.4 - DtoExamples</a></h3>
+<div class='topic'><!-- START: 15.4 - juneau-examples-rest.DtoExamples -->
 <p>
 	The <l>DtoExamples</l> resource is a resource group for demonstrating various DTO examples.
 </p>
@@ -26038,12 +27055,12 @@
 		} 
 	} 		
 </p>
-</div><!-- END: 12.4 - juneau-examples-rest.DtoExamples -->
+</div><!-- END: 15.4 - juneau-examples-rest.DtoExamples -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-examples-rest.ConfigResource' id='juneau-examples-rest.ConfigResource'>12.5 - ConfigResource</a></h3>
-<div class='topic'><!-- START: 12.5 - juneau-examples-rest.ConfigResource -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-examples-rest.ConfigResource' id='juneau-examples-rest.ConfigResource'>15.5 - ConfigResource</a></h3>
+<div class='topic'><!-- START: 15.5 - juneau-examples-rest.ConfigResource -->
 <p>
 	The {@link org.apache.juneau.microservice.resources.ConfigResource} class is a predefined reusable resource.
 	<br>It provides a REST interface for reading and altering the microservice config file.
@@ -26193,12 +27210,12 @@
 		} 
 	} 		
 </p>
-</div><!-- END: 12.5 - juneau-examples-rest.ConfigResource -->
+</div><!-- END: 15.5 - juneau-examples-rest.ConfigResource -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-examples-rest.LogsResource' id='juneau-examples-rest.LogsResource'>12.6 - LogsResource</a></h3>
-<div class='topic'><!-- START: 12.6 - juneau-examples-rest.LogsResource -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#juneau-examples-rest.LogsResource' id='juneau-examples-rest.LogsResource'>15.6 - LogsResource</a></h3>
+<div class='topic'><!-- START: 15.6 - juneau-examples-rest.LogsResource -->
 <p>
 	The {@link org.apache.juneau.microservice.resources.LogsResource} class is a reusable predefined resource.
 	<br>It provides a REST interface for the log files generated by the microservice.
@@ -26210,13 +27227,108 @@
 	http://localhost:10000/logs
 </p>			
 <img class='bordered w800' src='doc-files/juneau-examples-rest.LogsResource.1.png'>
-</div><!-- END: 12.6 - juneau-examples-rest.LogsResource -->
-</div><!-- END: 12 - juneau-examples-rest -->
+</div><!-- END: 15.6 - juneau-examples-rest.LogsResource -->
+</div><!-- END: 15 - juneau-examples-rest -->
+
+<!-- ==================================================================================================== -->
+
+<h2 class='topic todo' onclick='toggle(this)'><a href='#juneau-examples-rest-jetty' id='juneau-examples-rest-jetty'>16 - juneau-examples-rest</a></h2>
+<div class='topic'><!-- START: 16 - juneau-examples-rest-jetty -->
+<h5 class='figure'>Archive File</h5>
+<p class='bpcode w500'>
+	juneau-examples-rest-{@property juneauVersion}.zip 
+</p>	
+
+<p>
+	The <code>juneau-examples-rest</code> project includes everything you need to start the Samples REST 
+	microservice in an Eclipse workspace.
+</p>
+<p>
+	This project is packaged as a Juneau Microservice project that allows REST resources to be started
+	using embedded Jetty.
+</p>	
+
+<h5 class='topic'>juneau-examples-rest install instructions</h5>
+<p>
+	Download the <code>juneau-examples-rest-{@property juneauVersion}.zip</code> file from the downloads page
+	(located in the binaries) and import it into your workspace as an existing project:
+</p>
+<img class='bordered' src='doc-files/juneau-examples-rest.1.png' style='width:524px'>
+<p>
+	Select the archive file and import the project:
+</p>
+<img class='bordered' src='doc-files/juneau-examples-rest.2.png' style='width:523px'>
+<p>
+	Once loaded, you should see the following project structure:
+</p>
+<img class='bordered' src='doc-files/juneau-examples-rest.3.png' style='width:325px'>
+<p>
+	The microservice can be started from the <code>juneau-examples-rest.launch</code> file.
+	It will start up the microservice on port 10000 which you can then view through a browser:
+</p>
+<p class='bpcode w400'>
+	http://localhost:10000
+</p>			
+<img class='bordered w400' src='doc-files/juneau-examples-rest.4.png'>
+
+<!-- ==================================================================================================== -->
+
+<h3 class='topic new' onclick='toggle(this)'><a href='#juneau-examples-rest-jetty.Classes' id='juneau-examples-rest-jetty.Classes'>16.1 - Classes</a></h3>
+<div class='topic'><!-- START: 16.1 - juneau-examples-rest-jetty.Classes -->
+<p>
+	The <code>juneau-examples-rest-springboot</code> project contains the same classes as found in <code>juneau-examples-rest</code>
+	with the inclusion of a <code>org.apache.juneau.examples.rest.springboot</code> package containing the following:
+</p>
+<img class='bordered w800' src='doc-files/juneau-examples-rest-springboot.Classes.png'>
+<p>
+	The <code>App</code> class is used to invoke our application using Spring:
+</p>
+<p class='bpcode w800'>
+	<ja>@SpringBootApplication</ja>
+	<ja>@Controller</ja>
+	<ja>@Import</ja>({AppConfiguration.<jk>class</jk>, AppServletConfiguration.<jk>class</jk>})
+	<jk>public class</jk> App {
+	
+		<jk>private static volatile</jk> ConfigurableApplicationContext <jsf>context</jsf>;
+	
+		<jk>public static void</jk> main(String[] args) {
+			<jk>try</jk> {
+				<jsm>setProperty</jsm>(<js>"juneau.configFile"</js>, <js>"examples.cfg"</js>, <jk>false</jk>);
+				<jsf>context</jsf> = SpringApplication.<jsm>run</jsm>(App.<jk>class</jk>, args);
+				<jk>if</jk> (<jsf>context</jsf> == <jk>null</jk>)
+					System.<jsm>exit</jsm>(2); <jc>// Probably port in use?</jc>
+				AppConfiguration.<jsm>setAppContext</jsm>(context);
+				<jsm>setProperty</jsm>(<js>"juneau.serverPort"</js>, <jsf>context</jsf>.getEnvironment().getProperty(<js>"server.port"</js>), <jk>false</jk>);
+			} <jk>catch</jk> (Exception e) {
+				e.printStackTrace();
+			}
+		}
+	
+		<jk>public static void</jk> start() {
+			<jsm>main</jsm>(<jk>new</jk> String[0]);
+		}
+	
+		<jk>public static void</jk> stop() {
+			<jsf>context</jsf>.stop();
+		}
+	}
+</p>
+</div><!-- END: 16.1 - juneau-examples-rest-jetty.Classes -->
+
+<!-- ==================================================================================================== -->
+
+<h3 class='topic todo' onclick='toggle(this)'><a href='#juneau-examples-rest-jetty.DeployingToHeroku' id='juneau-examples-rest-jetty.DeployingToHeroku'>16.2 - Deploying to Heroku</a></h3>
+<div class='topic'><!-- START: 16.2 - juneau-examples-rest-jetty.DeployingToHeroku -->
+<p>
+	TODO
+</p>
+</div><!-- END: 16.2 - juneau-examples-rest-jetty.DeployingToHeroku -->
+</div><!-- END: 16 - juneau-examples-rest-jetty -->
 
 <!-- ==================================================================================================== -->
 
-<h2 class='topic new' onclick='toggle(this)'><a href='#juneau-examples-rest-springboot' id='juneau-examples-rest-springboot'>13 - juneau-examples-rest-springboot</a></h2>
-<div class='topic'><!-- START: 13 - juneau-examples-rest-springboot -->
+<h2 class='topic todo' onclick='toggle(this)'><a href='#juneau-examples-rest-springboot' id='juneau-examples-rest-springboot'>17 - juneau-examples-rest-springboot</a></h2>
+<div class='topic'><!-- START: 17 - juneau-examples-rest-springboot -->
 <h5 class='figure'>Archive File</h5>
 <p class='bpcode w500'>
 	juneau-examples-rest-springboot-{@property juneauVersion}.zip 
@@ -26244,30 +27356,68 @@
 	The microservice can be started from the <code>juneau-examples-rest-springboot.launch</code> file. 
 	It will start up the microservice on port 5000 which you can then view through a browser.
 </p>
+<p>
+	The Spring Boot examples app has identical functionality to the normal examples app except for console command support.
+</p>
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic todo' onclick='toggle(this)'><a href='#juneau-examples-rest-springboot.Classes' id='juneau-examples-rest-springboot.Classes'>13.1 - Classes</a></h3>
-<div class='topic'><!-- START: 13.1 - juneau-examples-rest-springboot.Classes -->
+<h3 class='topic new' onclick='toggle(this)'><a href='#juneau-examples-rest-springboot.Classes' id='juneau-examples-rest-springboot.Classes'>17.1 - Classes</a></h3>
+<div class='topic'><!-- START: 17.1 - juneau-examples-rest-springboot.Classes -->
 <p>
-	TODO
+	The <code>juneau-examples-rest-springboot</code> project contains the same classes as found in <code>juneau-examples-rest</code>
+	with the inclusion of a <code>org.apache.juneau.examples.rest.springboot</code> package containing the following:
+</p>
+<img class='bordered w800' src='doc-files/juneau-examples-rest-springboot.Classes.png'>
+<p>
+	The <code>App</code> class is used to invoke our application using Spring:
+</p>
+<p class='bpcode w800'>
+	<ja>@SpringBootApplication</ja>
+	<ja>@Controller</ja>
+	<ja>@Import</ja>({AppConfiguration.<jk>class</jk>, AppServletConfiguration.<jk>class</jk>})
+	<jk>public class</jk> App {
+	
+		<jk>private static volatile</jk> ConfigurableApplicationContext <jsf>context</jsf>;
+	
+		<jk>public static void</jk> main(String[] args) {
+			<jk>try</jk> {
+				<jsm>setProperty</jsm>(<js>"juneau.configFile"</js>, <js>"examples.cfg"</js>, <jk>false</jk>);
+				<jsf>context</jsf> = SpringApplication.<jsm>run</jsm>(App.<jk>class</jk>, args);
+				<jk>if</jk> (<jsf>context</jsf> == <jk>null</jk>)
+					System.<jsm>exit</jsm>(2); <jc>// Probably port in use?</jc>
+				AppConfiguration.<jsm>setAppContext</jsm>(context);
+				<jsm>setProperty</jsm>(<js>"juneau.serverPort"</js>, <jsf>context</jsf>.getEnvironment().getProperty(<js>"server.port"</js>), <jk>false</jk>);
+			} <jk>catch</jk> (Exception e) {
+				e.printStackTrace();
+			}
+		}
+	
+		<jk>public static void</jk> start() {
+			<jsm>main</jsm>(<jk>new</jk> String[0]);
+		}
+	
+		<jk>public static void</jk> stop() {
+			<jsf>context</jsf>.stop();
+		}
+	}
 </p>
-</div><!-- END: 13.1 - juneau-examples-rest-springboot.Classes -->
+</div><!-- END: 17.1 - juneau-examples-rest-springboot.Classes -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic todo' onclick='toggle(this)'><a href='#juneau-examples-rest-springboot.DeployingToHeroku' id='juneau-examples-rest-springboot.DeployingToHeroku'>13.2 - Deploying to Heroku</a></h3>
-<div class='topic'><!-- START: 13.2 - juneau-examples-rest-springboot.DeployingToHeroku -->
+<h3 class='topic todo' onclick='toggle(this)'><a href='#juneau-examples-rest-springboot.DeployingToHeroku' id='juneau-examples-rest-springboot.DeployingToHeroku'>17.2 - Deploying to Heroku</a></h3>
+<div class='topic'><!-- START: 17.2 - juneau-examples-rest-springboot.DeployingToHeroku -->
 <p>
 	TODO
 </p>
-</div><!-- END: 13.2 - juneau-examples-rest-springboot.DeployingToHeroku -->
-</div><!-- END: 13 - juneau-examples-rest-springboot -->
+</div><!-- END: 17.2 - juneau-examples-rest-springboot.DeployingToHeroku -->
+</div><!-- END: 17 - juneau-examples-rest-springboot -->
 
 <!-- ==================================================================================================== -->
 
-<h2 class='topic ' onclick='toggle(this)'><a href='#Security' id='Security'>14 - Security Best-Practices</a></h2>
-<div class='topic'><!-- START: 14 - Security -->
+<h2 class='topic ' onclick='toggle(this)'><a href='#Security' id='Security'>18 - Security Best-Practices</a></h2>
+<div class='topic'><!-- START: 18 - Security -->
 <p>
 	Security is always an ongoing concern in any library.  
 	If you discover any security vulnerabilities in this code, please refer to the instructions found here:
@@ -26278,8 +27428,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#Security.juneau-marshall' id='Security.juneau-marshall'>14.1 - juneau-marshall</a></h3>
-<div class='topic'><!-- START: 14.1 - Security.juneau-marshall -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#Security.juneau-marshall' id='Security.juneau-marshall'>18.1 - juneau-marshall</a></h3>
+<div class='topic'><!-- START: 18.1 - Security.juneau-marshall -->
 <h5 class='topic'>Demarshalling vulnerabilities</h5>
 <p>
 	One common security vulnerability is the ability to create arbitrary Java object instances through crafted
@@ -26352,12 +27502,12 @@
 	<li>The RDF parsers rely on Apache Jena 2.7.1.  
 		As of <code>7.0.1</code>, no known security vulnerabilities exist that affect Juneau at this time.
 </ul>
-</div><!-- END: 14.1 - Security.juneau-marshall -->
+</div><!-- END: 18.1 - Security.juneau-marshall -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#Security.juneau-svl' id='Security.juneau-svl'>14.2 - juneau-svl</a></h3>
-<div class='topic'><!-- START: 14.2 - Security.juneau-svl -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#Security.juneau-svl' id='Security.juneau-svl'>18.2 - juneau-svl</a></h3>
+<div class='topic'><!-- START: 18.2 - Security.juneau-svl -->
 <p>
 	Care must be used when defining new {@link org.apache.juneau.svl.Var Vars} using the SVL API since mistakes 
 	could potentially expose system properties, environment variables, or even file system files.
@@ -26402,12 +27552,12 @@
 	{@link org.apache.juneau.svl.Var#allowNested()} and {@link org.apache.juneau.svl.Var#allowRecurse()} 
 	methods to prevent recursive handling of variables.
 </p>
-</div><!-- END: 14.2 - Security.juneau-svl -->
+</div><!-- END: 18.2 - Security.juneau-svl -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic ' onclick='toggle(this)'><a href='#Security.juneau-rest-server' id='Security.juneau-rest-server'>14.3 - juneau-rest-server</a></h3>
-<div class='topic'><!-- START: 14.3 - Security.juneau-rest-server -->
+<h3 class='topic ' onclick='toggle(this)'><a href='#Security.juneau-rest-server' id='Security.juneau-rest-server'>18.3 - juneau-rest-server</a></h3>
+<div class='topic'><!-- START: 18.3 - Security.juneau-rest-server -->
 <p>
 	Denial of service attacks can be alleviated through the {@link org.apache.juneau.rest.annotation.RestResource#maxInput() maxInput()}
 	setting.  Arbitrarily-large input will trigger an exception before causing out-of-memory errors.
@@ -26419,8 +27569,8 @@
 	becomes an issue.  However, this is NOT true of the RDF parsers that use an intermediate DOM.  If parsing 
 	RDF, you may want to consider lowering the max-input value above.
 </p>
-</div><!-- END: 14.3 - Security.juneau-rest-server -->
-</div><!-- END: 14 - Security -->
+</div><!-- END: 18.3 - Security.juneau-rest-server -->
+</div><!-- END: 18 - Security -->
 
 
 <h2 class='topic' onclick='toggle(this)'><a href='#ReleaseNotes' id='ReleaseNotes'>Release Notes</a></h2>
@@ -32520,6 +33670,27 @@
 		</ul>
 </ul>
 
+<h5 class='topic w800'>juneau-server</h5>
+<ul class='spaced-list'>
+	<li>
+		New methods on {@link org.apache.juneau.rest.RestServlet}:
+		<ul class='doctree'>
+			<li class='jm'>{@link org.apache.juneau.rest.RestServlet#setRestResourceResolver(RestResourceResolver) setRestResourceResolver(RestResourceResolver)}
+			<li class='jm'>{@link org.apache.juneau.rest.RestServlet#getPath() getPath()}
+		</ul>
+	<li>
+		The registered resource resolver is now used to instantiate objects of classes defined via <ja>@RestResource</ja>.
+		<br>This allows for any of those instance to be injectable beans.
+</ul>
+
+<h5 class='topic w800'>juneau-microservice-server</h5>
+<ul class='spaced-list'>
+	<li>
+		If the microservice cannot find a config file in the home directory with the same name as the jar and
+		the <js>"juneau.configFile"</js> system property is not found, it will try to find any file in the home
+		directory that ends with <js>".cfg"</js>.
+</ul>
+
 <h5 class='topic w800'>juneau-examples-rest</h5>
 <ul class='spaced-list'>
 	<li>
diff --git a/juneau-doc/src/main/javadoc/resources/docs.txt b/juneau-doc/src/main/javadoc/resources/docs.txt
index c6511d7..87ad529 100644
--- a/juneau-doc/src/main/javadoc/resources/docs.txt
+++ b/juneau-doc/src/main/javadoc/resources/docs.txt
@@ -81,6 +81,7 @@ juneau-config.SettingValues = #juneau-config.SettingValues, Overview > juneau-co
 juneau-config.SettingValues.BulkSettingValues = #juneau-config.SettingValues.BulkSettingValues, Overview > juneau-config > Setting Values > Setting Values in Bulk
 juneau-config.SettingValues.CustomEntrySerialization = #juneau-config.SettingValues.CustomEntrySerialization, Overview > juneau-config > Setting Values > Custom Entry Serialization
 juneau-config.SettingValues.FileSystemChanges = #juneau-config.SettingValues.FileSystemChanges, Overview > juneau-config > Setting Values > File System Changes
+juneau-config.SystemDefaultConfig = #juneau-config.SystemDefaultConfig, Overview > juneau-config > System Default Config
 juneau-config.Variables = #juneau-config.Variables, Overview > juneau-config > Variables
 juneau-config.Variables.LogicVariables = #juneau-config.Variables.LogicVariables, Overview > juneau-config > Variables > Logic Variables
 juneau-dto = #juneau-dto, Overview > juneau-dto
@@ -90,6 +91,9 @@ juneau-dto.Swagger = #juneau-dto.Swagger, Overview > juneau-dto > Swagger
 juneau-dto.SwaggerUI = #juneau-dto.SwaggerUI, Overview > juneau-dto > Swagger UI
 juneau-examples-core = #juneau-examples-core, Overview > juneau-examples-core
 juneau-examples-rest = #juneau-examples-rest, Overview > juneau-examples-rest
+juneau-examples-rest-jetty = #juneau-examples-rest-jetty, Overview > juneau-examples-rest
+juneau-examples-rest-jetty.Classes = #juneau-examples-rest-jetty.Classes, Overview > juneau-examples-rest > Classes
+juneau-examples-rest-jetty.DeployingToHeroku = #juneau-examples-rest-jetty.DeployingToHeroku, Overview > juneau-examples-rest > Deploying to Heroku
 juneau-examples-rest-springboot = #juneau-examples-rest-springboot, Overview > juneau-examples-rest-springboot
 juneau-examples-rest-springboot.Classes = #juneau-examples-rest-springboot.Classes, Overview > juneau-examples-rest-springboot > Classes
 juneau-examples-rest-springboot.DeployingToHeroku = #juneau-examples-rest-springboot.DeployingToHeroku, Overview > juneau-examples-rest-springboot > Deploying to Heroku
@@ -192,21 +196,37 @@ juneau-marshall.XmlDetails.Serializers = #juneau-marshall.XmlDetails.Serializers
 juneau-marshall.XmlDetails.XmlChildNameAnnotation = #juneau-marshall.XmlDetails.XmlChildNameAnnotation, Overview > juneau-marshall > XML Details > @Xml(childName) Annotation
 juneau-marshall.XmlDetails.XmlFormatAnnotation = #juneau-marshall.XmlDetails.XmlFormatAnnotation, Overview > juneau-marshall > XML Details > @Xml(format) Annotation
 juneau-marshall.XmlDetails.XmlSchema = #juneau-marshall.XmlDetails.XmlSchema, Overview > juneau-marshall > XML Details > XML-Schema Support
-juneau-microservice-server = #juneau-microservice-server, Overview > juneau-microservice-server
-juneau-microservice-server.Config = #juneau-microservice-server.Config, Overview > juneau-microservice-server > Config
-juneau-microservice-server.Config.ConfigApi = #juneau-microservice-server.Config.ConfigApi, Overview > juneau-microservice-server > Config > Config File API
-juneau-microservice-server.GettingStarted = #juneau-microservice-server.GettingStarted, Overview > juneau-microservice-server > Getting Started
-juneau-microservice-server.GettingStarted.Building = #juneau-microservice-server.GettingStarted.Building, Overview > juneau-microservice-server > Getting Started > Building and Running from Command-Line
-juneau-microservice-server.GettingStarted.Installing = #juneau-microservice-server.GettingStarted.Installing, Overview > juneau-microservice-server > Getting Started > Installing in Eclipse
-juneau-microservice-server.GettingStarted.Running = #juneau-microservice-server.GettingStarted.Running, Overview > juneau-microservice-server > Getting Started > Running in Eclipse
-juneau-microservice-server.Introduction = #juneau-microservice-server.Introduction, Overview > juneau-microservice-server > Microservice Introduction
-juneau-microservice-server.Manifest = #juneau-microservice-server.Manifest, Overview > juneau-microservice-server > Manifest File
-juneau-microservice-server.Manifest.ManifestApi = #juneau-microservice-server.Manifest.ManifestApi, Overview > juneau-microservice-server > Manifest File > Manifest API
-juneau-microservice-server.PredefinedResourceClasses = #juneau-microservice-server.PredefinedResourceClasses, Overview > juneau-microservice-server > Predefined Resource Classes
-juneau-microservice-server.ResourceClasses = #juneau-microservice-server.ResourceClasses, Overview > juneau-microservice-server > Resource Classes
-juneau-microservice-server.RestMicroservice = #juneau-microservice-server.RestMicroservice, Overview > juneau-microservice-server > RestMicroservice
-juneau-microservice-server.RestMicroservice.Extending = #juneau-microservice-server.RestMicroservice.Extending, Overview > juneau-microservice-server > RestMicroservice > Extending RestMicroservice
-juneau-microservice-server.UiCustomization = #juneau-microservice-server.UiCustomization, Overview > juneau-microservice-server > UI Customization
+juneau-microservice-core = #juneau-microservice-core, Overview > juneau-microservice-server
+juneau-microservice-core.Config = #juneau-microservice-core.Config, Overview > juneau-microservice-server > Config
+juneau-microservice-core.Config.ConfigApi = #juneau-microservice-core.Config.ConfigApi, Overview > juneau-microservice-server > Config > Config File API
+juneau-microservice-core.GettingStarted = #juneau-microservice-core.GettingStarted, Overview > juneau-microservice-server > Getting Started
+juneau-microservice-core.GettingStarted.Building = #juneau-microservice-core.GettingStarted.Building, Overview > juneau-microservice-server > Getting Started > Building and Running from Command-Line
+juneau-microservice-core.GettingStarted.Installing = #juneau-microservice-core.GettingStarted.Installing, Overview > juneau-microservice-server > Getting Started > Installing in Eclipse
+juneau-microservice-core.GettingStarted.Running = #juneau-microservice-core.GettingStarted.Running, Overview > juneau-microservice-server > Getting Started > Running in Eclipse
+juneau-microservice-core.Introduction = #juneau-microservice-core.Introduction, Overview > juneau-microservice-server > Microservice Introduction
+juneau-microservice-core.Manifest = #juneau-microservice-core.Manifest, Overview > juneau-microservice-server > Manifest File
+juneau-microservice-core.Manifest.ManifestApi = #juneau-microservice-core.Manifest.ManifestApi, Overview > juneau-microservice-server > Manifest File > Manifest API
+juneau-microservice-core.PredefinedResourceClasses = #juneau-microservice-core.PredefinedResourceClasses, Overview > juneau-microservice-server > Predefined Resource Classes
+juneau-microservice-core.ResourceClasses = #juneau-microservice-core.ResourceClasses, Overview > juneau-microservice-server > Resource Classes
+juneau-microservice-core.RestMicroservice = #juneau-microservice-core.RestMicroservice, Overview > juneau-microservice-server > RestMicroservice
+juneau-microservice-core.RestMicroservice.Extending = #juneau-microservice-core.RestMicroservice.Extending, Overview > juneau-microservice-server > RestMicroservice > Extending RestMicroservice
+juneau-microservice-core.UiCustomization = #juneau-microservice-core.UiCustomization, Overview > juneau-microservice-server > UI Customization
+juneau-microservice-jetty = #juneau-microservice-jetty, Overview > juneau-microservice-server
+juneau-microservice-jetty-template = #juneau-microservice-jetty-template, Overview > juneau-microservice-server
+juneau-microservice-jetty.Config = #juneau-microservice-jetty.Config, Overview > juneau-microservice-server > Config
+juneau-microservice-jetty.Config.ConfigApi = #juneau-microservice-jetty.Config.ConfigApi, Overview > juneau-microservice-server > Config > Config File API
+juneau-microservice-jetty.GettingStarted = #juneau-microservice-jetty.GettingStarted, Overview > juneau-microservice-server > Getting Started
+juneau-microservice-jetty.GettingStarted.Building = #juneau-microservice-jetty.GettingStarted.Building, Overview > juneau-microservice-server > Getting Started > Building and Running from Command-Line
+juneau-microservice-jetty.GettingStarted.Installing = #juneau-microservice-jetty.GettingStarted.Installing, Overview > juneau-microservice-server > Getting Started > Installing in Eclipse
+juneau-microservice-jetty.GettingStarted.Running = #juneau-microservice-jetty.GettingStarted.Running, Overview > juneau-microservice-server > Getting Started > Running in Eclipse
+juneau-microservice-jetty.Introduction = #juneau-microservice-jetty.Introduction, Overview > juneau-microservice-server > Microservice Introduction
+juneau-microservice-jetty.Manifest = #juneau-microservice-jetty.Manifest, Overview > juneau-microservice-server > Manifest File
+juneau-microservice-jetty.Manifest.ManifestApi = #juneau-microservice-jetty.Manifest.ManifestApi, Overview > juneau-microservice-server > Manifest File > Manifest API
+juneau-microservice-jetty.PredefinedResourceClasses = #juneau-microservice-jetty.PredefinedResourceClasses, Overview > juneau-microservice-server > Predefined Resource Classes
+juneau-microservice-jetty.ResourceClasses = #juneau-microservice-jetty.ResourceClasses, Overview > juneau-microservice-server > Resource Classes
+juneau-microservice-jetty.RestMicroservice = #juneau-microservice-jetty.RestMicroservice, Overview > juneau-microservice-server > RestMicroservice
+juneau-microservice-jetty.RestMicroservice.Extending = #juneau-microservice-jetty.RestMicroservice.Extending, Overview > juneau-microservice-server > RestMicroservice > Extending RestMicroservice
+juneau-microservice-jetty.UiCustomization = #juneau-microservice-jetty.UiCustomization, Overview > juneau-microservice-server > UI Customization
 juneau-rest-client = #juneau-rest-client, Overview > juneau-rest-client
 juneau-rest-client.Authentication = #juneau-rest-client.Authentication, Overview > juneau-rest-client > Authentication
 juneau-rest-client.Authentication.BASIC = #juneau-rest-client.Authentication.BASIC, Overview > juneau-rest-client > Authentication > BASIC Authentication
@@ -234,6 +254,8 @@ juneau-rest-client.UnitTesting = #juneau-rest-client.UnitTesting, Overview > jun
 juneau-rest-server = #juneau-rest-server, Overview > juneau-rest-server
 juneau-rest-server-jaxrs = #juneau-rest-server-jaxrs, Overview > juneau-rest-server-jaxrs
 juneau-rest-server-jaxrs.BaseProvider = #juneau-rest-server-jaxrs.BaseProvider, Overview > juneau-rest-server-jaxrs > Juneau JAX-RS Provider
+juneau-rest-server-springboot = #juneau-rest-server-springboot, Overview > juneau-rest-server-springboot
+juneau-rest-server-springboot.TODO = #juneau-rest-server-springboot.TODO, Overview > juneau-rest-server-springboot > TODO
 juneau-rest-server.BuiltInParameters = #juneau-rest-server.BuiltInParameters, Overview > juneau-rest-server > Built-in Parameters
 juneau-rest-server.ClassHierarchy = #juneau-rest-server.ClassHierarchy, Overview > juneau-rest-server > Class Hierarchy
 juneau-rest-server.ClientVersioning = #juneau-rest-server.ClientVersioning, Overview > juneau-rest-server > Client Versioning
diff --git a/juneau-doc/src/main/javadoc/resources/fragments/about.html b/juneau-doc/src/main/javadoc/resources/fragments/about.html
deleted file mode 100644
index bc8175c..0000000
--- a/juneau-doc/src/main/javadoc/resources/fragments/about.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.
- ***************************************************************************************************************************/
- -->
-<p>
-	Apache Juneau&trade; is a single cohesive Java ecosystem consisting of the following parts:
-</p>
-<ul class='spaced-list'>
-	<li><b>juneau-marshall</b><br>A universal toolkit for marshalling POJOs to a wide variety of content types using a common framework with no external library dependencies.
-	<li><b>juneau-dto</b><br>A variety of predefined DTOs for serializing and parsing languages such as HTML5, Swagger and ATOM.
-	<li><b>juneau-svl</b><br>A simple yet powerful variable replacement language API.
-	<li><b>juneau-config</b><br>A sophisticated configuration file API.
-	<li><b>juneau-rest-server</b><br>A universal REST server API for creating Swagger-based self-documenting REST interfaces using POJOs, simply deployed as 
-		one or more top-level servlets in any Servlet 3.1.0+ container.
-	<li><b>juneau-rest-client</b><br>A universal REST client API for interacting with Juneau or 3rd-party REST interfaces using POJOs and proxy interfaces.
-	<li><b>juneau-microservice</b><br>A REST microservice API that combines all the features above with a simple configurable Jetty server for 
-		creating lightweight standalone REST interfaces that start up in milliseconds.
-</ul>
-<p>
-	Questions via email to <a class='doclink' href='mailto:dev@juneau.apache.org?Subject=Apache%20Juneau%20question'>dev@juneau.apache.org</a> are always welcome.
-</p>
-<p>
-	Juneau is packed with features that may not be obvious at first.  
-	Users are encouraged to ask for code reviews by providing links to specific source files such as through GitHub.
-	Not only can we help you with feedback, but it helps us understand usage patterns to further improve the product.
-</p>
diff --git a/juneau-doc/src/main/javadoc/resources/fragments/toc.html b/juneau-doc/src/main/javadoc/resources/fragments/toc.html
deleted file mode 100644
index e3eb254..0000000
--- a/juneau-doc/src/main/javadoc/resources/fragments/toc.html
+++ /dev/null
@@ -1,380 +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.
- ***************************************************************************************************************************/
--->
-<ol class='toc'>
-	<li><p class='toc2 '><a class='doclink' href='{OVERVIEW_URL}#Introduction'>Introduction</a></p>
-	<ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#Introduction.Features'>Features</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#Introduction.Components'>Components</a></p>
-	</ol>
-	<li><p class='toc2 '><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall'>juneau-marshall</a></p>
-	<ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Serializers'>Serializers</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Parsers'>Parsers</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Marshalls'>Marshalls</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.HttpPartSerializers'>HTTP Part Serializers</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.HttpPartParsers'>HTTP Part Parsers</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.ConfigurableProperties'>Configurable Properties</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.ConfigurableProperties.Common'>Common Serializer Properties</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.ConfigurableProperties.CommonSerializer'>Common Serializer Properties</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.ConfigurableProperties.CommonParser'>Common Parser Properties</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.ObjectMap'>ObjectMap and ObjectList</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Groups'>SerializerGroups and ParserGroups</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.ContextsBuildersSessionsPropertyStores'>Contexts, Builders, Sessions, and PropertyStores</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms'>Transforms</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.PojoSwaps'>PojoSwaps</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.PerMediaTypePojoSwaps'>Per-media-type PojoSwaps</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.OneWayPojoSwaps'>One-way PojoSwaps</a></p>
-			<li><p class='updated'><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.SwapAnnotation'>@Swap Annotation</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.TemplatedSwaps'>Templated Swaps</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.SwapMethods'>Swap Methods</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.SurrogateClasses'>Surrogate Classes</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.BeanAnnotation'>@BeanProperty Annotation</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.BeanPropertyAnnotation'>@BeanProperty Annotation</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.BeanConstructorAnnotation'>@BeanConstructor Annotation</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.BeanIgnoreAnnotation'>@BeanIgnore Annotation</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.NamePropertyAnnotation'>@NameProperty Annotation</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.ParentPropertyAnnotation'>@ParentProperty Annotation</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.PojoBuilders'>POJO Builders</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.BeanFilters'>BeanFilter Class</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.InterfaceFilters'>Interface Filters</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.StopClasses'>Stop Classes</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.BypassSerialization'>Bypass Serialization using Readers and InputStreams</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.BeanDictionaries'>Bean Names and Dictionaries</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.BeanDictionaries.BeanSubTypes'>Bean Subtypes</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.VirtualBeans'>Virtual Beans</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Recursion'>Non-Tree Models and Recursion Detection</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.ParsingIntoGenericModels'>Parsing into Generic Models</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.ReadingContinuousStreams'>Reading Continuous Streams</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.URIs'>URIs</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.JacksonComparison'>Comparison with Jackson</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.PojoCategories'>POJO Categories</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.JsonDetails'>JSON Details</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.JsonDetails.Methodology'>JSON Methodology</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.JsonDetails.Serializers'>JSON Serializers</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.JsonDetails.SimplifiedJson'>Simplified JSON</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.JsonDetails.Parsers'>JSON Parsers</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.JsonDetails.JsonAnnotation'>@Json Annotation</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.JsonDetails.JsonSchema'>JSON-Schema Support</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.XmlDetails'>XML Details</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.XmlDetails.Methodology'>XML Methodology</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.XmlDetails.Serializers'>XML Serializers</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.XmlDetails.Parsers'>XML Parsers</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.XmlDetails.BeanTypeNameAnnotation'>@Bean(typeName) Annotation</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.XmlDetails.XmlChildNameAnnotation'>@Xml(childName) Annotation</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.XmlDetails.XmlFormatAnnotation'>@Xml(format) Annotation</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.XmlDetails.Namespaces'>Namespaces</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.XmlDetails.XmlSchema'>XML-Schema Support</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.HtmlDetails'>HTML Details</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.HtmlDetails.Methodology'>HTML Methodology</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.HtmlDetails.Serializers'>HTML Serializers</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.HtmlDetails.Parsers'>HTML Parsers</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.HtmlDetails.HtmlAnnotation'>@Html Annotation</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.HtmlDetails.HtmlRenderAnnotation'>@Html(render) Annotation</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.HtmlDetails.HtmlDocSerializer'>HtmlDocSerializer</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.HtmlDetails.BasicHtmlDocTemplate'>BasicHtmlDocTemplate</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.HtmlDetails.CustomTemplates'>Custom Templates</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.HtmlDetails.HtmlSchema'>HTML-Schema Support</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.UonDetails'>UON Details</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.UonDetails.Methodology'>UON Methodology</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.UonDetails.Serializers'>UON Serializers</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.UonDetails.Parsers'>UON Parsers</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.UrlEncodingDetails'>URL-Encoding Details</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.UrlEncodingDetails.Methodology'>URL-Encoding Methodology</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.UrlEncodingDetails.Serializers'>URL-Encoding Serializers</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.UrlEncodingDetails.Parsers'>URL-Encoding Parsers</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.UrlEncodingDetails.UrlEncodingAnnotation'>@UrlEncoding Annotation</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.MsgPackDetails'>MessagePack Details</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.MsgPackDetails.Serializers'>MessagePack Serializers</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.MsgPackDetails.Parsers'>MessagePack Parsers</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.OpenApiDetails'>OpenAPI Details</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.OpenApiDetails.Methodology'>OpenAPI Methodology</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.OpenApiDetails.Serializers'>OpenAPI Serializers</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.OpenApiDetails.Parsers'>OpenAPI Parsers</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.BestPractices'>Best Practices</a></p>
-	</ol>
-	<li><p class='toc2 '><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall-rdf'>juneau-marshall-rdf</a></p>
-	<ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall-rdf.RdfDetails'>RDF Details</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall-rdf.RdfDetails.Serializers'>RDF Serializers</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall-rdf.RdfDetails.Parsers'>RDF Parsers</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall-rdf.RdfDetails.RdfAnnotation'>@Rdf Annotation</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall-rdf.RdfDetails.Namespaces'>Namespaces</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall-rdf.RdfDetails.UriProperties'>URI Properties</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall-rdf.RdfDetails.RootProperty'>Root Property</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall-rdf.RdfDetails.TypedLiterals'>Typed Literals</a></p>
-		</ol>
-	</ol>
-	<li><p class='toc2 '><a class='doclink' href='{OVERVIEW_URL}#juneau-dto'>juneau-dto</a></p>
-	<ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-dto.HTML5'>HTML5</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-dto.Atom'>Atom</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-dto.Swagger'>Swagger</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-dto.SwaggerUI'>Swagger UI</a></p>
-	</ol>
-	<li><p class='toc2 '><a class='doclink' href='{OVERVIEW_URL}#juneau-svl'>juneau-svl</a></p>
-	<ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-svl.SimpleVarLanguage'>Simple Variable Language</a></p>
-		<li><p class='updated'><a class='doclink' href='{OVERVIEW_URL}#juneau-svl.SvlVariables'>SVL Variables</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-svl.VarResolvers'>VarResolvers and VarResolverSessions</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-svl.OtherNotes'>Other Notes</a></p>
-	</ol>
-	<li><p class='toc2 '><a class='doclink' href='{OVERVIEW_URL}#juneau-config'>juneau-config</a></p>
-	<ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.Overview'>Overview</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.Overview.SyntaxRules'>Syntax Rules</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.EntryTypes'>Entry Types</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.EntryTypes.PrimitiveTypes'>Primitive Types</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.EntryTypes.POJOs'>POJOs</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.EntryTypes.Arrays'>Arrays</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.EntryTypes.Collections'>Collections</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.EntryTypes.BinaryData'>Binary Data</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.Variables'>Variables</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.Variables.LogicVariables'>Logic Variables</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.EncodedEntries'>Encoded Entries</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.SectionMaps'>Section Maps</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.SectionBeans'>Section Beans</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.SectionInterfaces'>Section Interfaces</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.SettingValues'>Setting Values</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.SettingValues.FileSystemChanges'>File System Changes</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.SettingValues.CustomEntrySerialization'>Custom Entry Serialization</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.SettingValues.BulkSettingValues'>Setting Values in Bulk</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.Listeners'>Listeners</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.Serializing'>Serializing</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.ConfigStores'>Config Stores</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.ConfigStores.ConfigMemoryStore'>ConfigMemoryStore</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.ConfigStores.ConfigFileStore'>ConfigFileStore</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.ConfigStores.CustomConfigStores'>Custom ConfigStores</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.ConfigStores.ConfigStoreListeners'>ConfigStore Listeners</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.ReadOnlyConfigs'>Read-only Configs</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-config.ClosingConfigs'>Closing Configs</a></p>
-	</ol>
-	<li><p class='toc2 '><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server'>juneau-rest-server</a></p>
-	<ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HelloWorldExample'>Hello World Example</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.ClassHierarchy'>Class Hierarchy</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Instantiation'>Instantiation</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Instantiation.RestServlet'>RestServlet</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Instantiation.BasicRestServlet'>BasicRestServlet</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Instantiation.Children'>Children</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Instantiation.RouterPages'>Router Pages</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Instantiation.ResourceResolvers'>Resource Resolvers</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Instantiation.LifecycleHooks'>Lifecycle Hooks</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestResource'>@RestResource</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestResource.AnnotationInheritance'>Annotation Inheritance</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestContext'>RestContext</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod'>@RestMethod</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.MethodParameters'>Java Method Parameters</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.RestRequest'>RestRequest</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.RestResponse'>RestResponse</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.RequestBody'>RequestBody</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.RequestHeaders'>RequestHeaders</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.RequestQuery'>RequestQuery</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.RequestFormData'>RequestFormData</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.RestMethodPath'>@RestMethod(path)</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.RequestPathMatch'>RequestPathMatch</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.MethodReturnTypes'>Method Return Types</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.ReaderResource'>ReaderResource</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.StreamResource'>StreamResource</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.RestMethodMatchers'>@RestMethod(matchers)</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.PredefinedResponses'>Predefined Responses</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.PredefinedExceptions'>Predefined Exceptions</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.PredefinedHelperBeans'>Predefined Helper Beans</a></p>
-		</ol>
-		<li><p class='updated'><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.restRPC'>restRPC</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.OpenApiSchemaPartParsing'>OpenAPI Schema Part Parsing</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.OpenApiSchemaPartSerializing'>OpenAPI Schema Part Serializing</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HttpPartAnnotations'>HTTP-Part Annotations</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HttpPartAnnotations.Body'>@Body</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HttpPartAnnotations.FormData'>@FormData</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HttpPartAnnotations.HasFormData'>@HasFormData</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HttpPartAnnotations.Query'>@Query</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HttpPartAnnotations.HasQuery'>@HasQuery</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HttpPartAnnotations.Header'>@Header</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HttpPartAnnotations.Path'>@Path</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HttpPartAnnotations.Request'>@Request</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HttpPartAnnotations.Response'>@Response</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HttpPartAnnotations.ResponseHeader'>@ResponseHeader</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HttpPartAnnotations.ResponseStatus'>@ResponseStatus</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HandlingFormPosts'>Handling Form Posts</a></p>
-		<li><p class='updated'><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HandlingMultiPartFormPosts'>Handling Multi-Part Form Posts</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Serializers'>Serializers</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Parsers'>Parsers</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Properties'>Properties</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Transforms'>Transforms</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.URIs'>URIs</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Guards'>Guards</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Converters'>Converters</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Messages'>Messages</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Encoders'>Encoders</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.SvlVariables'>SVL Variables</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.ConfigurationFiles'>Configuration Files</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.StaticFiles'>Static files</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.ClientVersioning'>Client Versioning</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestInfoProvider'>RestInfoProvider</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestInfoProvider.BasicRestInfoProvider'>BasicRestInfoProvider</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Swagger'>Swagger</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Swagger.BasicRestServlet'>BasicRestServlet</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Swagger.BasicSwaggerInfo'>Basic Swagger Info</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Swagger.Tags'>Tags</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Swagger.Operations'>Operations</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Swagger.Parameters'>Parameters</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Swagger.ParameterExamples'>Parameter Examples</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Swagger.Responses'>Responses</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Swagger.ResponseExamples'>Response Examples</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Swagger.Models'>Models</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Swagger.Stylesheet'>SwaggerUI.css</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HtmlDocAnnotation'>@HtmlDoc</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HtmlDocAnnotation.UIvsDI'>User Interfaces (UI) vs. Developer Interfaces (DI)</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HtmlDocAnnotation.Widgets'>Widgets</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HtmlDocAnnotation.PredefinedWidgets'>Predefined Widgets</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HtmlDocAnnotation.UiCustomization'>UI Customization</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HtmlDocAnnotation.Stylesheets'>Stylesheets</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.DefaultHeaders'>Default Headers</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.LoggingAndErrorHandling'>Logging and Error Handling</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HttpStatusCodes'>HTTP Status Codes</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.OverloadingHttpMethods'>Overloading HTTP Methods</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.BuiltInParameters'>Built-in Parameters</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.CustomSerializersAndParsers'>Custom Serializers and Parsers</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.UsingWithOsgi'>Using with OSGi</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.UnitTesting'>Serverless Unit Testing</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.Injection'>Using with Spring and Injection frameworks</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.HTTP2'>Using HTTP/2 features</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.OtherNotes'>Other Notes</a></p>
-	</ol>
-	<li><p class='toc2 '><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server-jaxrs'>juneau-rest-server-jaxrs</a></p>
-	<ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server-jaxrs.BaseProvider'>Juneau JAX-RS Provider</a></p>
-	</ol>
-	<li><p class='toc2 '><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client'>juneau-rest-client</a></p>
-	<ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies'>REST Proxies</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.RemoteResource'>@RemoteResource</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.RemoteMethod'>@RemoteMethod</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.Body'>@Body</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.FormData'>@FormData</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.Query'>@Query</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.Header'>@Header</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.Path'>@Path</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.Request'>@Request</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.Response'>@Response</a></p>
-			<li><p class='new'><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.DualPurposeInterfaces'>Dual-purpose (end-to-end) interfaces</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.SSL'>SSL Support</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.Authentication'>Authentication</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.Authentication.BASIC'>BASIC Authentication</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.Authentication.FORM'>FORM-based Authentication</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.Authentication.OIDC'>OIDC Authentication</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.ResponsePatterns'>Using Response Patterns</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.PipingOutput'>Piping Response Output</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.Debugging'>Debugging</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.Logging'>Logging</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.Interceptors'>Interceptors</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.UnitTesting'>Serverless Unit Testing</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.Other'>Other Useful Methods</a></p>
-	</ol>
-	<li><p class='toc2 '><a class='doclink' href='{OVERVIEW_URL}#juneau-microservice-server'>juneau-microservice-server</a></p>
-	<ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-microservice-server.Introduction'>Microservice Introduction</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-microservice-server.GettingStarted'>Getting Started</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-microservice-server.GettingStarted.Installing'>Installing in Eclipse</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-microservice-server.GettingStarted.Running'>Running in Eclipse</a></p>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-microservice-server.GettingStarted.Building'>Building and Running from Command-Line</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-microservice-server.Manifest'>Manifest File</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-microservice-server.Manifest.ManifestApi'>Manifest API</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-microservice-server.Config'>Config</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-microservice-server.Config.ConfigApi'>Config File API</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-microservice-server.ResourceClasses'>Resource Classes</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-microservice-server.PredefinedResourceClasses'>Predefined Resource Classes</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-microservice-server.RestMicroservice'>RestMicroservice</a></p>
-		<ol>
-			<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-microservice-server.RestMicroservice.Extending'>Extending RestMicroservice</a></p>
-		</ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-microservice-server.UiCustomization'>UI Customization</a></p>
-	</ol>
-	<li><p class='toc2 '><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-core'>juneau-examples-core</a></p>
-	<li><p class='toc2 updated'><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest'>juneau-examples-rest</a></p>
-	<ol>
-		<li><p class='updated'><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest.RootResources'>RootResources</a></p>
-		<li><p class='updated'><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest.HelloWorldResource'>HelloWorldResource</a></p>
-		<li><p class='new'><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest.PetStoreResource'>PetStore</a></p>
-		<li><p class='new'><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest.DtoExamples'>DtoExamples</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest.ConfigResource'>ConfigResource</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest.LogsResource'>LogsResource</a></p>
-	</ol>
-	<li><p class='toc2 new'><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest-springboot'>juneau-examples-rest-springboot</a></p>
-	<ol>
-		<li><p class='todo'><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest-springboot.Classes'>Classes</a></p>
-		<li><p class='todo'><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest-springboot.DeployingToHeroku'>Deploying to Heroku</a></p>
-	</ol>
-	<li><p class='toc2 '><a class='doclink' href='{OVERVIEW_URL}#Security'>Security Best-Practices</a></p>
-	<ol>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#Security.juneau-marshall'>juneau-marshall</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#Security.juneau-svl'>juneau-svl</a></p>
-		<li><p class=''><a class='doclink' href='{OVERVIEW_URL}#Security.juneau-rest-server'>juneau-rest-server</a></p>
-	</ol>
-</ol>
diff --git a/juneau-examples/juneau-examples-rest/build-overlay/.classpath b/juneau-examples/juneau-examples-rest-jetty/.classpath
similarity index 95%
copy from juneau-examples/juneau-examples-rest/build-overlay/.classpath
copy to juneau-examples/juneau-examples-rest-jetty/.classpath
index 968a4da..0dd9435 100644
--- a/juneau-examples/juneau-examples-rest/build-overlay/.classpath
+++ b/juneau-examples/juneau-examples-rest-jetty/.classpath
@@ -1,11 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
 	<classpathentry kind="src" output="target/classes" path="src/main/java">
 		<attributes>
 			<attribute name="optional" value="true"/>
@@ -17,6 +11,7 @@
 			<attribute name="maven.pomderived" value="true"/>
 		</attributes>
 	</classpathentry>
+	<classpathentry kind="src" path="src/assembly"/>
 	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
 		<attributes>
 			<attribute name="maven.pomderived" value="true"/>
@@ -27,5 +22,11 @@
 			<attribute name="maven.pomderived" value="true"/>
 		</attributes>
 	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/juneau-microservice/juneau-microservice-server/.gitignore b/juneau-examples/juneau-examples-rest-jetty/.gitignore
similarity index 66%
copy from juneau-microservice/juneau-microservice-server/.gitignore
copy to juneau-examples/juneau-examples-rest-jetty/.gitignore
index 22d1e37..5ad1d63 100644
--- a/juneau-microservice/juneau-microservice-server/.gitignore
+++ b/juneau-examples/juneau-examples-rest-jetty/.gitignore
@@ -1,2 +1,3 @@
 /target/
 **/.DS_Store
+/derby.log
diff --git a/juneau-examples/juneau-examples-rest-jetty/.project b/juneau-examples/juneau-examples-rest-jetty/.project
new file mode 100644
index 0000000..c4a7b53
--- /dev/null
+++ b/juneau-examples/juneau-examples-rest-jetty/.project
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>juneau-examples-rest-jetty</name>
+    <buildSpec>
+        <buildCommand>
+            <name>org.eclipse.jdt.core.javabuilder</name>
+            <arguments>
+            </arguments>
+        </buildCommand>
+        <buildCommand>
+            <name>edu.umd.cs.findbugs.plugin.eclipse.findbugsBuilder</name>
+            <arguments>
+            </arguments>
+        </buildCommand>
+        <buildCommand>
+            <name>org.eclipse.m2e.core.maven2Builder</name>
+            <arguments>
+            </arguments>
+        </buildCommand>
+    </buildSpec>
+    <natures>
+        <nature>org.eclipse.m2e.core.maven2Nature</nature>
+        <nature>org.eclipse.jdt.core.javanature</nature>
+        <nature>edu.umd.cs.findbugs.plugin.eclipse.findbugsNature</nature>
+    </natures>
+</projectDescription>
diff --git a/juneau-examples/juneau-examples-rest-jetty/bin/.gitignore b/juneau-examples/juneau-examples-rest-jetty/bin/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/juneau-examples/juneau-examples-rest-jetty/bin/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/juneau-examples/juneau-examples-rest/build-overlay/.classpath b/juneau-examples/juneau-examples-rest-jetty/build-overlay/.classpath
similarity index 100%
copy from juneau-examples/juneau-examples-rest/build-overlay/.classpath
copy to juneau-examples/juneau-examples-rest-jetty/build-overlay/.classpath
diff --git a/juneau-examples/juneau-examples-rest/build-overlay/pom.xml b/juneau-examples/juneau-examples-rest-jetty/build-overlay/pom.xml
similarity index 99%
rename from juneau-examples/juneau-examples-rest/build-overlay/pom.xml
rename to juneau-examples/juneau-examples-rest-jetty/build-overlay/pom.xml
index 588b837..bdf1fa5 100644
--- a/juneau-examples/juneau-examples-rest/build-overlay/pom.xml
+++ b/juneau-examples/juneau-examples-rest-jetty/build-overlay/pom.xml
@@ -64,7 +64,7 @@
 		</dependency>
 		<dependency>
 			<groupId>org.apache.juneau</groupId>
-			<artifactId>juneau-microservice-server</artifactId>
+			<artifactId>juneau-microservice-jetty</artifactId>
 			<version>\${juneau.version}</version>
 		</dependency>
 		<dependency>
diff --git a/juneau-examples/juneau-examples-rest/examples.cfg b/juneau-examples/juneau-examples-rest-jetty/examples.cfg
similarity index 95%
rename from juneau-examples/juneau-examples-rest/examples.cfg
rename to juneau-examples/juneau-examples-rest-jetty/examples.cfg
index 10c6242..48cb4d0 100755
--- a/juneau-examples/juneau-examples-rest/examples.cfg
+++ b/juneau-examples/juneau-examples-rest-jetty/examples.cfg
@@ -16,12 +16,6 @@
 # Subprojects can use this as a starting point.
 #=======================================================================================================================
 
-# What to do when the config file is saved.
-# Possible values:
-# 	NOTHING - Don't do anything. 
-#	RESTART_SERVER - Restart the Jetty server.
-#	RESTART_SERVICE - Shutdown and exit with code '3'.
-saveConfigAction = RESTART_SERVER
 
 #=======================================================================================================================
 # Jetty settings
@@ -74,7 +68,6 @@ enabled = true
 commands = 
 	org.apache.juneau.microservice.console.ExitCommand,
 	org.apache.juneau.microservice.console.RestartCommand,
-	org.apache.juneau.microservice.console.ConfigCommand,
 	org.apache.juneau.microservice.console.HelpCommand,
 	org.apache.juneau.examples.rest.command.EchoCommand
 
diff --git a/juneau-microservice/juneau-microservice-template/files/htdocs/images/asf.png b/juneau-examples/juneau-examples-rest-jetty/files/htdocs/images/asf.png
similarity index 100%
copy from juneau-microservice/juneau-microservice-template/files/htdocs/images/asf.png
copy to juneau-examples/juneau-examples-rest-jetty/files/htdocs/images/asf.png
diff --git a/juneau-microservice/juneau-microservice-template/files/htdocs/images/juneau.png b/juneau-examples/juneau-examples-rest-jetty/files/htdocs/images/juneau.png
similarity index 100%
copy from juneau-microservice/juneau-microservice-template/files/htdocs/images/juneau.png
copy to juneau-examples/juneau-examples-rest-jetty/files/htdocs/images/juneau.png
diff --git a/juneau-examples/juneau-examples-rest/files/htdocs/styles/SwaggerUI.css b/juneau-examples/juneau-examples-rest-jetty/files/htdocs/styles/SwaggerUI.css
similarity index 100%
rename from juneau-examples/juneau-examples-rest/files/htdocs/styles/SwaggerUI.css
rename to juneau-examples/juneau-examples-rest-jetty/files/htdocs/styles/SwaggerUI.css
diff --git a/juneau-microservice/juneau-microservice-template/files/htdocs/themes/dark.css b/juneau-examples/juneau-examples-rest-jetty/files/htdocs/themes/dark.css
similarity index 100%
copy from juneau-microservice/juneau-microservice-template/files/htdocs/themes/dark.css
copy to juneau-examples/juneau-examples-rest-jetty/files/htdocs/themes/dark.css
diff --git a/juneau-microservice/juneau-microservice-template/files/htdocs/themes/devops.css b/juneau-examples/juneau-examples-rest-jetty/files/htdocs/themes/devops.css
similarity index 100%
copy from juneau-microservice/juneau-microservice-template/files/htdocs/themes/devops.css
copy to juneau-examples/juneau-examples-rest-jetty/files/htdocs/themes/devops.css
diff --git a/juneau-microservice/juneau-microservice-template/files/htdocs/themes/light.css b/juneau-examples/juneau-examples-rest-jetty/files/htdocs/themes/light.css
similarity index 100%
copy from juneau-microservice/juneau-microservice-template/files/htdocs/themes/light.css
copy to juneau-examples/juneau-examples-rest-jetty/files/htdocs/themes/light.css
diff --git a/juneau-microservice/juneau-microservice-template/files/htdocs/themes/original.css b/juneau-examples/juneau-examples-rest-jetty/files/htdocs/themes/original.css
similarity index 100%
copy from juneau-microservice/juneau-microservice-template/files/htdocs/themes/original.css
copy to juneau-examples/juneau-examples-rest-jetty/files/htdocs/themes/original.css
diff --git a/juneau-examples/juneau-examples-rest/files/jetty.xml b/juneau-examples/juneau-examples-rest-jetty/files/jetty.xml
similarity index 96%
rename from juneau-examples/juneau-examples-rest/files/jetty.xml
rename to juneau-examples/juneau-examples-rest-jetty/files/jetty.xml
index acace45..9ef28ea 100644
--- a/juneau-examples/juneau-examples-rest/files/jetty.xml
+++ b/juneau-examples/juneau-examples-rest-jetty/files/jetty.xml
@@ -32,10 +32,6 @@
 
 	<New id="context" class="org.eclipse.jetty.servlet.ServletContextHandler">
 		<Set name="contextPath">/</Set>
-		<Call name="addServlet">
-			<Arg>org.apache.juneau.examples.rest.RootResources</Arg>
-			<Arg>/*</Arg>
-		</Call>
 		<Set name="sessionHandler">
 			<New class="org.eclipse.jetty.server.session.SessionHandler" />
 		</Set>
diff --git a/juneau-examples/juneau-examples-rest/juneau-examples-rest.launch b/juneau-examples/juneau-examples-rest-jetty/juneau-examples-rest-jetty.launch
similarity index 67%
copy from juneau-examples/juneau-examples-rest/juneau-examples-rest.launch
copy to juneau-examples/juneau-examples-rest-jetty/juneau-examples-rest-jetty.launch
index cf31023..58b55a0 100644
--- a/juneau-examples/juneau-examples-rest/juneau-examples-rest.launch
+++ b/juneau-examples/juneau-examples-rest-jetty/juneau-examples-rest-jetty.launch
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/RestMicroservice.java"/>
+<listEntry value="/juneau-examples-rest-jetty/src/main/java/org/apache/juneau/examples/rest/jetty/App.java"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
 <listEntry value="1"/>
@@ -10,9 +10,7 @@
 <booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
 <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
 <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
-<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.juneau.microservice.RestMicroservice"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="examples.cfg"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="juneau-examples-rest"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.juneau.examples.rest.jetty.App"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="juneau-examples-rest-jetty"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
 </launchConfiguration>
diff --git a/juneau-microservice/juneau-microservice-template/pom.xml b/juneau-examples/juneau-examples-rest-jetty/pom.xml
similarity index 63%
copy from juneau-microservice/juneau-microservice-template/pom.xml
copy to juneau-examples/juneau-examples-rest-jetty/pom.xml
index 8332c50..069e65f 100644
--- a/juneau-microservice/juneau-microservice-template/pom.xml
+++ b/juneau-examples/juneau-examples-rest-jetty/pom.xml
@@ -13,53 +13,80 @@
  * specific language governing permissions and limitations under the License.                                              *
  ***************************************************************************************************************************
 -->
-<!--
-	This project is meant to be used as a starting point for developers to use in creating their own REST microservices.
-	It creates a parent REST interface on port 10000 with a single child hello-world resource.
-	This POM is likewise meant to be used as a starting point for developers. It creates an uber-jar
-	to run the microserice from the command line. Copy the jar as well as the .cfg file and start it
-	with java -jar juneau-microservice-template-1.0.0.jar microservice.cfg
-	The group/artifact/version information is meant to be overwritten by developers to match their own needs.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
 	<modelVersion>4.0.0</modelVersion>
-	
+
 	<parent>
 		<groupId>org.apache.juneau</groupId>
-		<artifactId>juneau-microservice</artifactId>
+		<artifactId>juneau-examples</artifactId>
 		<version>8.0.0-SNAPSHOT</version>
 	</parent>
 
-	<artifactId>juneau-microservice-template</artifactId>
-	<name>Apache Juneau Microservice Template</name>
-	<description>A template project developers use to start with to create a microservice.</description>
-	
+	<artifactId>juneau-examples-rest-jetty</artifactId>
+	<name>Apache Juneau REST Examples using Jetty</name>
+	<description>Sample code deployed using Jetty.</description>
+
 	<properties>
-		<juneau.version>8.0.0-SNAPSHOT</juneau.version>
-		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<encoding>UTF-8</encoding>
+
+		<!-- Skip javadoc generation since we generate them in the aggregate pom -->
+		<maven.javadoc.skip>true</maven.javadoc.skip>
+
 	</properties>
-	
+
+
 	<dependencies>
+		<!-- Juneau dependencies -->
 		<dependency>
 			<groupId>org.apache.juneau</groupId>
-			<artifactId>juneau-microservice-server</artifactId>
-			<version>${juneau.version}</version>
+			<artifactId>juneau-examples-rest</artifactId>
+			<version>${project.version}</version>
 		</dependency>
+
+		<dependency>
+			<groupId>org.apache.juneau</groupId>
+			<artifactId>juneau-microservice-jetty</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.juneau</groupId>
+			<artifactId>juneau-rest-server</artifactId>
+			<version>${project.version}</version>
+			<type>test-jar</type>
+			<scope>test</scope>
+		</dependency>
+
+		<!-- Other -->
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<scope>test</scope>
+		</dependency>
+
 	</dependencies>
-	
+
 	<build>
 		<plugins>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-javadoc-plugin</artifactId>
-				<configuration>
-					<!-- Needed to prevent mvn release:prepare from blowing up. -->
-					<skip>true</skip>
-				</configuration>
+				<artifactId>maven-source-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>attach-sources</id>
+						<phase>verify</phase>
+						<goals>
+							<goal>jar-no-fork</goal>
+						</goals>
+					</execution>
+				</executions>
 			</plugin>
+
 			<plugin>
 				<artifactId>maven-assembly-plugin</artifactId>
+				<configuration>
+					<escapeString>\</escapeString>
+				</configuration>
 				<executions>
 					<execution>
 						<id>juneau-assembly</id>
@@ -68,7 +95,7 @@
 							<goal>single</goal>
 						</goals>
 						<configuration>
-							<finalName>my-microservice-${project.version}</finalName>
+							<finalName>juneau-examples-rest-jetty-${project.version}</finalName>
 							<descriptors>
 								<descriptor>src/assembly/bin.xml</descriptor>
 							</descriptors>
diff --git a/juneau-examples/juneau-examples-rest/war/web.xml b/juneau-examples/juneau-examples-rest-jetty/src/assembly/bin.xml
old mode 100755
new mode 100644
similarity index 55%
rename from juneau-examples/juneau-examples-rest/war/web.xml
rename to juneau-examples/juneau-examples-rest-jetty/src/assembly/bin.xml
index 8387154..1d1c88f
--- a/juneau-examples/juneau-examples-rest/war/web.xml
+++ b/juneau-examples/juneau-examples-rest-jetty/src/assembly/bin.xml
@@ -1,47 +1,58 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ***************************************************************************************************************************
- * 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.                                              *
- ***************************************************************************************************************************
--->
-<web-app 
-	version="2.4" 
-	xmlns="http://java.sun.com/xml/ns/j2ee" 
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-		 
-	<servlet>
-		<servlet-name>examples</servlet-name>
-		<servlet-class>org.apache.juneau.examples.rest.RootResources</servlet-class>
-	</servlet>
-	<servlet>
-		<servlet-name>test</servlet-name>
-		<servlet-class>org.apache.juneau.examples.rest.test.Root</servlet-class>
-	</servlet>
-	<servlet>
-		<servlet-name>testuris</servlet-name>
-		<servlet-class>org.apache.juneau.examples.rest.test.TestUris</servlet-class>
-	</servlet>
-	
-	<servlet-mapping>
-		<servlet-name>sample</servlet-name>
-		<url-pattern>/*</url-pattern>
-	</servlet-mapping>
-	<servlet-mapping>
-		<servlet-name>test</servlet-name>
-		<url-pattern>/test/*</url-pattern>
-	</servlet-mapping>
-	<servlet-mapping>
-		<servlet-name>testuris</servlet-name>
-		<url-pattern>/testuris/*</url-pattern>
-	</servlet-mapping>
-</web-app>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ***************************************************************************************************************************
+ * 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.                                              *
+ ***************************************************************************************************************************
+-->
+
+<!--
+	This assembly is used to create the template zip file that developers use to import into Eclipse to start their
+	own projects.
+ -->
+<assembly
+	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
+	<id>bin</id>
+	<formats>
+		<format>zip</format>
+	</formats>
+	<baseDirectory>/</baseDirectory>
+	<includeBaseDirectory>true</includeBaseDirectory>
+	<fileSets>
+		<fileSet>
+			<directory>${basedir}/../juneau-examples-rest</directory>
+			<outputDirectory>/</outputDirectory>
+			<includes>
+				<include>src/main/**</include>
+			</includes>
+		</fileSet>
+		<fileSet>
+			<directory>${basedir}</directory>
+			<outputDirectory>/</outputDirectory>
+			<includes>
+				<include>src/main/**</include>
+				<include>files/**</include>
+				<include>.settings/**</include>
+				<include>.project</include>
+				<include>*.launch</include>
+				<include>*.cfg</include>
+			</includes>
+		</fileSet>
+		<fileSet>
+			<directory>${basedir}/build-overlay</directory>
+			<outputDirectory>/</outputDirectory>
+			<filtered>true</filtered>
+		</fileSet>
+	</fileSets>
+	
+</assembly>
\ No newline at end of file
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/console/ExitCommand.java b/juneau-examples/juneau-examples-rest-jetty/src/main/java/org/apache/juneau/examples/rest/jetty/App.java
similarity index 65%
copy from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/console/ExitCommand.java
copy to juneau-examples/juneau-examples-rest-jetty/src/main/java/org/apache/juneau/examples/rest/jetty/App.java
index cb1318f..629fe71 100644
--- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/console/ExitCommand.java
+++ b/juneau-examples/juneau-examples-rest-jetty/src/main/java/org/apache/juneau/examples/rest/jetty/App.java
@@ -10,39 +10,39 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
 // * specific language governing permissions and limitations under the License.                                              *
 // ***************************************************************************************************************************
-package org.apache.juneau.microservice.console;
-
-import java.io.*;
-import java.util.*;
+package org.apache.juneau.examples.rest.jetty;
 
+import org.apache.juneau.examples.rest.*;
 import org.apache.juneau.microservice.*;
-import org.apache.juneau.utils.*;
 
 /**
- * Implements the 'exit' console command to gracefully shut down the microservice and JVM.
+ * An example of an extended REST microservice.
+ *
+ * <p>
+ * Subclasses can extend from {@link JettyMicroservice} to implement their own custom behavior.
+ * However, this is optional and the {@link JettyMicroservice} class can be invoked directly.
+ *
+ * <p>
+ * The {@link JettyMicroservice} class will locate the <code>examples.cfg</code> file in the home directory and initialize
+ * the resources and commands defined in that file.
  */
-public class ExitCommand extends ConsoleCommand {
-
-	private final MessageBundle mb = MessageBundle.create(ExitCommand.class, "Messages");
-
-	@Override /* ConsoleCommand */
-	public String getName() {
-		return "exit";
-	}
-
-	@Override /* ConsoleCommand */
-	public String getInfo() {
-		return mb.getString("info");
-	}
-
-	@Override /* ConsoleCommand */
-	public String getDescription() {
-		return mb.getString("description");
+public class App {
+
+	/**
+	 * Entry point method.
+	 *
+	 * @param args Command line arguments.
+	 * @throws Exception
+	 */
+	public static void main(String[] args) throws Exception {
+		JettyMicroservice
+			.create()
+			.args(args)
+			.servlet(RootResources.class)
+			.build()
+			.start()
+			.startConsole()
+			.join();
 	}
 
-	@Override /* ConsoleCommand */
-	public boolean execute(Scanner in, PrintWriter out, Args args) {
-		Microservice.getInstance().stop();
-		return true;
-	}
 }
diff --git a/juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/ContentComboTestBase.java b/juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/ContentComboTestBase.java
similarity index 100%
rename from juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/ContentComboTestBase.java
rename to juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/ContentComboTestBase.java
diff --git a/juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/RestTestcase.java b/juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/RestTestcase.java
similarity index 100%
rename from juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/RestTestcase.java
rename to juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/RestTestcase.java
diff --git a/juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/RootContentTest.java b/juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/RootContentTest.java
similarity index 100%
rename from juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/RootContentTest.java
rename to juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/RootContentTest.java
diff --git a/juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/RootResourcesTest.java b/juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/RootResourcesTest.java
similarity index 100%
rename from juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/RootResourcesTest.java
rename to juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/RootResourcesTest.java
diff --git a/juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/SamplesMicroservice.java b/juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/SamplesMicroservice.java
similarity index 96%
rename from juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/SamplesMicroservice.java
rename to juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/SamplesMicroservice.java
index 8679df4..8a2f0bb 100644
--- a/juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/SamplesMicroservice.java
+++ b/juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/SamplesMicroservice.java
@@ -26,7 +26,7 @@ import org.apache.juneau.serializer.*;
  * This class is NOT thread safe.
  */
 public class SamplesMicroservice {
-	static volatile RestMicroservice microservice;
+	static volatile JettyMicroservice microservice;
 	static URI microserviceURI;
 
 	// Reusable HTTP clients that get created and shut down with the microservice.
@@ -43,7 +43,7 @@ public class SamplesMicroservice {
 			return false;
 		try {
 			Locale.setDefault(Locale.US);
-			microservice = new RestMicroservice().setConfig("examples.cfg", false);
+			microservice = JettyMicroservice.create().configName("examples.cfg").servlet(RootResources.class).build();
 			microserviceURI = microservice.start().getURI();
 			DEFAULT_CLIENT = client().json().build();
 			DEFAULT_CLIENT_PLAINTEXT = client().plainText().build();
diff --git a/juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/TestUtils.java b/juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/TestUtils.java
similarity index 96%
rename from juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/TestUtils.java
rename to juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/TestUtils.java
index bc5ce2e..5961649 100644
--- a/juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/TestUtils.java
+++ b/juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/TestUtils.java
@@ -301,7 +301,7 @@ public class TestUtils {
 
 	/**
 	 * Compares two XML documents for equality.
-	 * Namespaces are stripped from each and elements/attributes are ordered in alphabetical order,
+	 * Namespaces are stripped from each and elements/servletAttributes are ordered in alphabetical order,
 	 * 	then a simple string comparison is performed.
 	 */
 	public static final void assertXmlEquals(String expected, String actual) throws Exception {
diff --git a/juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/_TestSuite.java b/juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/_TestSuite.java
similarity index 100%
rename from juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/_TestSuite.java
rename to juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/_TestSuite.java
diff --git a/juneau-examples/juneau-examples-rest/.settings/org.eclipse.core.resources.prefs b/juneau-examples/juneau-examples-rest/.settings/org.eclipse.core.resources.prefs
index 839d647..abdea9a 100644
--- a/juneau-examples/juneau-examples-rest/.settings/org.eclipse.core.resources.prefs
+++ b/juneau-examples/juneau-examples-rest/.settings/org.eclipse.core.resources.prefs
@@ -1,5 +1,4 @@
 eclipse.preferences.version=1
 encoding//src/main/java=UTF-8
 encoding//src/main/resources=UTF-8
-encoding//src/test/java=UTF-8
 encoding/<project>=UTF-8
diff --git a/juneau-examples/juneau-examples-rest/pom.xml b/juneau-examples/juneau-examples-rest/pom.xml
index ebf5e74..9473416 100644
--- a/juneau-examples/juneau-examples-rest/pom.xml
+++ b/juneau-examples/juneau-examples-rest/pom.xml
@@ -40,19 +40,17 @@
 		<!-- Juneau dependencies -->
 		<dependency>
 			<groupId>org.apache.juneau</groupId>
-			<artifactId>juneau-microservice-server</artifactId>
+			<artifactId>juneau-microservice-jetty</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
-			<groupId>org.apache.jena</groupId>
-			<artifactId>jena-core</artifactId>
-		</dependency>
-		<dependency>
 			<groupId>org.apache.juneau</groupId>
-			<artifactId>juneau-rest-server</artifactId>
+			<artifactId>juneau-rest-server-rdf</artifactId>
 			<version>${project.version}</version>
-			<type>test-jar</type>
-			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.jena</groupId>
+			<artifactId>jena-core</artifactId>
 		</dependency>
 
 		<!-- Needed for JPA persistence of PetStore beans -->		
@@ -80,7 +78,6 @@
 		<dependency>
 			<groupId>javax.servlet</groupId>
 			<artifactId>javax.servlet-api</artifactId>
-			<version>3.1.0</version>
 			<scope>compile</scope>
 		</dependency>
 
@@ -91,13 +88,6 @@
 			<version>${javax.inject.version}</version>
 		</dependency>
 
-		<!-- Other -->
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<scope>test</scope>
-		</dependency>
-
 	</dependencies>
 
 	<build>
@@ -127,84 +117,6 @@
 					</includes>
 				</configuration>
 			</plugin>
-
-			<!-- This packages the samples into an executable jar. Use: java -jar 
-				juneau-examples-uber.jar Needs the examples.cfg copied below in the same 
-				directory. -->
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-shade-plugin</artifactId>
-				<!--version>2.4.3</version -->
-				<configuration>
-					<createDependencyReducedPom>false</createDependencyReducedPom>
-					<minimizeJar>false</minimizeJar>
-					<transformers>
-						<transformer
-							implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
-							<manifestEntries>
-								<Main-Class>org.apache.juneau.microservice.RestMicroservice</Main-Class>
-								<Rest-Resources>org.apache.juneau.examples.rest.RootResources</Rest-Resources>
-								<Main-Config>examples.cfg</Main-Config>
-							</manifestEntries>
-						</transformer>
-					</transformers>
-				</configuration>
-				<executions>
-					<execution>
-						<phase>package</phase>
-						<goals>
-							<goal>shade</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-
-			<!-- Attaches the examples.cfg to this artifact -->
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>build-helper-maven-plugin</artifactId>
-				<version>1.12</version>
-				<executions>
-					<execution>
-						<id>attach-artifacts</id>
-						<phase>package</phase>
-						<goals>
-							<goal>attach-artifact</goal>
-						</goals>
-						<configuration>
-							<artifacts>
-								<artifact>
-									<file>examples.cfg</file>
-									<type>cfg</type>
-									<classifier>samples</classifier>
-								</artifact>
-							</artifacts>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-
-			<plugin>
-				<artifactId>maven-assembly-plugin</artifactId>
-				<configuration>
-					<escapeString>\</escapeString>
-				</configuration>
-				<executions>
-					<execution>
-						<id>juneau-assembly</id>
-						<phase>package</phase>
-						<goals>
-							<goal>single</goal>
-						</goals>
-						<configuration>
-							<finalName>juneau-examples-rest-${project.version}</finalName>
-							<descriptors>
-								<descriptor>src/assembly/bin.xml</descriptor>
-							</descriptors>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
 		</plugins>
 	</build>
 </project>
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
index 6bfedb1..79ded68 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
@@ -16,8 +16,8 @@ import static org.apache.juneau.serializer.WriterSerializer.*;
 
 import org.apache.juneau.examples.rest.dto.*;
 import org.apache.juneau.examples.rest.petstore.rest.*;
-import org.apache.juneau.microservice.*;
 import org.apache.juneau.microservice.resources.*;
+import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.widget.*;
 
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/AtomFeedResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/AtomFeedResource.java
index 31541e8..5e2f45c 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/AtomFeedResource.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/AtomFeedResource.java
@@ -23,7 +23,7 @@ import org.apache.juneau.dto.atom.*;
 import org.apache.juneau.encoders.*;
 import org.apache.juneau.http.annotation.*;
 import org.apache.juneau.http.annotation.Body;
-import org.apache.juneau.microservice.*;
+import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.widget.*;
 
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/DtoExamples.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/DtoExamples.java
index 12ebd70..a7b48d4 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/DtoExamples.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/DtoExamples.java
@@ -14,7 +14,7 @@ package org.apache.juneau.examples.rest.dto;
 
 import static org.apache.juneau.serializer.WriterSerializer.*;
 
-import org.apache.juneau.microservice.*;
+import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.widget.*;
 
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/JsonSchemaResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/JsonSchemaResource.java
index 03e4aa7..716de74 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/JsonSchemaResource.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/JsonSchemaResource.java
@@ -18,7 +18,7 @@ import org.apache.juneau.jsonschema.annotation.ExternalDocs;
 import org.apache.juneau.dto.jsonschema.*;
 import org.apache.juneau.http.annotation.*;
 import org.apache.juneau.http.annotation.Body;
-import org.apache.juneau.microservice.*;
+import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.widget.*;
 
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/rest/PetStoreResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/rest/PetStoreResource.java
index a54b287..452cf2b 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/rest/PetStoreResource.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/rest/PetStoreResource.java
@@ -30,7 +30,6 @@ import org.apache.juneau.http.annotation.*;
 import org.apache.juneau.http.annotation.FormData;
 import org.apache.juneau.http.annotation.Path;
 import org.apache.juneau.internal.*;
-import org.apache.juneau.microservice.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.exception.*;
diff --git a/juneau-examples/pom.xml b/juneau-examples/pom.xml
index 87478c4..2dc665d 100644
--- a/juneau-examples/pom.xml
+++ b/juneau-examples/pom.xml
@@ -31,6 +31,7 @@
 	<modules>
 		<module>juneau-examples-core</module>
 		<module>juneau-examples-rest</module>
+		<module>juneau-examples-rest-jetty</module>
 		<module>juneau-examples-rest-springboot</module>
 	</modules>
 
diff --git a/juneau-microservice/juneau-microservice-server/.classpath b/juneau-microservice/juneau-microservice-core/.classpath
similarity index 100%
copy from juneau-microservice/juneau-microservice-server/.classpath
copy to juneau-microservice/juneau-microservice-core/.classpath
diff --git a/juneau-microservice/juneau-microservice-server/.gitignore b/juneau-microservice/juneau-microservice-core/.gitignore
similarity index 78%
copy from juneau-microservice/juneau-microservice-server/.gitignore
copy to juneau-microservice/juneau-microservice-core/.gitignore
index 22d1e37..5fbb688 100644
--- a/juneau-microservice/juneau-microservice-server/.gitignore
+++ b/juneau-microservice/juneau-microservice-core/.gitignore
@@ -1,2 +1,3 @@
 /target/
 **/.DS_Store
+/bin/
diff --git a/juneau-microservice/juneau-microservice-server/.project b/juneau-microservice/juneau-microservice-core/.project
similarity index 94%
rename from juneau-microservice/juneau-microservice-server/.project
rename to juneau-microservice/juneau-microservice-core/.project
index ae83c7b..75104ee 100644
--- a/juneau-microservice/juneau-microservice-server/.project
+++ b/juneau-microservice/juneau-microservice-core/.project
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>juneau-microservice-server</name>
+	<name>juneau-microservice-core</name>
 	<comment></comment>
 	<projects>
 	</projects>
diff --git a/juneau-microservice/juneau-microservice-server/Dockerfile b/juneau-microservice/juneau-microservice-core/Dockerfile
similarity index 100%
copy from juneau-microservice/juneau-microservice-server/Dockerfile
copy to juneau-microservice/juneau-microservice-core/Dockerfile
diff --git a/juneau-microservice/juneau-microservice-server/pom.xml b/juneau-microservice/juneau-microservice-core/pom.xml
similarity index 84%
copy from juneau-microservice/juneau-microservice-server/pom.xml
copy to juneau-microservice/juneau-microservice-core/pom.xml
index 5fd3dc1..d83d8a7 100644
--- a/juneau-microservice/juneau-microservice-server/pom.xml
+++ b/juneau-microservice/juneau-microservice-core/pom.xml
@@ -23,9 +23,9 @@
 		<version>8.0.0-SNAPSHOT</version>
 	</parent>
 
-	<artifactId>juneau-microservice-server</artifactId>
-	<name>Apache Juneau Microservice Server</name>
-	<description>API for creating standalone executable jars that can be used to start lightweight configurable REST interfaces.</description>
+	<artifactId>juneau-microservice-core</artifactId>
+	<name>Apache Juneau Microservice Core Library</name>
+	<description>API for creating standalone executable jars that can be used to start lightweight configurable microservices.</description>
 
 	<properties>
 		<!-- Skip javadoc generation since we generate them in the aggregate pom -->
@@ -39,7 +39,7 @@
 	<dependencies>
 		<dependency>
 			<groupId>org.apache.juneau</groupId>
-			<artifactId>juneau-rest-server</artifactId>
+			<artifactId>juneau-rest-server-rdf</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
@@ -48,29 +48,8 @@
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
-			<groupId>org.apache.juneau</groupId>
-			<artifactId>juneau-marshall-rdf</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.eclipse.jetty</groupId>
-			<artifactId>jetty-server</artifactId>
-			<version>${jetty.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.eclipse.jetty</groupId>
-			<artifactId>jetty-security</artifactId>
-			<version>${jetty.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.eclipse.jetty</groupId>
-			<artifactId>jetty-servlet</artifactId>
-			<version>${jetty.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.eclipse.jetty</groupId>
-			<artifactId>jetty-xml</artifactId>
-			<version>${jetty.version}</version>
+			<groupId>javax.servlet</groupId>
+			<artifactId>javax.servlet-api</artifactId>
 		</dependency>
 	</dependencies>
 
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/package-info.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/BasicMicroserviceListener.java
old mode 100755
new mode 100644
similarity index 75%
copy from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/package-info.java
copy to juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/BasicMicroserviceListener.java
index 2785d52..f65b284
--- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/package-info.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/BasicMicroserviceListener.java
@@ -1,18 +1,32 @@
-// ***************************************************************************************************************************
-// * 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.                                              *
-// ***************************************************************************************************************************
-
-/**
- * Microservice API
- */
-package org.apache.juneau.microservice;
-
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.microservice;
+
+import java.util.*;
+
+import org.apache.juneau.config.event.*;
+
+/**
+ * Basic extensible microservice listener with default no-op method implementations.
+ */
+public class BasicMicroserviceListener implements MicroserviceListener {
+
+	@Override /* MicroserviceListener */
+	public void onStart(Microservice microservice) {}
+
+	@Override /* MicroserviceListener */
+	public void onStop(Microservice microservice) {}
+
+	@Override /* MicroserviceListener */
+	public void onConfigChange(Microservice microservice, List<ConfigEvent> events) {}
+}
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/LogConfig.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/LogConfig.java
new file mode 100644
index 0000000..1b59791
--- /dev/null
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/LogConfig.java
@@ -0,0 +1,204 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.microservice;
+
+import java.util.*;
+import java.util.logging.*;
+import java.util.logging.Formatter;
+
+import org.apache.juneau.microservice.resources.*;
+
+/**
+ * Can be used for configuration of simple logging in the microservice.
+ *
+ * <p>
+ * Instances of this class can be created using {@link #create()} and passing the result to
+ * {@link MicroserviceBuilder#logConfig(LogConfig)}.
+ *
+ * <p>
+ * These values override values specified in the <js>"Logging"</js> configuration section.
+ */
+public class LogConfig {
+
+	String logFile, logDir;
+	Boolean append;
+	Integer limit, count;
+	Level fileLevel, consoleLevel;
+	Map<String,Level> levels = new LinkedHashMap<>();
+	Formatter formatter;
+
+	LogConfig() {}
+
+	/**
+	 * Copy constructor.
+	 *
+	 * @param copyFrom The log config to copy from.
+	 */
+	protected LogConfig(LogConfig copyFrom) {
+		this.logFile = copyFrom.logFile;
+		this.logDir = copyFrom.logDir;
+		this.append = copyFrom.append;
+		this.limit = copyFrom.limit;
+		this.count = copyFrom.count;
+		this.fileLevel = copyFrom.fileLevel;
+		this.consoleLevel = copyFrom.consoleLevel;
+		this.levels = new LinkedHashMap<>(copyFrom.levels);
+		this.formatter = copyFrom.formatter;
+	}
+
+	/**
+	 * Creates a copy of this log configuration.
+	 *
+	 * @return A new copy of this log configuration.
+	 */
+	public LogConfig copy() {
+		return new LogConfig(this);
+	}
+
+	/**
+	 * Creates a new instance of this config.
+	 *
+	 * @return A new instance of this config.
+	 */
+	public static LogConfig create() {
+		return new LogConfig();
+	}
+
+	/**
+	 * Returns the name of the log file on the file system to store the log file for this microservice.
+	 *
+	 * <p>
+	 * This overrides the configuration value <js>"Logging/logFile"</js>.
+	 * If not specified, no file system logging will be used.
+	 *
+	 * @param logFile The log file.
+	 * @return This object (for method chaining).
+	 */
+	public LogConfig logFile(String logFile) {
+		this.logFile = logFile;
+		return this;
+	}
+
+	/**
+	 * The location of the log directory to create the log file.
+	 *
+	 * <p>
+	 * This overrides the configuration value <js>"Logging/logDir"</js>.
+	 * If not specified, uses the JVM working directory.
+	 *
+	 * @param logDir The log directory location as a path relative to the working directory.
+	 * @return This object (for method chaining).
+	 */
+	public LogConfig logDir(String logDir) {
+		this.logDir = logDir;
+		return this;
+	}
+
+	/**
+	 * The log entry formatter.
+	 *
+	 * <p>
+	 * If not specified, uses the following values pulled from the configuration to construct a {@link LogEntryFormatter}:
+	 * <ul>
+	 * 	<li><js><js>"Logging/format"</js> (default is <js>"[{date} {level}] {msg}%n"</js>)
+	 * 	<li><js><js>"Logging/dateFormat"</js> (default is <js>"yyyy.MM.dd hh:mm:ss"</js>)
+	 * 	<li><js><js>"Logging/useStackTraceHashes"</js> (default is <jk>false</jk>)
+	 * </ul>
+	 *
+	 *
+	 * @param formatter The log entry formatter.
+	 * @return This object (for method chaining).
+	 * @see LogEntryFormatter
+	 */
+	public LogConfig formatter(Formatter formatter) {
+		this.formatter = formatter;
+		return this;
+	}
+
+	/**
+	 * Specified append mode for the log file.
+	 *
+	 * @return This object (for method chaining).
+	 */
+	public LogConfig append() {
+		this.append = true;
+		return this;
+	}
+
+	/**
+	 * The maximum number of bytes to write to any one log file.
+	 *
+	 * @param limit The number of bytes.
+	 * @return This object (for method chaining).
+	 */
+	public LogConfig limit(int limit) {
+		this.limit = limit;
+		return this;
+	}
+
+	/**
+	 * The number of log files to use.
+	 *
+	 * @param count The number of log files.
+	 * @return This object (for method chaining).
+	 */
+	public LogConfig count(int count) {
+		this.count = count;
+		return this;
+	}
+
+	/**
+	 * The default logging level for the log file.
+	 *
+	 * @param fileLevel The logging level.
+	 * @return This object (for method chaining).
+	 */
+	public LogConfig fileLevel(Level fileLevel) {
+		this.fileLevel = fileLevel;
+		return this;
+	}
+
+	/**
+	 * The default logging level for the console.
+	 *
+	 * @param consoleLevel The logging level.
+	 * @return This object (for method chaining).
+	 */
+	public LogConfig consoleLevel(Level consoleLevel) {
+		this.consoleLevel = consoleLevel;
+		return this;
+	}
+
+	/**
+	 * Default logging levels for loggers.
+	 *
+	 * @param levels A map of logger names to logger levels.
+	 * @return This object (for method chaining).
+	 */
+	public LogConfig levels(Map<String,Level> levels) {
+		this.levels.putAll(levels);
+		return this;
+	}
+
+	/**
+	 * Default logging level for logger.
+	 *
+	 * @param logger Logger name.
+	 * @param level Logger level.
+	 * @return This object (for method chaining).
+	 */
+	public LogConfig level(String logger, Level level) {
+		this.levels.put(logger, level);
+		return this;
+	}
+}
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
new file mode 100755
index 0000000..fa84f08
--- /dev/null
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
@@ -0,0 +1,771 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.microservice;
+
+import static org.apache.juneau.internal.FileUtils.*;
+import static org.apache.juneau.internal.IOUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.ObjectUtils.*;
+
+import java.io.*;
+import java.net.*;
+import java.text.*;
+import java.util.*;
+import java.util.concurrent.*;
+import java.util.jar.*;
+import java.util.logging.*;
+import java.util.logging.Formatter;
+
+import org.apache.juneau.*;
+import org.apache.juneau.config.*;
+import org.apache.juneau.config.event.*;
+import org.apache.juneau.config.store.*;
+import org.apache.juneau.config.vars.*;
+import org.apache.juneau.internal.*;
+import org.apache.juneau.microservice.console.*;
+import org.apache.juneau.microservice.resources.*;
+import org.apache.juneau.svl.*;
+import org.apache.juneau.svl.vars.ManifestFileVar;
+import org.apache.juneau.utils.*;
+
+/**
+ * Parent class for all microservices.
+ *
+ * <p>
+ * A microservice defines a simple API for starting and stopping simple Java services contained in executable jars.
+ *
+ * <p>
+ * The general command for creating and starting a microservice from a main method is as follows:
+ * <p class='bcode w800'>
+ * 	<jk>public static void</jk> main(String[] args) {
+ * 		Microservice.<jsm>create</jsm>().args(args).build().start().join();
+ *  }
+ * </p>
+ *
+ * <p>
+ * Your microservice class must be specified as the <jk>Main-Class</jk> entry in the manifest file of your microservice
+ * jar file if it's an executable jar.
+ *
+ * <h5 class='topic'>Microservice Configuration</h5>
+ *
+ * This class defines the following method for accessing configuration for your microservice:
+ * <ul class='spaced-list'>
+ * 	<li>
+ * 		{@link #getArgs()} - The command-line arguments passed to the jar file.
+ * 	<li>
+ * 		{@link #getConfig()} - An external INI-style configuration file.
+ * 	<li>
+ * 		{@link #getManifest()} - The manifest file for the main jar file.
+ * </ul>
+ *
+ * <h5 class='topic'>Lifecycle Methods</h5>
+ *
+ * Subclasses must implement the following lifecycle methods:
+ * <ul class='spaced-list'>
+ * 	<li>
+ * 		{@link #init()} - Gets executed immediately following construction.
+ * 	<li>
+ * 		{@link #start()} - Gets executed during startup.
+ * 	<li>
+ * 		{@link #stop()} - Gets executed when 'exit' is typed in the console or an external shutdown signal is received.
+ * 	<li>
+ * 		{@link #kill()} - Can be used to forcibly shut down the service.  Doesn't get called during normal operation.
+ * </ul>
+ */
+public class Microservice implements ConfigEventListener {
+
+	private static volatile Microservice INSTANCE;
+
+	private static void setInstance(Microservice m) {
+		synchronized(Microservice.class) {
+			INSTANCE = m;
+		}
+	}
+
+	/**
+	 * Returns the Microservice instance.
+	 *
+	 * <p>
+	 * This method only works if there's only one Microservice instance in a JVM.
+	 * Otherwise, it's just overwritten by the last instantiated microservice.
+	 *
+	 * @return The Microservice instance, or <jk>null</jk> if there isn't one.
+	 */
+	public static Microservice getInstance() {
+		synchronized(Microservice.class) {
+			return INSTANCE;
+		}
+	}
+
+
+	final MessageBundle messages = MessageBundle.create(Microservice.class);
+
+	//-----------------------------------------------------------------------------------------------------------------
+	// Properties set in constructor
+	//-----------------------------------------------------------------------------------------------------------------
+	private final MicroserviceBuilder builder;
+	private final Args args;
+	private final Config config;
+	private final ManifestFile manifest;
+	private final VarResolver varResolver;
+	private final MicroserviceListener listener;
+	private final Map<String,ConsoleCommand> consoleCommandMap = new ConcurrentHashMap<>();
+	private final boolean consoleEnabled;
+	private final Scanner consoleReader;
+	private final PrintWriter consoleWriter;
+	private final Thread consoleThread;
+
+	//-----------------------------------------------------------------------------------------------------------------
+	// Properties set in init()
+	//-----------------------------------------------------------------------------------------------------------------
+	private volatile Logger logger;
+
+	/**
+	 * Creates a new microservice builder.
+	 *
+	 * @return A new microservice builder.
+	 */
+	public static MicroserviceBuilder create() {
+		return new MicroserviceBuilder();
+	}
+
+	/**
+	 * Constructor.
+	 *
+	 * @param builder The builder containing the settings for this microservice.
+	 * @throws Exception
+	 */
+	@SuppressWarnings("resource")
+	protected Microservice(MicroserviceBuilder builder) throws Exception {
+		setInstance(this);
+
+		this.builder = builder.copy();
+
+		this.args = builder.args != null ? builder.args : new Args(new String[0]);
+
+		// --------------------------------------------------------------------------------
+		// Try to get the manifest file if it wasn't already set.
+		// --------------------------------------------------------------------------------
+		ManifestFile manifest = builder.manifest;
+		if (manifest == null) {
+			Manifest m = new Manifest();
+
+			// If running within an eclipse workspace, need to get it from the file system.
+			File f = new File("META-INF/MANIFEST.MF");
+			if (f.exists() && f.canRead()) {
+				try (FileInputStream fis = new FileInputStream(f)) {
+					m.read(fis);
+				} catch (IOException e) {
+					throw new IOException("Problem detected in MANIFEST.MF.  Contents below:\n " + read(f), e);
+				}
+			} else {
+				// Otherwise, read from manifest file in the jar file containing the main class.
+				URLClassLoader cl = (URLClassLoader)getClass().getClassLoader();
+				URL url = cl.findResource("META-INF/MANIFEST.MF");
+				if (url != null) {
+					try {
+						m.read(url.openStream());
+					} catch (IOException e) {
+						throw new IOException("Problem detected in MANIFEST.MF.  Contents below:\n " + read(url.openStream()), e);
+					}
+				}
+			}
+			manifest = new ManifestFile(m);
+		}
+		ManifestFileVar.init(manifest);
+		this.manifest = manifest;
+
+		// --------------------------------------------------------------------------------
+		// Try to resolve the configuration if not specified.
+		// --------------------------------------------------------------------------------
+		Config config = builder.config;
+		ConfigBuilder configBuilder = builder.configBuilder.varResolver(builder.varResolverBuilder.build()).store(ConfigMemoryStore.DEFAULT);
+		if (config == null) {
+			ConfigStore store = builder.configStore;
+			for (String name : getCandidateConfigNames()) {
+				 if (store != null) {
+					 if (store.exists(name)) {
+						 configBuilder.store(store).name(name);
+						 break;
+					 }
+				 } else {
+					 if (ConfigFileStore.DEFAULT.exists(name)) {
+						 configBuilder.store(ConfigFileStore.DEFAULT).name(name);
+						 break;
+					 }
+					 if (ConfigClasspathStore.DEFAULT.exists(name)) {
+						 configBuilder.store(ConfigClasspathStore.DEFAULT).name(name);
+						 break;
+					 }
+				 }
+			}
+			config = configBuilder.build();
+		}
+		this.config = config;
+		Config.setSystemDefault(this.config);
+		this.config.addListener(this);
+
+		//-------------------------------------------------------------------------------------------------------------
+		// Var resolver.
+		//-------------------------------------------------------------------------------------------------------------
+		VarResolverBuilder varResolverBuilder = builder.varResolverBuilder;
+		this.varResolver = varResolverBuilder.contextObject(ConfigVar.SESSION_config, config).build();
+
+		// --------------------------------------------------------------------------------
+		// Initialize console commands.
+		// --------------------------------------------------------------------------------
+		this.consoleEnabled = ObjectUtils.firstNonNull(builder.consoleEnabled, config.getBoolean("Console/enabled", false));
+		if (consoleEnabled) {
+			Console c = System.console();
+			this.consoleReader = ObjectUtils.firstNonNull(builder.consoleReader, new Scanner(c == null ? new InputStreamReader(System.in) : c.reader()));
+			this.consoleWriter = ObjectUtils.firstNonNull(builder.consoleWriter, c == null ? new PrintWriter(System.out, true) : c.writer());
+
+			for (ConsoleCommand cc : builder.consoleCommands) {
+				consoleCommandMap.put(cc.getName(), cc);
+			}
+			for (String s : config.getStringArray("Console/commands")) {
+				ConsoleCommand cc = (ConsoleCommand)Class.forName(s).newInstance();
+				consoleCommandMap.put(cc.getName(), cc);
+			}
+			consoleThread = new Thread("ConsoleThread") {
+				@Override /* Thread */
+				public void run() {
+					Scanner in = getConsoleReader();
+					PrintWriter out = getConsoleWriter();
+
+					out.println(messages.getString("ListOfAvailableCommands"));
+					for (ConsoleCommand cc : new TreeMap<>(getConsoleCommands()).values())
+						out.append("\t").append(cc.getName()).append(" -- ").append(cc.getInfo()).println();
+					out.println();
+
+					while (true) {
+						String line = null;
+						out.append("> ").flush();
+						line = in.nextLine();
+						Args args = new Args(line);
+						if (! args.isEmpty())
+							executeCommand(args, in, out);
+					}
+				}
+			};
+			consoleThread.setDaemon(true);
+		} else {
+			this.consoleReader = null;
+			this.consoleWriter = null;
+			this.consoleThread = null;
+		}
+
+		//-------------------------------------------------------------------------------------------------------------
+		// Other.
+		//-------------------------------------------------------------------------------------------------------------
+		this.listener = builder.listener != null ? builder.listener : new BasicMicroserviceListener();
+
+		init();
+	}
+
+	private List<String> getCandidateConfigNames() {
+		Args args = getArgs();
+		if (getArgs().hasArg("configFile"))
+			return Collections.singletonList(args.getArg("configFile"));
+
+		ManifestFile manifest = getManifest();
+		if (manifest.containsKey("Main-Config"))
+			return Collections.singletonList(manifest.getString("Main-Config"));
+
+		return Config.getCandidateSystemDefaultConfigNames();
+	}
+
+	//-----------------------------------------------------------------------------------------------------------------
+	// Abstract lifecycle methods.
+	//-----------------------------------------------------------------------------------------------------------------
+
+	/**
+	 * Initializes this microservice.
+	 *
+	 * <p>
+	 * This method can be called whenever the microservice is not started.
+	 *
+	 * <p>
+	 * It will initialize (or reinitialize) the console commands, system properties, and logger.
+	 *
+	 * @return This object (for method chaining).
+	 * @throws Exception
+	 */
+	public synchronized Microservice init() throws Exception {
+
+		// --------------------------------------------------------------------------------
+		// Set system properties.
+		// --------------------------------------------------------------------------------
+		Set<String> spKeys = config.getKeys("SystemProperties");
+		if (spKeys != null)
+			for (String key : spKeys)
+				System.setProperty(key, config.getString("SystemProperties/"+key));
+
+		// --------------------------------------------------------------------------------
+		// Initialize logging.
+		// --------------------------------------------------------------------------------
+		this.logger = builder.logger;
+		LogConfig logConfig = builder.logConfig != null ? builder.logConfig : new LogConfig();
+		if (this.logger == null) {
+			LogManager.getLogManager().reset();
+			this.logger = Logger.getLogger("");
+			String logFile = firstNonNull(logConfig.logFile, config.getString("Logging/logFile"));
+
+			if (isNotEmpty(logFile)) {
+				String logDir = firstNonNull(logConfig.logDir, config.getString("Logging/logDir", "."));
+				mkdirs(new File(logDir), false);
+
+				boolean append = firstNonNull(logConfig.append, config.getBoolean("Logging/append"));
+				int limit = firstNonNull(logConfig.limit, config.getInt("Logging/limit", 1024*1024));
+				int count = firstNonNull(logConfig.count, config.getInt("Logging/count", 1));
+
+				FileHandler fh = new FileHandler(logDir + '/' + logFile, limit, count, append);
+
+				Formatter f = logConfig.formatter;
+				if (f == null) {
+					String format = config.getString("Logging/format", "[{date} {level}] {msg}%n");
+					String dateFormat = config.getString("Logging/dateFormat", "yyyy.MM.dd hh:mm:ss");
+					boolean useStackTraceHashes = config.getBoolean("Logging/useStackTraceHashes");
+					f = new LogEntryFormatter(format, dateFormat, useStackTraceHashes);
+				}
+				fh.setFormatter(f);
+				fh.setLevel(firstNonNull(logConfig.fileLevel, config.getObjectWithDefault("Logging/fileLevel", Level.INFO, Level.class)));
+				logger.addHandler(fh);
+
+				ConsoleHandler ch = new ConsoleHandler();
+				ch.setLevel(firstNonNull(logConfig.consoleLevel, config.getObjectWithDefault("Logging/consoleLevel", Level.WARNING, Level.class)));
+				ch.setFormatter(f);
+				logger.addHandler(ch);
+			}
+		}
+
+		ObjectMap loggerLevels = config.getObject("Logging/levels", ObjectMap.class);
+		if (loggerLevels != null)
+			for (String l : loggerLevels.keySet())
+				Logger.getLogger(l).setLevel(loggerLevels.get(l, Level.class));
+		for (String l : logConfig.levels.keySet())
+			Logger.getLogger(l).setLevel(logConfig.levels.get(l));
+
+		return this;
+	}
+
+	/**
+	 * Start this application.
+	 *
+	 * <p>
+	 * Overridden methods MUST call this method FIRST so that the {@link MicroserviceListener#onStart(Microservice)} method is called.
+	 *
+	 * @return This object (for method chaining).
+	 * @throws Exception
+	 */
+	public synchronized Microservice start() throws Exception {
+
+		if (config.getName() == null)
+			err(messages, "RunningClassWithoutConfig", getClass().getSimpleName());
+		else
+			out(messages, "RunningClassWithConfig", getClass().getSimpleName(), config.getName());
+
+		Runtime.getRuntime().addShutdownHook(
+			new Thread("ShutdownHookThread") {
+				@Override /* Thread */
+				public void run() {
+					try {
+						Microservice.this.stop();
+						Microservice.this.stopConsole();
+					} catch (Exception e) {
+						e.printStackTrace();
+					}
+				}
+			}
+		);
+
+		listener.onStart(this);
+
+		return this;
+	}
+
+	/**
+	 * Starts the console thread for this microservice.
+	 *
+	 * @return This object (for method chaining).
+	 * @throws Exception
+	 */
+	public synchronized Microservice startConsole() throws Exception {
+		if (consoleThread != null && ! consoleThread.isAlive())
+			consoleThread.start();
+		return this;
+	}
+
+	/**
+	 * Stops the console thread for this microservice.
+	 *
+	 * @return This object (for method chaining).
+	 * @throws Exception
+	 */
+	public synchronized Microservice stopConsole() throws Exception {
+		if (consoleThread != null && consoleThread.isAlive())
+			consoleThread.interrupt();
+		return this;
+	}
+
+	/**
+	 * Returns the command-line arguments passed into the application.
+	 *
+	 * <p>
+	 * This method can be called from the class constructor.
+	 *
+	 * <p>
+	 * See {@link Args} for details on using this method.
+	 *
+	 * @return The command-line arguments passed into the application.
+	 */
+	public Args getArgs() {
+		return args;
+	}
+
+	/**
+	 * Returns the external INI-style configuration file that can be used to configure your microservice.
+	 *
+	 * <p>
+	 * The config location is determined in the following order:
+	 * <ol class='spaced-list'>
+	 * 	<li>
+	 * 		The first argument passed to the microservice jar.
+	 * 	<li>
+	 * 		The <code>Main-Config</code> entry in the microservice jar manifest file.
+	 * 	<li>
+	 * 		The name of the microservice jar with a <js>".cfg"</js> suffix (e.g.
+	 * 		<js>"mymicroservice.jar"</js>-&gt;<js>"mymicroservice.cfg"</js>).
+	 * </ol>
+	 *
+	 * <p>
+	 * If all methods for locating the config fail, then this method returns an empty config.
+	 *
+	 * <p>
+	 * Subclasses can set their own config file by using the following methods:
+	 * <ul class='doctree'>
+	 * 	<li class='jm'>{@link MicroserviceBuilder#configStore(ConfigStore)}
+	 * 	<li class='jm'>{@link MicroserviceBuilder#configName(String)}
+	 * </ul>
+	 *
+	 * <p>
+	 * String variables are automatically resolved using the variable resolver returned by {@link #getVarResolver()}.
+	 *
+	 * <p>
+	 * This method can be called from the class constructor.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<cc>#--------------------------</cc>
+	 * 	<cc># My section</cc>
+	 * 	<cc>#--------------------------</cc>
+	 * 	<cs>[MySection]</cs>
+	 *
+	 * 	<cc># An integer</cc>
+	 * 	<ck>anInt</ck> = 1
+	 *
+	 * 	<cc># A boolean</cc>
+	 * 	<ck>aBoolean</ck> = true
+	 *
+	 * 	<cc># An int array</cc>
+	 * 	<ck>anIntArray</ck> = 1,2,3
+	 *
+	 * 	<cc># A POJO that can be converted from a String</cc>
+	 * 	<ck>aURL</ck> = http://foo
+	 *
+	 * 	<cc># A POJO that can be converted from JSON</cc>
+	 * 	<ck>aBean</ck> = {foo:'bar',baz:123}
+	 *
+	 * 	<cc># A system property</cc>
+	 * 	<ck>locale</ck> = $S{java.locale, en_US}
+	 *
+	 * 	<cc># An environment variable</cc>
+	 * 	<ck>path</ck> = $E{PATH, unknown}
+	 *
+	 * 	<cc># A manifest file entry</cc>
+	 * 	<ck>mainClass</ck> = $MF{Main-Class}
+	 *
+	 * 	<cc># Another value in this config file</cc>
+	 * 	<ck>sameAsAnInt</ck> = $C{MySection/anInt}
+	 *
+	 * 	<cc># A command-line argument in the form "myarg=foo"</cc>
+	 * 	<ck>myArg</ck> = $A{myarg}
+	 *
+	 * 	<cc># The first command-line argument</cc>
+	 * 	<ck>firstArg</ck> = $A{0}
+	 *
+	 * 	<cc># Look for system property, or env var if that doesn't exist, or command-line arg if that doesn't exist.</cc>
+	 * 	<ck>nested</ck> = $S{mySystemProperty,$E{MY_ENV_VAR,$A{0}}}
+	 *
+	 * 	<cc># A POJO with embedded variables</cc>
+	 * 	<ck>aBean2</ck> = {foo:'$A{0}',baz:$C{MySection/anInt}}
+	 * </p>
+	 *
+	 * <p class='bcode w800'>
+	 * 	<jc>// Java code for accessing config entries above.</jc>
+	 * 	Config cf = getConfig();
+	 *
+	 * 	<jk>int</jk> anInt = cf.getInt(<js>"MySection/anInt"</js>);
+	 * 	<jk>boolean</jk> aBoolean = cf.getBoolean(<js>"MySection/aBoolean"</js>);
+	 * 	<jk>int</jk>[] anIntArray = cf.getObject(<jk>int</jk>[].<jk>class</jk>, <js>"MySection/anIntArray"</js>);
+	 * 	URL aURL = cf.getObject(URL.<jk>class</jk>, <js>"MySection/aURL"</js>);
+	 * 	MyBean aBean = cf.getObject(MyBean.<jk>class</jk>, <js>"MySection/aBean"</js>);
+	 * 	Locale locale = cf.getObject(Locale.<jk>class</jk>, <js>"MySection/locale"</js>);
+	 * 	String path = cf.getString(<js>"MySection/path"</js>);
+	 * 	String mainClass = cf.getString(<js>"MySection/mainClass"</js>);
+	 * 	<jk>int</jk> sameAsAnInt = cf.getInt(<js>"MySection/sameAsAnInt"</js>);
+	 * 	String myArg = cf.getString(<js>"MySection/myArg"</js>);
+	 * 	String firstArg = cf.getString(<js>"MySection/firstArg"</js>);
+	 * </p>
+	 *
+	 * @return The config file for this application, or <jk>null</jk> if no config file is configured.
+	 */
+	public Config getConfig() {
+		return config;
+	}
+
+	/**
+	 * Returns the main jar manifest file contents as a simple {@link ObjectMap}.
+	 *
+	 * <p>
+	 * This map consists of the contents of {@link Manifest#getMainAttributes()} with the keys and entries converted to
+	 * simple strings.
+	 * <p>
+	 * This method can be called from the class constructor.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Get Main-Class from manifest file.</jc>
+	 * 	String mainClass = Microservice.<jsm>getManifest</jsm>().getString(<js>"Main-Class"</js>, <js>"unknown"</js>);
+	 *
+	 * 	<jc>// Get Rest-Resources from manifest file.</jc>
+	 * 	String[] restResources = Microservice.<jsm>getManifest</jsm>().getStringArray(<js>"Rest-Resources"</js>);
+	 * </p>
+	 *
+	 * @return The manifest file from the main jar, or <jk>null</jk> if the manifest file could not be retrieved.
+	 */
+	public ManifestFile getManifest() {
+		return manifest;
+	}
+
+	/**
+	 * Returns the variable resolver for resolving variables in strings and files.
+	 *
+	 * <p>
+	 * Variables can be controlled by the following methods:
+	 * <ul class='doctree'>
+	 * 	<li class='jm'>{@link MicroserviceBuilder#vars(Class...)}
+	 * 	<li class='jm'>{@link MicroserviceBuilder#varContext(String, Object)}
+	 * </ul>
+	 *
+	 * @return The VarResolver used by this Microservice, or <jk>null</jk> if it was never created.
+	 */
+	public VarResolver getVarResolver() {
+		return varResolver;
+	}
+
+	/**
+	 * Returns the logger for this microservice.
+	 *
+	 * @return The logger for this microservice.
+	 */
+	public Logger getLogger() {
+		return logger;
+	}
+
+	/**
+	 * Executes a console command.
+	 *
+	 * @param args
+	 * 	The command arguments.
+	 * 	<br>The first entry in the arguments is always the command name.
+	 * @param in Console input.
+	 * @param out Console output.
+	 * @return <jk>true</jk> if the command returned <jk>true</jk> meaning the console thread should exit.
+	 */
+	public boolean executeCommand(Args args, Scanner in, PrintWriter out) {
+		ConsoleCommand cc = consoleCommandMap.get(args.getArg(0));
+		if (cc == null) {
+			out.println(messages.getString("UnknownCommand"));
+		} else {
+			try {
+				return cc.execute(in, out, args);
+			} catch (Exception e) {
+				e.printStackTrace(out);
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Convenience method for executing a console command directly.
+	 *
+	 * <p>
+	 * Allows you to execute a console command outside the console by simulating input and output.
+	 *
+	 * @param command The command name to execute.
+	 * @param input Optional input to the command.  Can be <jk>null</jk>.
+	 * @param args Optional command arguments to pass to the command.
+	 * @return The command output.
+	 */
+	public String executeCommand(String command, String input, Object...args) {
+		StringWriter sw = new StringWriter();
+		List<String> l = new ArrayList<>();
+		l.add(command);
+		for (Object a : args)
+			l.add(asString(a));
+		Args args2 = new Args(l.toArray(new String[l.size()]));
+		try (Scanner in = new Scanner(input); PrintWriter out = new PrintWriter(sw)) {
+			executeCommand(args2, in, out);
+		}
+		return sw.toString();
+	}
+
+	/**
+	 * Joins the application with the current thread.
+	 *
+	 * <p>
+	 * Default implementation is a no-op.
+	 *
+	 * @return This object (for method chaining).
+	 * @throws Exception
+	 */
+	public Microservice join() throws Exception {
+		return this;
+	}
+
+	/**
+	 * Stop this application.
+	 *
+	 * <p>
+	 * Overridden methods MUST call this method LAST so that the {@link MicroserviceListener#onStop(Microservice)} method is called.
+	 *
+	 * @return This object (for method chaining).
+	 * @throws Exception
+	 */
+	public Microservice stop() throws Exception {
+		listener.onStop(this);
+		return this;
+	}
+
+	/**
+	 * Stops the console (if it's started) and calls {@link System#exit(int)}.
+	 *
+	 * @throws Exception
+	 */
+	public void exit() throws Exception {
+		try {
+			stopConsole();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		System.exit(0);
+	}
+
+	/**
+	 * Kill the JVM by calling <code>System.exit(2);</code>.
+	 */
+	public void kill() {
+		// This triggers the shutdown hook.
+		System.exit(2);
+	}
+
+
+	//-----------------------------------------------------------------------------------------------------------------
+	// Other methods.
+	//-----------------------------------------------------------------------------------------------------------------
+
+	/**
+	 * Returns the console commands associated with this microservice.
+	 *
+	 * @return The console commands associated with this microservice as an unmodifiable map.
+	 */
+	public final Map<String,ConsoleCommand> getConsoleCommands() {
+		return consoleCommandMap;
+	}
+
+	/**
+	 * Returns the console reader.
+	 *
+	 * <p>
+	 * Subclasses can override this method to provide their own console input.
+	 *
+	 * @return The console reader.  Never <jk>null</jk>.
+	 */
+	protected Scanner getConsoleReader() {
+		return consoleReader;
+	}
+
+	/**
+	 * Returns the console writer.
+	 *
+	 * <p>
+	 * Subclasses can override this method to provide their own console output.
+	 *
+	 * @return The console writer.  Never <jk>null</jk>.
+	 */
+	protected PrintWriter getConsoleWriter() {
+		return consoleWriter;
+	}
+
+	/**
+	 * Prints a localized message to the console writer.
+	 *
+	 * <p>
+	 * Ignored if <js>"Console/enabled"</js> is <jk>false</jk>.
+	 *
+	 * @param mb The message bundle containing the message.
+	 * @param messageKey The message key.
+	 * @param args Optional {@link MessageFormat}-style arguments.
+	 */
+	protected void out(MessageBundle mb, String messageKey, Object...args) {
+		String msg = mb.getString(messageKey, args);
+		if (consoleEnabled)
+			getConsoleWriter().println(msg);
+		log(Level.INFO, msg);
+	}
+
+	/**
+	 * Prints a localized message to STDERR.
+	 *
+	 * <p>
+	 * Ignored if <js>"Console/enabled"</js> is <jk>false</jk>.
+	 *
+	 * @param mb The message bundle containing the message.
+	 * @param messageKey The message key.
+	 * @param args Optional {@link MessageFormat}-style arguments.
+	 */
+	protected void err(MessageBundle mb, String messageKey, Object...args) {
+		String msg = mb.getString(messageKey, args);
+		if (consoleEnabled)
+			System.err.println(mb.getString(messageKey, args));  // NOT DEBUG
+		log(Level.SEVERE, msg);
+	}
+
+	/**
+	 * Logs a message to the log file.
+	 *
+	 * @param level
+	 * @param message The message text.
+	 * @param args Optional {@link MessageFormat}-style arguments.
+	 */
+	protected void log(Level level, String message, Object...args) {
+		String msg = args.length == 0 ? message : MessageFormat.format(message, args);
+		getLogger().log(level, msg);
+	}
+
+	@Override /* ConfigChangeListener */
+	public void onConfigChange(List<ConfigEvent> events) {
+		listener.onConfigChange(this, events);
+	}
+}
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/MicroserviceBuilder.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/MicroserviceBuilder.java
new file mode 100644
index 0000000..5aecca7
--- /dev/null
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/MicroserviceBuilder.java
@@ -0,0 +1,386 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.microservice;
+
+import java.io.*;
+import java.util.*;
+import java.util.jar.*;
+import java.util.logging.*;
+
+import org.apache.juneau.config.*;
+import org.apache.juneau.config.store.*;
+import org.apache.juneau.config.vars.*;
+import org.apache.juneau.microservice.console.*;
+import org.apache.juneau.svl.*;
+import org.apache.juneau.utils.*;
+
+/**
+ * Builder for {@link Microservice} class.
+ *
+ * <p>
+ * Instances of this class are created using {@link Microservice#create()}.
+ */
+public class MicroserviceBuilder {
+
+	Args args;
+	ManifestFile manifest;
+	Logger logger;
+	LogConfig logConfig;
+	Config config;
+	String configName;
+	ConfigStore configStore;
+	ConfigBuilder configBuilder = Config.create();
+	Boolean consoleEnabled;
+	List<ConsoleCommand> consoleCommands = new ArrayList<>();
+	VarResolverBuilder varResolverBuilder = VarResolver.create().defaultVars().vars(ConfigVar.class);
+	Scanner consoleReader;
+	PrintWriter consoleWriter;
+	MicroserviceListener listener;
+
+	/**
+	 * Constructor.
+	 */
+	protected MicroserviceBuilder() {}
+
+	/**
+	 * Copy constructor.
+	 *
+	 * @param copyFrom The builder to copy settings from.
+	 */
+	protected MicroserviceBuilder(MicroserviceBuilder copyFrom) {
+		this.args = copyFrom.args;
+		this.manifest = copyFrom.manifest;
+		this.logger = copyFrom.logger;
+		this.configName = copyFrom.configName;
+		this.logConfig = copyFrom.logConfig == null ? null : copyFrom.logConfig.copy();
+		this.consoleEnabled = copyFrom.consoleEnabled;
+		this.configBuilder = copyFrom.configBuilder;
+		this.varResolverBuilder = copyFrom.varResolverBuilder;
+		this.consoleReader = copyFrom.consoleReader;
+		this.consoleWriter = copyFrom.consoleWriter;
+	}
+
+	/**
+	 * Creates a copy of this builder.
+	 *
+	 * @return A new copy of this builder.
+	 */
+	public MicroserviceBuilder copy() {
+		return new MicroserviceBuilder(this);
+	}
+
+	/**
+	 * Instantiate a new microservice using the settings defined on this builder.
+	 *
+	 * @return A new microservice.
+	 * @throws Exception
+	 */
+	public Microservice build() throws Exception {
+		return new Microservice(this);
+	}
+
+	/**
+	 * Specifies the command-line arguments passed into the Java command.
+	 *
+	 * <p>
+	 * This is required if you use {@link Microservice#getArgs()} or <code>$ARG</code> string variables.
+	 *
+	 * @param args
+	 * 	The command-line arguments passed into the Java command as a pre-parsed {@link Args} object.
+	 * @return This object (for method chaining).
+	 */
+	public MicroserviceBuilder args(Args args) {
+		this.args = args;
+		return this;
+	}
+
+	/**
+	 * Specifies the command-line arguments passed into the Java command.
+	 *
+	 * <p>
+	 * This is required if you use {@link Microservice#getArgs()} or <code>$ARG</code> string variables.
+	 *
+	 * @param args
+	 * 	The command-line arguments passed into the Java command as the raw command-line arguments.
+	 * @return This object (for method chaining).
+	 */
+	public MicroserviceBuilder args(String...args) {
+		this.args = new Args(args);
+		return this;
+	}
+
+	/**
+	 * Specifies the manifest file of the jar file this microservice is contained within.
+	 *
+	 * <p>
+	 * This is required if you use {@link Microservice#getManifest()}.
+	 * It's also used to locate initialization values such as <code>Main-Config</code>.
+	 *
+	 * <p>
+	 * If you do not specify the manifest file, we attempt to resolve it through the following methods:
+	 * <ol class='spaced-list'>
+	 * 	<li>
+	 * 		Looking on the file system for a file at <js>"META-INF/MANIFEST.MF"</js>.
+	 * 		This is primarily to allow for running microservices from within eclipse workspaces where the manifest file
+	 * 		is located in the project root.
+	 * 	<li>
+	 * 		Using the class loader for this class to find the file at the URL <js>"META-INF/MANIFEST.MF"</js>.
+	 * </ol>
+	 *
+	 * @param value
+	 * 	The manifest file of this microservice.
+	 * 	<br>Can be any of the following types:
+	 * 	<ul>
+	 * 		<li>{@link ManifestFile}
+	 * 		<li>{@link Manifest}
+	 * 		<li>{@link Reader} - Containing the raw contents of the manifest.  Note that the input must end with a newline.
+	 * 		<li>{@link InputStream} - Containing the raw contents of the manifest.  Note that the input must end with a newline.
+	 * 		<li>{@link File} - File containing the raw contents of the manifest.
+	 * 		<li>{@link String} - Path to file containing the raw contents of the manifest.
+	 * 		<li>{@link Class} - Finds and loads the manifest file of the jar file that the specified class is contained within.
+	 * 	</ul>
+	 * @return This object (for method chaining).
+	 * @throws IOException
+	 */
+	public MicroserviceBuilder manifest(Object value) throws IOException {
+		if (value == null)
+			this.manifest = null;
+		else if (value instanceof ManifestFile)
+			this.manifest = (ManifestFile)value;
+		else if (value instanceof Manifest)
+			this.manifest = new ManifestFile((Manifest)value);
+		else if (value instanceof Reader)
+			this.manifest = new ManifestFile((Reader)value);
+		else if (value instanceof InputStream)
+			this.manifest = new ManifestFile((InputStream)value);
+		else if (value instanceof File)
+			this.manifest = new ManifestFile((File)value);
+		else if (value instanceof String)
+			this.manifest = new ManifestFile(new File((String)value));
+		else if (value instanceof Class)
+			this.manifest = new ManifestFile((Class<?>)value);
+		else
+			throw new RuntimeException("Invalid type passed to MicroserviceBuilder.manifest(Object).  Type=["+value.getClass().getName()+"]");
+
+		System.err.println("ManifestFile=\n" + this.manifest);
+		return this;
+	}
+
+	/**
+	 * Specifies the logger used by the microservice and returned by the {@link Microservice#getLogger()} method.
+	 *
+	 * <p>
+	 * Calling this method overrides the default logging mechanism controlled by the {@link #logConfig(LogConfig)} method.
+	 *
+	 * @param logger The logger to use for logging microservice messages.
+	 * @return This object (for method chaining).
+	 */
+	public MicroserviceBuilder logger(Logger logger) {
+		this.logger = logger;
+		return this;
+	}
+
+	/**
+	 * Specifies logging instructions for the microservice.
+	 *
+	 * <p>
+	 * If not specified, the values are taken from the <js>"Logging"</js> section of the configuration.
+	 *
+	 * <p>
+	 * This method is ignored if {@link #logger(Logger)} is used to set the microservice logger.
+	 *
+	 * @param logConfig The log configuration.
+	 * @return This object (for method chaining).
+	 */
+	public MicroserviceBuilder logConfig(LogConfig logConfig) {
+		this.logConfig = logConfig;
+		return this;
+	}
+
+	/**
+	 * Specifies the config for initializing this microservice.
+	 *
+	 * <p>
+	 * Calling this method overrides the default configuration controlled by the {@link #configName(String)} and {@link #configStore(ConfigStore)} methods.
+	 *
+	 * @param config The configuration.
+	 * @return This object (for method chaining).
+	 */
+	public MicroserviceBuilder config(Config config) {
+		this.config = config;
+		return this;
+	}
+
+	/**
+	 * Specifies the config name for initializing this microservice.
+	 *
+	 * <p>
+	 * By default, we use a {@link ConfigFileStore} store for configuration files.
+	 * If the store is not overridden, then the config name represents the path of the configuration file relative to the
+	 * JVM working directory.
+	 *
+	 * <p>
+	 * If you do not specify the config file location, we attempt to resolve it through the following methods:
+	 * <ol class='spaced-list'>
+	 * 	<li>
+	 * 		The <js>"configFile"</js> argument in the command line arguments passed in through the constructor.
+	 * 	<li>
+	 * 		The value of the <code>Main-Config</code> entry in the manifest file.
+	 * 	<li>
+	 * 		A config file in the same location and with the same name as the executable jar file.
+	 * 		(e.g. <js>"java -jar myjar.jar"</js> will look for <js>"myjar.cfg"</js>).
+	 * 	<li>
+	 * 		Any other <js>"*.cfg"</js> file that can be found in the working directory.
+	 * </ol>
+	 *
+	 * @param configName The configuration name.
+	 * @return This object (for method chaining).
+	 */
+	public MicroserviceBuilder configName(String configName) {
+		this.configName = configName;
+		return this;
+	}
+
+	/**
+	 * Specifies the config store to use for storing and retrieving configurations.
+	 *
+	 * <p>
+	 * By default, we use a {@link ConfigFileStore} store for configuration files.
+	 *
+	 * @param configStore The configuration name.
+	 * @return This object (for method chaining).
+	 */
+	public MicroserviceBuilder configStore(ConfigStore configStore) {
+		this.configStore = configStore;
+		return this;
+	}
+
+	/**
+	 * Specifies that the Java console is enabled for this microservice.
+	 *
+	 * <p>
+	 * If not specified, this value is taken from the <js>"Console/enabled"</js> configuration setting.
+	 * If not specified in the configuration, defaults to <jk>false</jk>.
+	 *
+	 * @param consoleEnabled <jk>true</jk> if the Java console is enabled for this microservice.
+	 * @return This object (for method chaining).
+	 */
+	public MicroserviceBuilder consoleEnabled(boolean consoleEnabled) {
+		this.consoleEnabled = consoleEnabled;
+		return this;
+	}
+
+	/**
+	 * Specifies console commands to make available on the Java console.
+	 *
+	 * <p>
+	 * Note that these are ignored if the console is not enabled via {@link #consoleEnabled(boolean)}.
+	 *
+	 * <p>
+	 * This list augments the commands defined via the <js>"Console/commands"</js> configuration setting.
+	 *
+	 * <p>
+	 * This method can only be used on console commands with no-arg constructors.
+	 *
+	 * @param consoleCommands The list of console commands to append to the list of available commands.
+	 * @return This object (for method chaining).
+	 * @throws IllegalAccessException
+	 * @throws InstantiationException
+	 */
+	@SuppressWarnings("unchecked")
+	public MicroserviceBuilder consoleCommands(Class<? extends ConsoleCommand>...consoleCommands) throws InstantiationException, IllegalAccessException {
+		for (Class<? extends ConsoleCommand> cc : consoleCommands)
+			this.consoleCommands.add(cc.newInstance());
+		return this;
+	}
+
+	/**
+	 * Specifies console commands to make available on the Java console.
+	 *
+	 * <p>
+	 * Note that these are ignored if the console is not enabled via {@link #consoleEnabled(boolean)}.
+	 *
+	 * <p>
+	 * This list augments the commands defined via the <js>"Console/commands"</js> configuration setting.
+	 *
+	 * @param consoleCommands The list of console commands to append to the list of available commands.
+	 * @return This object (for method chaining).
+	 */
+	public MicroserviceBuilder consoleCommands(ConsoleCommand...consoleCommands) {
+		this.consoleCommands.addAll(Arrays.asList(consoleCommands));
+		return this;
+	}
+
+	/**
+	 * Specifies the console input and output.
+	 *
+	 * <p>
+	 * If not specified, uses the console returned by {@link System#console()}.
+	 * If that is not available, uses {@link System#in} and {@link System#out}.
+	 *
+	 * <p>
+	 * Note that these are ignored if the console is not enabled via {@link #consoleEnabled(boolean)}.
+	 *
+	 * @param consoleReader The console input.
+	 * @param consoleWriter The console output.
+	 * @return This object (for method chaining).
+	 */
+	public MicroserviceBuilder console(Scanner consoleReader, PrintWriter consoleWriter) {
+		this.consoleReader = consoleReader;
+		this.consoleWriter = consoleWriter;
+		return this;
+	}
+
+	/**
+	 * Augments the set of variables defined in the configuration and var resolver.
+	 *
+	 * <p>
+	 * This calls {@link VarResolverBuilder#vars(Class[])} on the var resolver used to construct the configuration
+	 * object returned by {@link Microservice#getConfig()} and the var resolver returned by {@link Microservice#getVarResolver()}.
+	 *
+	 * @param vars The set of variables to append to the var resolver builder.
+	 * @return This object (for method chaining).
+	 */
+	@SuppressWarnings("unchecked")
+	public MicroserviceBuilder vars(Class<? extends Var>...vars) {
+		varResolverBuilder.vars(vars);
+		return this;
+	}
+
+	/**
+	 * Adds a var resolver context object for vars defined in the configuration and var resolver.
+	 *
+	 * <p>
+	 * This calls {@link VarResolverBuilder#contextObject(String,Object)} on the var resolver used to construct the configuration
+	 * object returned by {@link Microservice#getConfig()} and the var resolver returned by {@link Microservice#getVarResolver()}.
+	 *
+	 * @param name The context object name.
+	 * @param object The context object.
+	 * @return This object (for method chaining).
+	 */
+	public MicroserviceBuilder varContext(String name, Object object) {
+		varResolverBuilder.contextObject(name, object);
+		return this;
+	}
+
+	/**
+	 * Registers an event listener for this microservice.
+	 *
+	 * @param listener An event listener for this microservice.
+	 * @return This object (for method chaining).
+	 */
+	public MicroserviceBuilder listener(MicroserviceListener listener) {
+		this.listener = listener;
+		return this;
+	}
+}
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/BasicRestServletJena.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/MicroserviceListener.java
old mode 100755
new mode 100644
similarity index 67%
copy from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/BasicRestServletJena.java
copy to juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/MicroserviceListener.java
index a53d1c5..cb4e272
--- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/BasicRestServletJena.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/MicroserviceListener.java
@@ -1,40 +1,45 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.microservice;
-
-import org.apache.juneau.jena.*;
-import org.apache.juneau.rest.*;
-import org.apache.juneau.rest.annotation.*;
-
-/**
- * Resource servlet with additional RDF support.
- */
-@SuppressWarnings("serial")
-@RestResource(
-	serializers={
-		Inherit.class,
-		RdfXmlSerializer.class,
-		RdfXmlAbbrevSerializer.class,
-		TurtleSerializer.class,
-		NTripleSerializer.class,
-		N3Serializer.class
-	},
-	parsers={
-		Inherit.class,
-		RdfXmlParser.class,
-		TurtleParser.class,
-		NTripleParser.class,
-		N3Parser.class
-	}
-)
-public abstract class BasicRestServletJena extends BasicRestServlet {}
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.microservice;
+
+import java.util.*;
+
+import org.apache.juneau.config.event.*;
+
+/**
+ * Listener class for microservice lifecycle events.
+ */
+public interface MicroserviceListener {
+
+	/**
+	 * Called at the beginning of the {@link Microservice#start()} call.
+	 *
+	 * @param microservice Reference to microservice.
+	 */
+	void onStart(Microservice microservice);
+
+	/**
+	 * Called at the end of the {@link Microservice#stop()} call.
+	 *
+	 * @param microservice Reference to microservice.
+	 */
+	void onStop(Microservice microservice);
+
+	/**
+	 * Called if one or more changes occur in the config file.
+	 *
+	 * @param microservice Reference to microservice.
+	 * @param events The list of changes in the config file.
+	 */
+	void onConfigChange(Microservice microservice, List<ConfigEvent> events);
+}
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/console/ConsoleCommand.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ConsoleCommand.java
similarity index 98%
rename from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/console/ConsoleCommand.java
rename to juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ConsoleCommand.java
index a3a1fd3..60b41d1 100644
--- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/console/ConsoleCommand.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ConsoleCommand.java
@@ -30,7 +30,7 @@ import org.apache.juneau.utils.*;
  * 	<li>The <js>"Console/commands"</js> configuration value.
  * 		<br>This is a comma-delimited list of fully-qualified names of classes implementing this interface.
  * 		<br>When associated this way, the implementation class must have a no-arg constructor.
- * 	<li>Overriding the {@link Microservice#createConsoleCommands()} method.
+ * 	<li>Specifying commands via the {@link MicroserviceBuilder#consoleCommands(Class...)} method.
  * 		<br>This allows you to override the default implementation above and augment or replace the list
  * 			with your own implementation objects.
  * </ul>
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/console/ExitCommand.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ExitCommand.java
similarity index 95%
rename from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/console/ExitCommand.java
rename to juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ExitCommand.java
index cb1318f..a690768 100644
--- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/console/ExitCommand.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ExitCommand.java
@@ -42,7 +42,11 @@ public class ExitCommand extends ConsoleCommand {
 
 	@Override /* ConsoleCommand */
 	public boolean execute(Scanner in, PrintWriter out, Args args) {
-		Microservice.getInstance().stop();
+		try {
+			Microservice.getInstance().stop().exit();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
 		return true;
 	}
 }
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/console/HelpCommand.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/HelpCommand.java
similarity index 100%
rename from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/console/HelpCommand.java
rename to juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/HelpCommand.java
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/console/RestartCommand.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/RestartCommand.java
similarity index 100%
rename from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/console/RestartCommand.java
rename to juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/RestartCommand.java
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/console/package-info.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/package-info.java
similarity index 100%
rename from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/console/package-info.java
rename to juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/package-info.java
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/package-info.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/package-info.java
similarity index 100%
copy from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/package-info.java
copy to juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/package-info.java
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ConfigEdit.html b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/ConfigEdit.html
similarity index 100%
rename from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ConfigEdit.html
rename to juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/ConfigEdit.html
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java
similarity index 100%
rename from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java
rename to juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
similarity index 100%
rename from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
rename to juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogEntryFormatter.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogEntryFormatter.java
similarity index 100%
rename from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogEntryFormatter.java
rename to juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogEntryFormatter.java
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogParser.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogParser.java
similarity index 100%
rename from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogParser.java
rename to juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogParser.java
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
similarity index 100%
rename from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
rename to juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/SampleRootResource.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/SampleRootResource.java
similarity index 100%
rename from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/SampleRootResource.java
rename to juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/SampleRootResource.java
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ShutdownResource.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/ShutdownResource.java
similarity index 96%
rename from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ShutdownResource.java
rename to juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/ShutdownResource.java
index 4c88dfd..154b50e 100755
--- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ShutdownResource.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/ShutdownResource.java
@@ -42,7 +42,7 @@ public class ShutdownResource extends BasicRestServlet {
 				public void run() {
 					try {
 						Thread.sleep(1000);
-					System.exit(0);
+						System.exit(0);
 					} catch (InterruptedException e) {
 						e.printStackTrace();
 					}
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/package-info.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/package-info.java
similarity index 100%
rename from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/package-info.java
rename to juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/package-info.java
diff --git a/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/package-info.java b/juneau-microservice/juneau-microservice-core/src/main/resources/org/apache/juneau/microservice/Microservice.properties
old mode 100755
new mode 100644
similarity index 82%
copy from juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/package-info.java
copy to juneau-microservice/juneau-microservice-core/src/main/resources/org/apache/juneau/microservice/Microservice.properties
index c9eff9b..a6521a0
--- a/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/package-info.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/resources/org/apache/juneau/microservice/Microservice.properties
@@ -1,18 +1,18 @@
-// ***************************************************************************************************************************
-// * 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.                                              *
-// ***************************************************************************************************************************
-
-/**
- * Microservice Samples
- */
-package org.apache.juneau.microservice.sample;
-
+// ***************************************************************************************************************************
+// * 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.                                              *
+// ***************************************************************************************************************************
+
+ListOfAvailableCommands = \nList of available commands:
+RunningClassWithoutConfig = Running class ''{0}'' without a config file.
+RunningClassWithConfig =  Running class ''{0}'' using config file ''{1}''.
+UnknownCommand = Unknown command.
+
diff --git a/juneau-microservice/juneau-microservice-server/src/main/resources/org/apache/juneau/microservice/Messages.properties b/juneau-microservice/juneau-microservice-core/src/main/resources/org/apache/juneau/microservice/console/Messages.properties
similarity index 63%
rename from juneau-microservice/juneau-microservice-server/src/main/resources/org/apache/juneau/microservice/Messages.properties
rename to juneau-microservice/juneau-microservice-core/src/main/resources/org/apache/juneau/microservice/console/Messages.properties
index 6075947..e9a4843 100644
--- a/juneau-microservice/juneau-microservice-server/src/main/resources/org/apache/juneau/microservice/Messages.properties
+++ b/juneau-microservice/juneau-microservice-core/src/main/resources/org/apache/juneau/microservice/console/Messages.properties
@@ -11,12 +11,25 @@
 // * specific language governing permissions and limitations under the License.                                              *
 // ***************************************************************************************************************************
 
-Microservice.ListOfAvailableCommands = \nList of available commands:
-Microservice.RunningClassWithoutConfig = Running class ''{0}'' without a config file.
-Microservice.RunningClassWithConfig =  Running class ''{0}'' using config file ''{1}''.
-Microservice.UnknownCommand = Unknown command.
+ExitCommand.info = Shut down service
+ExitCommand.description = Immediately shuts down the microservice and then the JVM.
 
-RestMicroservice.StoppingServer = Stopping server.
-RestMicroservice.ServerStopped = Server stopped.
-RestMicroservice.ServerStarted = Server started on port {0}
+RestartCommand.info = Restarts service
+RestartCommand.description = Immediately shuts down and then restarts the microservice without restarting the JVM.
 
+HelpCommand.info = Commands help
+HelpCommand.description = \
+	When called without arguments, prints the descriptions of all available commands.\n\
+	Can also be called with one or more arguments to get detailed information on a command.
+HelpCommand.examples = \
+	List all commands:\n\
+	\t> help\n\
+	\n\
+	List help on the help command:\n\
+	\t> help help\n	
+HelpCommand.ListOfAvailableCommands = List of available commands:
+HelpCommand.NAME = NAME
+HelpCommand.SYNOPSIS = SYNOPSIS
+HelpCommand.DESCRIPTION = DESCRIPTION
+HelpCommand.EXAMPLES = EXAMPLES
+HelpCommand.CommandNotFound = Command not found.
diff --git a/juneau-microservice/juneau-microservice-template/.classpath b/juneau-microservice/juneau-microservice-jetty-template/.classpath
similarity index 100%
copy from juneau-microservice/juneau-microservice-template/.classpath
copy to juneau-microservice/juneau-microservice-jetty-template/.classpath
diff --git a/juneau-microservice/juneau-microservice-server/.gitignore b/juneau-microservice/juneau-microservice-jetty-template/.gitignore
similarity index 81%
copy from juneau-microservice/juneau-microservice-server/.gitignore
copy to juneau-microservice/juneau-microservice-jetty-template/.gitignore
index 22d1e37..59c56a4 100644
--- a/juneau-microservice/juneau-microservice-server/.gitignore
+++ b/juneau-microservice/juneau-microservice-jetty-template/.gitignore
@@ -1,2 +1,3 @@
 /target/
 **/.DS_Store
+/bin/
\ No newline at end of file
diff --git a/juneau-microservice/juneau-microservice-template/.project b/juneau-microservice/juneau-microservice-jetty-template/.project
similarity index 90%
copy from juneau-microservice/juneau-microservice-template/.project
copy to juneau-microservice/juneau-microservice-jetty-template/.project
index 5036cd8..e300af5 100755
--- a/juneau-microservice/juneau-microservice-template/.project
+++ b/juneau-microservice/juneau-microservice-jetty-template/.project
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>juneau-microservice-template</name>
+	<name>juneau-microservice-jetty-template</name>
 	<comment></comment>
 	<projects>
 	</projects>
diff --git a/juneau-microservice/juneau-microservice-template/build-overlay/.classpath b/juneau-microservice/juneau-microservice-jetty-template/build-overlay/.classpath
similarity index 100%
copy from juneau-microservice/juneau-microservice-template/build-overlay/.classpath
copy to juneau-microservice/juneau-microservice-jetty-template/build-overlay/.classpath
diff --git a/juneau-microservice/juneau-microservice-template/build-overlay/.project b/juneau-microservice/juneau-microservice-jetty-template/build-overlay/.project
similarity index 100%
copy from juneau-microservice/juneau-microservice-template/build-overlay/.project
copy to juneau-microservice/juneau-microservice-jetty-template/build-overlay/.project
diff --git a/juneau-microservice/juneau-microservice-template/build-overlay/my-microservice.launch b/juneau-microservice/juneau-microservice-jetty-template/build-overlay/my-microservice.launch
similarity index 100%
copy from juneau-microservice/juneau-microservice-template/build-overlay/my-microservice.launch
copy to juneau-microservice/juneau-microservice-jetty-template/build-overlay/my-microservice.launch
diff --git a/juneau-microservice/juneau-microservice-template/build-overlay/pom.xml b/juneau-microservice/juneau-microservice-jetty-template/build-overlay/pom.xml
similarity index 100%
copy from juneau-microservice/juneau-microservice-template/build-overlay/pom.xml
copy to juneau-microservice/juneau-microservice-jetty-template/build-overlay/pom.xml
diff --git a/juneau-examples/juneau-examples-rest/files/htdocs/images/asf.png b/juneau-microservice/juneau-microservice-jetty-template/files/htdocs/images/asf.png
similarity index 100%
rename from juneau-examples/juneau-examples-rest/files/htdocs/images/asf.png
rename to juneau-microservice/juneau-microservice-jetty-template/files/htdocs/images/asf.png
diff --git a/juneau-examples/juneau-examples-rest/files/htdocs/images/juneau.png b/juneau-microservice/juneau-microservice-jetty-template/files/htdocs/images/juneau.png
similarity index 100%
rename from juneau-examples/juneau-examples-rest/files/htdocs/images/juneau.png
rename to juneau-microservice/juneau-microservice-jetty-template/files/htdocs/images/juneau.png
diff --git a/juneau-microservice/juneau-microservice-template/files/htdocs/styles/SwaggerUI.css b/juneau-microservice/juneau-microservice-jetty-template/files/htdocs/styles/SwaggerUI.css
similarity index 100%
copy from juneau-microservice/juneau-microservice-template/files/htdocs/styles/SwaggerUI.css
copy to juneau-microservice/juneau-microservice-jetty-template/files/htdocs/styles/SwaggerUI.css
diff --git a/juneau-examples/juneau-examples-rest/files/htdocs/themes/dark.css b/juneau-microservice/juneau-microservice-jetty-template/files/htdocs/themes/dark.css
similarity index 100%
rename from juneau-examples/juneau-examples-rest/files/htdocs/themes/dark.css
rename to juneau-microservice/juneau-microservice-jetty-template/files/htdocs/themes/dark.css
diff --git a/juneau-examples/juneau-examples-rest/files/htdocs/themes/devops.css b/juneau-microservice/juneau-microservice-jetty-template/files/htdocs/themes/devops.css
similarity index 100%
rename from juneau-examples/juneau-examples-rest/files/htdocs/themes/devops.css
rename to juneau-microservice/juneau-microservice-jetty-template/files/htdocs/themes/devops.css
diff --git a/juneau-examples/juneau-examples-rest/files/htdocs/themes/light.css b/juneau-microservice/juneau-microservice-jetty-template/files/htdocs/themes/light.css
similarity index 100%
rename from juneau-examples/juneau-examples-rest/files/htdocs/themes/light.css
rename to juneau-microservice/juneau-microservice-jetty-template/files/htdocs/themes/light.css
diff --git a/juneau-examples/juneau-examples-rest/files/htdocs/themes/original.css b/juneau-microservice/juneau-microservice-jetty-template/files/htdocs/themes/original.css
similarity index 100%
rename from juneau-examples/juneau-examples-rest/files/htdocs/themes/original.css
rename to juneau-microservice/juneau-microservice-jetty-template/files/htdocs/themes/original.css
diff --git a/juneau-microservice/juneau-microservice-test/files/jetty.xml b/juneau-microservice/juneau-microservice-jetty-template/files/jetty.xml
similarity index 97%
copy from juneau-microservice/juneau-microservice-test/files/jetty.xml
copy to juneau-microservice/juneau-microservice-jetty-template/files/jetty.xml
index 302bd2a..9ef28ea 100644
--- a/juneau-microservice/juneau-microservice-test/files/jetty.xml
+++ b/juneau-microservice/juneau-microservice-jetty-template/files/jetty.xml
@@ -32,10 +32,6 @@
 
 	<New id="context" class="org.eclipse.jetty.servlet.ServletContextHandler">
 		<Set name="contextPath">/</Set>
-		<Call name="addServlet">
-			<Arg>org.apache.juneau.rest.test.Root</Arg>
-			<Arg>/*</Arg>
-		</Call>
 		<Set name="sessionHandler">
 			<New class="org.eclipse.jetty.server.session.SessionHandler" />
 		</Set>
diff --git a/juneau-microservice/juneau-microservice-template/my-microservice.cfg b/juneau-microservice/juneau-microservice-jetty-template/my-microservice.cfg
similarity index 97%
copy from juneau-microservice/juneau-microservice-template/my-microservice.cfg
copy to juneau-microservice/juneau-microservice-jetty-template/my-microservice.cfg
index 05c7638..ba39cd7 100755
--- a/juneau-microservice/juneau-microservice-template/my-microservice.cfg
+++ b/juneau-microservice/juneau-microservice-jetty-template/my-microservice.cfg
@@ -40,6 +40,8 @@ resolveVars = true
 # jetty.xml file as "$S{availablePort}" (assuming resolveVars is enabled).
 port = 10000,0,0,0
 
+servlets = org.apache.juneau.microservice.sample.RootResources
+
 #=======================================================================================================================
 # REST settings
 #=======================================================================================================================
diff --git a/juneau-examples/juneau-examples-rest/juneau-examples-rest.launch b/juneau-microservice/juneau-microservice-jetty-template/my-microservice.launch
similarity index 86%
rename from juneau-examples/juneau-examples-rest/juneau-examples-rest.launch
rename to juneau-microservice/juneau-microservice-jetty-template/my-microservice.launch
index cf31023..b1bdb66 100644
--- a/juneau-examples/juneau-examples-rest/juneau-examples-rest.launch
+++ b/juneau-microservice/juneau-microservice-jetty-template/my-microservice.launch
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/RestMicroservice.java"/>
+<listEntry value="/juneau-microservice-jetty-template"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
+<listEntry value="4"/>
 </listAttribute>
 <booleanAttribute key="org.eclipse.jdt.debug.ui.CONSIDER_INHERITED_MAIN" value="true"/>
 <booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
@@ -12,7 +12,7 @@
 <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.juneau.microservice.RestMicroservice"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="examples.cfg"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="juneau-examples-rest"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="my-microservice.cfg"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="juneau-microservice-jetty-template"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
 </launchConfiguration>
diff --git a/juneau-microservice/juneau-microservice-template/pom.xml b/juneau-microservice/juneau-microservice-jetty-template/pom.xml
similarity index 97%
copy from juneau-microservice/juneau-microservice-template/pom.xml
copy to juneau-microservice/juneau-microservice-jetty-template/pom.xml
index 8332c50..b727595 100644
--- a/juneau-microservice/juneau-microservice-template/pom.xml
+++ b/juneau-microservice/juneau-microservice-jetty-template/pom.xml
@@ -31,7 +31,7 @@
 		<version>8.0.0-SNAPSHOT</version>
 	</parent>
 
-	<artifactId>juneau-microservice-template</artifactId>
+	<artifactId>juneau-microservice-jetty-template</artifactId>
 	<name>Apache Juneau Microservice Template</name>
 	<description>A template project developers use to start with to create a microservice.</description>
 	
@@ -43,7 +43,7 @@
 	<dependencies>
 		<dependency>
 			<groupId>org.apache.juneau</groupId>
-			<artifactId>juneau-microservice-server</artifactId>
+			<artifactId>juneau-microservice-jetty</artifactId>
 			<version>${juneau.version}</version>
 		</dependency>
 	</dependencies>
diff --git a/juneau-microservice/juneau-microservice-template/src/assembly/bin.xml b/juneau-microservice/juneau-microservice-jetty-template/src/assembly/bin.xml
similarity index 100%
copy from juneau-microservice/juneau-microservice-template/src/assembly/bin.xml
copy to juneau-microservice/juneau-microservice-jetty-template/src/assembly/bin.xml
diff --git a/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/HelloWorldResource.java b/juneau-microservice/juneau-microservice-jetty-template/src/main/java/org/apache/juneau/microservice/sample/HelloWorldResource.java
similarity index 100%
copy from juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/HelloWorldResource.java
copy to juneau-microservice/juneau-microservice-jetty-template/src/main/java/org/apache/juneau/microservice/sample/HelloWorldResource.java
diff --git a/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/RootResources.java b/juneau-microservice/juneau-microservice-jetty-template/src/main/java/org/apache/juneau/microservice/sample/RootResources.java
similarity index 100%
copy from juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/RootResources.java
copy to juneau-microservice/juneau-microservice-jetty-template/src/main/java/org/apache/juneau/microservice/sample/RootResources.java
diff --git a/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/nls/Messages.properties b/juneau-microservice/juneau-microservice-jetty-template/src/main/java/org/apache/juneau/microservice/sample/nls/Messages.properties
similarity index 100%
copy from juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/nls/Messages.properties
copy to juneau-microservice/juneau-microservice-jetty-template/src/main/java/org/apache/juneau/microservice/sample/nls/Messages.properties
diff --git a/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/package-info.java b/juneau-microservice/juneau-microservice-jetty-template/src/main/java/org/apache/juneau/microservice/sample/package-info.java
similarity index 100%
copy from juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/package-info.java
copy to juneau-microservice/juneau-microservice-jetty-template/src/main/java/org/apache/juneau/microservice/sample/package-info.java
diff --git a/juneau-microservice/juneau-microservice-server/.classpath b/juneau-microservice/juneau-microservice-jetty/.classpath
similarity index 100%
rename from juneau-microservice/juneau-microservice-server/.classpath
rename to juneau-microservice/juneau-microservice-jetty/.classpath
diff --git a/juneau-microservice/juneau-microservice-server/.gitignore b/juneau-microservice/juneau-microservice-jetty/.gitignore
similarity index 78%
copy from juneau-microservice/juneau-microservice-server/.gitignore
copy to juneau-microservice/juneau-microservice-jetty/.gitignore
index 22d1e37..5fbb688 100644
--- a/juneau-microservice/juneau-microservice-server/.gitignore
+++ b/juneau-microservice/juneau-microservice-jetty/.gitignore
@@ -1,2 +1,3 @@
 /target/
 **/.DS_Store
+/bin/
diff --git a/juneau-microservice/juneau-microservice-template/.project b/juneau-microservice/juneau-microservice-jetty/.project
old mode 100755
new mode 100644
similarity index 90%
copy from juneau-microservice/juneau-microservice-template/.project
copy to juneau-microservice/juneau-microservice-jetty/.project
index 5036cd8..dcfc7e0
--- a/juneau-microservice/juneau-microservice-template/.project
+++ b/juneau-microservice/juneau-microservice-jetty/.project
@@ -1,29 +1,29 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>juneau-microservice-template</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>edu.umd.cs.findbugs.plugin.eclipse.findbugsBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>edu.umd.cs.findbugs.plugin.eclipse.findbugsNature</nature>
-	</natures>
-</projectDescription>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>juneau-microservice-jetty</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>edu.umd.cs.findbugs.plugin.eclipse.findbugsBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>edu.umd.cs.findbugs.plugin.eclipse.findbugsNature</nature>
+	</natures>
+</projectDescription>
diff --git a/juneau-microservice/juneau-microservice-server/Dockerfile b/juneau-microservice/juneau-microservice-jetty/Dockerfile
similarity index 100%
rename from juneau-microservice/juneau-microservice-server/Dockerfile
rename to juneau-microservice/juneau-microservice-jetty/Dockerfile
diff --git a/juneau-microservice/juneau-microservice-server/pom.xml b/juneau-microservice/juneau-microservice-jetty/pom.xml
similarity index 83%
copy from juneau-microservice/juneau-microservice-server/pom.xml
copy to juneau-microservice/juneau-microservice-jetty/pom.xml
index 5fd3dc1..eaf1ede 100644
--- a/juneau-microservice/juneau-microservice-server/pom.xml
+++ b/juneau-microservice/juneau-microservice-jetty/pom.xml
@@ -23,7 +23,7 @@
 		<version>8.0.0-SNAPSHOT</version>
 	</parent>
 
-	<artifactId>juneau-microservice-server</artifactId>
+	<artifactId>juneau-microservice-jetty</artifactId>
 	<name>Apache Juneau Microservice Server</name>
 	<description>API for creating standalone executable jars that can be used to start lightweight configurable REST interfaces.</description>
 
@@ -39,17 +39,7 @@
 	<dependencies>
 		<dependency>
 			<groupId>org.apache.juneau</groupId>
-			<artifactId>juneau-rest-server</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.juneau</groupId>
-			<artifactId>juneau-rest-client</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.juneau</groupId>
-			<artifactId>juneau-marshall-rdf</artifactId>
+			<artifactId>juneau-microservice-core</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
@@ -72,34 +62,14 @@
 			<artifactId>jetty-xml</artifactId>
 			<version>${jetty.version}</version>
 		</dependency>
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>javax.servlet-api</artifactId>
+		</dependency>
 	</dependencies>
 
 	<build>
 		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-source-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>attach-sources</id>
-						<phase>verify</phase>
-						<goals>
-							<goal>jar-no-fork</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-jar-plugin</artifactId>
-				<configuration>
-					<archive>
-						<manifest>
-							<mainClass>org.apache.juneau.microservice.RestMicroservice</mainClass>
-						</manifest>
-					</archive>
-				</configuration>
-			</plugin>
 			<!--plugin>
 				<groupId>com.github.siom79.japicmp</groupId>
 				<artifactId>japicmp-maven-plugin</artifactId>
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/BasicRestServletJena.java b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/BasicJettyMicroserviceListener.java
old mode 100755
new mode 100644
similarity index 68%
copy from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/BasicRestServletJena.java
copy to juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/BasicJettyMicroserviceListener.java
index a53d1c5..c500087
--- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/BasicRestServletJena.java
+++ b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/BasicJettyMicroserviceListener.java
@@ -1,40 +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.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.microservice;
-
-import org.apache.juneau.jena.*;
-import org.apache.juneau.rest.*;
-import org.apache.juneau.rest.annotation.*;
-
-/**
- * Resource servlet with additional RDF support.
- */
-@SuppressWarnings("serial")
-@RestResource(
-	serializers={
-		Inherit.class,
-		RdfXmlSerializer.class,
-		RdfXmlAbbrevSerializer.class,
-		TurtleSerializer.class,
-		NTripleSerializer.class,
-		N3Serializer.class
-	},
-	parsers={
-		Inherit.class,
-		RdfXmlParser.class,
-		TurtleParser.class,
-		NTripleParser.class,
-		N3Parser.class
-	}
-)
-public abstract class BasicRestServletJena extends BasicRestServlet {}
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.microservice;
+
+/**
+ * Basic extensible microservice listener with default no-op method implementations.
+ */
+public class BasicJettyMicroserviceListener extends BasicMicroserviceListener implements JettyMicroserviceListener {
+
+	@Override /* JettyMicroserviceListener */
+	public void onCreateServer(JettyMicroservice microservice) {}
+
+	@Override /* JettyMicroserviceListener */
+	public void onStartServer(JettyMicroservice microservice) {}
+
+	@Override /* JettyMicroserviceListener */
+	public void onPostStartServer(JettyMicroservice microservice) {}
+
+	@Override /* JettyMicroserviceListener */
+	public void onStopServer(JettyMicroservice microservice) {}
+
+	@Override /* JettyMicroserviceListener */
+	public void onPostStopServer(JettyMicroservice microservice) {}
+}
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/BasicRestServletJena.java b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/BasicJettyServerFactory.java
old mode 100755
new mode 100644
similarity index 69%
copy from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/BasicRestServletJena.java
copy to juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/BasicJettyServerFactory.java
index a53d1c5..3cf8a5a
--- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/BasicRestServletJena.java
+++ b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/BasicJettyServerFactory.java
@@ -1,40 +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.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.microservice;
-
-import org.apache.juneau.jena.*;
-import org.apache.juneau.rest.*;
-import org.apache.juneau.rest.annotation.*;
-
-/**
- * Resource servlet with additional RDF support.
- */
-@SuppressWarnings("serial")
-@RestResource(
-	serializers={
-		Inherit.class,
-		RdfXmlSerializer.class,
-		RdfXmlAbbrevSerializer.class,
-		TurtleSerializer.class,
-		NTripleSerializer.class,
-		N3Serializer.class
-	},
-	parsers={
-		Inherit.class,
-		RdfXmlParser.class,
-		TurtleParser.class,
-		NTripleParser.class,
-		N3Parser.class
-	}
-)
-public abstract class BasicRestServletJena extends BasicRestServlet {}
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.microservice;
+
+import java.io.*;
+
+import org.apache.juneau.*;
+import org.eclipse.jetty.server.*;
+import org.eclipse.jetty.xml.*;
+
+/**
+ * Basic implementation of a Jetty server factory.
+ */
+public class BasicJettyServerFactory implements JettyServerFactory {
+
+	@Override
+	public Server create(String jettyXml) throws Exception {
+		if (jettyXml == null)
+			throw new FormattedRuntimeException("jetty.xml file location was not specified in the configuration file (Jetty/config) or manifest file (Jetty-Config) or found on the file system or classpath.");
+		XmlConfiguration xmlConfiguration = new XmlConfiguration(new ByteArrayInputStream(jettyXml.getBytes()));
+		return (Server)xmlConfiguration.configure();
+	}
+}
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/JettyLogger.java b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/JettyLogger.java
similarity index 100%
rename from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/JettyLogger.java
rename to juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/JettyLogger.java
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/RestMicroservice.java b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/JettyMicroservice.java
old mode 100755
new mode 100644
similarity index 61%
rename from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/RestMicroservice.java
rename to juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/JettyMicroservice.java
index 773fe97..43950f2
--- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/RestMicroservice.java
+++ b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/JettyMicroservice.java
@@ -23,15 +23,14 @@ import javax.servlet.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.config.*;
-import org.apache.juneau.config.event.*;
 import org.apache.juneau.internal.*;
+import org.apache.juneau.rest.*;
 import org.apache.juneau.svl.*;
 import org.apache.juneau.utils.*;
 import org.eclipse.jetty.server.*;
 import org.eclipse.jetty.server.Handler;
 import org.eclipse.jetty.server.handler.*;
 import org.eclipse.jetty.servlet.*;
-import org.eclipse.jetty.xml.*;
 
 /**
  * Entry point for Juneau microservice that implements a REST interface using Jetty on a single port.
@@ -44,81 +43,83 @@ import org.eclipse.jetty.xml.*;
  * <h5 class='topic'>Defining REST Resources</h5>
  *
  * Top-level REST resources are defined in the <code>jetty.xml</code> file as normal servlets.
- *
- * <h5 class='topic'>Logging</h5>
- *
- * Logging is initialized by the {@link #initLogging()} method.
- * This method can be overridden to provide customized logging behavior.
- *
- * <h5 class='topic'>Lifecycle Listener Methods</h5>
- * Subclasses can optionally implement the following event listener methods:
- * <ul class='spaced-list'>
- * 	<li>
- * 		{@link #onStart()} - Gets executed before {@link #start()}.
- * 	<li>
- * 		{@link #onStop()} - Gets executed before {@link #stop()}.
- * 	<li>
- * 		{@link #onCreateServer()} - Gets executed before {@link #createServer()}.
- * 	<li>
- * 		{@link #onStartServer()} - Gets executed before {@link #startServer()}.
- * 	<li>
- * 		{@link #onPostStartServer()} - Gets executed after {@link #startServer()}.
- * 	<li>
- * 		{@link #onStopServer()} - Gets executed before {@link #stop()}.
- * 	<li>
- * 		{@link #onPostStopServer()} - Gets executed after {@link #stop()}.
- * </ul>
  */
-public class RestMicroservice extends Microservice {
+public class JettyMicroservice extends Microservice {
 
-	Server server;
-	private Object jettyXml;
-	private final MessageBundle mb = MessageBundle.create(RestMicroservice.class, "Messages");
+	private static volatile JettyMicroservice INSTANCE;
 
-	private static volatile RestMicroservice INSTANCE;
+	private static void setInstance(JettyMicroservice m) {
+		synchronized(JettyMicroservice.class) {
+			INSTANCE = m;
+		}
+	}
 
 	/**
 	 * Returns the Microservice instance.
 	 * <p>
 	 * This method only works if there's only one Microservice instance in a JVM.
-	 * Otherwise, it's just overwritten by the last call to {@link #RestMicroservice(String...)}.
+	 * Otherwise, it's just overwritten by the last instantiated microservice.
 	 *
 	 * @return The Microservice instance, or <jk>null</jk> if there isn't one.
 	 */
-	public static RestMicroservice getInstance() {
-		synchronized(RestMicroservice.class) {
+	public static JettyMicroservice getInstance() {
+		synchronized(JettyMicroservice.class) {
 			return INSTANCE;
 		}
 	}
 
 	/**
-	 * Main method.
-	 *
-	 * <p>
-	 * Subclasses must also implement this method!
+	 * Entry-point method.
 	 *
 	 * @param args Command line arguments.
 	 * @throws Exception
 	 */
 	public static void main(String[] args) throws Exception {
-		new RestMicroservice(args).start().join();
+		JettyMicroservice
+			.create()
+			.args(args)
+			.build()
+			.start()
+			.startConsole()
+			.join();
+	}
+
+
+	final MessageBundle messages = MessageBundle.create(JettyMicroservice.class);
+
+	//-----------------------------------------------------------------------------------------------------------------
+	// Properties set in constructor
+	//-----------------------------------------------------------------------------------------------------------------
+	private final JettyMicroserviceBuilder builder;
+	final JettyMicroserviceListener listener;
+	private final JettyServerFactory factory;
+
+	//-----------------------------------------------------------------------------------------------------------------
+	// Properties set in constructor
+	//-----------------------------------------------------------------------------------------------------------------
+	volatile Server server;
+
+	/**
+	 * Creates a new microservice builder.
+	 *
+	 * @return A new microservice builder.
+	 */
+	public static JettyMicroserviceBuilder create() {
+		return new JettyMicroserviceBuilder();
 	}
 
 	/**
 	 * Constructor.
 	 *
-	 * @param args Command line arguments.
+	 * @param builder The constructor arguments.
 	 * @throws Exception
 	 */
-	public RestMicroservice(String...args) throws Exception {
-		super(args);
+	protected JettyMicroservice(JettyMicroserviceBuilder builder) throws Exception {
+		super(builder);
 		setInstance(this);
-	}
-
-	private static void setInstance(RestMicroservice rm) {
-		synchronized(RestMicroservice.class) {
-			INSTANCE = rm;
-		}
+		this.builder = builder.copy();
+		this.listener = builder.listener != null ? builder.listener : new BasicJettyMicroserviceListener();
+		this.factory = builder.factory != null ? builder.factory : new BasicJettyServerFactory();
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
@@ -126,35 +127,34 @@ public class RestMicroservice extends Microservice {
 	//-----------------------------------------------------------------------------------------------------------------
 
 	@Override /* Microservice */
-	public RestMicroservice start() throws Exception {
+	public synchronized JettyMicroservice start() throws Exception {
 		super.start();
 		createServer();
 		startServer();
-		startConsole();
 		return this;
 	}
 
 	@Override /* Microservice */
-	public RestMicroservice join() throws Exception {
+	public JettyMicroservice join() throws Exception {
 		server.join();
 		return this;
 	}
 
 	@Override /* Microservice */
-	public RestMicroservice stop() {
+	public synchronized JettyMicroservice stop() throws Exception {
 		final Logger logger = getLogger();
-		final MessageBundle mb2 = mb;
-		Thread t = new Thread() {
+		final MessageBundle mb2 = messages;
+		Thread t = new Thread("JettyMicroserviceStop") {
 			@Override /* Thread */
 			public void run() {
 				try {
 					if (server == null || server.isStopping() || server.isStopped())
 						return;
-					onStopServer();
+					listener.onStopServer(JettyMicroservice.this);
 					out(mb2, "StoppingServer");
 					server.stop();
 					out(mb2, "ServerStopped");
-					onPostStopServer();
+					listener.onPostStopServer(JettyMicroservice.this);
 				} catch (Exception e) {
 					logger.log(Level.WARNING, e.getLocalizedMessage(), e);
 				}
@@ -167,6 +167,7 @@ public class RestMicroservice extends Microservice {
 			e.printStackTrace();
 		}
 		super.stop();
+
 		return this;
 	}
 
@@ -200,11 +201,10 @@ public class RestMicroservice extends Microservice {
 	 */
 	public String getContextPath() {
 		for (Handler h : getServer().getHandlers()) {
-			if (h instanceof HandlerCollection) {
+			if (h instanceof HandlerCollection)
 				for (Handler h2 : ((HandlerCollection)h).getChildHandlers())
 					if (h2 instanceof ServletContextHandler)
 						return ((ServletContextHandler)h2).getContextPath();
-			}
 			if (h instanceof ServletContextHandler)
 				return ((ServletContextHandler)h).getContextPath();
 		}
@@ -289,45 +289,61 @@ public class RestMicroservice extends Microservice {
 	 * @return The newly-created server.
 	 * @throws Exception
 	 */
-	protected Server createServer() throws Exception {
-		onCreateServer();
+	public Server createServer() throws Exception {
+		listener.onCreateServer(this);
 
 		Config cf = getConfig();
 		ObjectMap mf = getManifest();
 		VarResolver vr = getVarResolver();
 
-		int[] ports = cf.getObjectWithDefault("Jetty/port", mf.getWithDefault("Jetty-Port", new int[]{8000}, int[].class), int[].class);
+		int[] ports = ObjectUtils.firstNonNull(builder.ports, cf.getObjectWithDefault("Jetty/port", mf.getWithDefault("Jetty-Port", new int[]{8000}, int[].class), int[].class));
 		int availablePort = findOpenPort(ports);
 		setProperty("availablePort", availablePort, false);
 
-		if (jettyXml == null)
-			jettyXml = cf.getString("Jetty/config", mf.getString("Jetty-Config", null));
+		String jettyXml = builder.jettyXml;
+		String jettyConfig = cf.getString("Jetty/config", mf.getString("Jetty-Config", "jetty.xml"));
+		boolean resolveVars = ObjectUtils.firstNonNull(builder.jettyXmlResolveVars, cf.getBoolean("Jetty/resolveVars"));
 
 		if (jettyXml == null)
-			throw new FormattedRuntimeException("Jetty.xml file location was not specified in the configuration file (Jetty/config) or manifest file (Jetty-Config).");
+			jettyXml = IOUtils.loadSystemResourceAsString("jetty.xml", ".", "files");
+		if (jettyXml == null)
+			throw new FormattedRuntimeException("jetty.xml file ''{0}'' was not found on the file system or classpath.", jettyConfig);
 
-		String xmlConfig = null;
+		if (resolveVars)
+			jettyXml = vr.resolve(jettyXml);
 
-		if (jettyXml instanceof String)
-			jettyXml = new File(jettyXml.toString());
+		getLogger().info(jettyXml);
 
-		if (jettyXml instanceof File) {
-			File f = (File)jettyXml;
-			if (f.exists())
-				xmlConfig = IOUtils.read((File)jettyXml);
-			else
-				throw new FormattedRuntimeException("Jetty.xml file ''{0}'' was specified but not found on the file system.", f.getName());
-		} else {
-			xmlConfig = IOUtils.read(jettyXml);
+		server = factory.create(jettyXml);
+
+		for (String s : cf.getStringArray("Jetty/servlets", new String[0])) {
+			Class<?> c = Class.forName(s);
+			if (ClassUtils.isParentClass(RestServlet.class, c)) {
+				RestServlet rs = (RestServlet)c.newInstance();
+				addServlet(rs, rs.getPath());
+			} else {
+				throw new FormattedRuntimeException("Invalid servlet specified in Jetty/servlets.  Must be a subclass of RestServlet.", s);
+			}
 		}
 
-		if (cf.getBoolean("Jetty/resolveVars", false))
-			xmlConfig = vr.resolve(xmlConfig);
+		for (Map.Entry<String,Object> e : cf.getObjectMap("Jetty/servletMap", ObjectMap.EMPTY_MAP).entrySet()) {
+			Class<?> c = Class.forName(e.getValue().toString());
+			if (ClassUtils.isParentClass(Servlet.class, c)) {
+				Servlet rs = (Servlet)c.newInstance();
+				addServlet(rs, e.getKey());
+			} else {
+				throw new FormattedRuntimeException("Invalid servlet specified in Jetty/servletMap.  Must be a subclass of Servlet.", e.getValue());
+			}
+		}
 
-		getLogger().info(xmlConfig);
+		for (Map.Entry<String,Object> e : cf.getObjectMap("Jetty/servletAttributes", ObjectMap.EMPTY_MAP).entrySet())
+			addServletAttribute(e.getKey(), e.getValue());
 
-		XmlConfiguration config = new XmlConfiguration(new ByteArrayInputStream(xmlConfig.getBytes()));
-		server = (Server)config.configure();
+		for (Map.Entry<String,Servlet> e : builder.servlets.entrySet())
+			addServlet(e.getValue(), e.getKey());
+
+		for (Map.Entry<String,Object> e : builder.servletAttributes.entrySet())
+			addServletAttribute(e.getKey(), e.getValue());
 
 		setProperty("juneau.serverPort", availablePort, false);
 
@@ -335,6 +351,17 @@ public class RestMicroservice extends Microservice {
 	}
 
 	/**
+	 * Calls {@link Server#destroy()} on the underlying Jetty server if it exists.
+	 *
+	 * @throws Exception
+	 */
+	public void destroyServer() throws Exception {
+		if (server != null)
+			server.destroy();
+		server = null;
+	}
+
+	/**
 	 * Adds an arbitrary servlet to this microservice.
 	 *
 	 * @param servlet The servlet instance.
@@ -342,13 +369,23 @@ public class RestMicroservice extends Microservice {
 	 * @return This object (for method chaining).
 	 * @throws RuntimeException if {@link #createServer()} has not previously been called.
 	 */
-	public RestMicroservice addServlet(Servlet servlet, String pathSpec) {
+	public JettyMicroservice addServlet(Servlet servlet, String pathSpec) {
+		ServletHolder sh = new ServletHolder(servlet);
+		getServletContextHandler().addServlet(sh, pathSpec);
+		return this;
+	}
+
+	/**
+	 * Finds and returns the servlet context handler define in the Jetty container.
+	 *
+	 * @return The servlet context handler.
+	 * @throws RuntimeException if context handler is not defined.
+	 */
+	protected ServletContextHandler getServletContextHandler() {
 		for (Handler h : getServer().getHandlers()) {
-			if (h instanceof ServletContextHandler) {
-				ServletHolder sh = new ServletHolder(servlet);
-				((ServletContextHandler)h).addServlet(sh, pathSpec);
-				return this;
-			}
+			ServletContextHandler sch = getServletContextHandler(h);
+			if (sch != null)
+				return sch;
 		}
 		throw new RuntimeException("Servlet context handler not found in jetty server.");
 	}
@@ -361,7 +398,7 @@ public class RestMicroservice extends Microservice {
 	 * @return This object (for method chaining).
 	 * @throws RuntimeException if {@link #createServer()} has not previously been called.
 	 */
-	public RestMicroservice addServletAttribute(String name, Object value) {
+	public JettyMicroservice addServletAttribute(String name, Object value) {
 		getServer().setAttribute(name, value);
 		return this;
 	}
@@ -377,18 +414,6 @@ public class RestMicroservice extends Microservice {
 		return server;
 	}
 
-	private static int findOpenPort(int[] ports) {
-		for (int port : ports) {
-			// If port is 0, try a random port between ports[0] and 32767.
-			if (port == 0)
-				port = new Random().nextInt(32767 - ports[0] + 1) + ports[0];
-			try (ServerSocket ss = new ServerSocket(port)) {
-				return port;
-			} catch (IOException e) {}
-		}
-		return 0;
-	}
-
 	/**
 	 * Method used to start the Jetty server created by {@link #createServer()}.
 	 *
@@ -399,134 +424,39 @@ public class RestMicroservice extends Microservice {
 	 * @throws Exception
 	 */
 	protected int startServer() throws Exception {
-		onStartServer();
+		listener.onStartServer(this);
 		server.start();
-		out(mb, "ServerStarted", getPort());
-		onPostStartServer();
+		out(messages, "ServerStarted", getPort());
+		listener.onPostStartServer(this);
 		return getPort();
 	}
 
-	/**
-	 * Called when {@link Config#commit()} is called on the config file.
-	 *
-	 * <p>
-	 * The default behavior is configured by the following value in the config file:
-	 * <p class='bcode w800'>
-	 * 	<cc># What to do when the config file is saved.
-	 * 	# Possible values:
-	 * 	# 	NOTHING - Don't do anything. (default)
-	 * 	#	RESTART_SERVER - Restart the Jetty server.
-	 * 	#	RESTART_SERVICE - Shutdown and exit with code '3'.</cc>
-	 * 	<ck>saveConfigAction</ck> = RESTART_SERVER
-	 * </p>
-	 */
-	@Override /* Microservice */
-	public void onConfigChange(List<ConfigEvent> events) {
-		try {
-			String saveConfigAction = getConfig().getString("saveConfigAction", "NOTHING");
-			if (saveConfigAction.equals("RESTART_SERVER")) {
-				new Thread() {
-					@Override /* Thread */
-					public void run() {
-						try {
-							RestMicroservice.this.stop();
-							RestMicroservice.this.start();
-						} catch (Exception e) {
-							getLogger().log(Level.SEVERE, e.getLocalizedMessage(), e);
-						}
-					}
-				}.start();
-			} else if (saveConfigAction.equals("RESTART_SERVICE")) {
-				stop();
-				System.exit(3);
-			}
-		} catch (Exception e) {
-			throw new RuntimeException(e);
-		}
-	}
-
-	/**
-	 * Sets the <code>jetty.xml</code> used to configure the Jetty server.
-	 *
-	 * <p>
-	 *
-	 * @param jettyXml
-	 * 	The <code>jetty.xml</code>.
-	 * 	<br>Can be any of the following:
-	 * 	<ul>
-	 * 		<li>A {@link File} representing the location on the file system.
-	 * 		<li>An {@link InputStream} containing the contents of the file.
-	 * 		<li>A {@link String} representing the file system path.
-	 * 	</ul>
-	 * @return This object (for method chaining).
-	 */
-	public RestMicroservice setJettyXml(Object jettyXml) {
-		if (jettyXml instanceof String || jettyXml instanceof File || jettyXml instanceof InputStream || jettyXml instanceof Reader)
-			this.jettyXml = jettyXml;
-		else
-			throw new FormattedRuntimeException("Invalid object type passed to setJettyXml()", jettyXml == null ? null : jettyXml.getClass().getName());
-		return this;
-	}
-
-
 	//-----------------------------------------------------------------------------------------------------------------
-	// Lifecycle listener methods.
+	// Utility methods.
 	//-----------------------------------------------------------------------------------------------------------------
 
-	/**
-	 * Called before {@link #createServer()} is called.
-	 *
-	 * <p>
-	 * Subclasses can override this method to hook into the lifecycle of this application.
-	 */
-	protected void onCreateServer() {}
-
-	/**
-	 * Called before {@link #startServer()} is called.
-	 *
-	 * <p>
-	 * Subclasses can override this method to hook into the lifecycle of this application.
-	 */
-	protected void onStartServer() {}
-
-	/**
-	 * Called after the Jetty server is started.
-	 *
-	 * <p>
-	 * Subclasses can override this method to hook into the lifecycle of this application.
-	 */
-	protected void onPostStartServer() {}
-
-	/**
-	 * Called before the Jetty server is stopped.
-	 *
-	 * <p>
-	 * Subclasses can override this method to hook into the lifecycle of this application.
-	 */
-	protected void onStopServer() {}
-
-	/**
-	 * Called after the Jetty server is stopped.
-	 *
-	 * <p>
-	 * Subclasses can override this method to hook into the lifecycle of this application.
-	 */
-	protected void onPostStopServer() {}
-
-
-	//-----------------------------------------------------------------------------------------------------------------
-	// Overridden methods.
-	//-----------------------------------------------------------------------------------------------------------------
-
-	@Override /* Microservice */
-	public RestMicroservice setConfig(String cfPath, boolean create) throws IOException {
-		super.setConfig(cfPath, create);
-		return this;
+	private static ServletContextHandler getServletContextHandler(Handler h) {
+		if (h instanceof ServletContextHandler)
+			return (ServletContextHandler)h;
+		if (h instanceof HandlerCollection) {
+			for (Handler h2 : ((HandlerCollection)h).getHandlers()) {
+				ServletContextHandler sch = getServletContextHandler(h2);
+				if (sch != null)
+					return sch;
+			}
+		}
+		return null;
 	}
 
-	@Override /* Microservice */
-	public RestMicroservice setManifestContents(String...contents) throws IOException {
-		super.setManifestContents(contents);
-		return this;
+	private static int findOpenPort(int[] ports) {
+		for (int port : ports) {
+			// If port is 0, try a random port between ports[0] and 32767.
+			if (port == 0)
+				port = new Random().nextInt(32767 - ports[0] + 1) + ports[0];
+			try (ServerSocket ss = new ServerSocket(port)) {
+				return port;
+			} catch (IOException e) {}
+		}
+		return 0;
 	}
 }
diff --git a/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/JettyMicroserviceBuilder.java b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/JettyMicroserviceBuilder.java
new file mode 100644
index 0000000..e78b942
--- /dev/null
+++ b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/JettyMicroserviceBuilder.java
@@ -0,0 +1,347 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.microservice;
+
+import java.io.*;
+import java.util.*;
+import java.util.logging.*;
+
+import javax.servlet.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.config.*;
+import org.apache.juneau.config.store.*;
+import org.apache.juneau.internal.*;
+import org.apache.juneau.microservice.console.*;
+import org.apache.juneau.rest.*;
+import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.svl.*;
+import org.apache.juneau.utils.*;
+import org.eclipse.jetty.server.*;
+
+/**
+ * Builder for {@link JettyMicroservice} class.
+ *
+ * <p>
+ * Instances of this class are created using {@link JettyMicroservice#create()}.
+ */
+public class JettyMicroserviceBuilder extends MicroserviceBuilder {
+
+	String jettyXml;
+	int[] ports;
+	Boolean jettyXmlResolveVars;
+	Map<String,Servlet> servlets = new LinkedHashMap<>();
+	Map<String,Object> servletAttributes = new LinkedHashMap<>();
+	JettyMicroserviceListener listener;
+	JettyServerFactory factory;
+
+	/**
+	 * Constructor.
+	 */
+	protected JettyMicroserviceBuilder() {}
+
+	/**
+	 * Copy constructor.
+	 *
+	 * @param copyFrom The builder to copy settings from.
+	 */
+	protected JettyMicroserviceBuilder(JettyMicroserviceBuilder copyFrom) {
+		super(copyFrom);
+		this.jettyXml = copyFrom.jettyXml;
+		this.ports = copyFrom.ports;
+		this.jettyXmlResolveVars = copyFrom.jettyXmlResolveVars;
+		this.servlets = new LinkedHashMap<>(copyFrom.servlets);
+		this.servletAttributes = new LinkedHashMap<>(copyFrom.servletAttributes);
+		this.listener = copyFrom.listener;
+	}
+
+	@Override /* MicroserviceBuilder */
+	public JettyMicroserviceBuilder copy() {
+		return new JettyMicroserviceBuilder(this);
+	}
+
+	/**
+	 * Specifies the contents or location of the <code>jetty.xml</code> file used by the Jetty server.
+	 *
+	 * <p>
+	 * If you do not specify this value, it is pulled from the following in the specified order:
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		<code>Jetty/config</code> setting in the config file.
+	 * 		<code>Jetty-Config</code> setting in the manifest file.
+	 * </ul>
+	 *
+	 * <p>
+	 * By default, we look for the <code>jetty.xml</code> file in the following locations:
+	 * <ul class='spaced-list'>
+	 * 	<li><code>jetty.xml</code> in home directory.
+	 * 	<li><code>files/jetty.xml</code> in home directory.
+	 * 	<li><code>/jetty.xml</code> in classpath.
+	 * 	<li><code>/files/jetty.xml</code> in classpath.
+	 * </ul>
+	 *
+	 * @param jettyXml
+	 * 	The contents or location of the file.
+	 * 	<br>Can be any of the following:
+	 * 	<ul>
+	 * 		<li>{@link String} - Relative path to file on file system or classpath.
+	 * 		<li>{@link File} - File on file system.
+	 * 		<li>{@link InputStream} - Raw contents as <code>UTF-8</code> encoded stream.
+	 * 		<li>{@link Reader} - Raw contents.
+	 * 	</ul>
+	 *
+	 * @param resolveVars
+	 * 	If <jk>true</jk>, SVL variables in the file will automatically be resolved.
+	 * @return This object (for method chaining).
+	 * @throws IOException
+	 */
+	public JettyMicroserviceBuilder jettyXml(Object jettyXml, boolean resolveVars) throws IOException {
+		if (jettyXml instanceof String)
+			this.jettyXml = IOUtils.read(new File(jettyXml.toString()));
+		else if (jettyXml instanceof File)
+			this.jettyXml = IOUtils.read((File)jettyXml);
+		else if (jettyXml instanceof InputStream)
+			this.jettyXml = IOUtils.read((InputStream)jettyXml);
+		else if (jettyXml instanceof Reader)
+			this.jettyXml = IOUtils.read((Reader)jettyXml);
+		else
+			throw new FormattedRuntimeException("Invalid object type passed to jettyXml(Object)", jettyXml == null ? null : jettyXml.getClass().getName());
+		this.jettyXmlResolveVars = resolveVars;
+		return this;
+	}
+
+	/**
+	 * Specifies the ports to use for the web server.
+	 *
+	 * <p>
+	 * You can specify multiple ports.  The first available will be used.  <js>'0'</js> indicates to try a random port.
+	 * The resulting available port gets set as the system property <js>"availablePort"</js> which can be referenced in the
+	 * <code>jetty.xml</code> file as <js>"$S{availablePort}"</js> (assuming resolveVars is enabled).
+	 *
+	 * <p>
+	 * If you do not specify this value, it is pulled from the following in the specified order:
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		<code>Jetty/port</code> setting in the config file.
+	 * 	<li>
+	 * 		<code>Jetty-Port</code> setting in the manifest file.
+	 * 	<li>
+	 * 		<code>8000</code>
+	 * </ul>
+	 *
+	 * Jetty/port", mf.getWithDefault("Jetty-Port", new int[]{8000}
+	 * @param ports The ports to use for the web server.
+	 * @return This object (for method chaining).
+	 */
+	public JettyMicroserviceBuilder ports(int...ports) {
+		this.ports = ports;
+		return this;
+	}
+
+	/**
+	 * Adds a servlet to the servlet container.
+	 *
+	 * <p>
+	 * This method can only be used with servlets with no-arg constructors.
+	 * <br>The path is pulled from the {@link RestResource#path()} annotation.
+	 *
+	 * @param c The servlet to add to the servlet container.
+	 * @return This object (for method chaining).
+	 * @throws InstantiationException
+	 * @throws IllegalAccessException
+	 */
+	public JettyMicroserviceBuilder servlet(Class<? extends RestServlet> c) throws InstantiationException, IllegalAccessException {
+		RestServlet rs = c.newInstance();
+		return servlet(rs, '/' + rs.getPath());
+	}
+
+	/**
+	 * Adds a servlet to the servlet container.
+	 *
+	 * <p>
+	 * This method can only be used with servlets with no-arg constructors.
+	 *
+	 * @param c The servlet to add to the servlet container.
+	 * @param path The servlet path spec.
+	 * @return This object (for method chaining).
+	 * @throws InstantiationException
+	 * @throws IllegalAccessException
+	 */
+	public JettyMicroserviceBuilder servlet(Class<? extends Servlet> c, String path) throws InstantiationException, IllegalAccessException {
+		return servlet(c.newInstance(), path);
+	}
+
+	/**
+	 * Adds a servlet instance to the servlet container.
+	 *
+	 * @param servlet The servlet to add to the servlet container.
+	 * @param path The servlet path spec.
+	 * @return This object (for method chaining).
+	 */
+	public JettyMicroserviceBuilder servlet(Servlet servlet, String path) {
+		servlets.put(path, servlet);
+		return this;
+	}
+
+	/**
+	 * Adds a set of servlets to the servlet container.
+	 *
+	 * @param servlets
+	 * 	A map of servlets to add to the servlet container.
+	 * 	<br>Keys are path specs for the servlet.
+	 * @return This object (for method chaining).
+	 */
+	public JettyMicroserviceBuilder servlets(Map<String,Servlet> servlets) {
+		if (servlets != null)
+			this.servlets.putAll(servlets);
+		return this;
+	}
+
+	/**
+	 * Adds a servlet attribute to the servlet container.
+	 *
+	 * @param name The attribute name.
+	 * @param value The attribute value.
+	 * @return This object (for method chaining).
+	 */
+	public JettyMicroserviceBuilder servletAttribute(String name, Object value) {
+		this.servletAttributes.put(name, value);
+		return this;
+	}
+
+	/**
+	 * Adds a set of servlet attributes to the servlet container.
+	 *
+	 * @param values The map of attributes.
+	 * @return This object (for method chaining).
+	 */
+	public JettyMicroserviceBuilder servletAttribute(Map<String,Object> values) {
+		if (values != null)
+			this.servletAttributes.putAll(values);
+		return this;
+	}
+
+	/**
+	 * Specifies the factory to use for creating the Jetty {@link Server} instance.
+	 *
+	 * <p>
+	 * If not specified, uses {@link BasicJettyServerFactory}.
+	 *
+	 * @param value
+	 * @return This object (for method chaining).
+	 */
+	public JettyMicroserviceBuilder jettyServerFactory(JettyServerFactory value) {
+		this.factory = value;
+		return this;
+	}
+
+	//-----------------------------------------------------------------------------------------------------------------
+	// Inherited from MicroserviceBuilder
+	//-----------------------------------------------------------------------------------------------------------------
+
+	@Override /* MicroserviceBuilder */
+	public JettyMicroservice build() throws Exception {
+		return new JettyMicroservice(this);
+	}
+
+	@Override /* MicroserviceBuilder */
+	public JettyMicroserviceBuilder args(Args args) {
+		super.args(args);
+		return this;
+	}
+
+	@Override /* MicroserviceBuilder */
+	public JettyMicroserviceBuilder args(String...args) {
+		super.args(args);
+		return this;
+	}
+
+	@Override /* MicroserviceBuilder */
+	public JettyMicroserviceBuilder manifest(Object manifest) throws IOException {
+		super.manifest(manifest);
+		return this;
+	}
+
+	@Override /* MicroserviceBuilder */
+	public JettyMicroserviceBuilder logger(Logger logger) {
+		super.logger(logger);
+		return this;
+	}
+
+
+	@Override /* MicroserviceBuilder */
+	public JettyMicroserviceBuilder logConfig(LogConfig logConfig) {
+		return this;
+	}
+
+	@Override /* MicroserviceBuilder */
+	public JettyMicroserviceBuilder config(Config config) {
+		super.config(config);
+		return this;
+	}
+
+	@Override /* MicroserviceBuilder */
+	public JettyMicroserviceBuilder configName(String configName) {
+		super.configName(configName);
+		return this;
+	}
+
+	@Override /* MicroserviceBuilder */
+	public JettyMicroserviceBuilder configStore(ConfigStore configStore) {
+		super.configStore(configStore);
+		return this;
+	}
+
+	@Override /* MicroserviceBuilder */
+	public JettyMicroserviceBuilder consoleEnabled(boolean consoleEnabled) {
+		super.consoleEnabled(consoleEnabled);
+		return this;
+	}
+
+	@Override /* MicroserviceBuilder */
+	public JettyMicroserviceBuilder consoleCommands(ConsoleCommand...consoleCommands) {
+		super.consoleCommands(consoleCommands);
+		return this;
+	}
+
+	@Override /* MicroserviceBuilder */
+	public JettyMicroserviceBuilder console(Scanner consoleReader, PrintWriter consoleWriter) {
+		super.console(consoleReader, consoleWriter);
+		return this;
+	}
+
+	@Override /* MicroserviceBuilder */
+	@SuppressWarnings("unchecked")
+	public JettyMicroserviceBuilder vars(Class<? extends Var>...vars) {
+		super.vars(vars);
+		return this;
+	}
+
+	@Override /* MicroserviceBuilder */
+	public JettyMicroserviceBuilder varContext(String name, Object object) {
+		super.varContext(name, object);
+		return this;
+	}
+
+	/**
+	 * Registers an event listener for this microservice.
+	 *
+	 * @param listener An event listener for this microservice.
+	 * @return This object (for method chaining).
+	 */
+	public JettyMicroserviceBuilder listener(JettyMicroserviceListener listener) {
+		super.listener(listener);
+		this.listener = listener;
+		return this;
+	}
+}
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/BasicRestServletJena.java b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/JettyMicroserviceListener.java
old mode 100755
new mode 100644
similarity index 61%
copy from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/BasicRestServletJena.java
copy to juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/JettyMicroserviceListener.java
index a53d1c5..e996df8
--- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/BasicRestServletJena.java
+++ b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/JettyMicroserviceListener.java
@@ -1,40 +1,54 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.microservice;
-
-import org.apache.juneau.jena.*;
-import org.apache.juneau.rest.*;
-import org.apache.juneau.rest.annotation.*;
-
-/**
- * Resource servlet with additional RDF support.
- */
-@SuppressWarnings("serial")
-@RestResource(
-	serializers={
-		Inherit.class,
-		RdfXmlSerializer.class,
-		RdfXmlAbbrevSerializer.class,
-		TurtleSerializer.class,
-		NTripleSerializer.class,
-		N3Serializer.class
-	},
-	parsers={
-		Inherit.class,
-		RdfXmlParser.class,
-		TurtleParser.class,
-		NTripleParser.class,
-		N3Parser.class
-	}
-)
-public abstract class BasicRestServletJena extends BasicRestServlet {}
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.microservice;
+
+/**
+ * Listener class for Jetty microservice lifecycle events.
+ */
+public interface JettyMicroserviceListener extends MicroserviceListener {
+
+	/**
+	 * Called before the Jetty server is created.
+	 *
+	 * @param microservice Reference to microservice.
+	 */
+	void onCreateServer(JettyMicroservice microservice);
+
+	/**
+	 * Called before the Jetty server is started.
+	 *
+	 * @param microservice Reference to microservice.
+	 */
+	void onStartServer(JettyMicroservice microservice);
+
+	/**
+	 * Called after the Jetty server is started.
+	 *
+	 * @param microservice Reference to microservice.
+	 */
+	void onPostStartServer(JettyMicroservice microservice);
+
+	/**
+	 * Called before the Jetty server is stopped.
... 3613 lines suppressed ...


Mime
View raw message