juneau-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jamesbog...@apache.org
Subject [2/2] incubator-juneau git commit: Simplified syntax for HtmlDoc.links() and other annotations.
Date Mon, 10 Jul 2017 00:07:22 GMT
Simplified syntax for HtmlDoc.links() and other annotations.

Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/ffda0552
Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/ffda0552
Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/ffda0552

Branch: refs/heads/master
Commit: ffda0552d3104108305b52bda21e3a9e7200ca0b
Parents: fac3eb9
Author: JamesBognar <jamesbognar@apache.org>
Authored: Sun Jul 9 20:07:18 2017 -0400
Committer: JamesBognar <jamesbognar@apache.org>
Committed: Sun Jul 9 20:07:18 2017 -0400

----------------------------------------------------------------------
 .../main/java/org/apache/juneau/ObjectMap.java  |  10 +-
 .../apache/juneau/dto/jsonschema/package.html   |   4 +-
 .../juneau/html/HtmlDocSerializerContext.java   |  68 ++++++----
 .../juneau/html/HtmlDocSerializerSession.java   |   9 +-
 .../juneau/html/HtmlDocTemplateBasic.java       |  94 +++++++-------
 .../org/apache/juneau/html/HtmlSerializer.java  |  10 +-
 .../juneau/serializer/SerializerWriter.java     |  15 ++-
 .../apache/juneau/soap/SoapXmlSerializer.java   |   1 +
 juneau-core/src/main/javadoc/overview.html      | 125 ++++++++++++++++---
 .../juneau/examples/rest/AtomFeedResource.java  |   8 +-
 .../examples/rest/CodeFormatterResource.java    |  17 ++-
 .../juneau/examples/rest/DirectoryResource.java |   8 +-
 .../examples/rest/DockerRegistryResource.java   |  17 ++-
 .../examples/rest/HelloWorldResource.java       |  17 ++-
 .../examples/rest/JsonSchemaResource.java       |  17 ++-
 .../examples/rest/MethodExampleResource.java    |  17 ++-
 .../juneau/examples/rest/PetStoreResource.java  |  39 +++---
 .../juneau/examples/rest/PhotosResource.java    |  17 ++-
 .../examples/rest/RequestEchoResource.java      |  21 ++--
 .../juneau/examples/rest/RootResources.java     |  31 ++---
 .../examples/rest/SampleRemoteableServlet.java  |  21 ++--
 .../juneau/examples/rest/SqlQueryResource.java  |  20 ++-
 .../examples/rest/SystemPropertiesResource.java |  39 +++---
 .../juneau/examples/rest/TempDirResource.java   |  20 ++-
 .../examples/rest/TumblrParserResource.java     |  17 ++-
 .../examples/rest/UrlEncodedFormResource.java   |  45 ++++---
 .../rest/addressbook/AddressBookResource.java   |  47 +++++--
 .../apache/juneau/examples/rest/PetStore.json   |  10 +-
 .../apache/juneau/microservice/Resource.java    |   5 +-
 .../juneau/microservice/ResourceGroup.java      |   5 +-
 .../juneau/microservice/ResourceJena.java       |   5 +-
 .../juneau/microservice/ResourceJenaGroup.java  |   5 +-
 .../microservice/resources/ConfigResource.java  |   6 +-
 .../resources/DirectoryResource.java            |  10 +-
 .../java/org/apache/juneau/rest/CallMethod.java |  42 ++++---
 .../java/org/apache/juneau/rest/RestConfig.java |  35 +++---
 .../org/apache/juneau/rest/RestContext.java     |  10 +-
 .../org/apache/juneau/rest/RestRequest.java     |   8 +-
 .../org/apache/juneau/rest/RestResponse.java    |   5 +-
 .../apache/juneau/rest/RestServletDefault.java  |   5 +-
 .../apache/juneau/rest/annotation/HtmlDoc.java  |  77 +++++++++---
 .../juneau/rest/annotation/RestResource.java    |  31 +++--
 .../rest/jena/RestServletJenaDefault.java       |   5 +-
 .../java/org/apache/juneau/rest/package.html    |  27 +++-
 .../juneau/rest/widget/ContentTypeMenuItem.java |   9 +-
 .../juneau/rest/widget/QueryMenuItem.java       |  11 +-
 .../juneau/rest/widget/StyleMenuItem.java       |   9 +-
 .../org/apache/juneau/rest/widget/Widget.java   |   8 +-
 .../org/apache/juneau/rest/styles/devops.css    |  10 +-
 .../org/apache/juneau/rest/styles/light.css     |  22 ++--
 .../juneau/rest/widget/MenuItemWidget.css       |   2 +-
 .../apache/juneau/rest/widget/MenuItemWidget.js |   3 +-
 .../apache/juneau/rest/widget/QueryMenuItem.css |  36 +++---
 .../juneau/rest/widget/QueryMenuItem.html       |   3 +-
 54 files changed, 771 insertions(+), 387 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-core/src/main/java/org/apache/juneau/ObjectMap.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/ObjectMap.java b/juneau-core/src/main/java/org/apache/juneau/ObjectMap.java
index 5897e4c..dad67b0 100644
--- a/juneau-core/src/main/java/org/apache/juneau/ObjectMap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/ObjectMap.java
@@ -654,9 +654,15 @@ public class ObjectMap extends LinkedHashMap<String,Object> {
 		Object s = get(Object.class, key);
 		if (s == null)
 			return def;
+		String[] r = null;
 		if (s instanceof Collection)
-			return ArrayUtils.toStringArray((Collection<?>)s);
-		String[] r = split(StringUtils.toString(s));
+			r = ArrayUtils.toStringArray((Collection<?>)s);
+		else if (s instanceof String[])
+			r = (String[])s;
+		else if (s instanceof Object[])
+			r = ArrayUtils.toStringArray(Arrays.asList((Object[])s));
+		else
+			r = split(StringUtils.toString(s));
 		return (r.length == 0 ? def : r);
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/package.html
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/package.html b/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/package.html
index 464b388..a70f4ff 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/package.html
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/package.html
@@ -423,7 +423,9 @@
 		messages=<js>"nls/JsonSchemaResource"</js>,
 		title=<js>"Sample JSON-Schema document"</js>,
 		htmldoc=<ja>@HtmlDoc</ja>(
-			links=<js>"{options:'?method=OPTIONS'}"</js>
+			links={
+				<js>"options: ?method=OPTIONS"</js>
+			}
 		)
 	)
 	<jk>public class</jk> JsonSchemaResource <jk>extends</jk> RestServletJenaDefault {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerContext.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerContext.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerContext.java
index 0fba6e3..daa225a 100644
--- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerContext.java
@@ -12,8 +12,6 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.html;
 
-import java.util.*;
-
 import org.apache.juneau.*;
 
 /**
@@ -44,7 +42,10 @@ import org.apache.juneau.*;
  * 		htmldoc=<ja>@HtmlDoc</ja>(
  * 			title=<js>"$L{title}"</js>,
  * 			description=<js>"$L{description}"</js>,
- * 			links=<js>"{options:'?method=OPTIONS',doc:'doc'}"</js>
+ * 			links={
+ * 				<js>"options: ?method=OPTIONS"</js>,
+ * 				<js>"doc: doc"</js>
+ * 			}
  * 		)
  * 	)
  * </p>
@@ -235,7 +236,9 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(
 	 * 		htmldoc=<ja>@HtmlDoc</ja>(
-	 * 			nav=<js>"&lt;p class='special-navigation'&gt;This is my special navigation content&lt;/p&gt;"</js>
+	 * 			header={
+	 * 				<js>"&lt;h1&gt;My own header&lt;/h1&gt;"</js>
+	 * 			}
 	 * 		)
 	 * 	)
 	 * </p>
@@ -253,9 +256,9 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 	 * <b>Configuration property:</b>  Page links.
 	 *
 	 * <ul>
-	 * 	<li><b>Name:</b> <js>"HtmlDocSerializer.links.map"</js>
-	 * 	<li><b>Data type:</b> <code>Map&lt;String,String&gt;</code>
-	 * 	<li><b>Default:</b> empty map
+	 * 	<li><b>Name:</b> <js>"HtmlDocSerializer.links.list"</js>
+	 * 	<li><b>Data type:</b> <code>String[]</code>
+	 * 	<li><b>Default:</b> empty array
 	 * 	<li><b>Session-overridable:</b> <jk>true</jk>
 	 * </ul>
 	 *
@@ -266,7 +269,12 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 	 * This can be used to provide convenient hyperlinks when viewing the REST interface from a browser.
 	 *
 	 * <p>
-	 * The value is a JSON object string where the keys are anchor text and the values are URLs.
+	 * The value is an array of strings with two possible values:
+	 * <ul>
+	 * 	<li>A key-value pair representing a hyperlink label and href:
+	 * 		<br><js>"google: http://google.com"</js>
+	 * 	<li>Arbitrary HTML.
+	 * </ul>
 	 *
 	 * <p>
 	 * Relative URLs are considered relative to the servlet path.
@@ -283,7 +291,7 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 	 * 	<ja>@RestResource</ja>(
 	 * 		properties={
 	 * 			<ja>@Property</ja>(name=HtmlDocSerializerContext.<jsf>HTMLDOC_links</jsf>,
-	 * 				value=<js>"{options:'?method=OPTIONS',doc:'doc'}"</js>)
+	 * 				value=<js>"['options: ?method=OPTIONS', 'doc: doc']"</js>)
 	 * 		}
 	 * 	)
 	 * 	<jk>public class</jk> AddressBookResource <jk>extends</jk> RestServletJenaDefault {
@@ -298,21 +306,21 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(
 	 * 		htmldoc=@HtmlDoc(
-	 * 			links=<js>"{options:'?method=OPTIONS',doc:'doc'}"</js>
+	 * 			links={
+	 * 				<js>"options: ?method=OPTIONS"</js>,
+	 * 				<js>"doc: doc"</js>
+	 * 			}
 	 * 		)
 	 * 	)
 	 * 	<jk>public class</jk> AddressBookResource <jk>extends</jk> RestServletJenaDefault {
 	 * </p>
-	 *
-	 * <p>
-	 * Values that start with <js>'&lt;'</js> are assumed to be HTML and rendered as-is.
 	 */
-	public static final String HTMLDOC_links = "HtmlDocSerializer.links.map";
+	public static final String HTMLDOC_links = "HtmlDocSerializer.links.list";
 
 	/**
 	 * <b>Configuration property:</b>  Add to the {@link #HTMLDOC_links} property.
 	 */
-	public static final String HTMLDOC_links_put = "HtmlDocSerializer.links.map.put";
+	public static final String HTMLDOC_links_add = "HtmlDocSerializer.links.list.add";
 
 	/**
 	 * <b>Configuration property:</b>  Nav section contents.
@@ -332,7 +340,9 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(
 	 * 		htmldoc=<ja>@HtmlDoc</ja>(
-	 * 			nav=<js>"&lt;p class='special-navigation'&gt;This is my special navigation content&lt;/p&gt;"</js>
+	 * 			nav={
+	 * 				<js>"&lt;p class='special-navigation'&gt;This is my special navigation content&lt;/p&gt;"</js>
+	 * 			}
 	 * 		)
 	 * 	)
 	 * </p>
@@ -367,7 +377,13 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(
 	 * 		htmldoc=<ja>@HtmlDoc</ja>(
-	 * 			aside=<js>"&lt;ul&gt;&lt;li&gt;Item 1&lt;li&gt;Item 2&lt;li&gt;Item 3&lt;/ul&gt;"</js>
+	 * 			aside={
+	 * 				<js>"&lt;ul&gt;"</js>,
+	 * 				<js>"	&lt;li&gt;Item 1"</js>,
+	 * 				<js>"	&lt;li&gt;Item 2"</js>,
+	 * 				<js>"	&lt;li&gt;Item 3"</js>,
+	 * 				<js>"&lt;/ul&gt;"</js>
+	 * 			}
 	 * 		)
 	 * 	)
 	 * </p>
@@ -397,7 +413,9 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(
 	 * 		htmldoc=<ja>@HtmlDoc</ja>(
-	 * 			footer=<js>"&lt;b&gt;This interface is great!&lt;/b&gt;"</js>
+	 * 			footer={
+	 * 				<js>"&lt;b&gt;This interface is great!&lt;/b&gt;"</js>
+	 * 			}
 	 * 		)
 	 * 	)
 	 * </p>
@@ -503,7 +521,10 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(
 	 * 		htmldoc=@HtmlDoc(
-	 * 			style=<js>"h3 { color: red; }\nh5 { font-weight: bold; }"</js>
+	 * 			style={
+	 * 				<js>"h3 { color: red; }"</js>,
+	 * 				<js>"h5 { font-weight: bold; }"</js>
+	 * 			}
 	 * 		)
 	 * 	)
 	 * </p>
@@ -543,7 +564,9 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(
 	 * 		htmldoc=@HtmlDoc(
-	 * 			script=<js>"alert('hello!');"</js>
+	 * 			script={
+	 * 				<js>"alert('hello!');"</js>
+	 * 			}
 	 * 		)
 	 * 	)
 	 * </p>
@@ -584,8 +607,7 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 	public static final String HTMLDOC_template = "HtmlDocSerializer.template";
 
 
-	final String[] style, stylesheet, script;
-	final Map<String,Object> links;
+	final String[] style, stylesheet, script, links;
 	final String title, description, branding, header, nav, aside, footer, noResultsMessage;
 	final boolean nowrap;
 	final HtmlDocTemplate template;
@@ -611,7 +633,7 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 		aside = ps.getProperty(HTMLDOC_aside, String.class, null);
 		footer = ps.getProperty(HTMLDOC_footer, String.class, null);
 		nowrap = ps.getProperty(HTMLDOC_nowrap, boolean.class, false);
-		links = ps.getMap(HTMLDOC_links, String.class, Object.class, null);
+		links = ps.getProperty(HTMLDOC_links, String[].class, new String[0]);
 		noResultsMessage = ps.getProperty(HTMLDOC_noResultsMessage, String.class, "<p>no results</p>");
 		template = ps.getTypedProperty(HTMLDOC_template, HtmlDocTemplate.class, HtmlDocTemplateBasic.class);
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
index 66dbe25..a7f3050 100644
--- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
+++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
@@ -35,8 +35,7 @@ import org.apache.juneau.serializer.*;
 public final class HtmlDocSerializerSession extends HtmlSerializerSession {
 
 	private final String title, description, branding, header, nav, aside, footer, noResultsMessage;
-	private final String[] style, stylesheet, script;
-	private final Map<String,Object> links;
+	private final String[] style, stylesheet, script, links;
 	private final boolean nowrap;
 	private final HtmlDocTemplate template;
 
@@ -64,7 +63,6 @@ public final class HtmlDocSerializerSession extends HtmlSerializerSession {
 	 * 	The URI context.
 	 * 	Identifies the current request URI used for resolution of URIs to absolute or root-relative form.
 	 */
-	@SuppressWarnings({ "unchecked", "rawtypes" })
 	protected HtmlDocSerializerSession(HtmlDocSerializerContext ctx, ObjectMap op, Object output, Method javaMethod,
 			Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) {
 		super(ctx, op, output, javaMethod, locale, timeZone, mediaType, uriContext);
@@ -91,8 +89,7 @@ public final class HtmlDocSerializerSession extends HtmlSerializerSession {
 			nav = op.getString(HTMLDOC_nav, ctx.nav);
 			aside = op.getString(HTMLDOC_aside, ctx.aside);
 			footer = op.getString(HTMLDOC_footer, ctx.footer);
-			Map m = op.getMap(HTMLDOC_links, ctx.links);
-			links = ObjectUtils.isEmpty(m) ? null : new LinkedHashMap(m);
+			links = op.getStringArray(HTMLDOC_links, ctx.links);
 			style = op.getStringArray(HTMLDOC_style, ctx.style);
 			stylesheet = op.getStringArray(HTMLDOC_stylesheet, ctx.stylesheet);
 			script = op.getStringArray(HTMLDOC_script, ctx.script);
@@ -202,7 +199,7 @@ public final class HtmlDocSerializerSession extends HtmlSerializerSession {
 	 *		<jk>null</jk> if not specified.
 	 *		Never an empty map.
 	 */
-	public final Map<String,Object> getLinks() {
+	public final String[] getLinks() {
 		return links;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java
index 616e5d8..b287458 100644
--- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java
+++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java
@@ -12,8 +12,6 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.html;
 
-import java.util.Map;
-
 import org.apache.juneau.internal.*;
 
 /**
@@ -27,14 +25,14 @@ public class HtmlDocTemplateBasic implements HtmlDocTemplate {
 	@Override /* HtmlDocTemplate */
 	public void head(HtmlDocSerializerSession session, HtmlWriter w, HtmlDocSerializer s, Object o) throws Exception {
 		if (hasStyle(session)) {
-			w.sTag(1, "style").nl(1);
+			w.sTag(2, "style").nl(2);
 			style(session, w, s, o);
-			w.ie(1).eTag("style").nl(1);
+			w.ie(2).eTag("style").nl(2);
 		}
 		if (hasScript(session)) {
-			w.sTag(1, "script").nl(1);
+			w.sTag(2, "script").nl(2);
 			script(session, w, s, o);
-			w.ie(1).eTag("script").nl(1);
+			w.ie(2).eTag("script").nl(2);
 		}
 	}
 
@@ -44,14 +42,14 @@ public class HtmlDocTemplateBasic implements HtmlDocTemplate {
 		String[] stylesheet = session.getStylesheet();
 		if (! ArrayUtils.contains("NONE", stylesheet))
 			for (String ss : stylesheet)
-				w.append(2, "@import ").q().append(session.resolveUri(ss)).q().appendln("; ");
+				w.append(3, "@import ").q().append(session.resolveUri(ss)).q().appendln("; ");
 
 		if (session.isNoWrap())
-			w.appendln("div.data * {white-space:nowrap;} ");
+			w.appendln(3, "div.data * {white-space:nowrap;} ");
 
 		if (session.getStyle() != null)
 			for (String style : session.getStyle())
-				w.append(style).appendln(" ");
+				w.append(3, style).appendln(" ");
 	}
 
 	@Override /* HtmlDocTemplate */
@@ -59,42 +57,42 @@ public class HtmlDocTemplateBasic implements HtmlDocTemplate {
 
 		if (session.getScript() != null)
 			for (String script : session.getScript())
-				w.append(script);
+				w.append(3, script);
 	}
 
 	@Override /* HtmlDocTemplate */
 	public void body(HtmlDocSerializerSession session, HtmlWriter w, HtmlDocSerializer s, Object o) throws Exception {
 
 		if (hasHeader(session)) {
-			w.sTag(1, "header").nl(1);
+			w.sTag(2, "header").nl(2);
 			header(session, w, s, o);
-			w.ie(1).eTag("header").nl(1);
+			w.ie(2).eTag("header").nl(2);
 		}
 
 		if (hasNav(session)) {
-			w.sTag(1, "nav").nl(1);
+			w.sTag(2, "nav").nl(2);
 			nav(session, w, s, o);
-			w.ie(1).eTag("nav").nl(1);
+			w.ie(2).eTag("nav").nl(2);
 		}
 
-		w.sTag(1, "section").nl(1);
+		w.sTag(2, "section").nl(2);
 
-		w.sTag(2, "article").nl(2);
+		w.sTag(3, "article").nl(3);
 		article(session, w, s, o);
-		w.ie(2).eTag("article").nl(2);
+		w.ie(3).eTag("article").nl(3);
 
 		if (hasAside(session)) {
-			w.sTag(2, "aside").nl(2);
+			w.sTag(3, "aside").nl(3);
 			aside(session, w, s, o);
-			w.ie(2).eTag("aside").nl(2);
+			w.ie(3).eTag("aside").nl(3);
 		}
 
-		w.ie(1).eTag("section").nl(1);
+		w.ie(2).eTag("section").nl(2);
 
 		if (hasFooter(session)) {
-			w.sTag(1, "footer").nl(1);
+			w.sTag(2, "footer").nl(2);
 			footer(session, w, s, o);
-			w.ie(1).eTag("footer").nl(1);
+			w.ie(2).eTag("footer").nl(2);
 		}
 	}
 
@@ -104,7 +102,7 @@ public class HtmlDocTemplateBasic implements HtmlDocTemplate {
 		String header = session.getHeader();
 		if (header != null) {
 			if (exists(header))
-				w.append(2, header).nl(2);
+				w.append(3, header).nl(3);
 		} else {
 			String title = session.getTitle();
 			String description = session.getDescription();
@@ -124,21 +122,28 @@ public class HtmlDocTemplateBasic implements HtmlDocTemplate {
 		String nav = session.getNav();
 		if (nav != null) {
 			if (exists(nav))
-				w.append(2, nav).nl(2);
+				w.append(3, nav).nl(3);
 		} else {
-			Map<String,Object> htmlLinks = session.getLinks();
-			if (htmlLinks != null) {
-				w.sTag("ol");
-				for (Map.Entry<String,Object> e : htmlLinks.entrySet()) {
-					w.sTag("li");
-					String v = e.getValue().toString();
-					if (v.startsWith("<"))
-						w.append(v);
-					else
-						w.oTag("a").attr("href", session.resolveUri(v), true).cTag().text(e.getKey(), true).eTag("a");
-					w.eTag("li");
+			String[] links = session.getLinks();
+			if (links.length > 0) {
+				w.sTag(3, "ol").nl(3);
+				for (String l : links) {
+					w.sTag(4, "li");
+					if (l.matches("(?s)\\S+\\:.*")) {
+						int i = l.indexOf(':');
+						String key = l.substring(0, i);
+						String val = l.substring(i+1).trim();
+						if (val.startsWith("<"))
+							w.nl(4).appendln(5, val);
+						else
+							w.oTag("a").attr("href", session.resolveUri(val), true).cTag().text(key, true).eTag("a");
+						w.eTag("li").nl(4);
+					} else {
+						w.nl(4).appendln(5, l);
+						w.eTag(4, "li").nl(4);
+					}
 				}
-				w.eTag("ol");
+				w.eTag(3, "ol").nl(3);
 			}
 		}
 	}
@@ -147,35 +152,36 @@ public class HtmlDocTemplateBasic implements HtmlDocTemplate {
 	public void aside(HtmlDocSerializerSession session, HtmlWriter w, HtmlDocSerializer s, Object o) throws Exception {
 		String aside = session.getAside();
 		if (exists(aside))
-			w.append(aside);
+			w.append(4, aside);
 	}
 
 	@Override /* HtmlDocTemplate */
 	public void article(HtmlDocSerializerSession session, HtmlWriter w, HtmlDocSerializer s, Object o) throws Exception {
 		// To allow for page formatting using CSS, we encapsulate the data inside two div tags:
 		// <div class='outerdata'><div class='data' id='data'>...</div></div>
-		w.oTag(3, "div").attr("class","outerdata").append('>').nl(3);
-		w.oTag(4, "div").attr("class","data").attr("id", "data").append('>').nl(4);
+		w.oTag(4, "div").attr("class","outerdata").append('>').nl(4);
+		w.oTag(5, "div").attr("class","data").attr("id", "data").append('>').nl(5);
 
 		if (o == null) {
-			w.append(5, "<null/>").nl(5);
+			w.append(6, "<null/>").nl(6);
 		} else if (ObjectUtils.isEmpty(o)){
 			String m = session.getNoResultsMessage();
 			if (exists(m))
-				w.append(5, m).nl(5);
+				w.append(6, m).nl(6);
 		} else {
+			session.indent = 6;
 			s.parentSerialize(session, o);
 		}
 
+		w.ie(5).eTag("div").nl(5);
 		w.ie(4).eTag("div").nl(4);
-		w.ie(4).eTag("div").nl(3);
 	}
 
 	@Override /* HtmlDocTemplate */
 	public void footer(HtmlDocSerializerSession session, HtmlWriter w, HtmlDocSerializer s, Object o) throws Exception {
 		String footer = session.getFooter();
 		if (exists(footer))
-			w.append(footer);
+			w.append(3, footer).nl(3);
 	}
 
 	@Override /* HtmlDocTemplate */
@@ -195,7 +201,7 @@ public class HtmlDocTemplateBasic implements HtmlDocTemplate {
 
 	@Override /* HtmlDocTemplate */
 	public boolean hasNav(HtmlDocSerializerSession session) {
-		return exists(session.getNav()) || session.getLinks() != null;
+		return exists(session.getNav()) || session.getLinks().length > 0;
 	}
 
 	@Override /* HtmlDocTemplate */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializer.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializer.java
index a6046bf..0bacd20 100644
--- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializer.java
@@ -298,8 +298,12 @@ public class HtmlSerializer extends XmlSerializer {
 
 			if (render != null) {
 				Object o2 = render.getContent(session, o);
-				if (o2 != o)
-					return serializeAnything(session, out, o2, null, typeName, 2, null, false);
+				if (o2 != o) {
+					session.indent -= indent;
+					session.pop();
+					out.nl(session.indent);
+					return serializeAnything(session, out, o2, null, typeName, indent, null, false);
+				}
 			}
 
 			if (html.isAsXml() || (pMeta != null && pMeta.getExtendedMeta(HtmlBeanPropertyMeta.class).isAsXml())) {
@@ -597,7 +601,7 @@ public class HtmlSerializer extends XmlSerializer {
 							out.attr("style", style);
 						out.cTag();
 						if (link != null)
-							out.oTag(i+3, "a").attrUri("href", m2.resolveVars(link)).cTag();
+							out.oTag("a").attrUri("href", m2.resolveVars(link)).cTag();
 						ContentResult cr = serializeAnything(session, out, value, pMeta.getClassMeta(), p.getKey().toString(), 2, pMeta, false);
 						if (cr == CR_NORMAL)
 							out.i(i+2);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerWriter.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerWriter.java b/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerWriter.java
index ee4f882..41e76d7 100644
--- a/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerWriter.java
+++ b/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerWriter.java
@@ -14,6 +14,7 @@ package org.apache.juneau.serializer;
 
 import java.io.*;
 import java.net.*;
+import java.util.*;
 
 import org.apache.juneau.*;
 
@@ -160,8 +161,18 @@ public class SerializerWriter extends Writer {
 	 * @return This object (for method chaining).
 	 */
 	private SerializerWriter append(int indent, boolean newline, String text) throws IOException {
-		i(indent);
-		out.write(text);
+		
+		// If text contains newlines, we break it up into lines and indent them separately.
+		if (text.indexOf('\n') != -1 && useWhitespace && indent <= maxIndent) {
+			for (StringTokenizer st = new StringTokenizer(text, "\n"); st.hasMoreTokens();) {
+				i(indent);
+				out.write(st.nextToken());
+				out.write("\n");
+			}
+		} else {
+			i(indent);
+			out.write(text);
+		}
 		if (newline)
 			nl(indent);
 		return this;

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java b/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
index aa5f6fa..14cb23b 100644
--- a/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
@@ -70,6 +70,7 @@ public final class SoapXmlSerializer extends XmlSerializer {
 			.attr("xmlns", "soap", s.getProperty(SOAPXML_SOAPAction, "http://www.w3.org/2003/05/soap-envelope"))
 			.appendln(">");
 		w.sTag(1, "soap", "Body").nl(1);
+		s.indent += 2;
 		super.doSerialize(s, o);
 		w.ie(1).eTag("soap", "Body").nl(1);
 		w.eTag("soap", "Envelope").nl(0);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-core/src/main/javadoc/overview.html
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/javadoc/overview.html b/juneau-core/src/main/javadoc/overview.html
index 4abc48a..5e65ea2 100644
--- a/juneau-core/src/main/javadoc/overview.html
+++ b/juneau-core/src/main/javadoc/overview.html
@@ -2478,7 +2478,10 @@
 		// "request:/..." URIs are relative to the request URI.
 		// "servlet:/..." URIs are relative to the servlet URI.</jc>
 		htmldoc=<ja>@HtmlDoc</ja>(
-			links=<js>"{up:'request:/..',options:'servlet:/?method=OPTIONS'}"</js>
+			links={
+				<js>"up: request:/.."</js>,
+				<js>"options: servlet:/?method=OPTIONS"</js>
+			}
 		),
 		
 		<jc>// Properties that get applied to all serializers and parsers.</jc>
@@ -3429,7 +3432,9 @@
 		path=<js>"/"</js>,
 		messages=<js>"nls/RootResources"</js>,
 		htmldoc=<ja>@HtmlDoc</ja>(
-			links=<js>"{options:'?method=OPTIONS'}"</js>
+			links={
+				<js>"options: ?method=OPTIONS"</js>
+			}
 		),
 		children={
 			HelloWorldResource.<jk>class</jk>, 
@@ -3535,7 +3540,10 @@
 		messages=<js>"nls/HelloWorldResource"</js>, 
 		path=<js>"/helloWorld"</js>, 
 		htmldoc=<ja>@HtmlDoc</ja>(
-			links=<js>"{up:'request:/..',options:'servlet:/?method=OPTIONS'}"</js>
+			links={
+				<js>"up: request:/.."</js>,
+				<js>"options: servlet:/?method=OPTIONS"</js>
+			}
 		)
 	) 
 	<jk>public class</jk> HelloWorldResource <jk>extends</jk> Resource { 
@@ -3625,7 +3633,10 @@
 		path=<js>"/methodExample"</js>, 
 		messages=<js>"nls/MethodExampleResource"</js>, 
 		htmldoc=<ja>@HtmlDoc</ja>(
-			links=<js>"{up:'request:/..',options:'servlet:/?method=OPTIONS'}"</js>
+			links={
+				<js>"up: request:/.."</js>,
+				<js>"options: servlet:/?method=OPTIONS"</js>
+			}
 		)
 	) 
 	<jk>public class</jk> MethodExampleResource <jk>extends</jk> Resource { 
@@ -3854,7 +3865,9 @@
 		<p class='bcode'>
 	<ja>@RestResource</ja>(
 		htmldoc=<ja>@HtmlDoc</ja>(
-			links=<js>"{options:'?method=OPTIONS'}"</js>
+			links={
+				<js>"options: servlet:/?method=OPTIONS"</js>
+			}
 		)
 	)
 		</p>
@@ -4140,7 +4153,10 @@
 		path=<js>"/echo"</js>,
 		messages=<js>"nls/RequestEchoResource"</js>,
 		htmldoc=<ja>@HtmlDoc</ja>(
-			links=<js>"{up:'request:/..',options:'servlet:/?method=OPTIONS'}"</js>,
+			links={
+				<js>"up: request:/.."</js>,
+				<js>"options: servlet:/?method=OPTIONS"</js>
+			}
 		),
 		properties={
 			<ja>@Property</ja>(name=<jsf>SERIALIZER_maxDepth</jsf>, value=<js>"10"</js>),
@@ -4664,8 +4680,11 @@
 		// "servlet:/..." URIs are relative to the servlet URI.
 		// "$C{...}" variables are pulled from the config file.</jc>
 		htmldoc=<ja>@HtmlDoc</ja>(
-			links=<js>"{up:'request:/..', options:'servlet:/?method=OPTIONS', 
-				source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java'}"</js>
+			links={
+				<js>"up: request:/.."</js>,
+				<js>"options: servlet:/?method=OPTIONS"</js>,
+				<js>"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java"</js>
+			}
 		),
 
 		<jc>// Properties that get applied to all serializers and parsers.</jc>
@@ -5387,7 +5406,10 @@
 		description=<js>"Sample class showing how to use remoteable proxies. The list below are exposed services that 
 			can be retrieved using RestClient.getProxyInterface(Class)."</js>, 
 		htmldoc=<ja>@HtmlDoc</ja>(
-			links=<js>"{up:'request:/..',options:'servlet:/?method=OPTIONS'}"</js>
+			links={
+				<js>"up: request:/.."</js>,
+				<js>"options: servlet:/?method=OPTIONS"</js>
+			}
 		),
 		properties={ 
 			<jc>// Allow us to use method=POST from a browser.</jc> 
@@ -5506,7 +5528,11 @@
 		path=<js>"/tempDir"</js>, 
 		messages=<js>"nls/TempDirResource"</js>, 
 		htmldoc=<ja>@HtmlDoc</ja>(
-			links=<js>"{up:'request:/..', options:'servlet:/?method=OPTIONS', upload:'servlet:/upload'}"</js>
+			links={
+				<js>"up: request:/.."</js>,
+				<js>"options: servlet:/?method=OPTIONS"</js>,
+				<js>"upload: servlet:/upload"</js>
+			}
 		),
 		properties={ 
 			<ja>@Property</ja>(name=<js>"DirectoryResource.rootDir"</js>, value=<js>"$S{java.io.tmpdir}"</js>), 
@@ -5634,7 +5660,10 @@
 		path=<js>"/atom"</js>, 
 		messages=<js>"nls/AtomFeedResource"</js>, 
 		htmldoc=<ja>@HtmlDoc</ja>(
-			links=<js>"{up:'request:/..',options:'servlet:/?method=OPTIONS'}"</js>
+			links={
+				<js>"up: request:/.."</js>,
+				<js>"options: servlet:/?method=OPTIONS"</js>
+			}
 		),
 		properties={ 
 			<ja>@Property</ja>(name=<jsf>SERIALIZER_quoteChar</jsf>, value=<js>"'"</js>), 
@@ -5753,7 +5782,10 @@
 		path=<js>"/docker"</js>, 
 		title=<js>"Sample Docker resource"</js>, 
 		htmldoc=<ja>@HtmlDoc</ja>(
-			links=<js>"{up:'request:/..',options:'servlet:/?method=OPTIONS'}"</js> 
+			links={
+				<js>"up: request:/.."</js>,
+				<js>"options: servlet:/?method=OPTIONS"</js>
+			}
 		)
 	) 
 	<jk>public class</jk> DockerRegistryResource <jk>extends</jk> Resource { 
@@ -5843,7 +5875,10 @@
 		title=<js>"Tumblr parser service"</js>, 
 		description=<js>"Specify a URL to a Tumblr blog and parse the results."</js>, 
 		htmldoc=<ja>@HtmlDoc</ja>(
-			links=<js>"{up:'request:/..',options:'servlet:/?method=OPTIONS'}"</js> 
+			links={
+				<js>"up: request:/.."</js>,
+				<js>"options: servlet:/?method=OPTIONS"</js>
+			}
 		)
 	) 
 	<jk>public class</jk> TumblrParserResource <jk>extends</jk> Resource { 
@@ -5929,7 +5964,9 @@
 		title=<js>"Photo REST service"</js>,
 		description=<js>"Use a tool like Poster to upload and retrieve jpeg and png images."</js>,
 		htmldoc=<ja>@HtmlDoc</ja>(
-			links=<js>"{options:'?method=OPTIONS'}"</js>
+			links={
+				<js>"options: servlet:/?method=OPTIONS"</js>
+			}
 		)
 	)
 	<jk>public class</jk> PhotosResource <jk>extends</jk> RestServletDefault {
@@ -6073,7 +6110,10 @@
 		messages=<js>"nls/JsonSchemaResource"</js>, 
 		title=<js>"Sample JSON-Schema document"</js>, 
 		htmldoc=<ja>@HtmlDoc</ja>(
-			links=<js>"{up:'request:/..',options:'servlet:/?method=OPTIONS'}"</js> 
+			links={
+				<js>"up: request:/.."</js>,
+				<js>"options: servlet:/?method=OPTIONS"</js>
+			}
 		)
 	) 
 	<jk>public class</jk> JsonSchemaResource <jk>extends</jk> ResourceJena { 
@@ -6161,7 +6201,10 @@
 		title=<js>"SQL query service"</js>, 
 		description=<js>"Executes queries against the local derby '$C{SqlQueryResource/connectionUrl}' database"</js>, 
 		htmldoc=<ja>@HtmlDoc</ja>(
-			links=<js>"{up:'request:/..',options:'servlet:/?method=OPTIONS'}"</js> 
+			links={
+				<js>"up: request:/.."</js>,
+				<js>"options: servlet:/?method=OPTIONS"</js>
+			}
 		)
 	) 
 	<jk>public class</jk> SqlQueryResource <jk>extends</jk> Resource { 
@@ -6354,7 +6397,11 @@
 		title=<js>"Configuration"</js>, 
 		description=<js>"Contents of configuration file."</js>, 
 		htmldoc=<ja>@HtmlDoc</ja>(
-			links=<js>"{up:'request:/..', options:'servlet:/?method=OPTIONS', edit:'servlet:/edit'}"</js>
+			links={
+				<js>"up: request:/.."</js>,
+				<js>"options: servlet:/?method=OPTIONS"</js>,
+				<js>"edit: servlet:/edit"</js>
+			}
 		)
 	) 
 	<jk>public class</jk> ConfigResource <jk>extends</jk> Resource { 
@@ -6881,6 +6928,46 @@
 					<li>The nav links are now an ordered list of elements.
 				</ul>
 			<li>
+				Modifications to the following <ja>@HtmlDoc</ja> annotations:
+				<ul>
+					<li>{@link org.apache.juneau.rest.annotation.HtmlDoc#links() links()} - Now an array of strings instead of a JSON object.  Simplified syntax.
+						<br>For example:
+						<p class='bcode'>
+	<jc>// Old syntax</jc>
+	htmldoc=<ja>@HtmlDoc</ja>(
+		links=<js>"{"</js>
+			+ <js>"up:'request:/..',"</js>
+			+ <js>"options:'servlet:/?method=OPTIONS',"</js>
+			+ <js>"contentTypes:'$W{contentTypeMenuItem}',"</js>
+			+ <js>"styles:'$W{styleMenuItem}',"</js>
+			+ <js>"source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/PetStoreResource.java'"</js>
+		+ <js>"}"</js>
+	)
+	
+	<jc>// New syntax</jc>
+	htmldoc=<ja>@HtmlDoc</ja>(
+		links={
+			<js>"up: request:/.."</js>,
+			<js>"options: servlet:/?method=OPTIONS"</js>,
+			<js>"$W{contentTypeMenuItem}"</js>,
+			<js>"$W{styleMenuItem}"</js>,
+			<js>"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/PetStoreResource.java"</js>
+		}
+	)
+						</p>
+						Previous syntax will still work, but you're encouraged to use the simplified syntax.
+					<li>Several annotations are now arrays of strings instead of simple strings.
+						Values are simply concatenated with newlines which makes multi-line values cleaner.
+						<ul>
+							<li>{@link org.apache.juneau.rest.annotation.HtmlDoc#header() header()}
+							<li>{@link org.apache.juneau.rest.annotation.HtmlDoc#nav() nav()}
+							<li>{@link org.apache.juneau.rest.annotation.HtmlDoc#aside() aside()}
+							<li>{@link org.apache.juneau.rest.annotation.HtmlDoc#footer() footer()}
+							<li>{@link org.apache.juneau.rest.annotation.HtmlDoc#script() script()}
+							<li>{@link org.apache.juneau.rest.annotation.HtmlDoc#style() style()}
+						</ul>
+				</ul>
+			<li>
 				Improvements made to the {@link org.apache.juneau.rest.widget.Widget} API.
 				<ul>
 					<li>
@@ -7273,7 +7360,7 @@
 					<li>{@link org.apache.juneau.rest.RestConfig#setHtmlDescription(String) setHtmlDescription(String)}
 					<li>{@link org.apache.juneau.rest.RestConfig#setHtmlBranding(String) setHtmlBranding(String)}
 					<li>{@link org.apache.juneau.rest.RestConfig#setHtmlHeader(String) setHtmlHeader(String)}
-					<li>{@link org.apache.juneau.rest.RestConfig#setHtmlLinks(String) setHtmlLinks(String)}
+					<li><code><del>setHtmlLinks(String)</del></code>
 					<li>{@link org.apache.juneau.rest.RestConfig#setHtmlNav(String) setHtmlNav(String)}
 					<li>{@link org.apache.juneau.rest.RestConfig#setHtmlAside(String) setHtmlAside(String)}
 					<li>{@link org.apache.juneau.rest.RestConfig#setHtmlFooter(String) setHtmlFooter(String)}
@@ -7292,7 +7379,7 @@
 					<li>{@link org.apache.juneau.rest.RestResponse#setHtmlDescription(Object) setHtmlDescription(Object)}
 					<li>{@link org.apache.juneau.rest.RestResponse#setHtmlBranding(Object) setHtmlBranding(Object)}
 					<li>{@link org.apache.juneau.rest.RestResponse#setHtmlHeader(Object) setHtmlHeader(Object)}
-					<li>{@link org.apache.juneau.rest.RestResponse#setHtmlLinks(Object) setHtmlLinks(Object)}
+					<li><code><del>setHtmlLinks(Object)</del></code>
 					<li>{@link org.apache.juneau.rest.RestResponse#setHtmlNav(Object) setHtmlNav(Object)}
 					<li>{@link org.apache.juneau.rest.RestResponse#setHtmlAside(Object) setHtmlAside(Object)}
 					<li>{@link org.apache.juneau.rest.RestResponse#setHtmlFooter(Object) setHtmlFooter(Object)}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/AtomFeedResource.java
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/AtomFeedResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/AtomFeedResource.java
index ca25161..9033b3a 100644
--- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/AtomFeedResource.java
+++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/AtomFeedResource.java
@@ -37,7 +37,13 @@ import org.apache.juneau.rest.widget.*;
 		StyleMenuItem.class
 	},
 	htmldoc=@HtmlDoc(
-		links="{up:'request:/..',options:'servlet:/?method=OPTIONS',contentTypes:'$W{contentTypeMenuItem}',styles:'$W{styleMenuItem}',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/AtomFeedResource.java'}"
+		links={
+			"up: request:/..",
+			"options: servlet:/?method=OPTIONS",
+			"$W{contentTypeMenuItem}",
+			"$W{styleMenuItem}",
+			"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/AtomFeedResource.java"
+		}
 	),
 	properties={
 		@Property(name=SERIALIZER_quoteChar, value="'"),

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/CodeFormatterResource.java
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/CodeFormatterResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/CodeFormatterResource.java
index a409c24..33e895e 100644
--- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/CodeFormatterResource.java
+++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/CodeFormatterResource.java
@@ -29,12 +29,17 @@ import org.apache.juneau.rest.annotation.*;
 	title="Code Formatter",
 	description="Utility for generating HTML code-formatted source code",
 	htmldoc=@HtmlDoc(
-		links="{up:'servlet:/..',options:'servlet:/?method=OPTIONS',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/CodeFormatterResource.java'}",
-		aside=""
-			+ "<div style='min-width:200px' class='text'>"
-			+ "	<p>Utility for adding code syntax tags to Java and XML/HTML code.</p>"
-			+ "	<p>It's by no means perfect, but provides a good starting point.</p>"
-			+ "</div>",
+		links={
+			"up: servlet:/..",
+			"options: servlet:/?method=OPTIONS",
+			"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/CodeFormatterResource.java"
+		},
+		aside={
+			"<div style='min-width:200px' class='text'>",
+			"	<p>Utility for adding code syntax tags to Java and XML/HTML code.</p>",
+			"	<p>It's by no means perfect, but provides a good starting point.</p>",
+			"</div>"
+		},
 		style="aside {display:table-caption;}"
 	)
 )

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java
index 78123f9..779db36 100644
--- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java
+++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java
@@ -41,7 +41,13 @@ import org.apache.juneau.utils.*;
 		StyleMenuItem.class
 	},
 	htmldoc=@HtmlDoc(
-		links="{up:'request:/..',options:'servlet:/?method=OPTIONS',contentTypes:'$W{contentTypeMenuItem}',styles:'$W{styleMenuItem}',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/DirectoryResource.java'}"
+		links={
+			"up: request:/..",
+			"options: servlet:/?method=OPTIONS",
+			"$W{contentTypeMenuItem}",
+			"$W{styleMenuItem}",
+			"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/DirectoryResource.java"
+		}
 	),
 	properties={
 		@Property(name=HTML_uriAnchorText, value=PROPERTY_NAME),

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java
index aac1d8a..4f6e5b5 100644
--- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java
+++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java
@@ -28,12 +28,17 @@ import org.apache.juneau.rest.labels.*;
 	path="/docker",
 	title="Sample Docker resource",
 	htmldoc=@HtmlDoc(
-		links="{up:'request:/..',options:'servlet:/?method=OPTIONS',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/DockerRegistryResource.java'}",
-		aside=""
-			+ "<div style='min-width:200px' class='text'>"
-			+ "	<p>REST API for searching Docker registries.</p>"
-			+ "	<p>To use, you must first specify the Docker registry URL in the <code>[Docker]</code> section of the config file.</p>"
-			+ "</div>"
+		links={
+			"up: request:/..",
+			"options: servlet:/?method=OPTIONS",
+			"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/DockerRegistryResource.java"
+		},
+		aside={
+			"<div style='min-width:200px' class='text'>",
+			"	<p>REST API for searching Docker registries.</p>",
+			"	<p>To use, you must first specify the Docker registry URL in the <code>[Docker]</code> section of the config file.</p>",
+			"</div>"
+		}
 	)
 )
 public class DockerRegistryResource extends Resource {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HelloWorldResource.java
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HelloWorldResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HelloWorldResource.java
index d062eda..38d7916 100644
--- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HelloWorldResource.java
+++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HelloWorldResource.java
@@ -24,12 +24,17 @@ import org.apache.juneau.rest.annotation.*;
 	description="An example of the simplest-possible resource",
 	path="/helloWorld",
 	htmldoc=@HtmlDoc(
-		links="{up:'request:/..',options:'servlet:/?method=OPTIONS',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/HelloWorldResource.java'}",
-		aside=""
-			+ "<div style='max-width:400px' class='text'>"
-			+ "	<p>This page shows a resource that simply response with a 'Hello world!' message</p>"
-			+ "	<p>The POJO serialized is a simple String.</p>"
-			+ "</div>"
+		links={
+			"up: request:/..",
+			"options: servlet:/?method=OPTIONS",
+			"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/HelloWorldResource.java"
+		},
+		aside={
+			"<div style='max-width:400px' class='text'>",
+			"	<p>This page shows a resource that simply response with a 'Hello world!' message</p>",
+			"	<p>The POJO serialized is a simple String.</p>",
+			"</div>"
+		}
 	)
 )
 public class HelloWorldResource extends Resource {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/JsonSchemaResource.java
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/JsonSchemaResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/JsonSchemaResource.java
index 4120e22..6f628c4 100644
--- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/JsonSchemaResource.java
+++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/JsonSchemaResource.java
@@ -30,11 +30,18 @@ import org.apache.juneau.rest.widget.*;
 		StyleMenuItem.class
 	},
 	htmldoc=@HtmlDoc(
-		links="{up:'request:/..',options:'servlet:/?method=OPTIONS',contentTypes:'$W{contentTypeMenuItem}',styles:'$W{styleMenuItem}',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/JsonSchemaResource.java'}",
-		aside=""
-			+ "<div style='min-width:200px' class='text'>"
-			+ "	<p>Shows how to produce JSON-Schema documents in a variety of languages using the JSON-Schema DTOs.</p>"
-			+ "</div>"
+		links={
+			"up: request:/..",
+			"options: servlet:/?method=OPTIONS",
+			"$W{contentTypeMenuItem}",
+			"$W{styleMenuItem}",
+			"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/JsonSchemaResource.java"
+		},
+		aside={
+			"<div style='min-width:200px' class='text'>",
+			"	<p>Shows how to produce JSON-Schema documents in a variety of languages using the JSON-Schema DTOs.</p>",
+			"</div>"
+		}
 	)
 )
 public class JsonSchemaResource extends ResourceJena {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java
index df23b15..0c714dd 100644
--- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java
+++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java
@@ -29,12 +29,17 @@ import org.apache.juneau.utils.*;
 	path="/methodExample",
 	messages="nls/MethodExampleResource",
 	htmldoc=@HtmlDoc(
-		links="{up:'servlet:/..',options:'servlet:/?method=OPTIONS',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/MethodExampleResource.java'}",
-		aside=""
-			+ "<div style='max-width:400px' class='text'>"
-			+ "	<p>Shows the different methods for retrieving HTTP query/form-data parameters, headers, and path variables.</p>"
-			+ "	<p>Each method is functionally equivalent but demonstrate different ways to accomplish the same tasks.</p>"
-			+ "</div>"
+		links={
+			"up: servlet:/..",
+			"options: servlet:/?method=OPTIONS",
+			"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/MethodExampleResource.java"
+		},
+		aside={
+			"<div style='max-width:400px' class='text'>",
+			"	<p>Shows the different methods for retrieving HTTP query/form-data parameters, headers, and path variables.</p>",
+			"	<p>Each method is functionally equivalent but demonstrate different ways to accomplish the same tasks.</p>",
+			"</div>"
+		}
 	)
 )
 public class MethodExampleResource extends Resource {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
index 26b2f03..1be06ba 100644
--- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
+++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
@@ -40,14 +40,21 @@ import org.apache.juneau.transforms.*;
 		StyleMenuItem.class
 	},
 	htmldoc=@HtmlDoc(
-		links="{up:'request:/..',options:'servlet:/?method=OPTIONS',contentTypes:'$W{contentTypeMenuItem}',styles:'$W{styleMenuItem}',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/PetStoreResource.java'}",
-		aside=""
-			+ "<div style='max-width:400px' class='text'>"
-			+ "	<p>This page shows a standard REST resource that renders bean summaries and details.</p>"
-			+ "	<p>It shows how different properties can be rendered on the same bean in different views.</p>"
-			+ "	<p>It also shows examples of HtmlRender classes and @BeanProperty(format) annotations.</p>"
-			+ "	<p>It also shows how the Queryable converter and query widget can be used to create searchable interfaces.</p>"
-			+ "</div>"
+		links={
+			"up: request:/..",
+			"options: servlet:/?method=OPTIONS",
+			"$W{contentTypeMenuItem}",
+			"$W{styleMenuItem}",
+			"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/PetStoreResource.java"
+		},
+		aside={
+			"<div style='max-width:400px' class='text'>",
+			"	<p>This page shows a standard REST resource that renders bean summaries and details.</p>",
+			"	<p>It shows how different properties can be rendered on the same bean in different views.</p>",
+			"	<p>It also shows examples of HtmlRender classes and @BeanProperty(format) annotations.</p>",
+			"	<p>It also shows how the Queryable converter and query widget can be used to create searchable interfaces.</p>",
+			"</div>"
+		}
 	)
 )
 public class PetStoreResource extends ResourceJena {
@@ -81,14 +88,14 @@ public class PetStoreResource extends ResourceJena {
 		
 		// Add our menu items in the nav links.
 		htmldoc=@HtmlDoc(
-			links="{"
-				+ "up:'request:/..',"
-				+ "options:'servlet:/?method=OPTIONS',"
-				+ "query:'$W{queryMenuItem}',"
-				+ "contentTypes:'$W{contentTypeMenuItem}',"
-				+ "styles:'$W{styleMenuItem}',"
-				+ "source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/PetStoreResource.java'"
-			+ "}"
+			links={
+				"up: request:/..",
+				"options: servlet:/?method=OPTIONS",
+				"$W{queryMenuItem}",
+				"$W{contentTypeMenuItem}",
+				"$W{styleMenuItem}",
+				"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/PetStoreResource.java"
+			}
 		)
 	)
 	public Collection<Pet> getPets() {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java
index b56f55b..4309d11 100644
--- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java
+++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java
@@ -40,12 +40,17 @@ import org.apache.juneau.serializer.*;
 	title="Photo REST service",
 	description="Sample resource that allows images to be uploaded and retrieved.",
 	htmldoc=@HtmlDoc(
-		links="{up:'request:/..',options:'servlet:/?method=OPTIONS',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/PhotosResource.java'}",
-		aside=""
-			+ "<div style='max-width:400px;min-width:200px' class='text'>"
-			+ "	<p>Shows an example of using custom serializers and parsers to create REST interfaces over binary resources.</p>"
-			+ "	<p>In this case, our resources are marshalled jpeg and png binary streams and are stored in an in-memory 'database' (also known as a <code>TreeMap</code>).</p>"
-			+ "</div>"
+		links={
+			"up: request:/..",
+			"options: servlet:/?method=OPTIONS",
+			"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/PhotosResource.java"
+		},
+		aside={
+			"<div style='max-width:400px;min-width:200px' class='text'>",
+			"	<p>Shows an example of using custom serializers and parsers to create REST interfaces over binary resources.</p>",
+			"	<p>In this case, our resources are marshalled jpeg and png binary streams and are stored in an in-memory 'database' (also known as a <code>TreeMap</code>).</p>",
+			"</div>"
+		}
 	),
 	properties={
 		// Make the anchor text on URLs be just the path relative to the servlet.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java
index 21e6118..57a30f6 100644
--- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java
+++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java
@@ -37,13 +37,20 @@ import org.apache.juneau.transforms.*;
 		StyleMenuItem.class
 	},
 	htmldoc=@HtmlDoc(
-		links="{up:'request:/..',options:'servlet:/?method=OPTIONS',contentTypes:'$W{contentTypeMenuItem}',styles:'$W{styleMenuItem}',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/RequestEchoResource.java'}",
-		aside=""
-			+ "<div style='max-width:400px;min-width:200px' class='text'>"
-			+ "	<p>Shows how even arbitrary POJOs such as <code>HttpServletRequest</code> can be serialized by the framework.</p>"
-			+ "	<p>Also shows how to specify serializer properties, filters, and swaps at the servlet level to control how POJOs are serialized.</p>"
-			+ "	<p>Also provides an example of how to use the Traversable and Queryable APIs.</p>"
-			+ "</div>"
+		links={
+			"up: request:/..",
+			"options: servlet:/?method=OPTIONS",
+			"$W{contentTypeMenuItem}",
+			"$W{styleMenuItem}",
+			"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/RequestEchoResource.java"
+		},
+		aside={
+			"<div style='max-width:400px;min-width:200px' class='text'>",
+			"	<p>Shows how even arbitrary POJOs such as <code>HttpServletRequest</code> can be serialized by the framework.</p>",
+			"	<p>Also shows how to specify serializer properties, filters, and swaps at the servlet level to control how POJOs are serialized.</p>",
+			"	<p>Also provides an example of how to use the Traversable and Queryable APIs.</p>",
+			"</div>"
+		}
 	),
 	properties={
 		@Property(name=SERIALIZER_maxDepth, value="5"),

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
index 135232f..4944856 100644
--- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
+++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
@@ -31,21 +31,22 @@ import org.apache.juneau.rest.widget.*;
 		StyleMenuItem.class
 	},
 	htmldoc=@HtmlDoc(
-		links="{"
-			+ "options:'?method=OPTIONS',"
-			+ "contentTypes:'$W{contentTypeMenuItem}',"
-			+ "styles:'$W{styleMenuItem}',"
-			+ "source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/RootResources.java'"
-		+ "}",
-		aside=""
-			+ "<div style='max-width:400px' class='text'>"
-			+ "	<p>This is an example of a 'router' page that serves as a jumping-off point to child resources.</p>"
-			+ "	<p>Resources can be nested arbitrarily deep through router pages.</p>"
-			+ "	<p>Note the <span class='link'>options</span> link provided that lets you see the generated swagger doc for this page.</p>"
-			+ "	<p>Also note the <span class='link'>sources</span> link on these pages to view the source code for the page.</p>"
-			+ "	<p>All content on pages in the UI are serialized POJOs.  In this case, it's a serialized array of beans with 2 properties, 'name' and 'description'.</p>"
-			+ "	<p>Other features (such as this aside) are added through annotations.</p>"
-			+ "</div>",
+		links={
+			"options: ?method=OPTIONS",
+			"$W{contentTypeMenuItem}",
+			"$W{styleMenuItem}",
+			"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/RootResources.java"
+		},
+		aside={
+			"<div style='max-width:400px' class='text'>",
+			"	<p>This is an example of a 'router' page that serves as a jumping-off point to child resources.</p>",
+			"	<p>Resources can be nested arbitrarily deep through router pages.</p>",
+			"	<p>Note the <span class='link'>options</span> link provided that lets you see the generated swagger doc for this page.</p>",
+			"	<p>Also note the <span class='link'>sources</span> link on these pages to view the source code for the page.</p>",
+			"	<p>All content on pages in the UI are serialized POJOs.  In this case, it's a serialized array of beans with 2 properties, 'name' and 'description'.</p>",
+			"	<p>Other features (such as this aside) are added through annotations.</p>",
+			"</div>"
+		},
 		footer="$W{poweredByApache}"
 	),
 	children={

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SampleRemoteableServlet.java
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SampleRemoteableServlet.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SampleRemoteableServlet.java
index e973893..d7de0de 100644
--- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SampleRemoteableServlet.java
+++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SampleRemoteableServlet.java
@@ -30,14 +30,19 @@ import org.apache.juneau.rest.remoteable.*;
 	title="Remoteable Service Proxy API",
 	description="Sample class showing how to use remoteable proxies.",
 	htmldoc=@HtmlDoc(
-		links="{up:'request:/..',options:'servlet:/?method=OPTIONS',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/SampleRemoteableServlet.java'}",
-		aside=""
-			+ "<div style='max-width:400px;min-width:200px' class='text'>"
-			+ "	<p>Shows how to use the <code>RemoteableServlet</code> class to define RPC-style remoteable interfaces using REST as a protocol.</p>"
-			+ "	<p>Remoteable proxies are retrieved on the client side using <code>RestClient.getInterfaceProxy(Class)</code>.</p>"
-			+ "	<p>Methods are invoked using POSTs of serialized arrays of objects and the returned value is marshalled back as a response.</p>"
-			+ "	<p>GET requests (as shown here) show the available methods on the interface.</p>"
-			+ "</div>"
+		links={
+			"up: request:/..",
+			"options: servlet:/?method=OPTIONS",
+			"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/SampleRemoteableServlet.java"
+		},
+		aside={
+			"<div style='max-width:400px;min-width:200px' class='text'>",
+			"	<p>Shows how to use the <code>RemoteableServlet</code> class to define RPC-style remoteable interfaces using REST as a protocol.</p>",
+			"	<p>Remoteable proxies are retrieved on the client side using <code>RestClient.getInterfaceProxy(Class)</code>.</p>",
+			"	<p>Methods are invoked using POSTs of serialized arrays of objects and the returned value is marshalled back as a response.</p>",
+			"	<p>GET requests (as shown here) show the available methods on the interface.</p>",
+			"</div>"
+		}
 	),
 	properties={
 		// Allow us to use method=POST from a browser.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SqlQueryResource.java
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SqlQueryResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SqlQueryResource.java
index 9406e88..1b16716 100644
--- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SqlQueryResource.java
+++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SqlQueryResource.java
@@ -26,6 +26,7 @@ import org.apache.juneau.microservice.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.annotation.Body;
+import org.apache.juneau.rest.widget.*;
 
 /**
  * Sample resource that shows how Juneau can serialize ResultSets.
@@ -35,13 +36,20 @@ import org.apache.juneau.rest.annotation.Body;
 	messages="nls/SqlQueryResource",
 	title="SQL query service",
 	description="Executes queries against the local derby '$C{SqlQueryResource/connectionUrl}' database",
+	widgets={ StyleMenuItem.class },
 	htmldoc=@HtmlDoc(
-		links="{up:'request:/..',options:'servlet:/..',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/SqlQueryResource.java'}",
-		aside=""
-			+ "<div style='min-width:200px' class='text'>"
-			+ "	<p>An example of a REST interface over a relational database.</p>"
-			+ "	<p><a class='link' href='?sql=select+*+from sys.systables'>try me</a></p>"
-			+ "</div>"
+		links={
+			"up: request:/..",
+			"options: servlet:/..",
+			"$W{stylesMenuItem}",
+			"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/SqlQueryResource.java"
+		},
+		aside={
+			"<div style='min-width:200px' class='text'>",
+			"	<p>An example of a REST interface over a relational database.</p>",
+			"	<p><a class='link' href='?sql=select+*+from sys.systables'>try me</a></p>",
+			"</div>"
+		}
 	)
 )
 public class SqlQueryResource extends Resource {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
index 1976de4..3414948 100644
--- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
+++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
@@ -47,23 +47,27 @@ import org.apache.juneau.rest.widget.*;
 	htmldoc=@HtmlDoc(
 		
 		// Custom navigation links.
-		links="{"
-			+ "up:'request:/..',"
-			+ "options:'servlet:/?method=OPTIONS',"
-			+ "form:'servlet:/formPage',"
-			+ "contentTypes:'$W{contentTypeMenuItem}',"
-			+ "styles:'$W{styleMenuItem}',"
-			+ "source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/SystemPropertiesResource.java'"
-			+"}",
+		links={
+			"up: request:/..",
+			"options: servlet:/?method=OPTIONS",
+			"form: servlet:/formPage",
+			"$W{contentTypeMenuItem}",
+			"$W{styleMenuItem}",
+			"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/SystemPropertiesResource.java"
+		},
 
 		// Custom page text in aside section.
-		aside=""
-			+ "<div style='max-width:800px' class='text'>"
-			+ "	<p>Shows standard GET/PUT/POST/DELETE operations and use of Swagger annotations.</p>"
-			+ "</div>",
+		aside={
+			"<div style='max-width:800px' class='text'>",
+			"	<p>Shows standard GET/PUT/POST/DELETE operations and use of Swagger annotations.</p>",
+			"</div>"
+		},
 			
 		// Custom CSS styles applied to HTML view.
-		style="aside {display:table-caption} aside p {margin: 0px 20px;}"
+		style={
+			"aside {display:table-caption} ",
+			"aside p {margin: 0px 20px;}"
+		}
 	),
 		
 	// Properties that get applied to all serializers and parsers.
@@ -204,10 +208,11 @@ public class SystemPropertiesResource extends Resource {
 		description="A form post page for setting a single system property value",
 		guards=AdminGuard.class,
 		htmldoc=@HtmlDoc(
-			aside=""
-				+ "<div style='max-width:400px' class='text'>"
-				+ "	<p>Shows how HTML5 beans can be used to quickly create arbitrary HTML.</p>"
-				+ "</div>",
+			aside={
+				"<div style='max-width:400px' class='text'>",
+				"	<p>Shows how HTML5 beans can be used to quickly create arbitrary HTML.</p>",
+				"</div>"
+			},
 			style="aside {display:table-cell;}"
 		)
 	)

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TempDirResource.java
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TempDirResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TempDirResource.java
index 04732de..8d62db0 100644
--- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TempDirResource.java
+++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TempDirResource.java
@@ -36,12 +36,20 @@ import org.apache.juneau.utils.*;
 		StyleMenuItem.class
 	},
 	htmldoc=@HtmlDoc(
-		links="{up:'request:/..',options:'servlet:/?method=OPTIONS',upload:'servlet:/upload',contentTypes:'$W{contentTypeMenuItem}',styles:'$W{styleMenuItem}',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/TempDirResource.java'}",
-		aside=""
-			+ "<div style='max-width:400px' class='text'>"
-			+ "	<p>Shows how to use the predefined DirectoryResource class.</p>"
-			+ "	<p>Also shows how to use HTML5 beans to create a form entry page.</p>"
-			+ "</div>"
+		links={
+			"up: request:/..",
+			"options: servlet:/?method=OPTIONS",
+			"upload: servlet:/upload",
+			"$W{contentTypeMenuItem}",
+			"$W{styleMenuItem}",
+			"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/TempDirResource.java"
+		},
+		aside={
+			"<div style='max-width:400px' class='text'>",
+			"	<p>Shows how to use the predefined DirectoryResource class.</p>",
+			"	<p>Also shows how to use HTML5 beans to create a form entry page.</p>",
+			"</div>"
+		}
 	),
 	properties={
 		@Property(name="rootDir", value="$S{java.io.tmpdir}"),

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TumblrParserResource.java
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TumblrParserResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TumblrParserResource.java
index ea84e95..20d4ac6 100644
--- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TumblrParserResource.java
+++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TumblrParserResource.java
@@ -25,12 +25,17 @@ import org.apache.juneau.rest.client.*;
 	title="Tumblr parser service",
 	description="Specify a URL to a Tumblr blog and parse the results.",
 	htmldoc=@HtmlDoc(
-		links="{up:'request:/..',options:'servlet:/?method=OPTIONS',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/TumblrParserResource.java'}",
-		aside=""
-			+ "<div style='min-width:200px' class='text'>"
-			+ "	<p>An example of a REST interface that retrieves data from another REST interface.</p>"
-			+ "	<p><a class='link' href='$U{servlet:/ibmblr}'>try me</a></p>"
-			+ "</div>"
+		links={
+			"up: request:/..",
+			"options: servlet:/?method=OPTIONS",
+			"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/TumblrParserResource.java"
+		},
+		aside={
+			"<div style='min-width:200px' class='text'>",
+			"	<p>An example of a REST interface that retrieves data from another REST interface.</p>",
+			"	<p><a class='link' href='$U{servlet:/ibmblr}'>try me</a></p>",
+			"</div>"
+		}
 	)
 )
 public class TumblrParserResource extends Resource {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/UrlEncodedFormResource.java
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/UrlEncodedFormResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/UrlEncodedFormResource.java
index 4a1425e..331196b 100644
--- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/UrlEncodedFormResource.java
+++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/UrlEncodedFormResource.java
@@ -22,6 +22,7 @@ import org.apache.juneau.microservice.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.annotation.Body;
+import org.apache.juneau.rest.widget.*;
 import org.apache.juneau.transforms.*;
 
 /**
@@ -30,32 +31,42 @@ import org.apache.juneau.transforms.*;
 @RestResource(
 	path="/urlEncodedForm",
 	messages="nls/UrlEncodedFormResource",
-	title="Tumblr parser service",
-	description="Specify a URL to a Tumblr blog and parse the results.",
+	title="URL-Encoded form example",
+	widgets={ StyleMenuItem.class },
 	htmldoc=@HtmlDoc(
-		links="{up:'request:/..',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/UrlEncodedFormResource.java'}",
-		aside=""
-			+ "<div style='min-width:200px' class='text'>"
-			+ "	<p>Shows how to process a FORM POST body into a bean using the <code>@Body</code> annotation.</p>"
-			+ "	<p>Submitting the form post will simply echo the bean back on the response.</p>"
-			+ "</div>"
+		links={
+			"up: request:/..",
+			"$W{styleMenuItem}",
+			"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/UrlEncodedFormResource.java"
+		},
+		aside={
+			"<div style='min-width:200px' class='text'>",
+			"	<p>Shows how to process a FORM POST body into a bean using the <code>@Body</code> annotation.</p>",
+			"	<p>Submitting the form post will simply echo the bean back on the response.</p>",
+			"</div>"
+		}
 	)
 )
 public class UrlEncodedFormResource extends Resource {
 	private static final long serialVersionUID = 1L;
 
 	/** GET request handler */
-	@RestMethod(name="GET", path="/")
+	@RestMethod(
+		name="GET", 
+		path="/",
+		htmldoc=@HtmlDoc(
+			script={
+				"// Load results from IFrame into this document.",
+				"function loadResults(buff) {",
+				"	var doc = buff.contentDocument || buff.contentWindow.document;",
+				"	var buffBody = doc.getElementById('data');",
+				"	document.getElementById('results').innerHTML = buffBody.innerHTML;",
+				"}"
+			}
+		)
+	)
 	public Div doGet(RestRequest req) {
 		return div(
-			script("text/javascript",
-				"\n	// Load results from IFrame into this document."
-				+"\n	function loadResults(buff) {"
-				+"\n		var doc = buff.contentDocument || buff.contentWindow.document;"
-				+"\n		var buffBody = doc.getElementById('data');"
-				+"\n		document.getElementById('results').innerHTML = buffBody.innerHTML;"
-				+"\n	}"
-			),
 			form().id("form").action("servlet:/").method("POST").target("buff").children(
 				table(
 					tr(

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java
index d65fe85..9c15644 100644
--- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java
+++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java
@@ -56,17 +56,24 @@ import org.apache.juneau.utils.*;
 	// "servlet:/..." URIs are relative to the servlet URI.
 	// "$C{...}" variables are pulled from the config file.
 	htmldoc=@HtmlDoc(
-		links="{up:'request:/..',options:'servlet:/?method=OPTIONS',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java',contentTypes:'$W{contentTypeMenuItem}',styles:'$W{styleMenuItem}'}",
-			aside=""
-				+ "<div style='max-width:400px;min-width:200px'>"
-				+ "	<p>Proof-of-concept resource that shows off the capabilities of working with POJO resources.</p>"
-				+ "	<p>Provides examples of: </p>"
-				+ "		<ul>"
-				+ "			<li>XML and RDF namespaces"
-				+ "			<li>Swagger documentation"
-				+ "			<li>Widgets"
-				+ "		</ul>"
-				+ "</div>",
+		links={
+			"up: request:/..",
+			"options: servlet:/?method=OPTIONS",
+			"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java",
+			"$W{contentTypeMenuItem}",
+			"$W{styleMenuItem}"
+		},
+		aside={
+			"<div style='max-width:400px;min-width:200px'>",
+			"	<p>Proof-of-concept resource that shows off the capabilities of working with POJO resources.</p>",
+			"	<p>Provides examples of: </p>",
+			"	<ul>",
+			"		<li>XML and RDF namespaces",
+			"		<li>Swagger documentation",
+			"		<li>Widgets",
+			"	</ul>",
+			"</div>"
+		},
 		footer="$W{poweredByJuneau}"
 	),
 
@@ -147,7 +154,14 @@ public class AddressBookResource extends ResourceJena {
 	@RestMethod(name="GET", path="/people/*",
 		converters={Traversable.class,Queryable.class,Introspectable.class},
 		htmldoc=@HtmlDoc(
-			links="{up:'request:/..',options:'servlet:/?method=OPTIONS',query:'$W{queryMenuItem}',contentTypes:'$W{contentTypeMenuItem}',styles:'$W{styleMenuItem}',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java'}"
+			links={
+				"up: request:/..",
+				"options: servlet:/?method=OPTIONS",
+				"$W{queryMenuItem}",
+				"$W{contentTypeMenuItem}",
+				"$W{styleMenuItem}",
+				"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java"
+			}
 		)
 	)
 	public AddressBook getAllPeople() throws Exception {
@@ -174,7 +188,14 @@ public class AddressBookResource extends ResourceJena {
 	@RestMethod(name="GET", path="/addresses/*",
 		converters={Traversable.class,Queryable.class},
 		htmldoc=@HtmlDoc(
-			links="{up:'request:/..',options:'servlet:/?method=OPTIONS',query:'$W{queryMenuItem}',contentTypes:'$W{contentTypeMenuItem}',styles:'$W{styleMenuItem}',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java'}"
+			links={
+				"up: request:/..",
+				"options: servlet:/?method=OPTIONS",
+				"$W{queryMenuItem}",
+				"$W{contentTypeMenuItem}",
+				"$W{styleMenuItem}",
+				"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java"
+			}
 		)
 	)
 	public List<Address> getAllAddresses() throws Exception {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-examples-rest/src/main/resources/org/apache/juneau/examples/rest/PetStore.json
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/src/main/resources/org/apache/juneau/examples/rest/PetStore.json b/juneau-examples-rest/src/main/resources/org/apache/juneau/examples/rest/PetStore.json
index 09abfbd..fe7ba7a 100644
--- a/juneau-examples-rest/src/main/resources/org/apache/juneau/examples/rest/PetStore.json
+++ b/juneau-examples-rest/src/main/resources/org/apache/juneau/examples/rest/PetStore.json
@@ -11,7 +11,11 @@
 // * specific language governing permissions and limitations under the License.                                              *
 // ***************************************************************************************************************************
 {
-	1: {kind:'CAT',name:'Mr. Frisky',price:39.99,breed:'Persian',getsAlongWith:['CAT','FISH','RABBIT'],birthDate:'04 Jul 2012'},
-	2: {kind:'DOG',name:'Kibbles',price:99.99,breed:'Husky',getsAlongWith:['DOG','BIRD','FISH','MOUSE','RABBIT'],birthDate:'01 Sep 2014'},
-	3: {kind:'RABBIT',name:'Hoppy',price:49.99,breed:'Angora',getsAlongWith:['DOG','BIRD','FISH','MOUSE'],birthDate:'16 Apr 2017'}
+	101: {kind:'CAT',name:'Mr. Frisky',price:39.99,breed:'Persian',getsAlongWith:['CAT','FISH','RABBIT'],birthDate:'04 Jul 2012'},
+	102: {kind:'DOG',name:'Kibbles',price:99.99,breed:'Husky',getsAlongWith:['DOG','BIRD','FISH','MOUSE','RABBIT'],birthDate:'01 Sep 2014'},
+	103: {kind:'RABBIT',name:'Hoppy',price:49.99,breed:'Angora',getsAlongWith:['DOG','BIRD','FISH','MOUSE'],birthDate:'16 Apr 2017'},
+	104: {kind:'RABBIT',name:'Hoppy 2',price:49.99,breed:'Angora',getsAlongWith:['DOG','BIRD','FISH','MOUSE'],birthDate:'17 Apr 2017'},
+	105: {kind:'FISH',name:'Gorton',price:1.99,breed:'Gold',getsAlongWith:['FISH'],birthDate:'20 Jun 2017'},
+	106: {kind:'MOUSE',name:'Hackwrench',price:4.99,breed:'Gadget',getsAlongWith:['FISH','MOUSE'],birthDate:'20 Jun 2017'},
+	107: {kind:'SNAKE',name:'Just Snake',price:9.99,breed:'Human',getsAlongWith:['SNAKE'],birthDate:'21 Jun 2017'}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-microservice/src/main/java/org/apache/juneau/microservice/Resource.java
----------------------------------------------------------------------
diff --git a/juneau-microservice/src/main/java/org/apache/juneau/microservice/Resource.java b/juneau-microservice/src/main/java/org/apache/juneau/microservice/Resource.java
index 292eee8..26a524a 100755
--- a/juneau-microservice/src/main/java/org/apache/juneau/microservice/Resource.java
+++ b/juneau-microservice/src/main/java/org/apache/juneau/microservice/Resource.java
@@ -43,7 +43,10 @@ import org.apache.juneau.svl.vars.*;
 @SuppressWarnings("serial")
 @RestResource(
 	htmldoc=@HtmlDoc(
-		links="{up:'request:/..',options:'servlet:/?method=OPTIONS'}",
+		links={
+			"up: request:/..",
+			"options: servlet:/?method=OPTIONS"
+		},
 		stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}"
 	),
 	config="$S{juneau.configFile}"

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceGroup.java
----------------------------------------------------------------------
diff --git a/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceGroup.java b/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceGroup.java
index 5681ec3..234e000 100755
--- a/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceGroup.java
+++ b/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceGroup.java
@@ -44,7 +44,10 @@ import org.apache.juneau.svl.vars.*;
 @SuppressWarnings("serial")
 @RestResource(
 	htmldoc=@HtmlDoc(
-		links="{up:'request:/..',options:'servlet:/?method=OPTIONS'}",
+		links={
+			"up: request:/..",
+			"options: servlet:/?method=OPTIONS"
+		},
 		stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}"
 	),
 	config="$S{juneau.configFile}"

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceJena.java
----------------------------------------------------------------------
diff --git a/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceJena.java b/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceJena.java
index 4a319f1..e297a2a 100755
--- a/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceJena.java
+++ b/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceJena.java
@@ -21,7 +21,10 @@ import org.apache.juneau.rest.jena.*;
 @SuppressWarnings("serial")
 @RestResource(
 	htmldoc=@HtmlDoc(
-		links="{up:'request:/..',options:'servlet:/?method=OPTIONS'}",
+		links={
+			"up: request:/..",
+			"options: servlet:/?method=OPTIONS"
+		},
 		stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}"
 	),
 	config="$S{juneau.configFile}"

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
----------------------------------------------------------------------
diff --git a/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java b/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
index 719a4cd..f697cbc 100644
--- a/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
+++ b/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
@@ -45,7 +45,10 @@ import org.apache.juneau.svl.vars.*;
 @SuppressWarnings("serial")
 @RestResource(
 	htmldoc=@HtmlDoc(
-		links="{up:'request:/..',options:'servlet:/?method=OPTIONS'}",
+		links={
+			"up: request:/..",
+			"options: servlet:/?method=OPTIONS"
+		},
 		stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}"
 	),
 	config="$S{juneau.configFile}"

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java
----------------------------------------------------------------------
diff --git a/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java b/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java
index fd3130e..9f0abb0 100755
--- a/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java
+++ b/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java
@@ -34,7 +34,11 @@ import org.apache.juneau.rest.annotation.Body;
 	title="Configuration",
 	description="Contents of configuration file.",
 	htmldoc=@HtmlDoc(
-		links="{up:'request:/..',options:'servlet:/?method=OPTIONS',edit:'servlet:/edit'}"
+		links={
+			"up: request:/..",
+			"options: servlet:/?method=OPTIONS",
+			"edit: servlet:/edit"
+		}
 	)
 )
 public class ConfigResource extends Resource {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ffda0552/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
----------------------------------------------------------------------
diff --git a/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java b/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
index 5d818bc..ea3dce8 100755
--- a/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
+++ b/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
@@ -64,15 +64,15 @@ import org.apache.juneau.utils.*;
 	description="Contents of $R{attribute.path}",
 	messages="nls/DirectoryResource",
 	htmldoc=@HtmlDoc(
-		links="{up:'request:/..',options:'servlet:/?method=OPTIONS'}"
+		links={
+			"up: request:/..",
+			"options: servlet:/?method=OPTIONS"
+		}
 	),
 	properties={
 		@Property(name=HTML_uriAnchorText, value=PROPERTY_NAME),
 		@Property(name=REST_allowMethodParam, value="*"),
-		@Property(name="DirectoryResource.rootDir", value=""),
-		@Property(name="DirectoryResource.allowViews", value="false"),
-		@Property(name="DirectoryResource.allowDeletes", value="false"),
-		@Property(name="DirectoryResource.allowPuts", value="false")
+		@Property(name="DirectoryResource.rootDir", value="")
 	}
 )
 public class DirectoryResource extends Resource {


Mime
View raw message