JUNEAU-145 @RestResource(staticFiles) should handle multiple mappings.
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/svl/vars/SystemPropertiesVarTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/svl/vars/SystemPropertiesVarTest.java
new file mode 100644
index 0000000..8955e9b
--- /dev/null
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/svl/vars/SystemPropertiesVarTest.java
@@ -0,0 +1,39 @@
+// ***************************************************************************************************************************

+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *

+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *

+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *

+// * with the License.  You may obtain a copy of the License at                                                              *

+// *                                                                                                                         *

+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *

+// *                                                                                                                         *

+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *

+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *

+// * specific language governing permissions and limitations under the License.                                              *

+// ***************************************************************************************************************************

+package org.apache.juneau.svl.vars;

+

+import static org.junit.Assert.*;

+

+import org.apache.juneau.svl.*;

+import org.junit.*;

+

+public class SystemPropertiesVarTest {

+

+	//====================================================================================================

+	// test - Basic tests

+	//====================================================================================================

+	@Test

+	public void test() throws Exception {

+		VarResolver vr = new VarResolverBuilder().vars(SystemPropertiesVar.class).build();

+

+		System.setProperty("SystemPropertiesVar.x", "foo");

+		assertEquals("foo", vr.resolve("$S{SystemPropertiesVar.x}"));

+		assertEquals("foo", vr.resolve("$S{SystemPropertiesVar.x,bar}"));

+		assertEquals("", vr.resolve("$S{SystemPropertiesVar.y}"));

+		assertEquals("bar", vr.resolve("$S{SystemPropertiesVar.y,bar}"));

+		assertEquals("bar,bar", vr.resolve("$S{SystemPropertiesVar.y,bar,bar}"));

+		assertEquals(" bar ", vr.resolve("$S{ SystemPropertiesVar.y , bar }"));

+		assertEquals(" bar,bar ", vr.resolve("$S{ SystemPropertiesVar.y , bar,bar }"));

+		assertEquals("", vr.resolve("$S{SystemPropertiesVar.y,}"));

+	}

+}

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java
index 9e102ae..6feba07 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java
@@ -100,6 +100,16 @@
 	}

 

 	/**

+	 * Returns a reverse iterable over the specified list.

+	 *

+	 * @param c The collection to iterate over.

+	 * @return An iterable over the collection.

+	 */

+	public static <T> Iterable<T> reverseIterable(final List<T> c) {

+		return iterable(c, true);

+	}

+

+	/**

 	 * Returns an iterable over the specified array.

 	 *

 	 * @param c The collection to iterate over.

@@ -113,6 +123,16 @@
 	}

 

 	/**

+	 * Returns a reverse iterable over the specified array.

+	 *

+	 * @param c The collection to iterate over.

+	 * @return An iterable over the collection.

+	 */

+	public static <T> Iterable<T> reverseIterable(T[] c) {

+		return iterable(c, true);

+	}

+

+	/**

 	 * Returns an iterable over the specified enumeration.

 	 *

 	 * @param e The collection to iterate over.

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/DefaultingVar.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/DefaultingVar.java
index cc24e01..534f51e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/DefaultingVar.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/DefaultingVar.java
@@ -12,8 +12,6 @@
 // ***************************************************************************************************************************

 package org.apache.juneau.svl;

 

-import static org.apache.juneau.internal.StringUtils.*;

-

 /**

  * Interface for the resolution of vars with a default value if the <c>resolve()</c> method returns <jk>null</jk>.

  *

@@ -47,10 +45,11 @@
 		int i = s.indexOf(',');

 		if (i == -1)

 			return resolve(session, s.trim());

-		String[] s2 = split(s);

-		String v = resolve(session, s2[0]);

+		String s1 = s.substring(0, i);

+		String s2 = s.length() == i ? null : s.substring(i+1);

+		String v = resolve(session, s1);

 		if (v == null)

-			v = s2[1];

+			v = s2;

 		return v;

 	}

 }

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverContext.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverContext.java
index f8cb05a..dafbd92 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverContext.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverContext.java
@@ -50,7 +50,7 @@
 		for (Class<?> c : vars) {
 			ClassInfo ci = ClassInfo.of(c);
 			if (! ci.isChildOf(Var.class))
-				throw new VarResolverException("Invalid variable class.  Must extend from Var");
+				throw new VarResolverException("Invalid variable class ''{0}''.  Must extend from Var.", ci);
 			Var v = castOrCreate(Var.class, c);
 			m.put(v.getName(), v);
 		}
diff --git a/juneau-doc/docs/ReleaseNotes/8.1.1.html b/juneau-doc/docs/ReleaseNotes/8.1.1.html
index ca60e8f..4567ae7 100644
--- a/juneau-doc/docs/ReleaseNotes/8.1.1.html
+++ b/juneau-doc/docs/ReleaseNotes/8.1.1.html
@@ -35,6 +35,9 @@
 			<li class='jp'>{@link oaj.http.remote}
 		</ul>
 		These replace the <c>org.apache.juneau.rest.response</c>, <c>org.apache.juneau.rest.exception</c>, and <c>org.apache.juneau.rest.client.remote</c> packages.
+	<li>
+		Defaulting SVL variables now won't ignore additional parameters.
+		<br><js>"$S{Foo,bar,baz}"</js> used to default to <js>"bar"</js> but now will default to <js>"bar,baz"</js>.
 </ul>
 
 <h5 class='topic w800'>juneau-rest-server</h5>
@@ -75,10 +78,10 @@
 			</ul>
 		</ul>
 	<li>
-		The <c>@RestResource(staticFiles)</c> annotation now supports absolute path locations:
+		The <c>@RestResource(staticFiles)</c> annotation now supports absolute path locations and multiple mappings:
 		<p class='bpcode w800'>
-	<jc>// Resolves static files in root package "htdocs" or working directory "htdocs".
-	<ja>@RestResource</ja>(staticFiles=<js>"htdocs:/htdocs"</js>)
+	<jc>// Resolves static files in root package "htdocs" or working directory "htdocs", and then relative package "htdocs".</jc>
+	<ja>@RestResource</ja>(staticFiles=<js>"htdocs:/htdocsfolder,htdocs:htdocs.package"</js>)
 		</p>
 	<li>
 		Fixed a bug in <c>@RestResource(staticFiles)</c> where the order of lookup between parent and child resources
diff --git a/juneau-examples/juneau-examples-rest-jetty/src/main/resources/htdocs/themes/devops.css b/juneau-examples/juneau-examples-rest-jetty/src/main/resources/htdocs/themes/devops.css
deleted file mode 100644
index ad7188a..0000000
--- a/juneau-examples/juneau-examples-rest-jetty/src/main/resources/htdocs/themes/devops.css
+++ /dev/null
@@ -1,276 +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.                                              *

- ***************************************************************************************************************************/

- 

-/** DevOps look-and-feel */ 

- 

-/**********************************************************************************************************************/

-/**  Body                                                                                                            **/

-/**********************************************************************************************************************/

-

-body {

-	background-color: #3B4B54;

-	margin: 0px;

-	font-family: HelveticaNeue-Light,"Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif;

-	color: #B3B3B3;

-	height: 100%;	

-}

-

-body {

-	font-size: 14px;

-}

-

-body textarea, body pre {

-	-moz-tab-size: 3; 

-	-o-tab-size: 3; 

-	-webkit-tab-size: 3; 

-	tab-size: 3; 

-}

-

-/**********************************************************************************************************************/

-/**  Header                                                                                                        **/

-/**********************************************************************************************************************/

-

-header {

-	background-color: #26343F;

-}

-

-header * {

-    font-size: 14px;

-	color: #B3B3B3;

-	margin: 0px;

-	text-decoration: none;

-	font-weight: normal;

-}

-

-header h1 {

-	padding: 10px 20px;

-	font-size: 16px;

-	border-bottom: 2px solid #34534B;

-	color: white;

-}

-

-header h2 {

-	padding: 10px 20px;

-	font-size: 14px;

-	border-bottom: 2px solid #34534B;

-}

-

-/**********************************************************************************************************************/

-/**  Nav                                                                                                             **/

-/**********************************************************************************************************************/

-

-nav {

-	margin: 10px 20px 10px 20px;

-	color: #94A3AB;

-}

-

-nav>ol {

-	list-style-type: none;

-	margin: 0px 10px;

-	padding: 0px;

-}

-

-nav>ol>li {

-	display: inline;

-}

-

-nav li:not(:first-child):before {

-	content: " - ";

-}

-

-nav a {

-	font-size: 10pt;

-	color: #94A3AB;

-	text-decoration: none;

-	margin: 0px 15px;

-	text-transform: uppercase;

-	cursor: pointer;

-}

-

-nav a:active, nav a:hover {

-	color: white;

-	text-decoration: underline;

-}

-

-/**********************************************************************************************************************/

-/**  Content                                                                                                        **/

-/**********************************************************************************************************************/

-

-section {

-	display: table;

-	width: 100%;

-	margin-bottom: 50px;

-}

-

-article {

-	display: table-cell;

-}

-

-article * {

-	font-size: 9pt;

-	color: #26343F;

-}

-

-article div.data {

-	padding: 10px;

-	background-color: white;

-	border-radius: 4px;

-	margin: 20px;

-	display: inline-block;

-	box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);

-	font-family: sans-serif;

-	color: #26343F;

-}

-

-article table {

-	border: none;

-	width: 100%;

-}

-

-article th {

-	border-top: 1px solid #D9DCDE;

-	padding: 4px 8px;

-	font-weight: bold;

-	text-align: center;

-	background-color: #F4F6F9;

-}

-

-article td {

-	vertical-align: top;

-	border-bottom: 1px solid #d9dcde;

-	border-right: 1px solid #d9dcde;

-	padding: 2px 5px;

-}

-

-article td:last-child {

-    width: 100%;

-}

-

-article ul {

-	margin: 0px;

-	padding-left: 20px;

-}

-

-article a {

-	color: #116998;

-	text-decoration: none;

-}

-

-article a:hover {

-	text-decoration: underline;

-}

-

-article iframe {

-	background-color: #F6F7F9;

-	border: 1px solid gray;

-	padding: 0px;

-	overflow: hidden;

-	width: 100%;

-	min-height: 400px;

-}

-

-aside {

-	display: table-cell;

-	vertical-align: top;

-	padding: 20px 20px;

-}

-

-/**********************************************************************************************************************/

-/**  Footer                                                                                                          **/

-/**********************************************************************************************************************/

-

-footer { 

-	padding: 10px;

-	width: 100%;

-	bottom: 0;

-	position: fixed;

-	background-color: #26343F;

-}

-

-/**********************************************************************************************************************/

-/**  Popup windows                                                                                                   **/

-/**********************************************************************************************************************/

-

-.popup-content {

-	display: none;

-	position: absolute;

-	background-color: #f4f6f9;

-	white-space: nowrap;

-	padding: 5px;

-	box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);

-	z-index: 1;

-	margin-top: 10px;

-	border-radius: 4px;

-}

-

-.popup-content * {

-	color: black;

-	font-size: 11px;

-}

-

-.popup-content a:hover {

-	color: #94A3AB;

-}

-

-.popup-show {

-	display:block;

-}

-

-/**********************************************************************************************************************/

-/**  Tooltips                                                                                                        **/

-/**********************************************************************************************************************/

-

-.tooltip {

-	position: relative;

-	display: inline-block;	    

-}

-

-.tooltip .tooltiptext {

-	visibility: hidden;

-	background-color: #FEF9E7;

-	color: black;

-	padding: 5px;

-	border-radius: 6px;

-	position: absolute;

-	z-index: 1;

-	top: 0;

-	left: 0;

-	margin-left: 30px;

-	box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);

-	opacity: 0;

-	transition: opacity 0.5s;

-	font-weight: normal;

-}

-

-.tooltip:hover .tooltiptext {

-	visibility: visible;

-	opacity: 1;

-}	

-

-.tooltiptext {

-	white-space: nowrap;

-	float: left;

-	border: 1px solid black;

-}

-

-/**********************************************************************************************************************/

-/**  Other classes                                                                                                   **/

-/**********************************************************************************************************************/

-

-.table {display:table;}

-.row {display:table-row;}

-.cell {display:table-cell;}

-.monospace {font-family:monospace;}

-.link { color: #94A3AB; text-decoration: none; cursor: pointer;}

-.link:hover { text-decoration: underline; }

-

diff --git a/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/images/asf.png b/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/images/asf.png
deleted file mode 100644
index ce28113..0000000
--- a/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/images/asf.png
+++ /dev/null
Binary files differ
diff --git a/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/images/juneau.png b/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/images/juneau.png
deleted file mode 100644
index 42a1656..0000000
--- a/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/images/juneau.png
+++ /dev/null
Binary files differ
diff --git a/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/styles/SwaggerUI.css b/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/styles/SwaggerUI.css
deleted file mode 100644
index b55ffc6..0000000
--- a/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/styles/SwaggerUI.css
+++ /dev/null
@@ -1,342 +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.                                              *
- ***************************************************************************************************************************
-*/
-
-.swagger-ui {	
-}
-
-/*-----------------------------------------------------------------------------------------------------------
- - Header key-value pairs
- ----------------------------------------------------------------------------------------------------------*/
-
-.swagger-ui table.header {
-    margin-bottom: 15px;
-	width: 95%;
-	border: none;
-}
-
-.swagger-ui table.header * {
-	vertical-align: middle;
-}
-
-.swagger-ui table.header th {
-    font-weight: bold;
-    padding: 5px 10px;
-    text-align: left;
-    white-space: nowrap;
-	border: none;
-	border-radius: 3px;
-}
-
-.swagger-ui table.header td {
-	padding: 5px 10px;
-    text-align: left;
-    vertical-align: middle;
-	border: none;
-}
-
-/*-----------------------------------------------------------------------------------------------------------
- - Method buttons (e.g GET/PUT/... buttons)                                                                
- ----------------------------------------------------------------------------------------------------------*/
-.method-button {
-  	display: inline-block;
-    font-weight: bold;
-    min-width: 60px;
-    padding: 6px 15px;
-    text-align: center;
-    border-radius: 3px;
-    text-shadow: 0 1px 0 rgba(0,0,0,.1);
-    color: #fff;
-}
-.get .method-button        { background: rgb(97,175,254); }
-.put .method-button        { background: rgb(252,161,48); }
-.post .method-button       { background: rgb(73,204,144); }
-.delete .method-button     { background: rgb(249,62,62); }
-.options .method-button    { background: rgb(153,102,255); }
-.deprecated .method-button { background: rgb(170,170,170); }
-.model .method-button      { background: rgb(150,150,150); min-width: 120px;}
-.other .method-button      { background: rgb(230,230,0); }
-
-
-/*-----------------------------------------------------------------------------------------------------------
- - Tag block                                                                                                -
- - Encapsulates one or more op-blocks.
- ----------------------------------------------------------------------------------------------------------*/
-
-.tag-block {
-	min-width: 800px;
-}
-
-.tag-block-summary {
-	margin: 10px 0px;
-	padding: 5px 0px;
-    align-items: center;
-    cursor: pointer;
-	border-bottom: 1px solid rgba(59,65,81,.2);
-	user-select: none;
-	transition: all .2s;
-}
-.tag-block-summary:hover {
-	background-color: rgba(59,65,81,.1);
-}
-
-.tag-block-summary .name {
-	font-size: 18px;
-	padding: 0px 20px;
-}
-.tag-block-summary .description {
-	font-size: 14px;
-	padding: 0px 20px;
-}
-.tag-block-summary .extdocs {
-	float: right;
-	font-size: 14px;
-	padding: 0px 20px;
-}
-
-.tag-block-open .tag-block-contents { display: block; }
-.tag-block-closed .tag-block-contents { display: none; }
-
-/*-----------------------------------------------------------------------------------------------------------
- - Op block                                                                                          
- - Encapsulates a single http-method + http-path
- ----------------------------------------------------------------------------------------------------------*/
-
-.op-block {
-	margin-bottom: 10px;
-    align-items: center;
-    border-radius: 4px;
-}
-
-.op-block.get        { background: rgba(97,175,254,.1); border: 1px solid rgb(97,175,254); }
-.op-block.put        { background: rgba(252,161,48,.1); border: 1px solid rgb(252,161,48); }
-.op-block.post       { background: rgba(73,204,144,.1); border: 1px solid rgb(73,204,144); }
-.op-block.options    { background: rgba(153,102,255,.1); border: 1px solid rgb(153,102,255); }
-.op-block.delete     { background: rgba(249,62,62,.1); border: 1px solid rgb(249,62,62); }
-.op-block.deprecated { background: rgba(170,170,170,.1); border: 1px solid rgb(170,170,170); }
-.op-block.model      { background: rgba(0,0,0,.05); border: 1px solid rgb(170,170,170); }
-.op-block.other      { background: rgba(230,230,0,0.1); border: 1px solid rgb(230,230,0); }
-
-.op-block-summary {	
-	padding: 5px;
-    cursor: pointer;
-	user-select: none;
-}
-
-.op-block-summary .path {
-	font-size: 14px;
-	word-break: break-all;
-    font-family: monospace;
-    font-weight: bold;
-    padding:10px;
-}
-
-.op-block.deprecated .op-block-summary .path { color: #8f9199; text-decoration: line-through;}
-.op-block.deprecated .op-block-summary .description { color: #8f9199 }
-
-.op-block-summary .summary {
-    font-size: 14px;
-    padding: 10px;
-}
-
-.op-block-description {
-    font-size: 14px;
-    padding: 10px;
-}
-
-
-.op-block-open .op-block-contents { display: block; }
-.op-block-closed .op-block-contents { display: none; }
-
-/*-----------------------------------------------------------------------------------------------------------
- - Op block section header                                                                                               -
- - 'Parameters' and 'Responses' subsections in an op-block
- ----------------------------------------------------------------------------------------------------------*/
-
-.op-block-section-header {
-    padding: 8px 15px;
-    background: hsla(0,0%,100%,.3);
-    box-shadow: 1px 2px 3px rgba(0,0,0,.3);
-    margin: 10px;
-    border-radius: 4px;
-}
-
-.op-block-section-header .title {
-    font-size: 14px;
-    margin: 0px;
-}
-
-/*-----------------------------------------------------------------------------------------------------------
- - Parameters and Responses sections
- ----------------------------------------------------------------------------------------------------------*/
-
-table.parameters, table.responses {
-    border-collapse: collapse;
-    margin: 20px;
-	width: 95%;
-	border-bottom: 1px solid rgba(59,65,81,.2);
-}
-
-th.parameter-key, th.response-key {
-	font-size: 12px;
-    font-weight: bold;
-    text-align: left;
-	border: none;
-    border-bottom: 1px solid rgba(59,65,81,.2);
-	background-color: inherit;
-}
-
-td.parameter-key, td.response-key {
-	font-size: 12px;
-    padding: 10px;
-    text-align: left;
-	border: none;
-    border-bottom: 1px solid rgba(59,65,81,.2);
-	background-color: inherit;
-}
-
-td.parameter-value, td.response-value {
-    padding: 10px;
-    text-align: left;
-    border-bottom: 1px solid rgba(59,65,81,.2);
-}
-
-/*-----------------------------------------------------------------------------------------------------------
- - Parameter name
- ----------------------------------------------------------------------------------------------------------*/
-
-.parameter-key .in {
-	font-size: 12px;
-    font-family: monospace;
-    font-weight: bold;
-    font-style: italic;
-    color: gray;
-}
-
-.parameter-key .name {
-	font-size: 14px;
-}
-
-.parameter-key .name.required {
-    font-weight: bold;
-}
-
-.parameter-key .requiredlabel {
-	font-size: 10px;
-    color: rgba(255,0,0,.6);    
-    font-weight: bold;
-}
-
-.parameter-key .type {
-    font-size: 12px;
-    padding: 5px 0;
-    font-family: monospace;
-    font-weight: bold;
-}
-
-/*-----------------------------------------------------------------------------------------------------------
- - Examples
- ----------------------------------------------------------------------------------------------------------*/
- 
-.op-block-contents .example-select {
-    margin: 10px 0 5px 0;
-	border-width: 1px;
-	font-weight:bold;
-    padding: 5px 40px 5px 10px;
-    border: 1px solid #41444e;
-    border-radius: 4px;
-    box-shadow: 0 1px 2px 0 rgba(0,0,0,.25);
-    background: hsla(0,0%,100%,.3);
-}
-
-.op-block-contents .example-select:disabled {
-    color: rgba(0,0,0,.50);
-    border: 1px solid rgba(0,0,0,.50);
-}
-
-.op-block-contents .example {
-    margin: 0;
-    padding: 5px 20px;
-    white-space: pre-wrap;
-    word-wrap: break-word;
-    hyphens: auto;
-    border-radius: 4px;
-    background: #41444e;
-    overflow-wrap: break-word;
-    font-family: monospace;
-    font-weight: 400;
-    color: limegreen;
-	display: none;
-	max-width: 800px;
-	max-height: 800px;
-	text-overflow: auto;
-	overflow: auto;
-}
-
-.op-block-contents .example.active {
-	display:block;
-}
-
-.op-block-contents .model {
-	display: none;
-}
-
-.op-block-contents .model.active {
-	display:block;
-}
-
-/*-----------------------------------------------------------------------------------------------------------
- - Headers
- ----------------------------------------------------------------------------------------------------------*/
-
-.section {
-    font-weight: bold;
-    padding: 5px 0;
-    text-align: left;
-}
-
-.headers .name {
-    padding: 5px 0;
-    font-family: monospace;
-    font-weight: bold;
-}
-
-div.headers {
-	margin: 20px 0px;
-}
-
-.headers .type {
-    padding: 5px 0;
-    font-family: monospace;
-    font-weight: bold;
-}
-
-.section-name {
-	display: inline-block;
-	vertical-align: top;
-	margin-right: 20px;
-    font-weight: bold;
-    padding: 5px 0;
-    text-align: left;
-}
-
-.section-table {
-/*	display: inline-block;*/
-}
-
-.responses .section-table td {
-	padding: 5px 20px 5px 0px;
-	text-align: left;
-    border-bottom: 1px solid rgba(59,65,81,.2);
-}
diff --git a/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/themes/dark.css b/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/themes/dark.css
deleted file mode 100644
index c81702d..0000000
--- a/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/themes/dark.css
+++ /dev/null
@@ -1,285 +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.                                              *
- ***************************************************************************************************************************/
- 
-/** Dark look-and-feel */ 
- 
-/**********************************************************************************************************************/
-/**  Body                                                                                                            **/
-/**********************************************************************************************************************/
-
-body {
-	background-color: #212121 ;
-	margin: 0px;
-	font-family: HelveticaNeue-Light,"Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif;
-	color: #EEE;
-	height: 100%;
-}
-
-body {
-	font-size: 14px;
-}
-
-body textarea, body pre {
-	-moz-tab-size: 3; 
-	-o-tab-size: 3; 
-	-webkit-tab-size: 3; 
-	tab-size: 3; 
-}
-
-/**********************************************************************************************************************/
-/**  Header                                                                                                        **/
-/**********************************************************************************************************************/
-
-header {
-	background-color: #373a3c;
-}
-
-header * {
-    font-size: 14px;
-	color: #B3B3B3;
-	margin: 0px;
-	text-decoration: none;
-	font-weight: normal;
-}
-
-header h1 {
-	padding: 10px 20px;
-	font-size: 16px;
-	border-bottom: 2px solid #000000;
-	color: white;
-}
-
-header h2 {
-	padding: 10px 20px;
-	font-size: 14px;
-	border-bottom: 2px solid #000000;
-}
-
-/**********************************************************************************************************************/
-/**  Nav                                                                                                             **/
-/**********************************************************************************************************************/
-
-nav {
-	margin: 10px 20px 10px 20px;
-	color: #94A3AB;
-}
-
-nav>ol {
-	list-style-type: none;
-	margin: 0px 10px;
-	padding: 0px;
-}
-
-nav>ol>li {
-	display: inline;
-}
-
-nav li:not(:first-child):before {
-	content: " - ";
-}
-
-nav a {
-	font-size: 10pt;
-	color: #94A3AB;
-	text-decoration: none;
-	margin: 0px 15px;
-	text-transform: uppercase;
-	cursor: pointer;
-}
-
-nav a:active, nav a:hover {
-	color: white;
-	text-decoration: underline;
-}
-
-/**********************************************************************************************************************/
-/**  Content                                                                                                        **/
-/**********************************************************************************************************************/
-
-section {
-	display: table;
-	width: 100%;
-	margin-bottom: 50px;
-}
-
-article {
-	display: table-cell;
-}
-
-article * {
-	font-size: 9pt;
-	color: #EEE;
-}
-
-article textarea, article input, article button {
-	color: #111;
-}
-
-article textarea, article input {
-	background-color: #EEE;
-}
-
-article div.data {
-	padding: 10px;
-	background-color: #373a3c;
-	border-radius: 4px;
-	margin: 20px;
-	display: inline-block;
-	box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);
-	font-family: sans-serif;
-}
-
-article table {
-	border: none;
-	width: 100%;
-}
-
-article th {
-	padding: 4px 8px;
-	font-weight: normal;
-	text-align: center;
-	background-color: #0275d8;
-}
-
-article td {
-	vertical-align: top;
-	border-bottom: 1px solid #000000;
-	border-right: 1px solid #000000;
-	padding: 2px 5px;
-}
-
-article td:last-child {
-    width: 100%;
-}
-
-article ul {
-	margin: 0px;
-	padding-left: 20px;
-}
-
-article a {
-	color: #3d8bb5;
-	text-decoration: none;
-}
-
-article a:hover {
-	text-decoration: underline;
-}
-
-article iframe {
-	background-color: #F6F7F9;
-	border: 1px solid gray;
-	padding: 0px;
-	overflow: hidden;
-	width: 100%;
-	min-height: 400px;
-}
-
-aside {
-	display: table-cell;
-	vertical-align: top;
-	padding: 20px 20px;
-}
-
-/**********************************************************************************************************************/
-/**  Footer                                                                                                          **/
-/**********************************************************************************************************************/
-
-footer { 
-	padding: 10px;
-	width: 100%;
-	bottom: 0;
-	position: fixed;
-	background-color: #373a3c;
-}
-
-/**********************************************************************************************************************/
-/**  Popup windows                                                                                                   **/
-/**********************************************************************************************************************/
-
-.popup-content {
-	display: none;
-	position: absolute;
-	background-color: #DDD;
-	white-space: nowrap;
-	padding: 5px;
-	box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);
-	z-index: 1;
-	margin-top: 10px;
-	border-radius: 4px;
-}
-
-.popup-content * {
-	color: black;
-	font-size: 11px;
-}
-
-.popup-content a:hover {
-	color: #94A3AB;
-}
-
-.popup-show {
-	display:block;
-}
-
-/**********************************************************************************************************************/
-/**  Tooltips                                                                                                        **/
-/**********************************************************************************************************************/
-
-.tooltip {
-	position: relative;
-	display: inline-block;	    
-}
-
-.tooltip .tooltiptext {
-	visibility: hidden;
-	background-color: #FEF9E7;
-	color: black;
-	padding: 5px;
-	border-radius: 6px;
-	position: absolute;
-	z-index: 1;
-	top: 0;
-	left: 0;
-	margin-left: 30px;
-	box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);
-	opacity: 0;
-	transition: opacity 0.5s;
-	font-weight: normal;
-}
-
-.tooltip .tooltiptext * {
-	color: black;
-}
-
-.tooltip:hover .tooltiptext {
-	visibility: visible;
-	opacity: 1;
-}	
-
-.tooltiptext {
-	white-space: nowrap;
-	float: left;
-	border: 1px solid black;
-}
-
-/**********************************************************************************************************************/
-/**  Other classes                                                                                                   **/
-/**********************************************************************************************************************/
-
-.table {display:table;}
-.row {display:table-row;}
-.cell {display:table-cell;}
-.monospace {font-family:monospace;}
-.link { color: #94A3AB; text-decoration: none; cursor: pointer;}
-.link:hover { text-decoration: underline; }
diff --git a/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/themes/devops.css b/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/themes/devops.css
deleted file mode 100644
index ad7188a..0000000
--- a/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/themes/devops.css
+++ /dev/null
@@ -1,276 +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.                                              *

- ***************************************************************************************************************************/

- 

-/** DevOps look-and-feel */ 

- 

-/**********************************************************************************************************************/

-/**  Body                                                                                                            **/

-/**********************************************************************************************************************/

-

-body {

-	background-color: #3B4B54;

-	margin: 0px;

-	font-family: HelveticaNeue-Light,"Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif;

-	color: #B3B3B3;

-	height: 100%;	

-}

-

-body {

-	font-size: 14px;

-}

-

-body textarea, body pre {

-	-moz-tab-size: 3; 

-	-o-tab-size: 3; 

-	-webkit-tab-size: 3; 

-	tab-size: 3; 

-}

-

-/**********************************************************************************************************************/

-/**  Header                                                                                                        **/

-/**********************************************************************************************************************/

-

-header {

-	background-color: #26343F;

-}

-

-header * {

-    font-size: 14px;

-	color: #B3B3B3;

-	margin: 0px;

-	text-decoration: none;

-	font-weight: normal;

-}

-

-header h1 {

-	padding: 10px 20px;

-	font-size: 16px;

-	border-bottom: 2px solid #34534B;

-	color: white;

-}

-

-header h2 {

-	padding: 10px 20px;

-	font-size: 14px;

-	border-bottom: 2px solid #34534B;

-}

-

-/**********************************************************************************************************************/

-/**  Nav                                                                                                             **/

-/**********************************************************************************************************************/

-

-nav {

-	margin: 10px 20px 10px 20px;

-	color: #94A3AB;

-}

-

-nav>ol {

-	list-style-type: none;

-	margin: 0px 10px;

-	padding: 0px;

-}

-

-nav>ol>li {

-	display: inline;

-}

-

-nav li:not(:first-child):before {

-	content: " - ";

-}

-

-nav a {

-	font-size: 10pt;

-	color: #94A3AB;

-	text-decoration: none;

-	margin: 0px 15px;

-	text-transform: uppercase;

-	cursor: pointer;

-}

-

-nav a:active, nav a:hover {

-	color: white;

-	text-decoration: underline;

-}

-

-/**********************************************************************************************************************/

-/**  Content                                                                                                        **/

-/**********************************************************************************************************************/

-

-section {

-	display: table;

-	width: 100%;

-	margin-bottom: 50px;

-}

-

-article {

-	display: table-cell;

-}

-

-article * {

-	font-size: 9pt;

-	color: #26343F;

-}

-

-article div.data {

-	padding: 10px;

-	background-color: white;

-	border-radius: 4px;

-	margin: 20px;

-	display: inline-block;

-	box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);

-	font-family: sans-serif;

-	color: #26343F;

-}

-

-article table {

-	border: none;

-	width: 100%;

-}

-

-article th {

-	border-top: 1px solid #D9DCDE;

-	padding: 4px 8px;

-	font-weight: bold;

-	text-align: center;

-	background-color: #F4F6F9;

-}

-

-article td {

-	vertical-align: top;

-	border-bottom: 1px solid #d9dcde;

-	border-right: 1px solid #d9dcde;

-	padding: 2px 5px;

-}

-

-article td:last-child {

-    width: 100%;

-}

-

-article ul {

-	margin: 0px;

-	padding-left: 20px;

-}

-

-article a {

-	color: #116998;

-	text-decoration: none;

-}

-

-article a:hover {

-	text-decoration: underline;

-}

-

-article iframe {

-	background-color: #F6F7F9;

-	border: 1px solid gray;

-	padding: 0px;

-	overflow: hidden;

-	width: 100%;

-	min-height: 400px;

-}

-

-aside {

-	display: table-cell;

-	vertical-align: top;

-	padding: 20px 20px;

-}

-

-/**********************************************************************************************************************/

-/**  Footer                                                                                                          **/

-/**********************************************************************************************************************/

-

-footer { 

-	padding: 10px;

-	width: 100%;

-	bottom: 0;

-	position: fixed;

-	background-color: #26343F;

-}

-

-/**********************************************************************************************************************/

-/**  Popup windows                                                                                                   **/

-/**********************************************************************************************************************/

-

-.popup-content {

-	display: none;

-	position: absolute;

-	background-color: #f4f6f9;

-	white-space: nowrap;

-	padding: 5px;

-	box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);

-	z-index: 1;

-	margin-top: 10px;

-	border-radius: 4px;

-}

-

-.popup-content * {

-	color: black;

-	font-size: 11px;

-}

-

-.popup-content a:hover {

-	color: #94A3AB;

-}

-

-.popup-show {

-	display:block;

-}

-

-/**********************************************************************************************************************/

-/**  Tooltips                                                                                                        **/

-/**********************************************************************************************************************/

-

-.tooltip {

-	position: relative;

-	display: inline-block;	    

-}

-

-.tooltip .tooltiptext {

-	visibility: hidden;

-	background-color: #FEF9E7;

-	color: black;

-	padding: 5px;

-	border-radius: 6px;

-	position: absolute;

-	z-index: 1;

-	top: 0;

-	left: 0;

-	margin-left: 30px;

-	box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);

-	opacity: 0;

-	transition: opacity 0.5s;

-	font-weight: normal;

-}

-

-.tooltip:hover .tooltiptext {

-	visibility: visible;

-	opacity: 1;

-}	

-

-.tooltiptext {

-	white-space: nowrap;

-	float: left;

-	border: 1px solid black;

-}

-

-/**********************************************************************************************************************/

-/**  Other classes                                                                                                   **/

-/**********************************************************************************************************************/

-

-.table {display:table;}

-.row {display:table-row;}

-.cell {display:table-cell;}

-.monospace {font-family:monospace;}

-.link { color: #94A3AB; text-decoration: none; cursor: pointer;}

-.link:hover { text-decoration: underline; }

-

diff --git a/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/themes/light.css b/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/themes/light.css
deleted file mode 100644
index aa91f98..0000000
--- a/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/themes/light.css
+++ /dev/null
@@ -1,273 +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.                                              *

- ***************************************************************************************************************************/

- 

-/** Light look-and-feel */ 

- 

-/**********************************************************************************************************************/

-/**  Body                                                                                                            **/

-/**********************************************************************************************************************/

-

-body {

-	margin: 0px;

-	font-size: 10px;

-	font-family: HelveticaNeue-Light,"Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif;

-	color: #2c4557;

-	height: 100%;	

-}

-

-body * {

-	font-size: 14px;

-}

-

-body textarea, body pre {

-	-moz-tab-size: 3; 

-	-o-tab-size: 3; 

-	-webkit-tab-size: 3; 

-	tab-size: 3; 

-}

-

-/**********************************************************************************************************************/

-/**  Header                                                                                                          **/

-/**********************************************************************************************************************/

-

-header {

-	background-color: #e8ebef;

-	padding: 10px 20px;

-	box-shadow: 5px 5px 2px #999999;

-	text-shadow: rgba(1,1,1,.2) 2px 4px 5px, rgba(125,32,191,.05) 0 -10px 30px;

-	white-space: nowrap;

-}

-

-header * {

-	color: #af2222;;

-	font-weight: lighter;

-}

-

-header h1 {

-	font-size: 18px;

-	margin: 0px;

-	padding: 2px;

-}

-

-header h2 {

-	font-size: 14px;

-	margin: 0px;

-	padding: 2px;

-}

-

-/**********************************************************************************************************************/

-/**  Nav                                                                                                             **/

-/**********************************************************************************************************************/

-

-nav {

-	margin: 10px;

-	padding: 5px;

-	box-shadow: 5px 5px 2px #999999;

-	background-color: #eef3f7;

-}

-

-nav * {

-	font-size: 12px;

-	font-weight: lighter;

-}

-

-nav>ol {

-	list-style-type: none;

-	margin: 0px 10px;

-	padding: 0px;

-}

-

-nav>ol>li {

-	display: inline;

-}

-

-nav li:not(:first-child):before {

-	content: " - ";

-}

-

-nav a {

-	font-size: 10pt;

-	color: #2c4557;

-	text-decoration: none;

-	margin: 0px 10px;

-	text-transform: uppercase;

-	cursor: pointer;

-}

-

-nav a:active, nav a:hover {

-	text-decoration: none;

-	color: #94a3ab;

-}

-

-/**********************************************************************************************************************/

-/**  Content                                                                                                         **/

-/**********************************************************************************************************************/

-

-section {

-	display: table;

-	width: 100%;

-	margin: 0px 0px 50px 0px;

-}

-

-article {

-	display: table-cell;

-	padding: 20px 40px;

-}

-

-article * {

-	font-size: 9pt;

-}

-

-article div.data {

-	padding: 0px;

-	margin: 0px;

-	display: inline-block;

-	font-family: sans-serif;

-}

-

-article table {

-	border: none;

-	width: 100%;

-}

-

-article td {

-	vertical-align: top;

-	border-bottom: 1px solid #d9dcde;

-	border-right: 1px solid #d9dcde;

-	padding: 2px 5px;

-}

-

-article td:last-child {

-    width: 100%;

-}

-

-article th {

-	padding: 4px 8px;

-	text-align: center;

-	background-color: #eef3f7;

-	box-shadow: 1px 1px 2px #999999;

-}

-

-article ul {

-	margin: 0px;

-	padding-left: 20px;

-}

-

-article a {

-	color: #416e8e;

-	text-decoration: none;

-}

-

-article iframe {

-	background-color: #F6F7F9;

-	border: 1px solid gray;

-	padding: 0px;

-	overflow: hidden;

-	width: 100%;

-	min-height: 400px;

-}

-

-aside {

-	display: table-cell;

-	vertical-align: top;

-	padding: 20px 20px;

-}

-

-/**********************************************************************************************************************/

-/**  Footer                                                                                                          **/

-/**********************************************************************************************************************/

-

-footer { 

-	padding: 10px;

-	width: 100%;

-	bottom: 0;

-	position: fixed;

-	background-color: #e8ebef;

-}

-

-/**********************************************************************************************************************/

-/**  Popup windows                                                                                                   **/

-/**********************************************************************************************************************/

-

-.popup-content {

-	display: none;

-	position: absolute;

-	background-color: #eef3f7;

-	white-space: nowrap;

-	padding: 5px;

-	box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);

-	z-index: 1;

-	margin-top: 10px;

-	border-radius: 4px;

-}

-

-.popup-content * {

-	color: #2c4557;

-	font-size: 10pt;

-}

-

-.popup-content a:hover {

-	color: #94A3AB;

-}

-

-.popup-show {

-	display: block;

-}

-

-/**********************************************************************************************************************/

-/**  Tooltips                                                                                                        **/

-/**********************************************************************************************************************/

-

-.tooltip {

-	position: relative;

-	display: inline-block;	    

-}

-

-.tooltip .tooltiptext {

-	visibility: hidden;

-	background-color: #FEF9E7;

-	color: black;

-	padding: 5px;

-	border-radius: 6px;

-	position: absolute;

-	z-index: 1;

-	top: 0;

-	left: 0;

-	margin-left: 30px;

-	box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);

-	opacity: 0;

-	transition: opacity 0.5s;

-	font-weight: normal;

-}

-

-.tooltip:hover .tooltiptext {

-	visibility: visible;

-	opacity: 1;

-}	

-

-.tooltiptext {

-	white-space: nowrap;

-	float: left;

-	border: 1px solid black;

-}

-

-/**********************************************************************************************************************/

-/**  Other classes                                                                                                   **/

-/**********************************************************************************************************************/

-

-.table {display:table;}

-.row {display:table-row;}

-.cell {display:table-cell;}

-.monospace {font-family:monospace;}

-.link { color: #94A3AB; text-decoration: none; cursor: pointer;}

-.link:hover { text-decoration: underline; }

diff --git a/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/themes/original.css b/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/themes/original.css
deleted file mode 100644
index 2052281..0000000
--- a/juneau-examples/juneau-examples-rest-springboot/src/main/resources/htdocs/themes/original.css
+++ /dev/null
@@ -1,237 +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.                                              *

- ***************************************************************************************************************************/

-

-/** Original look-and-feel */ 

- 

-/**********************************************************************************************************************/

-/**  Body                                                                                                            **/

-/**********************************************************************************************************************/

-

-body {

-	background-image: linear-gradient(top, #CDDDDF 0, #EAEDED 20px, #FFFFFF 70px);

-	background-image: -webkit-linear-gradient(top, #CDDDDF 0, #EAEDED 20px, #FFFFFF 70px);

-	background-attachment: fixed;

-	font-family: Sans-Serif;

-	color: #2c4557;

-	height: 100%;

-	margin: 0px;

-}

-

-body * {

-	font-size: 12px;

-}

-

-body textarea, body pre {

-	-moz-tab-size: 3; 

-	-o-tab-size: 3; 

-	-webkit-tab-size: 3; 

-	tab-size: 3; 

-}

-

-/**********************************************************************************************************************/

-/**  Header                                                                                                          **/

-/**********************************************************************************************************************/

-

-header {

-	padding: 10px 20px;

-}

-

-header h1 {

-    font-size: 16px;

-	margin-bottom: 10px;

-	margin-right: 40px;

-	padding: 5px 30px;

-	border-radius: 15px;

-	text-decoration: none;

-	font-weight: normal;

-	background: linear-gradient(to bottom, #F5F5F5, #DEE3E9) repeat scroll 0% 0% transparent;

-	background: -webkit-gradient(linear, left top, left bottom, from(#F5F5F5), to(#DEE3E9));

-}

-

-header h2 {

-	font-weight: normal;

-	margin-left: 20px;

-}

-

-/**********************************************************************************************************************/

-/**  Nav                                                                                                             **/

-/**********************************************************************************************************************/

-

-nav {

-	margin: 0px 25px;	

-}

-

-nav>ol {

-	list-style-type: none;

-	margin: 0px 10px;

-	padding: 0px;

-}

-

-nav>ol>li {

-	display: inline;

-}

-

-nav li:not(:first-child):before {

-    content: " - ";

-}

-

-nav a {

-	text-decoration: underline;

-	cursor: pointer;

-	color: -webkit-link;

-}

-

-/**********************************************************************************************************************/

-/**  Content                                                                                                        **/

-/**********************************************************************************************************************/

-

-section {

-	display: table;

-	width: 100%;

-	margin: 0px 0px 50px 0px;

-}

-

-article {

-	display: table-cell;

-	padding: 20px 40px;

-}

-

-aside {

-	display: table-cell;

-	vertical-align: top;

-	padding: 20px 20px;

-}

-

-article div.data {

-	padding: 0px;

-	margin: 0px;

-	display: inline-block;

-	font-family: sans-serif;

-}

-

-article table {

-	border:1px solid #CCCC99;

-	border-collapse: collapse;

-	margin: 5px 0px;

-	width: 100%;

-}

-

-article th {

-	border-top: 1px solid #CCCC99;

-	padding: 3px 5px;

-	color: #666666;

-	text-align: center;

-	background-image: linear-gradient(top, #FBF9E4 0%, #F3F2C2 100%);

-	background-image: -webkit-linear-gradient(top, #FBF9E4 0%, #F3F2C2 100%);

-}

-

-article td {

-	border: 1px solid #E9EACB;

-	padding: 2px 5px;

-	color: #005C87;

-	vertical-align: top;

-}

-

-article td:last-child {

-    width: 100%;

-}

-

-article ul {

-	margin: 0px;

-	padding-left: 20px;

-}

-

-/**********************************************************************************************************************/

-/**  Footer                                                                                                          **/

-/**********************************************************************************************************************/

-

-footer { 

-	display: none;

-}

-

-/**********************************************************************************************************************/

-/**  Popup windows                                                                                                   **/

-/**********************************************************************************************************************/

-

-.popup-content {

-	display: none;

-	position: absolute;

-	background-color: #eef3f7;

-	white-space: nowrap;

-	padding: 5px;

-	box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);

-	z-index: 1;

-	margin-top: 10px;

-	border-radius: 4px;

-}

-

-.popup-content * {

-	font-size: 9pt;

-}

-

-.popup-content a:hover {

-	color: #94A3AB;

-}

-

-.popup-show {

-	display: block;

-}

-

-/**********************************************************************************************************************/

-/**  Tooltips                                                                                                        **/

-/**********************************************************************************************************************/

-

-.tooltip {

-	position: relative;

-	display: inline-block;	    

-}

-

-.tooltip .tooltiptext {

-	visibility: hidden;

-	background-color: #FEF9E7;

-	color: black;

-	padding: 5px;

-	border-radius: 6px;

-	position: absolute;

-	z-index: 1;

-	top: 0;

-	left: 0;

-	margin-left: 30px;

-	box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);

-	opacity: 0;

-	transition: opacity 0.5s;

-	font-weight: normal;

-}

-

-.tooltip:hover .tooltiptext {

-	visibility: visible;

-	opacity: 1;

-}	

-

-.tooltiptext {

-	white-space: nowrap;

-	float: left;

-	border: 1px solid black;

-}

-

-/**********************************************************************************************************************/

-/**  Other classes                                                                                                   **/

-/**********************************************************************************************************************/

-

-.table {display:table;}

-.row {display:table-row;}

-.cell {display:table-cell;}

-.monospace {font-family:monospace;}

-.link { color: #94A3AB; text-decoration: none; cursor: pointer;}

-.link:hover { text-decoration: underline; }

-

diff --git a/juneau-microservice/juneau-microservice-ftest/juneau-microservice-test.cfg b/juneau-microservice/juneau-microservice-ftest/juneau-microservice-test.cfg
index dbf37f3..5cabc07 100644
--- a/juneau-microservice/juneau-microservice-ftest/juneau-microservice-test.cfg
+++ b/juneau-microservice/juneau-microservice-ftest/juneau-microservice-test.cfg
@@ -43,9 +43,9 @@
 [Test]

 int1 = 1

 int2 = [1,2,3]

-int3 = $C{Test/int1, -1}

-int4 = $C{Test/int3, -1}

-int5 = $C{XXX, -1}

+int3 = $C{Test/int1,-1}

+int4 = $C{Test/int3,-1}

+int5 = $C{XXX,-1}

 boolean1 = true

 boolean2 = [true,true]

 testManifestEntry = $MF{Test-Entry}

diff --git a/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/about.txt b/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/about.txt
new file mode 100644
index 0000000..880c2aa
--- /dev/null
+++ b/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/about.txt
@@ -0,0 +1,14 @@
+ ***************************************************************************************************************************
+ * 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 directory can be used to hold static files served up under the <servlet-path>/htdocs URI.
\ No newline at end of file
diff --git a/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/images/asf.png b/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/images/asf.png
deleted file mode 100644
index ce28113..0000000
--- a/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/images/asf.png
+++ /dev/null
Binary files differ
diff --git a/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/images/juneau.png b/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/images/juneau.png
deleted file mode 100644
index 42a1656..0000000
--- a/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/images/juneau.png
+++ /dev/null
Binary files differ
diff --git a/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/styles/SwaggerUI.css b/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/styles/SwaggerUI.css
deleted file mode 100644
index e1c8a21..0000000
--- a/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/styles/SwaggerUI.css
+++ /dev/null
@@ -1,342 +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.                                              *
- ***************************************************************************************************************************
-*/
-
-.swagger-ui {	
-}
-
-/*-----------------------------------------------------------------------------------------------------------
- - Header key-value pairs
- ----------------------------------------------------------------------------------------------------------*/
-
-.swagger-ui table.header {
-    margin-bottom: 15px;
-	width: 95%;
-	border: none;
-}
-
-.swagger-ui table.header * {
-	vertical-align: middle;
-}
-
-.swagger-ui table.header th {
-    font-weight: bold;
-    padding: 5px 10px;
-    text-align: left;
-    white-space: nowrap;
-	border: none;
-	border-radius: 3px;
-}
-
-.swagger-ui table.header td {
-	padding: 5px 10px;
-    text-align: left;
-    vertical-align: middle;
-	border: none;
-}
-
-/*-----------------------------------------------------------------------------------------------------------
- - Method buttons (e.g GET/PUT/... buttons)                                                                
- ----------------------------------------------------------------------------------------------------------*/
-.method-button {
-  	display: inline-block;
-    font-weight: bold;
-    min-width: 60px;
-    padding: 6px 15px;
-    text-align: center;
-    border-radius: 3px;
-    text-shadow: 0 1px 0 rgba(0,0,0,.1);
-    color: #fff;
-}
-.get .method-button        { background: rgb(97,175,254); }
-.put .method-button        { background: rgb(252,161,48); }
-.post .method-button       { background: rgb(73,204,144); }
-.delete .method-button     { background: rgb(249,62,62); }
-.options .method-button    { background: rgb(153,102,255); }
-.deprecated .method-button { background: rgb(170,170,170); }
-.model .method-button      { background: rgb(150,150,150); min-width: 120px;}
-.other .method-button      { background: rgb(230,230,0); }
-
-
-/*-----------------------------------------------------------------------------------------------------------
- - Tag block                                                                                                -
- - Encapsulates one or more op-blocks.
- ----------------------------------------------------------------------------------------------------------*/
-
-.tag-block {
-	min-width: 800px;
-}
-
-.tag-block-summary {
-	margin: 10px 0px;
-	padding: 5px 0px;
-    align-items: center;
-    cursor: pointer;
-	border-bottom: 1px solid rgba(59,65,81,.2);
-	user-select: none;
-	transition: all .2s;
-}
-.tag-block-summary:hover {
-	background-color: rgba(59,65,81,.1);
-}
-
-.tag-block-summary .name {
-	font-size: 18px;
-	padding: 0px 20px;
-}
-.tag-block-summary .description {
-	font-size: 14px;
-	padding: 0px 20px;
-}
-.tag-block-summary .extdocs {
-	float: right;
-	font-size: 14px;
-	padding: 0px 20px;
-}
-
-.tag-block-open .tag-block-contents { display: block; }
-.tag-block-closed .tag-block-contents { display: none; }
-
-/*-----------------------------------------------------------------------------------------------------------
- - Op block                                                                                          
- - Encapsulates a single http-method + http-path
- ----------------------------------------------------------------------------------------------------------*/
-
-.op-block {
-	margin-bottom: 10px;
-    align-items: center;
-    border-radius: 4px;
-}
-
-.op-block.get        { background: rgba(97,175,254,.1); border: 1px solid rgb(97,175,254); }
-.op-block.put        { background: rgba(252,161,48,.1); border: 1px solid rgb(252,161,48); }
-.op-block.post       { background: rgba(73,204,144,.1); border: 1px solid rgb(73,204,144); }
-.op-block.options    { background: rgba(153,102,255,.1); border: 1px solid rgb(153,102,255); }
-.op-block.delete     { background: rgba(249,62,62,.1); border: 1px solid rgb(249,62,62); }
-.op-block.deprecated { background: rgba(170,170,170,.1); border: 1px solid rgb(170,170,170); }
-.op-block.model      { background: rgba(0,0,0,.05); border: 1px solid rgb(170,170,170); }
-.op-block.other      { background: rgba(230,230,0,0.1); border: 1px solid rgb(230,230,0); }
-
-.op-block-summary {	
-	padding: 5px;
-    cursor: pointer;
-	user-select: none;
-}
-
-.op-block-summary .path {
-	font-size: 14px;
-	word-break: break-all;
-    font-family: monospace;
-    font-weight: bold;
-    padding:10px;
-}
-
-.op-block.deprecated .op-block-summary .path { color: #8f9199; text-decoration: line-through;}
-.op-block.deprecated .op-block-summary .description { color: #8f9199 }
-
-.op-block-summary .summary {
-    font-size: 14px;
-    padding: 10px;
-}
-
-.op-block-description {
-    font-size: 14px;
-    padding: 10px;
-}
-
-
-.op-block-open .op-block-contents { display: block; }
-.op-block-closed .op-block-contents { display: none; }
-
-/*-----------------------------------------------------------------------------------------------------------
- - Op block section header                                                                                               -
- - 'Parameters' and 'Responses' subsections in an op-block
- ----------------------------------------------------------------------------------------------------------*/
-
-.op-block-section-header {
-    padding: 8px 15px;
-    background: hsla(0,0%,100%,.3);
-    box-shadow: 1px 2px 3px rgba(0,0,0,.3);
-    margin: 10px;
-    border-radius: 4px;
-}
-
-.op-block-section-header .title {
-    font-size: 14px;
-    margin: 0px;
-}
-
-/*-----------------------------------------------------------------------------------------------------------
- - Parameters and Responses sections
- ----------------------------------------------------------------------------------------------------------*/
-
-table.parameters, table.responses {
-    border-collapse: collapse;
-    margin: 20px;
-	width: 95%;
-	border-bottom: 1px solid rgba(59,65,81,.2);
-}
-
-th.parameter-key, th.response-key {
-	font-size: 12px;
-    font-weight: bold;
-    text-align: left;
-	border: none;
-    border-bottom: 1px solid rgba(59,65,81,.2);
-	background-color: inherit;
-}
-
-td.parameter-key, td.response-key {
-	font-size: 12px;
-    padding: 10px;
-    text-align: left;
-	border: none;
-    border-bottom: 1px solid rgba(59,65,81,.2);
-	background-color: inherit;
-}
-
-td.parameter-value, td.response-value {
-    padding: 10px;
-    text-align: left;
-    border-bottom: 1px solid rgba(59,65,81,.2);
-}
-
-/*-----------------------------------------------------------------------------------------------------------
- - Parameter name
- ----------------------------------------------------------------------------------------------------------*/
-
-.parameter-key .in {
-	font-size: 12px;
-    font-family: monospace;
-    font-weight: bold;
-    font-style: italic;
-    color: gray;
-}
-
-.parameter-key .name {
-	font-size: 14px;
-}
-
-.parameter-key .name.required {
-    font-weight: bold;
-}
-
-.parameter-key .requiredlabel {
-	font-size: 10px;
-    color: rgba(255,0,0,.6);    
-    font-weight: bold;
-}
-
-.parameter-key .type {
-    font-size: 12px;
-    padding: 5px 0;
-    font-family: monospace;
-    font-weight: bold;
-}
-
-/*-----------------------------------------------------------------------------------------------------------
- - Examples
- ----------------------------------------------------------------------------------------------------------*/
- 
-.op-block-contents .example-select {
-    margin: 10px 0 5px 0;
-	border-width: 1px;
-	font-weight:bold;
-    padding: 5px 40px 5px 10px;
-    border: 1px solid #41444e;
-    border-radius: 4px;
-    box-shadow: 0 1px 2px 0 rgba(0,0,0,.25);
-    background: hsla(0,0%,100%,.3);
-}
-
-.op-block-contents .example-select:disabled {
-    color: rgba(0,0,0,.50);
-    border: 1px solid rgba(0,0,0,.50);
-}
-
-.op-block-contents .example {
-    margin: 0;
-    padding: 5px 20px;
-    white-space: pre-wrap;
-    word-wrap: break-word;
-    hyphens: auto;
-    border-radius: 4px;
-    background: #41444e;
-    overflow-wrap: break-word;
-    font-family: monospace;
-    font-weight: 400;
-    color: #fff;
-	display: none;
-	max-width: 800px;
-	max-height: 800px;
-	text-overflow: auto;
-	overflow: auto;
-}
-
-.op-block-contents .example.active {
-	display:block;
-}
-
-.op-block-contents .model {
-	display: none;
-}
-
-.op-block-contents .model.active {
-	display:block;
-}
-
-/*-----------------------------------------------------------------------------------------------------------
- - Headers
- ----------------------------------------------------------------------------------------------------------*/
-
-.section {
-    font-weight: bold;
-    padding: 5px 0;
-    text-align: left;
-}
-
-.headers .name {
-    padding: 5px 0;
-    font-family: monospace;
-    font-weight: bold;
-}
-
-div.headers {
-	margin: 20px 0px;
-}
-
-.headers .type {
-    padding: 5px 0;
-    font-family: monospace;
-    font-weight: bold;
-}
-
-.section-name {
-	display: inline-block;
-	vertical-align: top;
-	margin-right: 20px;
-    font-weight: bold;
-    padding: 5px 0;
-    text-align: left;
-}
-
-.section-table {
-/*	display: inline-block;*/
-}
-
-.responses .section-table td {
-	padding: 5px 20px 5px 0px;
-	text-align: left;
-    border-bottom: 1px solid rgba(59,65,81,.2);
-}
diff --git a/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/themes/dark.css b/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/themes/dark.css
deleted file mode 100644
index c81702d..0000000
--- a/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/themes/dark.css
+++ /dev/null
@@ -1,285 +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.                                              *
- ***************************************************************************************************************************/
- 
-/** Dark look-and-feel */ 
- 
-/**********************************************************************************************************************/
-/**  Body                                                                                                            **/
-/**********************************************************************************************************************/
-
-body {
-	background-color: #212121 ;
-	margin: 0px;
-	font-family: HelveticaNeue-Light,"Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif;
-	color: #EEE;
-	height: 100%;
-}
-
-body {
-	font-size: 14px;
-}
-
-body textarea, body pre {
-	-moz-tab-size: 3; 
-	-o-tab-size: 3; 
-	-webkit-tab-size: 3; 
-	tab-size: 3; 
-}
-
-/**********************************************************************************************************************/
-/**  Header                                                                                                        **/
-/**********************************************************************************************************************/
-
-header {
-	background-color: #373a3c;
-}
-
-header * {
-    font-size: 14px;
-	color: #B3B3B3;
-	margin: 0px;
-	text-decoration: none;
-	font-weight: normal;
-}
-
-header h1 {
-	padding: 10px 20px;
-	font-size: 16px;
-	border-bottom: 2px solid #000000;
-	color: white;
-}
-
-header h2 {
-	padding: 10px 20px;
-	font-size: 14px;
-	border-bottom: 2px solid #000000;
-}
-
-/**********************************************************************************************************************/
-/**  Nav                                                                                                             **/
-/**********************************************************************************************************************/
-
-nav {
-	margin: 10px 20px 10px 20px;
-	color: #94A3AB;
-}
-
-nav>ol {
-	list-style-type: none;
-	margin: 0px 10px;
-	padding: 0px;
-}
-
-nav>ol>li {
-	display: inline;
-}
-
-nav li:not(:first-child):before {
-	content: " - ";
-}
-
-nav a {
-	font-size: 10pt;
-	color: #94A3AB;
-	text-decoration: none;
-	margin: 0px 15px;
-	text-transform: uppercase;
-	cursor: pointer;
-}
-
-nav a:active, nav a:hover {
-	color: white;
-	text-decoration: underline;
-}
-
-/**********************************************************************************************************************/
-/**  Content                                                                                                        **/
-/**********************************************************************************************************************/
-
-section {
-	display: table;
-	width: 100%;
-	margin-bottom: 50px;
-}
-
-article {
-	display: table-cell;
-}
-
-article * {
-	font-size: 9pt;
-	color: #EEE;
-}
-
-article textarea, article input, article button {
-	color: #111;
-}
-
-article textarea, article input {
-	background-color: #EEE;
-}
-
-article div.data {
-	padding: 10px;
-	background-color: #373a3c;
-	border-radius: 4px;
-	margin: 20px;
-	display: inline-block;
-	box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);
-	font-family: sans-serif;
-}
-
-article table {
-	border: none;
-	width: 100%;
-}
-
-article th {
-	padding: 4px 8px;
-	font-weight: normal;
-	text-align: center;
-	background-color: #0275d8;
-}
-
-article td {
-	vertical-align: top;
-	border-bottom: 1px solid #000000;
-	border-right: 1px solid #000000;
-	padding: 2px 5px;
-}
-
-article td:last-child {
-    width: 100%;
-}
-
-article ul {
-	margin: 0px;
-	padding-left: 20px;
-}
-
-article a {
-	color: #3d8bb5;
-	text-decoration: none;
-}
-
-article a:hover {
-	text-decoration: underline;
-}
-
-article iframe {
-	background-color: #F6F7F9;
-	border: 1px solid gray;
-	padding: 0px;
-	overflow: hidden;
-	width: 100%;
-	min-height: 400px;
-}
-
-aside {
-	display: table-cell;
-	vertical-align: top;
-	padding: 20px 20px;
-}
-
-/**********************************************************************************************************************/
-/**  Footer                                                                                                          **/
-/**********************************************************************************************************************/
-
-footer { 
-	padding: 10px;
-	width: 100%;
-	bottom: 0;
-	position: fixed;
-	background-color: #373a3c;
-}
-
-/**********************************************************************************************************************/
-/**  Popup windows                                                                                                   **/
-/**********************************************************************************************************************/
-
-.popup-content {
-	display: none;
-	position: absolute;
-	background-color: #DDD;
-	white-space: nowrap;
-	padding: 5px;
-	box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);
-	z-index: 1;
-	margin-top: 10px;
-	border-radius: 4px;
-}
-
-.popup-content * {
-	color: black;
-	font-size: 11px;
-}
-
-.popup-content a:hover {
-	color: #94A3AB;
-}
-
-.popup-show {
-	display:block;
-}
-
-/**********************************************************************************************************************/
-/**  Tooltips                                                                                                        **/
-/**********************************************************************************************************************/
-
-.tooltip {
-	position: relative;
-	display: inline-block;	    
-}
-
-.tooltip .tooltiptext {
-	visibility: hidden;
-	background-color: #FEF9E7;
-	color: black;
-	padding: 5px;
-	border-radius: 6px;
-	position: absolute;
-	z-index: 1;
-	top: 0;
-	left: 0;
-	margin-left: 30px;
-	box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);
-	opacity: 0;
-	transition: opacity 0.5s;
-	font-weight: normal;
-}
-
-.tooltip .tooltiptext * {
-	color: black;
-}
-
-.tooltip:hover .tooltiptext {
-	visibility: visible;
-	opacity: 1;
-}	
-
-.tooltiptext {
-	white-space: nowrap;
-	float: left;
-	border: 1px solid black;
-}
-
-/**********************************************************************************************************************/
-/**  Other classes                                                                                                   **/
-/**********************************************************************************************************************/
-
-.table {display:table;}
-.row {display:table-row;}
-.cell {display:table-cell;}
-.monospace {font-family:monospace;}
-.link { color: #94A3AB; text-decoration: none; cursor: pointer;}
-.link:hover { text-decoration: underline; }
diff --git a/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/themes/devops.css b/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/themes/devops.css
deleted file mode 100644
index ad7188a..0000000
--- a/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/themes/devops.css
+++ /dev/null
@@ -1,276 +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.                                              *

- ***************************************************************************************************************************/

- 

-/** DevOps look-and-feel */ 

- 

-/**********************************************************************************************************************/

-/**  Body                                                                                                            **/

-/**********************************************************************************************************************/

-

-body {

-	background-color: #3B4B54;

-	margin: 0px;

-	font-family: HelveticaNeue-Light,"Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif;

-	color: #B3B3B3;

-	height: 100%;	

-}

-

-body {

-	font-size: 14px;

-}

-

-body textarea, body pre {

-	-moz-tab-size: 3; 

-	-o-tab-size: 3; 

-	-webkit-tab-size: 3; 

-	tab-size: 3; 

-}

-

-/**********************************************************************************************************************/

-/**  Header                                                                                                        **/

-/**********************************************************************************************************************/

-

-header {

-	background-color: #26343F;

-}

-

-header * {

-    font-size: 14px;

-	color: #B3B3B3;

-	margin: 0px;

-	text-decoration: none;

-	font-weight: normal;

-}

-

-header h1 {

-	padding: 10px 20px;

-	font-size: 16px;

-	border-bottom: 2px solid #34534B;

-	color: white;

-}

-

-header h2 {

-	padding: 10px 20px;

-	font-size: 14px;

-	border-bottom: 2px solid #34534B;

-}

-

-/**********************************************************************************************************************/

-/**  Nav                                                                                                             **/

-/**********************************************************************************************************************/

-

-nav {

-	margin: 10px 20px 10px 20px;

-	color: #94A3AB;

-}

-

-nav>ol {

-	list-style-type: none;

-	margin: 0px 10px;

-	padding: 0px;

-}

-

-nav>ol>li {

-	display: inline;

-}

-

-nav li:not(:first-child):before {

-	content: " - ";

-}

-

-nav a {

-	font-size: 10pt;

-	color: #94A3AB;

-	text-decoration: none;

-	margin: 0px 15px;

-	text-transform: uppercase;

-	cursor: pointer;

-}

-

-nav a:active, nav a:hover {

-	color: white;

-	text-decoration: underline;

-}

-

-/**********************************************************************************************************************/

-/**  Content                                                                                                        **/

-/**********************************************************************************************************************/

-

-section {

-	display: table;

-	width: 100%;

-	margin-bottom: 50px;

-}

-

-article {

-	display: table-cell;

-}

-

-article * {

-	font-size: 9pt;

-	color: #26343F;

-}

-

-article div.data {

-	padding: 10px;

-	background-color: white;

-	border-radius: 4px;

-	margin: 20px;

-	display: inline-block;

-	box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);

-	font-family: sans-serif;

-	color: #26343F;

-}

-

-article table {

-	border: none;

-	width: 100%;

-}

-

-article th {

-	border-top: 1px solid #D9DCDE;

-	padding: 4px 8px;

-	font-weight: bold;

-	text-align: center;

-	background-color: #F4F6F9;

-}

-

-article td {

-	vertical-align: top;

-	border-bottom: 1px solid #d9dcde;

-	border-right: 1px solid #d9dcde;

-	padding: 2px 5px;

-}

-

-article td:last-child {

-    width: 100%;

-}

-

-article ul {

-	margin: 0px;

-	padding-left: 20px;

-}

-

-article a {

-	color: #116998;

-	text-decoration: none;

-}

-

-article a:hover {

-	text-decoration: underline;

-}

-

-article iframe {

-	background-color: #F6F7F9;

-	border: 1px solid gray;

-	padding: 0px;

-	overflow: hidden;

-	width: 100%;

-	min-height: 400px;

-}

-

-aside {

-	display: table-cell;

-	vertical-align: top;

-	padding: 20px 20px;

-}

-

-/**********************************************************************************************************************/

-/**  Footer                                                                                                          **/

-/**********************************************************************************************************************/

-

-footer { 

-	padding: 10px;

-	width: 100%;

-	bottom: 0;

-	position: fixed;

-	background-color: #26343F;

-}

-

-/**********************************************************************************************************************/

-/**  Popup windows                                                                                                   **/

-/**********************************************************************************************************************/

-

-.popup-content {

-	display: none;

-	position: absolute;

-	background-color: #f4f6f9;

-	white-space: nowrap;

-	padding: 5px;

-	box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);

-	z-index: 1;

-	margin-top: 10px;

-	border-radius: 4px;

-}

-

-.popup-content * {

-	color: black;

-	font-size: 11px;

-}

-

-.popup-content a:hover {

-	color: #94A3AB;

-}

-

-.popup-show {

-	display:block;

-}

-

-/**********************************************************************************************************************/

-/**  Tooltips                                                                                                        **/

-/**********************************************************************************************************************/

-

-.tooltip {

-	position: relative;

-	display: inline-block;	    

-}

-

-.tooltip .tooltiptext {

-	visibility: hidden;

-	background-color: #FEF9E7;

-	color: black;

-	padding: 5px;

-	border-radius: 6px;

-	position: absolute;

-	z-index: 1;

-	top: 0;

-	left: 0;

-	margin-left: 30px;

-	box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);

-	opacity: 0;

-	transition: opacity 0.5s;

-	font-weight: normal;

-}

-

-.tooltip:hover .tooltiptext {

-	visibility: visible;

-	opacity: 1;

-}	

-

-.tooltiptext {

-	white-space: nowrap;

-	float: left;

-	border: 1px solid black;

-}

-

-/**********************************************************************************************************************/

-/**  Other classes                                                                                                   **/

-/**********************************************************************************************************************/

-

-.table {display:table;}

-.row {display:table-row;}

-.cell {display:table-cell;}

-.monospace {font-family:monospace;}

-.link { color: #94A3AB; text-decoration: none; cursor: pointer;}

-.link:hover { text-decoration: underline; }

-

diff --git a/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/themes/light.css b/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/themes/light.css
deleted file mode 100644
index aa91f98..0000000
--- a/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/themes/light.css
+++ /dev/null
@@ -1,273 +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.                                              *

- ***************************************************************************************************************************/

- 

-/** Light look-and-feel */ 

- 

-/**********************************************************************************************************************/

-/**  Body                                                                                                            **/

-/**********************************************************************************************************************/

-

-body {

-	margin: 0px;

-	font-size: 10px;

-	font-family: HelveticaNeue-Light,"Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif;

-	color: #2c4557;

-	height: 100%;	

-}

-

-body * {

-	font-size: 14px;

-}

-

-body textarea, body pre {

-	-moz-tab-size: 3; 

-	-o-tab-size: 3; 

-	-webkit-tab-size: 3; 

-	tab-size: 3; 

-}

-

-/**********************************************************************************************************************/

-/**  Header                                                                                                          **/

-/**********************************************************************************************************************/

-

-header {

-	background-color: #e8ebef;

-	padding: 10px 20px;

-	box-shadow: 5px 5px 2px #999999;

-	text-shadow: rgba(1,1,1,.2) 2px 4px 5px, rgba(125,32,191,.05) 0 -10px 30px;

-	white-space: nowrap;

-}

-

-header * {

-	color: #af2222;;

-	font-weight: lighter;

-}

-

-header h1 {

-	font-size: 18px;

-	margin: 0px;

-	padding: 2px;

-}

-

-header h2 {

-	font-size: 14px;

-	margin: 0px;

-	padding: 2px;

-}

-

-/**********************************************************************************************************************/

-/**  Nav                                                                                                             **/

-/**********************************************************************************************************************/

-

-nav {

-	margin: 10px;

-	padding: 5px;

-	box-shadow: 5px 5px 2px #999999;

-	background-color: #eef3f7;

-}

-

-nav * {

-	font-size: 12px;

-	font-weight: lighter;

-}

-

-nav>ol {

-	list-style-type: none;

-	margin: 0px 10px;

-	padding: 0px;

-}

-

-nav>ol>li {

-	display: inline;

-}

-

-nav li:not(:first-child):before {

-	content: " - ";

-}

-

-nav a {

-	font-size: 10pt;

-	color: #2c4557;

-	text-decoration: none;

-	margin: 0px 10px;

-	text-transform: uppercase;

-	cursor: pointer;

-}

-

-nav a:active, nav a:hover {

-	text-decoration: none;

-	color: #94a3ab;

-}

-

-/**********************************************************************************************************************/

-/**  Content                                                                                                         **/

-/**********************************************************************************************************************/

-

-section {

-	display: table;

-	width: 100%;

-	margin: 0px 0px 50px 0px;

-}

-

-article {

-	display: table-cell;

-	padding: 20px 40px;

-}

-

-article * {

-	font-size: 9pt;

-}

-

-article div.data {

-	padding: 0px;

-	margin: 0px;

-	display: inline-block;

-	font-family: sans-serif;

-}

-

-article table {

-	border: none;

-	width: 100%;

-}

-

-article td {

-	vertical-align: top;

-	border-bottom: 1px solid #d9dcde;

-	border-right: 1px solid #d9dcde;

-	padding: 2px 5px;

-}

-

-article td:last-child {

-    width: 100%;

-}

-

-article th {

-	padding: 4px 8px;

-	text-align: center;

-	background-color: #eef3f7;

-	box-shadow: 1px 1px 2px #999999;

-}

-

-article ul {

-	margin: 0px;

-	padding-left: 20px;

-}

-

-article a {

-	color: #416e8e;

-	text-decoration: none;

-}

-

-article iframe {

-	background-color: #F6F7F9;

-	border: 1px solid gray;

-	padding: 0px;

-	overflow: hidden;

-	width: 100%;

-	min-height: 400px;

-}

-

-aside {

-	display: table-cell;

-	vertical-align: top;

-	padding: 20px 20px;

-}

-

-/**********************************************************************************************************************/

-/**  Footer                                                                                                          **/

-/**********************************************************************************************************************/

-

-footer { 

-	padding: 10px;

-	width: 100%;

-	bottom: 0;

-	position: fixed;

-	background-color: #e8ebef;

-}

-

-/**********************************************************************************************************************/

-/**  Popup windows                                                                                                   **/

-/**********************************************************************************************************************/

-

-.popup-content {

-	display: none;

-	position: absolute;

-	background-color: #eef3f7;

-	white-space: nowrap;

-	padding: 5px;

-	box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);

-	z-index: 1;

-	margin-top: 10px;

-	border-radius: 4px;

-}

-

-.popup-content * {

-	color: #2c4557;

-	font-size: 10pt;

-}

-

-.popup-content a:hover {

-	color: #94A3AB;

-}

-

-.popup-show {

-	display: block;

-}

-

-/**********************************************************************************************************************/

-/**  Tooltips                                                                                                        **/

-/**********************************************************************************************************************/

-

-.tooltip {

-	position: relative;

-	display: inline-block;	    

-}

-

-.tooltip .tooltiptext {

-	visibility: hidden;

-	background-color: #FEF9E7;

-	color: black;

-	padding: 5px;

-	border-radius: 6px;

-	position: absolute;

-	z-index: 1;

-	top: 0;

-	left: 0;

-	margin-left: 30px;

-	box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);

-	opacity: 0;

-	transition: opacity 0.5s;

-	font-weight: normal;

-}

-

-.tooltip:hover .tooltiptext {

-	visibility: visible;

-	opacity: 1;

-}	

-

-.tooltiptext {

-	white-space: nowrap;

-	float: left;

-	border: 1px solid black;

-}

-

-/**********************************************************************************************************************/

-/**  Other classes                                                                                                   **/

-/**********************************************************************************************************************/

-

-.table {display:table;}

-.row {display:table-row;}

-.cell {display:table-cell;}

-.monospace {font-family:monospace;}

-.link { color: #94A3AB; text-decoration: none; cursor: pointer;}

-.link:hover { text-decoration: underline; }

diff --git a/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/themes/original.css b/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/themes/original.css
deleted file mode 100644
index 2052281..0000000
--- a/juneau-microservice/juneau-my-jetty-microservice/src/main/resources/htdocs/themes/original.css
+++ /dev/null
@@ -1,237 +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.                                              *

- ***************************************************************************************************************************/

-

-/** Original look-and-feel */ 

- 

-/**********************************************************************************************************************/

-/**  Body                                                                                                            **/

-/**********************************************************************************************************************/

-

-body {

-	background-image: linear-gradient(top, #CDDDDF 0, #EAEDED 20px, #FFFFFF 70px);

-	background-image: -webkit-linear-gradient(top, #CDDDDF 0, #EAEDED 20px, #FFFFFF 70px);

-	background-attachment: fixed;

-	font-family: Sans-Serif;

-	color: #2c4557;

-	height: 100%;

-	margin: 0px;

-}

-

-body * {

-	font-size: 12px;

-}

-

-body textarea, body pre {

-	-moz-tab-size: 3; 

-	-o-tab-size: 3; 

-	-webkit-tab-size: 3; 

-	tab-size: 3; 

-}

-

-/**********************************************************************************************************************/

-/**  Header                                                                                                          **/

-/**********************************************************************************************************************/

-

-header {

-	padding: 10px 20px;

-}

-

-header h1 {

-    font-size: 16px;

-	margin-bottom: 10px;

-	margin-right: 40px;

-	padding: 5px 30px;

-	border-radius: 15px;

-	text-decoration: none;

-	font-weight: normal;

-	background: linear-gradient(to bottom, #F5F5F5, #DEE3E9) repeat scroll 0% 0% transparent;

-	background: -webkit-gradient(linear, left top, left bottom, from(#F5F5F5), to(#DEE3E9));

-}

-

-header h2 {

-	font-weight: normal;

-	margin-left: 20px;

-}

-

-/**********************************************************************************************************************/

-/**  Nav                                                                                                             **/

-/**********************************************************************************************************************/

-

-nav {

-	margin: 0px 25px;	

-}

-

-nav>ol {

-	list-style-type: none;

-	margin: 0px 10px;

-	padding: 0px;

-}

-

-nav>ol>li {

-	display: inline;

-}

-

-nav li:not(:first-child):before {

-    content: " - ";

-}

-

-nav a {

-	text-decoration: underline;

-	cursor: pointer;

-	color: -webkit-link;

-}

-

-/**********************************************************************************************************************/

-/**  Content                                                                                                        **/

-/**********************************************************************************************************************/

-

-section {

-	display: table;

-	width: 100%;

-	margin: 0px 0px 50px 0px;

-}

-

-article {

-	display: table-cell;

-	padding: 20px 40px;

-}

-

-aside {

-	display: table-cell;

-	vertical-align: top;

-	padding: 20px 20px;

-}

-

-article div.data {

-	padding: 0px;

-	margin: 0px;

-	display: inline-block;

-	font-family: sans-serif;

-}

-

-article table {

-	border:1px solid #CCCC99;

-	border-collapse: collapse;

-	margin: 5px 0px;

-	width: 100%;

-}

-

-article th {

-	border-top: 1px solid #CCCC99;

-	padding: 3px 5px;

-	color: #666666;

-	text-align: center;

-	background-image: linear-gradient(top, #FBF9E4 0%, #F3F2C2 100%);

-	background-image: -webkit-linear-gradient(top, #FBF9E4 0%, #F3F2C2 100%);

-}

-

-article td {

-	border: 1px solid #E9EACB;

-	padding: 2px 5px;

-	color: #005C87;

-	vertical-align: top;

-}

-

-article td:last-child {

-    width: 100%;

-}

-

-article ul {

-	margin: 0px;

-	padding-left: 20px;

-}

-

-/**********************************************************************************************************************/

-/**  Footer                                                                                                          **/

-/**********************************************************************************************************************/

-

-footer { 

-	display: none;

-}

-

-/**********************************************************************************************************************/

-/**  Popup windows                                                                                                   **/

-/**********************************************************************************************************************/

-

-.popup-content {

-	display: none;

-	position: absolute;

-	background-color: #eef3f7;

-	white-space: nowrap;

-	padding: 5px;

-	box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);

-	z-index: 1;

-	margin-top: 10px;

-	border-radius: 4px;

-}

-

-.popup-content * {

-	font-size: 9pt;

-}

-

-.popup-content a:hover {

-	color: #94A3AB;

-}

-

-.popup-show {

-	display: block;

-}

-

-/**********************************************************************************************************************/

-/**  Tooltips                                                                                                        **/

-/**********************************************************************************************************************/

-

-.tooltip {

-	position: relative;

-	display: inline-block;	    

-}

-

-.tooltip .tooltiptext {

-	visibility: hidden;

-	background-color: #FEF9E7;

-	color: black;

-	padding: 5px;

-	border-radius: 6px;

-	position: absolute;

-	z-index: 1;

-	top: 0;

-	left: 0;

-	margin-left: 30px;

-	box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);

-	opacity: 0;

-	transition: opacity 0.5s;

-	font-weight: normal;

-}

-

-.tooltip:hover .tooltiptext {

-	visibility: visible;

-	opacity: 1;

-}	

-

-.tooltiptext {

-	white-space: nowrap;

-	float: left;

-	border: 1px solid black;

-}

-

-/**********************************************************************************************************************/

-/**  Other classes                                                                                                   **/

-/**********************************************************************************************************************/

-

-.table {display:table;}

-.row {display:table-row;}

-.cell {display:table-cell;}

-.monospace {font-family:monospace;}

-.link { color: #94A3AB; text-decoration: none; cursor: pointer;}

-.link:hover { text-decoration: underline; }

-

diff --git a/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/about.txt b/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/about.txt
new file mode 100644
index 0000000..880c2aa
--- /dev/null
+++ b/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/about.txt
@@ -0,0 +1,14 @@
+ ***************************************************************************************************************************
+ * 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 directory can be used to hold static files served up under the <servlet-path>/htdocs URI.
\ No newline at end of file
diff --git a/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/images/asf.png b/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/images/asf.png
deleted file mode 100644
index ce28113..0000000
--- a/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/images/asf.png
+++ /dev/null
Binary files differ
diff --git a/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/images/juneau.png b/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/images/juneau.png
deleted file mode 100644
index 42a1656..0000000
--- a/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/images/juneau.png
+++ /dev/null
Binary files differ
diff --git a/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/styles/SwaggerUI.css b/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/styles/SwaggerUI.css
deleted file mode 100644
index e1c8a21..0000000
--- a/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/styles/SwaggerUI.css
+++ /dev/null
@@ -1,342 +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.                                              *
- ***************************************************************************************************************************
-*/
-
-.swagger-ui {	
-}
-
-/*-----------------------------------------------------------------------------------------------------------
- - Header key-value pairs
- ----------------------------------------------------------------------------------------------------------*/
-
-.swagger-ui table.header {
-    margin-bottom: 15px;
-	width: 95%;
-	border: none;
-}
-
-.swagger-ui table.header * {
-	vertical-align: middle;
-}
-
-.swagger-ui table.header th {
-    font-weight: bold;
-    padding: 5px 10px;
-    text-align: left;
-    white-space: nowrap;
-	border: none;
-	border-radius: 3px;
-}
-
-.swagger-ui table.header td {
-	padding: 5px 10px;
-    text-align: left;
-    vertical-align: middle;
-	border: none;
-}
-
-/*-----------------------------------------------------------------------------------------------------------
- - Method buttons (e.g GET/PUT/... buttons)                                                                
- ----------------------------------------------------------------------------------------------------------*/
-.method-button {
-  	display: inline-block;
-    font-weight: bold;
-    min-width: 60px;
-    padding: 6px 15px;
-    text-align: center;
-    border-radius: 3px;
-    text-shadow: 0 1px 0 rgba(0,0,0,.1);
-    color: #fff;
-}
-.get .method-button        { background: rgb(97,175,254); }
-.put .method-button        { background: rgb(252,161,48); }
-.post .method-button       { background: rgb(73,204,144); }
-.delete .method-button     { background: rgb(249,62,62); }
-.options .method-button    { background: rgb(153,102,255); }
-.deprecated .method-button { background: rgb(170,170,170); }
-.model .method-button      { background: rgb(150,150,150); min-width: 120px;}
-.other .method-button      { background: rgb(230,230,0); }
-
-
-/*-----------------------------------------------------------------------------------------------------------
- - Tag block                                                                                                -
- - Encapsulates one or more op-blocks.
- ----------------------------------------------------------------------------------------------------------*/
-
-.tag-block {
-	min-width: 800px;
-}
-
-.tag-block-summary {
-	margin: 10px 0px;
-	padding: 5px 0px;
-    align-items: center;
-    cursor: pointer;
-	border-bottom: 1px solid rgba(59,65,81,.2);
-	user-select: none;
-	transition: all .2s;
-}
-.tag-block-summary:hover {
-	background-color: rgba(59,65,81,.1);
-}
-
-.tag-block-summary .name {
-	font-size: 18px;
-	padding: 0px 20px;
-}
-.tag-block-summary .description {
-	font-size: 14px;
-	padding: 0px 20px;
-}
-.tag-block-summary .extdocs {
-	float: right;
-	font-size: 14px;
-	padding: 0px 20px;
-}
-
-.tag-block-open .tag-block-contents { display: block; }
-.tag-block-closed .tag-block-contents { display: none; }
-
-/*-----------------------------------------------------------------------------------------------------------
- - Op block                                                                                          
- - Encapsulates a single http-method + http-path
- ----------------------------------------------------------------------------------------------------------*/
-
-.op-block {
-	margin-bottom: 10px;
-    align-items: center;
-    border-radius: 4px;
-}
-
-.op-block.get        { background: rgba(97,175,254,.1); border: 1px solid rgb(97,175,254); }
-.op-block.put        { background: rgba(252,161,48,.1); border: 1px solid rgb(252,161,48); }
-.op-block.post       { background: rgba(73,204,144,.1); border: 1px solid rgb(73,204,144); }
-.op-block.options    { background: rgba(153,102,255,.1); border: 1px solid rgb(153,102,255); }
-.op-block.delete     { background: rgba(249,62,62,.1); border: 1px solid rgb(249,62,62); }
-.op-block.deprecated { background: rgba(170,170,170,.1); border: 1px solid rgb(170,170,170); }
-.op-block.model      { background: rgba(0,0,0,.05); border: 1px solid rgb(170,170,170); }
-.op-block.other      { background: rgba(230,230,0,0.1); border: 1px solid rgb(230,230,0); }
-
-.op-block-summary {	
-	padding: 5px;
-    cursor: pointer;
-	user-select: none;
-}
-
-.op-block-summary .path {
-	font-size: 14px;
-	word-break: break-all;
-    font-family: monospace;
-    font-weight: bold;
-    padding:10px;
-}
-
-.op-block.deprecated .op-block-summary .path { color: #8f9199; text-decoration: line-through;}
-.op-block.deprecated .op-block-summary .description { color: #8f9199 }
-
-.op-block-summary .summary {
-    font-size: 14px;
-    padding: 10px;
-}
-
-.op-block-description {
-    font-size: 14px;
-    padding: 10px;
-}
-
-
-.op-block-open .op-block-contents { display: block; }
-.op-block-closed .op-block-contents { display: none; }
-
-/*-----------------------------------------------------------------------------------------------------------
- - Op block section header                                                                                               -
- - 'Parameters' and 'Responses' subsections in an op-block
- ----------------------------------------------------------------------------------------------------------*/
-
-.op-block-section-header {
-    padding: 8px 15px;
-    background: hsla(0,0%,100%,.3);
-    box-shadow: 1px 2px 3px rgba(0,0,0,.3);
-    margin: 10px;
-    border-radius: 4px;
-}
-
-.op-block-section-header .title {
-    font-size: 14px;
-    margin: 0px;
-}
-
-/*-----------------------------------------------------------------------------------------------------------
- - Parameters and Responses sections
- ----------------------------------------------------------------------------------------------------------*/
-
-table.parameters, table.responses {
-    border-collapse: collapse;
-    margin: 20px;
-	width: 95%;
-	border-bottom: 1px solid rgba(59,65,81,.2);
-}
-
-th.parameter-key, th.response-key {
-	font-size: 12px;
-    font-weight: bold;
-    text-align: left;
-	border: none;
-    border-bottom: 1px solid rgba(59,65,81,.2);
-	background-color: inherit;
-}
-
-td.parameter-key, td.response-key {
-	font-size: 12px;
-    padding: 10px;
-    text-align: left;
-	border: none;
-    border-bottom: 1px solid rgba(59,65,81,.2);
-	background-color: inherit;
-}
-
-td.parameter-value, td.response-value {
-    padding: 10px;
-    text-align: left;
-    border-bottom: 1px solid rgba(59,65,81,.2);
-}
-
-/*-----------------------------------------------------------------------------------------------------------
- - Parameter name
- ----------------------------------------------------------------------------------------------------------*/
-
-.parameter-key .in {
-	font-size: 12px;
-    font-family: monospace;
-    font-weight: bold;
-    font-style: italic;
-    color: gray;
-}
-
-.parameter-key .name {
-	font-size: 14px;
-}
-
-.parameter-key .name.required {
-    font-weight: bold;
-}
-
-.parameter-key .requiredlabel {
-	font-size: 10px;
-    color: rgba(255,0,0,.6);    
-    font-weight: bold;
-}
-
-.parameter-key .type {
-    font-size: 12px;
-    padding: 5px 0;
-    font-family: monospace;
-    font-weight: bold;
-}
-
-/*-----------------------------------------------------------------------------------------------------------
- - Examples
- ----------------------------------------------------------------------------------------------------------*/
- 
-.op-block-contents .example-select {
-    margin: 10px 0 5px 0;
-	border-width: 1px;
-	font-weight:bold;
-    padding: 5px 40px 5px 10px;
-    border: 1px solid #41444e;
-    border-radius: 4px;
-    box-shadow: 0 1px 2px 0 rgba(0,0,0,.25);
-    background: hsla(0,0%,100%,.3);
-}
-
-.op-block-contents .example-select:disabled {
-    color: rgba(0,0,0,.50);
-    border: 1px solid rgba(0,0,0,.50);
-}
-
-.op-block-contents .example {
-    margin: 0;
-    padding: 5px 20px;
-    white-space: pre-wrap;
-    word-wrap: break-word;
-    hyphens: auto;
-    border-radius: 4px;
-    background: #41444e;
-    overflow-wrap: break-word;
-    font-family: monospace;
-    font-weight: 400;
-    color: #fff;
-	display: none;
-	max-width: 800px;
-	max-height: 800px;
-	text-overflow: auto;
-	overflow: auto;
-}
-
-.op-block-contents .example.active {
-	display:block;
-}
-
-.op-block-contents .model {
-	display: none;
-}
-
-.op-block-contents .model.active {
-	display:block;
-}
-
-/*-----------------------------------------------------------------------------------------------------------
- - Headers
- ----------------------------------------------------------------------------------------------------------*/
-
-.section {
-    font-weight: bold;
-    padding: 5px 0;
-    text-align: left;
-}
-
-.headers .name {
-    padding: 5px 0;
-    font-family: monospace;
-    font-weight: bold;
-}
-
-div.headers {
-	margin: 20px 0px;
-}
-
-.headers .type {
-    padding: 5px 0;
-    font-family: monospace;
-    font-weight: bold;
-}
-
-.section-name {
-	display: inline-block;
-	vertical-align: top;
-	margin-right: 20px;
-    font-weight: bold;
-    padding: 5px 0;
-    text-align: left;
-}
-
-.section-table {
-/*	display: inline-block;*/
-}
-
-.responses .section-table td {
-	padding: 5px 20px 5px 0px;
-	text-align: left;
-    border-bottom: 1px solid rgba(59,65,81,.2);
-}
diff --git a/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/themes/dark.css b/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/themes/dark.css
deleted file mode 100644
index c81702d..0000000
--- a/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/themes/dark.css
+++ /dev/null
@@ -1,285 +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.                                              *
- ***************************************************************************************************************************/
- 
-/** Dark look-and-feel */ 
- 
-/**********************************************************************************************************************/
-/**  Body                                                                                                            **/
-/**********************************************************************************************************************/
-
-body {
-	background-color: #212121 ;
-	margin: 0px;
-	font-family: HelveticaNeue-Light,"Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif;
-	color: #EEE;
-	height: 100%;
-}
-
-body {
-	font-size: 14px;
-}
-
-body textarea, body pre {
-	-moz-tab-size: 3; 
-	-o-tab-size: 3; 
-	-webkit-tab-size: 3; 
-	tab-size: 3; 
-}
-
-/**********************************************************************************************************************/
-/**  Header                                                                                                        **/
-/**********************************************************************************************************************/
-
-header {
-	background-color: #373a3c;
-}
-
-header * {
-    font-size: 14px;
-	color: #B3B3B3;
-	margin: 0px;
-	text-decoration: none;
-	font-weight: normal;
-}
-
-header h1 {
-	padding: 10px 20px;
-	font-size: 16px;
-	border-bottom: 2px solid #000000;
-	color: white;
-}
-
-header h2 {
-	padding: 10px 20px;
-	font-size: 14px;
-	border-bottom: 2px solid #000000;
-}
-
-/**********************************************************************************************************************/
-/**  Nav                                                                                                             **/
-/**********************************************************************************************************************/
-
-nav {
-	margin: 10px 20px 10px 20px;
-	color: #94A3AB;
-}
-
-nav>ol {
-	list-style-type: none;
-	margin: 0px 10px;
-	padding: 0px;
-}
-
-nav>ol>li {
-	display: inline;
-}
-
-nav li:not(:first-child):before {
-	content: " - ";
-}
-
-nav a {
-	font-size: 10pt;
-	color: #94A3AB;
-	text-decoration: none;
-	margin: 0px 15px;
-	text-transform: uppercase;
-	cursor: pointer;
-}
-
-nav a:active, nav a:hover {
-	color: white;
-	text-decoration: underline;
-}
-
-/**********************************************************************************************************************/
-/**  Content                                                                                                        **/
-/**********************************************************************************************************************/
-
-section {
-	display: table;
-	width: 100%;
-	margin-bottom: 50px;
-}
-
-article {
-	display: table-cell;
-}
-
-article * {
-	font-size: 9pt;
-	color: #EEE;
-}
-
-article textarea, article input, article button {
-	color: #111;
-}
-
-article textarea, article input {
-	background-color: #EEE;
-}
-
-article div.data {
-	padding: 10px;
-	background-color: #373a3c;
-	border-radius: 4px;
-	margin: 20px;
-	display: inline-block;
-	box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);
-	font-family: sans-serif;
-}
-
-article table {
-	border: none;
-	width: 100%;
-}
-
-article th {
-	padding: 4px 8px;
-	font-weight: normal;
-	text-align: center;
-	background-color: #0275d8;
-}
-
-article td {
-	vertical-align: top;
-	border-bottom: 1px solid #000000;
-	border-right: 1px solid #000000;
-	padding: 2px 5px;
-}
-
-article td:last-child {
-    width: 100%;
-}
-
-article ul {
-	margin: 0px;
-	padding-left: 20px;
-}
-
-article a {
-	color: #3d8bb5;
-	text-decoration: none;
-}
-
-article a:hover {
-	text-decoration: underline;
-}
-
-article iframe {
-	background-color: #F6F7F9;
-	border: 1px solid gray;
-	padding: 0px;
-	overflow: hidden;
-	width: 100%;
-	min-height: 400px;
-}
-
-aside {
-	display: table-cell;
-	vertical-align: top;
-	padding: 20px 20px;
-}
-
-/**********************************************************************************************************************/
-/**  Footer                                                                                                          **/
-/**********************************************************************************************************************/
-
-footer { 
-	padding: 10px;
-	width: 100%;
-	bottom: 0;
-	position: fixed;
-	background-color: #373a3c;
-}
-
-/**********************************************************************************************************************/
-/**  Popup windows                                                                                                   **/
-/**********************************************************************************************************************/
-
-.popup-content {
-	display: none;
-	position: absolute;
-	background-color: #DDD;
-	white-space: nowrap;
-	padding: 5px;
-	box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);
-	z-index: 1;
-	margin-top: 10px;
-	border-radius: 4px;
-}
-
-.popup-content * {
-	color: black;
-	font-size: 11px;
-}
-
-.popup-content a:hover {
-	color: #94A3AB;
-}
-
-.popup-show {
-	display:block;
-}
-
-/**********************************************************************************************************************/
-/**  Tooltips                                                                                                        **/
-/**********************************************************************************************************************/
-
-.tooltip {
-	position: relative;
-	display: inline-block;	    
-}
-
-.tooltip .tooltiptext {
-	visibility: hidden;
-	background-color: #FEF9E7;
-	color: black;
-	padding: 5px;
-	border-radius: 6px;
-	position: absolute;
-	z-index: 1;
-	top: 0;
-	left: 0;
-	margin-left: 30px;
-	box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);
-	opacity: 0;
-	transition: opacity 0.5s;
-	font-weight: normal;
-}
-
-.tooltip .tooltiptext * {
-	color: black;
-}
-
-.tooltip:hover .tooltiptext {
-	visibility: visible;
-	opacity: 1;
-}	
-
-.tooltiptext {
-	white-space: nowrap;
-	float: left;
-	border: 1px solid black;
-}
-
-/**********************************************************************************************************************/
-/**  Other classes                                                                                                   **/
-/**********************************************************************************************************************/
-
-.table {display:table;}
-.row {display:table-row;}
-.cell {display:table-cell;}
-.monospace {font-family:monospace;}
-.link { color: #94A3AB; text-decoration: none; cursor: pointer;}
-.link:hover { text-decoration: underline; }
diff --git a/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/themes/devops.css b/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/themes/devops.css
deleted file mode 100644
index ad7188a..0000000
--- a/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/themes/devops.css
+++ /dev/null
@@ -1,276 +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.                                              *

- ***************************************************************************************************************************/

- 

-/** DevOps look-and-feel */ 

- 

-/**********************************************************************************************************************/

-/**  Body                                                                                                            **/

-/**********************************************************************************************************************/

-

-body {

-	background-color: #3B4B54;

-	margin: 0px;

-	font-family: HelveticaNeue-Light,"Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif;

-	color: #B3B3B3;

-	height: 100%;	

-}

-

-body {

-	font-size: 14px;

-}

-

-body textarea, body pre {

-	-moz-tab-size: 3; 

-	-o-tab-size: 3; 

-	-webkit-tab-size: 3; 

-	tab-size: 3; 

-}

-

-/**********************************************************************************************************************/

-/**  Header                                                                                                        **/

-/**********************************************************************************************************************/

-

-header {

-	background-color: #26343F;

-}

-

-header * {

-    font-size: 14px;

-	color: #B3B3B3;

-	margin: 0px;

-	text-decoration: none;

-	font-weight: normal;

-}

-

-header h1 {

-	padding: 10px 20px;

-	font-size: 16px;

-	border-bottom: 2px solid #34534B;

-	color: white;

-}

-

-header h2 {

-	padding: 10px 20px;

-	font-size: 14px;

-	border-bottom: 2px solid #34534B;

-}

-

-/**********************************************************************************************************************/

-/**  Nav                                                                                                             **/

-/**********************************************************************************************************************/

-

-nav {

-	margin: 10px 20px 10px 20px;

-	color: #94A3AB;

-}

-

-nav>ol {

-	list-style-type: none;

-	margin: 0px 10px;

-	padding: 0px;

-}

-

-nav>ol>li {

-	display: inline;

-}

-

-nav li:not(:first-child):before {

-	content: " - ";

-}

-

-nav a {

-	font-size: 10pt;

-	color: #94A3AB;

-	text-decoration: none;

-	margin: 0px 15px;

-	text-transform: uppercase;

-	cursor: pointer;

-}

-

-nav a:active, nav a:hover {

-	color: white;

-	text-decoration: underline;

-}

-

-/**********************************************************************************************************************/

-/**  Content                                                                                                        **/

-/**********************************************************************************************************************/

-

-section {

-	display: table;

-	width: 100%;

-	margin-bottom: 50px;

-}

-

-article {

-	display: table-cell;

-}

-

-article * {

-	font-size: 9pt;

-	color: #26343F;

-}

-

-article div.data {

-	padding: 10px;

-	background-color: white;

-	border-radius: 4px;

-	margin: 20px;

-	display: inline-block;

-	box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);

-	font-family: sans-serif;

-	color: #26343F;

-}

-

-article table {

-	border: none;

-	width: 100%;

-}

-

-article th {

-	border-top: 1px solid #D9DCDE;

-	padding: 4px 8px;

-	font-weight: bold;

-	text-align: center;

-	background-color: #F4F6F9;

-}

-

-article td {

-	vertical-align: top;

-	border-bottom: 1px solid #d9dcde;

-	border-right: 1px solid #d9dcde;

-	padding: 2px 5px;

-}

-

-article td:last-child {

-    width: 100%;

-}

-

-article ul {

-	margin: 0px;

-	padding-left: 20px;

-}

-

-article a {

-	color: #116998;

-	text-decoration: none;

-}

-

-article a:hover {

-	text-decoration: underline;

-}

-

-article iframe {

-	background-color: #F6F7F9;

-	border: 1px solid gray;

-	padding: 0px;

-	overflow: hidden;

-	width: 100%;

-	min-height: 400px;

-}

-

-aside {

-	display: table-cell;

-	vertical-align: top;

-	padding: 20px 20px;

-}

-

-/**********************************************************************************************************************/

-/**  Footer                                                                                                          **/

-/**********************************************************************************************************************/

-

-footer { 

-	padding: 10px;

-	width: 100%;

-	bottom: 0;

-	position: fixed;

-	background-color: #26343F;

-}

-

-/**********************************************************************************************************************/

-/**  Popup windows                                                                                                   **/

-/**********************************************************************************************************************/

-

-.popup-content {

-	display: none;

-	position: absolute;

-	background-color: #f4f6f9;

-	white-space: nowrap;

-	padding: 5px;

-	box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);

-	z-index: 1;

-	margin-top: 10px;

-	border-radius: 4px;

-}

-

-.popup-content * {

-	color: black;

-	font-size: 11px;

-}

-

-.popup-content a:hover {

-	color: #94A3AB;

-}

-

-.popup-show {

-	display:block;

-}

-

-/**********************************************************************************************************************/

-/**  Tooltips                                                                                                        **/

-/**********************************************************************************************************************/

-

-.tooltip {

-	position: relative;

-	display: inline-block;	    

-}

-

-.tooltip .tooltiptext {

-	visibility: hidden;

-	background-color: #FEF9E7;

-	color: black;

-	padding: 5px;

-	border-radius: 6px;

-	position: absolute;

-	z-index: 1;

-	top: 0;

-	left: 0;

-	margin-left: 30px;

-	box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);

-	opacity: 0;

-	transition: opacity 0.5s;

-	font-weight: normal;

-}

-

-.tooltip:hover .tooltiptext {

-	visibility: visible;

-	opacity: 1;

-}	

-

-.tooltiptext {

-	white-space: nowrap;

-	float: left;

-	border: 1px solid black;

-}

-

-/**********************************************************************************************************************/

-/**  Other classes                                                                                                   **/

-/**********************************************************************************************************************/

-

-.table {display:table;}

-.row {display:table-row;}

-.cell {display:table-cell;}

-.monospace {font-family:monospace;}

-.link { color: #94A3AB; text-decoration: none; cursor: pointer;}

-.link:hover { text-decoration: underline; }

-

diff --git a/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/themes/light.css b/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/themes/light.css
deleted file mode 100644
index aa91f98..0000000
--- a/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/themes/light.css
+++ /dev/null
@@ -1,273 +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.                                              *

- ***************************************************************************************************************************/

- 

-/** Light look-and-feel */ 

- 

-/**********************************************************************************************************************/

-/**  Body                                                                                                            **/

-/**********************************************************************************************************************/

-

-body {

-	margin: 0px;

-	font-size: 10px;

-	font-family: HelveticaNeue-Light,"Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif;

-	color: #2c4557;

-	height: 100%;	

-}

-

-body * {

-	font-size: 14px;

-}

-

-body textarea, body pre {

-	-moz-tab-size: 3; 

-	-o-tab-size: 3; 

-	-webkit-tab-size: 3; 

-	tab-size: 3; 

-}

-

-/**********************************************************************************************************************/

-/**  Header                                                                                                          **/

-/**********************************************************************************************************************/

-

-header {

-	background-color: #e8ebef;

-	padding: 10px 20px;

-	box-shadow: 5px 5px 2px #999999;

-	text-shadow: rgba(1,1,1,.2) 2px 4px 5px, rgba(125,32,191,.05) 0 -10px 30px;

-	white-space: nowrap;

-}

-

-header * {

-	color: #af2222;;

-	font-weight: lighter;

-}

-

-header h1 {

-	font-size: 18px;

-	margin: 0px;

-	padding: 2px;

-}

-

-header h2 {

-	font-size: 14px;

-	margin: 0px;

-	padding: 2px;

-}

-

-/**********************************************************************************************************************/

-/**  Nav                                                                                                             **/

-/**********************************************************************************************************************/

-

-nav {

-	margin: 10px;

-	padding: 5px;

-	box-shadow: 5px 5px 2px #999999;

-	background-color: #eef3f7;

-}

-

-nav * {

-	font-size: 12px;

-	font-weight: lighter;

-}

-

-nav>ol {

-	list-style-type: none;

-	margin: 0px 10px;

-	padding: 0px;

-}

-

-nav>ol>li {

-	display: inline;

-}

-

-nav li:not(:first-child):before {

-	content: " - ";

-}

-

-nav a {

-	font-size: 10pt;

-	color: #2c4557;

-	text-decoration: none;

-	margin: 0px 10px;

-	text-transform: uppercase;

-	cursor: pointer;

-}

-

-nav a:active, nav a:hover {

-	text-decoration: none;

-	color: #94a3ab;

-}

-

-/**********************************************************************************************************************/

-/**  Content                                                                                                         **/

-/**********************************************************************************************************************/

-

-section {

-	display: table;

-	width: 100%;

-	margin: 0px 0px 50px 0px;

-}

-

-article {

-	display: table-cell;

-	padding: 20px 40px;

-}

-

-article * {

-	font-size: 9pt;

-}

-

-article div.data {

-	padding: 0px;

-	margin: 0px;

-	display: inline-block;

-	font-family: sans-serif;

-}

-

-article table {

-	border: none;

-	width: 100%;

-}

-

-article td {

-	vertical-align: top;

-	border-bottom: 1px solid #d9dcde;

-	border-right: 1px solid #d9dcde;

-	padding: 2px 5px;

-}

-

-article td:last-child {

-    width: 100%;

-}

-

-article th {

-	padding: 4px 8px;

-	text-align: center;

-	background-color: #eef3f7;

-	box-shadow: 1px 1px 2px #999999;

-}

-

-article ul {

-	margin: 0px;

-	padding-left: 20px;

-}

-

-article a {

-	color: #416e8e;

-	text-decoration: none;

-}

-

-article iframe {

-	background-color: #F6F7F9;

-	border: 1px solid gray;

-	padding: 0px;

-	overflow: hidden;

-	width: 100%;

-	min-height: 400px;

-}

-

-aside {

-	display: table-cell;

-	vertical-align: top;

-	padding: 20px 20px;

-}

-

-/**********************************************************************************************************************/

-/**  Footer                                                                                                          **/

-/**********************************************************************************************************************/

-

-footer { 

-	padding: 10px;

-	width: 100%;

-	bottom: 0;

-	position: fixed;

-	background-color: #e8ebef;

-}

-

-/**********************************************************************************************************************/

-/**  Popup windows                                                                                                   **/

-/**********************************************************************************************************************/

-

-.popup-content {

-	display: none;

-	position: absolute;

-	background-color: #eef3f7;

-	white-space: nowrap;

-	padding: 5px;

-	box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);

-	z-index: 1;

-	margin-top: 10px;

-	border-radius: 4px;

-}

-

-.popup-content * {

-	color: #2c4557;

-	font-size: 10pt;

-}

-

-.popup-content a:hover {

-	color: #94A3AB;

-}

-

-.popup-show {

-	display: block;

-}

-

-/**********************************************************************************************************************/

-/**  Tooltips                                                                                                        **/

-/**********************************************************************************************************************/

-

-.tooltip {

-	position: relative;

-	display: inline-block;	    

-}

-

-.tooltip .tooltiptext {

-	visibility: hidden;

-	background-color: #FEF9E7;

-	color: black;

-	padding: 5px;

-	border-radius: 6px;

-	position: absolute;

-	z-index: 1;

-	top: 0;

-	left: 0;

-	margin-left: 30px;

-	box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);

-	opacity: 0;

-	transition: opacity 0.5s;

-	font-weight: normal;

-}

-

-.tooltip:hover .tooltiptext {

-	visibility: visible;

-	opacity: 1;

-}	

-

-.tooltiptext {

-	white-space: nowrap;

-	float: left;

-	border: 1px solid black;

-}

-

-/**********************************************************************************************************************/

-/**  Other classes                                                                                                   **/

-/**********************************************************************************************************************/

-

-.table {display:table;}

-.row {display:table-row;}

-.cell {display:table-cell;}

-.monospace {font-family:monospace;}

-.link { color: #94A3AB; text-decoration: none; cursor: pointer;}

-.link:hover { text-decoration: underline; }

diff --git a/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/themes/original.css b/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/themes/original.css
deleted file mode 100644
index 2052281..0000000
--- a/juneau-microservice/juneau-my-springboot-microservice/src/main/resources/htdocs/themes/original.css
+++ /dev/null
@@ -1,237 +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.                                              *

- ***************************************************************************************************************************/

-

-/** Original look-and-feel */ 

- 

-/**********************************************************************************************************************/

-/**  Body                                                                                                            **/

-/**********************************************************************************************************************/

-

-body {

-	background-image: linear-gradient(top, #CDDDDF 0, #EAEDED 20px, #FFFFFF 70px);

-	background-image: -webkit-linear-gradient(top, #CDDDDF 0, #EAEDED 20px, #FFFFFF 70px);

-	background-attachment: fixed;

-	font-family: Sans-Serif;

-	color: #2c4557;

-	height: 100%;

-	margin: 0px;

-}

-

-body * {

-	font-size: 12px;

-}

-

-body textarea, body pre {

-	-moz-tab-size: 3; 

-	-o-tab-size: 3; 

-	-webkit-tab-size: 3; 

-	tab-size: 3; 

-}

-

-/**********************************************************************************************************************/

-/**  Header                                                                                                          **/

-/**********************************************************************************************************************/

-

-header {

-	padding: 10px 20px;

-}

-

-header h1 {

-    font-size: 16px;

-	margin-bottom: 10px;

-	margin-right: 40px;

-	padding: 5px 30px;

-	border-radius: 15px;

-	text-decoration: none;

-	font-weight: normal;

-	background: linear-gradient(to bottom, #F5F5F5, #DEE3E9) repeat scroll 0% 0% transparent;

-	background: -webkit-gradient(linear, left top, left bottom, from(#F5F5F5), to(#DEE3E9));

-}

-

-header h2 {

-	font-weight: normal;

-	margin-left: 20px;

-}

-

-/**********************************************************************************************************************/

-/**  Nav                                                                                                             **/

-/**********************************************************************************************************************/

-

-nav {

-	margin: 0px 25px;	

-}

-

-nav>ol {

-	list-style-type: none;

-	margin: 0px 10px;

-	padding: 0px;

-}

-

-nav>ol>li {

-	display: inline;

-}

-

-nav li:not(:first-child):before {

-    content: " - ";

-}

-

-nav a {

-	text-decoration: underline;

-	cursor: pointer;

-	color: -webkit-link;

-}

-

-/**********************************************************************************************************************/

-/**  Content                                                                                                        **/

-/**********************************************************************************************************************/

-

-section {

-	display: table;

-	width: 100%;

-	margin: 0px 0px 50px 0px;

-}

-

-article {

-	display: table-cell;

-	padding: 20px 40px;

-}

-

-aside {

-	display: table-cell;

-	vertical-align: top;

-	padding: 20px 20px;

-}

-

-article div.data {

-	padding: 0px;

-	margin: 0px;

-	display: inline-block;

-	font-family: sans-serif;

-}

-

-article table {

-	border:1px solid #CCCC99;

-	border-collapse: collapse;

-	margin: 5px 0px;

-	width: 100%;

-}

-

-article th {

-	border-top: 1px solid #CCCC99;

-	padding: 3px 5px;

-	color: #666666;

-	text-align: center;

-	background-image: linear-gradient(top, #FBF9E4 0%, #F3F2C2 100%);

-	background-image: -webkit-linear-gradient(top, #FBF9E4 0%, #F3F2C2 100%);

-}

-

-article td {

-	border: 1px solid #E9EACB;

-	padding: 2px 5px;

-	color: #005C87;

-	vertical-align: top;

-}

-

-article td:last-child {

-    width: 100%;

-}

-

-article ul {

-	margin: 0px;

-	padding-left: 20px;

-}

-

-/**********************************************************************************************************************/

-/**  Footer                                                                                                          **/

-/**********************************************************************************************************************/

-

-footer { 

-	display: none;

-}

-

-/**********************************************************************************************************************/

-/**  Popup windows                                                                                                   **/

-/**********************************************************************************************************************/

-

-.popup-content {

-	display: none;

-	position: absolute;

-	background-color: #eef3f7;

-	white-space: nowrap;

-	padding: 5px;

-	box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);

-	z-index: 1;

-	margin-top: 10px;

-	border-radius: 4px;

-}

-

-.popup-content * {

-	font-size: 9pt;

-}

-

-.popup-content a:hover {

-	color: #94A3AB;

-}

-

-.popup-show {

-	display: block;

-}

-

-/**********************************************************************************************************************/

-/**  Tooltips                                                                                                        **/

-/**********************************************************************************************************************/

-

-.tooltip {

-	position: relative;

-	display: inline-block;	    

-}

-

-.tooltip .tooltiptext {

-	visibility: hidden;

-	background-color: #FEF9E7;

-	color: black;

-	padding: 5px;

-	border-radius: 6px;

-	position: absolute;

-	z-index: 1;

-	top: 0;

-	left: 0;

-	margin-left: 30px;

-	box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);

-	opacity: 0;

-	transition: opacity 0.5s;

-	font-weight: normal;

-}

-

-.tooltip:hover .tooltiptext {

-	visibility: visible;

-	opacity: 1;

-}	

-

-.tooltiptext {

-	white-space: nowrap;

-	float: left;

-	border: 1px solid black;

-}

-

-/**********************************************************************************************************************/

-/**  Other classes                                                                                                   **/

-/**********************************************************************************************************************/

-

-.table {display:table;}

-.row {display:table-row;}

-.cell {display:table-cell;}

-.monospace {font-family:monospace;}

-.link { color: #94A3AB; text-decoration: none; cursor: pointer;}

-.link:hover { text-decoration: underline; }

-

diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/StaticFilesMappingTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/StaticFilesMappingTest.java
new file mode 100644
index 0000000..d7b8489
--- /dev/null
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/StaticFilesMappingTest.java
@@ -0,0 +1,246 @@
+// ***************************************************************************************************************************
+// * 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.rest;
+
+import static org.apache.juneau.testutils.TestUtils.*;
+import static org.junit.Assert.*;
+
+import java.util.*;
+
+import org.apache.juneau.parser.*;
+import org.junit.*;
+import org.junit.runners.*;
+
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class StaticFilesMappingTest {
+
+	private static Collection<StaticFileMapping> parse(String input) throws ParseException {
+		return StaticFileMapping.parse(null, input);
+	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Empty input.
+	//------------------------------------------------------------------------------------------------------------------
+
+	@Test
+	public void a01_null() throws Exception {
+		assertObjectEquals("[]", parse(null));
+	}
+
+	@Test
+	public void a02_emptySpaces() throws Exception {
+		assertObjectEquals("[]", parse("    "));
+	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Basic tests.
+	//------------------------------------------------------------------------------------------------------------------
+
+	@Test
+	public void b01_basic2Part() throws Exception {
+		assertObjectEquals("[{path:'foo',location:'bar'}]", parse("foo:bar"));
+	}
+
+	@Test
+	public void b02_basic2Part_withSpaces() throws Exception {
+		assertObjectEquals("[{path:'foo',location:'bar'}]", parse("  foo  :  bar  "));
+	}
+
+	@Test
+	public void b03_basic3Part() throws Exception {
+		assertObjectEquals(
+			"[{path:'foo',location:'bar',responseHeaders:{baz:'qux'}}]",
+			parse("foo:bar:{baz:'qux'}")
+		);
+	}
+
+	@Test
+	public void b04_basic3Part_withSpaces() throws Exception {
+		assertObjectEquals(
+			"[{path:'foo',location:'bar',responseHeaders:{baz:'qux'}}]",
+			parse("  foo  :  bar  :  {  baz  :  'qux'  }  ")
+		);
+	}
+
+	@Test
+	public void b05_multipleHeaders() throws Exception {
+		assertObjectEquals(
+			"[{path:'foo',location:'bar',responseHeaders:{baz:'qux',qux:'quux'}}]",
+			parse("foo:bar:{baz:'qux',qux:'quux'}")
+		);
+	}
+
+	@Test
+	public void b06_multipleHeaders_withSpaces() throws Exception {
+		assertObjectEquals(
+			"[{path:'foo',location:'bar',responseHeaders:{baz:'qux',qux:'quux'}}]",
+			parse("  foo  :  bar  :  {  baz  :  'qux'  ,  qux:  'quux'  }  ")
+		);
+	}
+
+	@Test
+	public void b07_nestedHeaders() throws Exception {
+		assertObjectEquals(
+			"[{path:'foo',location:'bar',responseHeaders:{a:{b:'c'}}}]",
+			parse("foo:bar:{a:{b:'c'}}")
+		);
+	}
+
+	@Test
+	public void b08_nestedHeaders_complex() throws Exception {
+		assertObjectEquals(
+			"[{path:'foo',location:'bar',responseHeaders:{a:{b:'c',d:'e'},f:{g:'h',i:'j'}}}]",
+			parse("foo:bar:{a:{b:'c',d:'e'},f:{g:'h',i:'j'}}")
+		);
+	}
+
+	@Test
+	public void b09_nestedHeaders_complex_withSpaces() throws Exception {
+		assertObjectEquals(
+			"[{path:'foo',location:'bar',responseHeaders:{a:{b:'c',d:'e'},f:{g:'h',i:'j'}}}]",
+			parse("  foo  :  bar  :  {  a  :  {  b  :  'c'  ,  d  :  'e'  }  ,  f  :  {  g  :  'h'  ,  i  :  'j'  }  }  ")
+		);
+	}
+
+	@Test
+	public void b10_emptyHeaders() throws Exception {
+		assertObjectEquals(
+			"[{path:'foo',location:'bar'}]",
+			parse("foo:bar:{}")
+		);
+	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Multiple mappings
+	//------------------------------------------------------------------------------------------------------------------
+
+	@Test
+	public void c01_multipleMappings_basic2Part() throws Exception {
+		assertObjectEquals(
+			"[{path:'foo',location:'bar'},{path:'baz',location:'qux'}]",
+			parse("foo:bar,baz:qux")
+		);
+	}
+
+	@Test
+	public void c02_multipleMappings_basic2Part_withSpaces() throws Exception {
+		assertObjectEquals(
+			"[{path:'foo',location:'bar'},{path:'baz',location:'qux'}]",
+			parse("  foo  :  bar  ,  baz  :  qux  ")
+		);
+	}
+
+	@Test
+	public void c03_multipleMappings_basic3Part() throws Exception {
+		assertObjectEquals(
+			"[{path:'foo',location:'bar',responseHeaders:{a:'b'}},{path:'baz',location:'qux',responseHeaders:{c:'d'}}]",
+			parse("foo:bar:{a:'b'},baz:qux:{c:'d'}")
+		);
+	}
+
+	@Test
+	public void c04_multipleMappings_basic3Part_withSpaces() throws Exception {
+		assertObjectEquals(
+			"[{path:'foo',location:'bar',responseHeaders:{a:'b'}},{path:'baz',location:'qux',responseHeaders:{c:'d'}}]",
+			parse("  foo  :  bar  :  {  a  :  'b'  }  ,  baz  :  qux  :  {  c  :  'd'  }  ")
+		);
+	}
+
+	@Test
+	public void c05_multipleMappings_multipleHeaders() throws Exception {
+		assertObjectEquals(
+			"[{path:'foo',location:'bar',responseHeaders:{a:'b',c:'d'}},{path:'baz',location:'qux',responseHeaders:{e:'f',g:'h'}}]",
+			parse("foo:bar:{a:'b',c:'d'},baz:qux:{e:'f',g:'h'}")
+		);
+	}
+
+	@Test
+	public void c06_multipleMappings_multipleHeaders_withSpaces() throws Exception {
+		assertObjectEquals(
+			"[{path:'foo',location:'bar',responseHeaders:{a:'b',c:'d'}},{path:'baz',location:'qux',responseHeaders:{e:'f',g:'h'}}]",
+			parse("  foo  :  bar  :  {  a  :  'b'  ,  c  :  'd'  }  ,  baz  :  qux  :  {  e  :  'f'  ,  g  :  'h'  }  ")
+		);
+	}
+
+	@Test
+	public void c07_multipleMappings_nestedHeaders() throws Exception {
+		assertObjectEquals(
+			"[{path:'foo',location:'bar',responseHeaders:{a:{b:'c'}}},{path:'baz',location:'qux',responseHeaders:{d:{e:'f'}}}]",
+			parse("foo:bar:{a:{b:'c'}},baz:qux:{d:{e:'f'}}")
+		);
+	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Error conditions
+	//------------------------------------------------------------------------------------------------------------------
+
+	@Test
+	public void d01_error_malformedJson() {
+		try {
+			parse("foo:bar:xxx");
+			fail("Exception expected.");
+		} catch (ParseException e) {
+			assertContains(e, "Expected { at beginning of headers.");
+		}
+	}
+
+	@Test
+	public void d02_error_textFollowingJson() {
+		try {
+			parse("foo:bar:{a:'b'}x");
+			fail("Exception expected.");
+		} catch (ParseException e) {
+			assertContains(e, "Invalid text following headers.");
+		}
+	}
+
+	@Test
+	public void d03_error_missingLocation() {
+		try {
+			parse("foo");
+			fail("Exception expected.");
+		} catch (ParseException e) {
+			assertContains(e, "Couldn't find ':' following path.");
+		}
+	}
+
+	@Test
+	public void d04_error_danglingColonAfterLocation() {
+		try {
+			parse("foo:bar:");
+			fail("Exception expected.");
+		} catch (ParseException e) {
+			assertContains(e, "Found extra ':' following location.");
+		}
+	}
+
+	@Test
+	public void d05_error_malformedHeaders_openEnded() {
+		try {
+			parse("foo:bar:{");
+			fail("Exception expected.");
+		} catch (ParseException e) {
+			assertContains(e, "Malformed headers.");
+		}
+	}
+
+	@Test
+	public void d06_error_malformedHeaders_mismatchedBrackets() {
+		try {
+			parse("foo:bar:{{}");
+			fail("Exception expected.");
+		} catch (ParseException e) {
+			assertContains(e, "Malformed headers.");
+		}
+	}
+}
diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/RestResourceStaticFilesTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/RestResourceStaticFilesTest.java
index f9817b3..0e66f65 100644
--- a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/RestResourceStaticFilesTest.java
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/RestResourceStaticFilesTest.java
@@ -28,30 +28,50 @@
 	//------------------------------------------------------------------------------------------------------------------

 

 	@RestResource(staticFiles={"xdocs:xdocs","xdocs2:xdocs2:{Foo:'Bar'}"})

-	public static class A {

+	public static class A1 {

 		@RestMethod

 		public String a01() {

 			return null;

 		}

 	}

-	static MockRest a = MockRest.build(A.class);

+	static MockRest a1 = MockRest.build(A1.class);

 

 	@Test

-	public void a01() throws Exception {

-		a.get("/xdocs/test.txt").execute().assertBodyContains("OK-1");

-		a.get("/xdocs/xsubdocs/test.txt").execute().assertBodyContains("OK-2");

+	public void a01a() throws Exception {

+		a1.get("/xdocs/test.txt").execute().assertBodyContains("OK-1");

+		a1.get("/xdocs/xsubdocs/test.txt").execute().assertBodyContains("OK-2");

 	}

 	@Test

-	public void a02_preventPathTraversals() throws Exception {

-		a.get("/xdocs/xsubdocs/../test.txt?noTrace=true").execute().assertStatus(404);

-		a.get("/xdocs/xsubdocs/%2E%2E/test.txt?noTrace=true").execute().assertStatus(404);

+	public void a01b_preventPathTraversals() throws Exception {

+		a1.get("/xdocs/xsubdocs/../test.txt?noTrace=true").execute().assertStatus(404);

+		a1.get("/xdocs/xsubdocs/%2E%2E/test.txt?noTrace=true").execute().assertStatus(404);

+	}

+

+	@RestResource(staticFiles={"xdocs2:xdocs2:{Foo:'Bar',Baz:'Qux'},xdocs:xdocs"})

+	public static class A2 {

+		@RestMethod

+		public String a02() {

+			return null;

+		}

+	}

+	static MockRest a2 = MockRest.build(A1.class);

+

+	@Test

+	public void a02a() throws Exception {

+		a1.get("/xdocs/test.txt").execute().assertBodyContains("OK-1");

+		a1.get("/xdocs/xsubdocs/test.txt").execute().assertBodyContains("OK-2");

+	}

+	@Test

+	public void a02b_preventPathTraversals() throws Exception {

+		a1.get("/xdocs/xsubdocs/../test.txt?noTrace=true").execute().assertStatus(404);

+		a1.get("/xdocs/xsubdocs/%2E%2E/test.txt?noTrace=true").execute().assertStatus(404);

 	}

 

 	//------------------------------------------------------------------------------------------------------------------

 	// Static files with response headers.

 	//------------------------------------------------------------------------------------------------------------------

 

-	@RestResource(staticFiles={"xdocs:xdocs:{Foo:'Bar'}"})

+	@RestResource(staticFiles={"xdocs:xdocs:{Foo:'Bar',Baz:'Qux'}"})

 	public static class B {

 		@RestMethod

 		public String b01() {

@@ -62,7 +82,7 @@
 

 	@Test

 	public void b01() throws Exception {

-		b.get("/xdocs/test.txt").execute().assertHeader("Foo","Bar").assertBodyContains("OK-1");

+		b.get("/xdocs/test.txt").execute().assertHeader("Foo","Bar").assertHeader("Baz","Qux").assertBodyContains("OK-1");

 	}

 

 	//------------------------------------------------------------------------------------------------------------------

@@ -104,4 +124,30 @@
 		c1.get("/xdocs/xsubdocs/test2.txt").execute().assertBodyContains("OK-6");

 		c2.get("/xdocs/xsubdocs/test2.txt").execute().assertBodyContains("OK-6");

 	}

+

+	//------------------------------------------------------------------------------------------------------------------

+	// Overridden patterns

+	//------------------------------------------------------------------------------------------------------------------

+

+	@RestResource(staticFiles={"xdocs:/xdocs,xdocs:xdocs"})

+	public static class D {

+		@RestMethod

+		public String d01() {

+			return null;

+		}

+	}

+

+	static MockRest d = MockRest.build(D.class);

+

+	@Test

+	public void d01() throws Exception {

+		// Should be overridden to absolute xdocs folder.

+		d.get("/xdocs/test.txt").execute().assertBodyContains("OK-3");

+		d.get("/xdocs/xsubdocs/test.txt").execute().assertBodyContains("OK-4");

+

+		// Should pick up from file system.

+		d.get("/xdocs/test2.txt").execute().assertBodyContains("OK-5");

+		d.get("/xdocs/xsubdocs/test2.txt").execute().assertBodyContains("OK-6");

+	}

+

 }

diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/jueau/rest/helper/ReaderResourceTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/helper/ReaderResourceTest.java
similarity index 97%
rename from juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/jueau/rest/helper/ReaderResourceTest.java
rename to juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/helper/ReaderResourceTest.java
index 278a0e2..709a3f1 100644
--- a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/jueau/rest/helper/ReaderResourceTest.java
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/helper/ReaderResourceTest.java
@@ -10,7 +10,7 @@
 // * "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.jueau.rest.helper;
+package org.apache.juneau.rest.helper;
 
 import static org.junit.Assert.*;
 
@@ -20,7 +20,6 @@
 import org.apache.juneau.http.ReaderResource;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.helper.*;
 import org.apache.juneau.rest.mock2.*;
 import org.junit.*;
 import org.junit.runners.*;
diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/jueau/rest/helper/StreamResourceTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/helper/StreamResourceTest.java
similarity index 98%
rename from juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/jueau/rest/helper/StreamResourceTest.java
rename to juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/helper/StreamResourceTest.java
index d49348d..a5f7e9b 100644
--- a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/jueau/rest/helper/StreamResourceTest.java
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/helper/StreamResourceTest.java
@@ -10,7 +10,7 @@
 // * "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.jueau.rest.helper;
+package org.apache.juneau.rest.helper;
 
 import static org.junit.Assert.*;
 
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestConfig.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestConfig.java
index f321774..78aa3e8 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestConfig.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestConfig.java
@@ -78,7 +78,7 @@
 	// 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.
-	staticFiles="$C{REST/staticFiles,htdocs:htdocs}",
+	staticFiles="$C{REST/staticFiles,htdocs:/htdocs,htdocs:htdocs}",
 
 	logging=@Logging(
 		level="INFO",
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index 15b3fd7..7956795 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -2860,6 +2860,17 @@
 	 * 	)

 	 * </p>

 	 *

+	 * <p>

+	 * The same path can map to multiple locations.  Files are searched in the order

+	 * <p class='bcode w800'>

+	 * 	<ja>@RestResource</ja>(

+	 * 		staticFiles={

+	 * 			<jc>// Search in absolute location '/htdocs/folder' before location 'htdocs.package' relative to servlet package.</jc>

+	 * 			<js>"htdocs:/htdocs/folder,htdocs:htdocs.package"</js>

+	 * 		}

+	 * 	)

+	 * </p>

+	 *

 	 * <ul class='seealso'>

 	 * 	<li class='jf'>{@link #REST_classpathResourceFinder} for configuring how classpath resources are located and retrieved.

 	 * 	<li class='jf'>{@link #REST_mimeTypes} for configuring the media types based on file extension.

diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
index 2174dc3..d10bd91 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
@@ -17,6 +17,7 @@
 import static org.apache.juneau.rest.RestContext.*;
 import static org.apache.juneau.rest.HttpRuntimeException.*;
 import static org.apache.juneau.serializer.Serializer.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.nio.charset.*;
 import java.util.*;
@@ -1860,10 +1861,13 @@
 	 * </ul>
 	 *
 	 * @param mappingString The static file mapping string.
+	 * @throws ParseException If mapping string is malformed.
 	 * @return This object (for method chaining).
 	 */
-	public RestContextBuilder staticFiles(String mappingString) {
-		return staticFiles(new StaticFileMapping(resourceClass, mappingString));
+	public RestContextBuilder staticFiles(String mappingString) throws ParseException{
+		for (StaticFileMapping sfm : reverseIterable(StaticFileMapping.parse(resourceClass, mappingString)))
+			staticFiles(sfm);
+		return this;
 	}
 
 	/**
@@ -1888,10 +1892,11 @@
 	 * 	<br>If <jk>null<jk>, uses the REST resource class.
 	 * @param mappingString The static file mapping string.
 	 * @return This object (for method chaining).
+	 * @throws ParseException If mapping string is malformed.
 	 */
-	public RestContextBuilder staticFiles(Class<?> baseClass, String mappingString) {
-		if (isNotEmpty(mappingString))
-			staticFiles(new StaticFileMapping(baseClass, mappingString));
+	public RestContextBuilder staticFiles(Class<?> baseClass, String mappingString) throws ParseException {
+		for (StaticFileMapping sfm : reverseIterable(StaticFileMapping.parse(baseClass, mappingString)))
+			staticFiles(sfm);
 		return this;
 	}
 
@@ -1914,7 +1919,7 @@
 	 * @return This object (for method chaining).
 	 */
 	public RestContextBuilder staticFiles(String path, String location) {
-		return staticFiles(new StaticFileMapping(null, path, location, null));
+		return staticFiles(new StaticFileMapping(resourceClass, path, location, null));
 	}
 
 	/**
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StaticFileMapping.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StaticFileMapping.java
index 3fa0424..8b5f177 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StaticFileMapping.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StaticFileMapping.java
@@ -14,10 +14,13 @@
 
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.StateMachineState.*;
+import static java.lang.Character.*;
 
 import java.util.*;
 
 import org.apache.juneau.*;
+import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.rest.annotation.*;
@@ -93,7 +96,7 @@
 	}
 
 	/**
-	 * Constructor using a mapping string to represent a path/location pairing.
+	 * Create one or more <c>StaticFileMappings</c> from the specified comma-delimited list of mappings.
 	 *
 	 * <p>
 	 * Mapping string must be one of these formats:
@@ -104,26 +107,101 @@
 	 *
 	 * @param resourceClass
 	 * 	The resource/servlet class which serves as the base location of the location below.
-	 * @param mappingString
+	 * @param mapping
 	 * 	The mapping string that represents the path/location mapping.
 	 * 	<br>Leading and trailing slashes and whitespace are trimmed from path and location.
+	 * @return A list of parsed mappings.  Never <jk>null</jk>.
+	 * @throws ParseException If mapping was malformed.
 	 */
-	public StaticFileMapping(Class<?> resourceClass, String mappingString) {
-		this.resourceClass = resourceClass;
-		String[] parts = split(mappingString, ':', 3);
-		if (parts == null || parts.length <= 1)
-			throw new FormattedRuntimeException("Invalid mapping string format: ''{0}'' on resource class ''{1}''", mappingString, resourceClass.getName());
-		this.path = trimSlashes(parts[0]);
-		this.location = trimTrailingSlashes(parts[1]);
-		if (parts.length == 3) {
-			try {
-				responseHeaders = unmodifiableMap(new ObjectMap(parts[2]));
-			} catch (ParseException e) {
-				throw new FormattedRuntimeException(e, "Invalid mapping string format: ''{0}'' on resource class ''{1}''", mappingString, resourceClass.getName());
+	public static List<StaticFileMapping> parse(Class<?> resourceClass, String mapping) throws ParseException {
+
+		mapping = trim(mapping);
+		if (isEmpty(mapping))
+			return Collections.emptyList();
+
+		// States:
+		// S01 = In path, looking for :
+		// S02 = Found path:, looking for : or , or end
+		// S03 = Found path:location:, looking for {
+		// S04 = Found path:location:{, looking for }
+		// S05 = Found path:location:{headers}, looking for , or end
+		// S06 = Found path:location:{headers} , looking for start of path
+
+		StateMachineState state = S01;
+		int mark = 0;
+
+		String path = null, location = null;
+		List<StaticFileMapping> l = new ArrayList<>();
+		String s = mapping;
+		int jsonDepth = 0;
+		for (int i = 0; i < s.length(); i++) {
+			char c = s.charAt(i);
+			if (state == S01) {
+				if (c == ':') {
+					path = trim(s.substring(mark, i));
+					mark = i+1;
+					state = S02;
+				}
+			} else if (state == S02) {
+				if (c == ':') {
+					location = trim(s.substring(mark, i));
+					mark = i+1;
+					state = S03;
+				} else if (c == ',') {
+					location = trim(s.substring(mark, i));
+					l.add(new StaticFileMapping(resourceClass, path, location, null));
+					mark = i+1;
+					state = S01;
+					path = null;
+					location = null;
+				}
+			} else if (state == S03) {
+				if (c == '{') {
+					mark = i;
+					state = S04;
+				} else if (! isWhitespace(c)) {
+					throw new ParseException("Invalid staticFiles mapping.  Expected '{' at beginning of headers.  mapping=[{0}]", mapping);
+				}
+			} else if (state == S04) {
+				if (c == '{') {
+					jsonDepth++;
+				} else if (c == '}') {
+					if (jsonDepth > 0) {
+						jsonDepth--;
+					} else {
+						String json = s.substring(mark, i+1);
+						l.add(new StaticFileMapping(resourceClass, path, location, new ObjectMap(json)));
+						state = S05;
+						path = null;
+						location = null;
+					}
+				}
+			} else if (state == S05) {
+				if (c == ',') {
+					state = S06;
+				} else if (! isWhitespace(c)) {
+					throw new ParseException("Invalid staticFiles mapping.  Invalid text following headers.  mapping=[{0}]", mapping);
+				}
+			} else /* state == S06 */ {
+				if (! isWhitespace(c)) {
+					mark = i;
+					state = S01;
+				}
 			}
-		} else {
-			responseHeaders = null;
 		}
+
+		if (state == S01) {
+			throw new ParseException("Invalid staticFiles mapping.  Couldn''t find '':'' following path.  mapping=[{0}]", mapping);
+		} else if (state == S02) {
+			location = trim(s.substring(mark, s.length()));
+			l.add(new StaticFileMapping(resourceClass, path, location, null));
+		} else if (state == S03) {
+			throw new ParseException("Invalid staticFiles mapping.  Found extra '':'' following location.  mapping=[{0}]", mapping);
+		} else if (state == S04) {
+			throw new ParseException("Invalid staticFiles mapping.  Malformed headers.  mapping=[{0}]", mapping);
+		}
+
+		return l;
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResource.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
index b55346e..ce9608c 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
@@ -1156,6 +1156,17 @@
 	 * 	)

 	 * </p>

 	 *

+	 * <p>

+	 * The same path can map to multiple locations.  Files are searched in the order

+	 * <p class='bcode w800'>

+	 * 	<ja>@RestResource</ja>(

+	 * 		staticFiles={

+	 * 			<jc>// Search in absolute location '/htdocs/folder' before location 'htdocs.package' relative to servlet package.</jc>

+	 * 			<js>"htdocs:/htdocs/folder,htdocs:htdocs.package"</js>

+	 * 		}

+	 * 	)

+	 * </p>

+	 *

 	 * <ul class='notes'>

 	 * 	<li>

 	 * 		Mappings are cumulative from super classes.

diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResourceConfigApply.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResourceConfigApply.java
index 77cfad3..1eadabb 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResourceConfigApply.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResourceConfigApply.java
@@ -14,6 +14,7 @@
 
 import static org.apache.juneau.rest.RestContext.*;
 import static org.apache.juneau.rest.util.RestUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.util.logging.*;
 
@@ -162,9 +163,14 @@
 		if (isNotEmpty(s))
 			psb.set(REST_uriResolution, s);
 
-		for (String mapping : a.staticFiles())
-			if (isNotEmpty(mapping))
-				psb.addTo(REST_staticFiles, new StaticFileMapping(c.inner(), string(mapping)));
+		for (String mapping : a.staticFiles()) {
+			try {
+				for (StaticFileMapping sfm : reverseIterable(StaticFileMapping.parse(c.inner(), string(mapping))))
+					psb.addTo(REST_staticFiles, sfm);
+			} catch (ParseException e) {
+				throw new ConfigException(e, "Invalid @Resource(staticFiles) value on class ''{0}''", c);
+			}
+		}
 
 		if (! a.messages().isEmpty())
 			psb.addTo(REST_messages, new MessageBundleLocation(c.inner(), string(a.messages())));
diff --git a/juneau-examples/juneau-examples-rest-jetty/src/main/resources/htdocs/images/asf.png b/juneau-rest/juneau-rest-server/src/main/resources/org/apache/juneau/rest/htdocs/images/asf.png
similarity index 100%
rename from juneau-examples/juneau-examples-rest-jetty/src/main/resources/htdocs/images/asf.png
rename to juneau-rest/juneau-rest-server/src/main/resources/org/apache/juneau/rest/htdocs/images/asf.png
Binary files differ
diff --git a/juneau-examples/juneau-examples-rest-jetty/src/main/resources/htdocs/images/juneau.png b/juneau-rest/juneau-rest-server/src/main/resources/org/apache/juneau/rest/htdocs/images/juneau.png
similarity index 100%
rename from juneau-examples/juneau-examples-rest-jetty/src/main/resources/htdocs/images/juneau.png
rename to juneau-rest/juneau-rest-server/src/main/resources/org/apache/juneau/rest/htdocs/images/juneau.png
Binary files differ
diff --git a/juneau-examples/juneau-examples-rest-jetty/src/main/resources/htdocs/styles/SwaggerUI.css b/juneau-rest/juneau-rest-server/src/main/resources/org/apache/juneau/rest/htdocs/styles/SwaggerUI.css
similarity index 100%
rename from juneau-examples/juneau-examples-rest-jetty/src/main/resources/htdocs/styles/SwaggerUI.css
rename to juneau-rest/juneau-rest-server/src/main/resources/org/apache/juneau/rest/htdocs/styles/SwaggerUI.css
diff --git a/juneau-examples/juneau-examples-rest-jetty/src/main/resources/htdocs/themes/dark.css b/juneau-rest/juneau-rest-server/src/main/resources/org/apache/juneau/rest/htdocs/themes/dark.css
similarity index 100%
rename from juneau-examples/juneau-examples-rest-jetty/src/main/resources/htdocs/themes/dark.css
rename to juneau-rest/juneau-rest-server/src/main/resources/org/apache/juneau/rest/htdocs/themes/dark.css
diff --git a/juneau-examples/juneau-examples-rest-jetty/src/main/resources/htdocs/themes/light.css b/juneau-rest/juneau-rest-server/src/main/resources/org/apache/juneau/rest/htdocs/themes/light.css
similarity index 100%
rename from juneau-examples/juneau-examples-rest-jetty/src/main/resources/htdocs/themes/light.css
rename to juneau-rest/juneau-rest-server/src/main/resources/org/apache/juneau/rest/htdocs/themes/light.css
diff --git a/juneau-examples/juneau-examples-rest-jetty/src/main/resources/htdocs/themes/original.css b/juneau-rest/juneau-rest-server/src/main/resources/org/apache/juneau/rest/htdocs/themes/original.css
similarity index 100%
rename from juneau-examples/juneau-examples-rest-jetty/src/main/resources/htdocs/themes/original.css
rename to juneau-rest/juneau-rest-server/src/main/resources/org/apache/juneau/rest/htdocs/themes/original.css