You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2017/02/08 01:15:59 UTC

[1/7] incubator-juneau git commit: Exclude .settings files from RAT check.

Repository: incubator-juneau
Updated Branches:
  refs/heads/master 18f14a7d4 -> 30dd3b936


Exclude .settings files from RAT check.

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

Branch: refs/heads/master
Commit: 642f5dd3566f7b400f486fa18a69f1316b3ffb0d
Parents: 18f14a7
Author: JamesBognar <ja...@apache.org>
Authored: Tue Feb 7 16:14:52 2017 -0500
Committer: JamesBognar <ja...@apache.org>
Committed: Tue Feb 7 16:14:52 2017 -0500

----------------------------------------------------------------------
 pom.xml | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/642f5dd3/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 4da6f48..a9d1356 100644
--- a/pom.xml
+++ b/pom.xml
@@ -127,6 +127,7 @@
 						<exclude>**/.idea</exclude>
 						<exclude>**/*.iml</exclude>
 						<exclude>**/*.classpath</exclude>
+						<exclude>**/*.settings</exclude>
 						<exclude>**/*.log.*</exclude>
 						<exclude>**/target/**</exclude>
 						<exclude>DEPENDENCIES</exclude>


[3/7] incubator-juneau git commit: Eliminate ClassMeta dependencies from Parser. Clean up docs.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java
index 748aaca..29a2dfd 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java
@@ -42,12 +42,10 @@ import org.apache.juneau.utils.*;
 /**
  * Represents an HTTP request for a REST resource.
  * <p>
- * 	Equivalent to {@link HttpServletRequest} except with some additional convenience methods.
- * </p>
+ * Equivalent to {@link HttpServletRequest} except with some additional convenience methods.
  * <p>
- * 	For reference, given the URL <js>"http://localhost:9080/contextRoot/servletPath/foo?bar=baz#qux"</js>, the
+ * For reference, given the URL <js>"http://localhost:9080/contextRoot/servletPath/foo?bar=baz#qux"</js>, the
  * 	following methods return the following values....
- * </p>
  * <table class='styled'>
  * 	<tr><th>Method</th><th>Value</th></tr>
  * 	<tr><td>{@code getContextPath()}</td><td>{@code /contextRoot}</td></tr>
@@ -59,8 +57,7 @@ import org.apache.juneau.utils.*;
  * 	<tr><td>{@code getServletPath()}</td><td>{@code /servletPath}</td></tr>
  * </table>
  * <p>
- * 	Refer to <a class='doclink' href='package-summary.html#TOC'>REST Servlet API</a> for information about using this class.
- * </p>
+ * Refer to <a class="doclink" href="package-summary.html#TOC">REST Servlet API</a> for information about using this class.
  */
 @SuppressWarnings("unchecked")
 public final class RestRequest extends HttpServletRequestWrapper {
@@ -171,7 +168,7 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Retrieve the properties active for this request.
 	 * <p>
-	 * 	These properties can be modified by the request.
+	 * These properties can be modified by the request.
 	 *
 	 * @return The properties active for this request.
 	 */
@@ -199,8 +196,7 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns the specified header value, or <jk>null</jk> if the header doesn't exist.
 	 * <p>
-	 * 	If {@code allowHeaderParams} init parameter is <jk>true</jk>, then first looks
-	 * 	for {@code &HeaderName=x} in the URL query string.
+	 * If {@code allowHeaderParams} init parameter is <jk>true</jk>, then first looks for {@code &HeaderName=x} in the URL query string.
 	 */
 	@Override /* ServletRequest */
 	public String getHeader(String name) {
@@ -210,8 +206,7 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns the specified header value, or a default value if the header doesn't exist.
 	 * <p>
-	 * 	If {@code allowHeaderParams} init parameter is <jk>true</jk>, then first looks
-	 * 	for {@code &HeaderName=x} in the URL query string.
+	 * If {@code allowHeaderParams} init parameter is <jk>true</jk>, then first looks for {@code &HeaderName=x} in the URL query string.
 	 *
 	 * @param name The HTTP header name.
 	 * @param def The default value to return if the header value isn't found.
@@ -238,54 +233,74 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns the specified header value converted to a POJO.
 	 * <p>
-	 * 	The type can be any POJO type convertable from a <code>String</code> (See <a class='doclink' href='package-summary.html#PojosConvertableFromString'>POJOs Convertable From Strings</a>).
+	 * The type can be any POJO type convertable from a <code>String</code>
+	 * (See <a class="doclink" href="package-summary.html#PojosConvertableFromString">POJOs Convertable From Strings</a>).
+	 * <p>
+	 * <h5 class='section'>Examples:</h5>
+	 * <p class='bcode'>
+	 * 	<jc>// Parse into an integer.</jc>
+	 * 	<jk>int</jk> myheader = req.getHeader(<js>"My-Header"</js>, <jk>int</jk>.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse a UUID.</jc>
+	 * 	UUID myheader = req.getHeader(<js>"My-Header"</js>, UUID.<jk>class</jk>);
+	 * </p>
 	 *
 	 * @param name The HTTP header name.
-	 * @param c The class type to convert the header value to.
-	 * @param def The default value if the header was not specified or is <jk>null</jk>.
+	 * @param type The class type to convert the header value to.
 	 * @param <T> The class type to convert the header value to.
 	 * @return The parameter value converted to the specified class type.
 	 */
-	public <T> T getHeader(String name, Class<T> c, T def) {
+	public <T> T getHeader(String name, Class<T> type) {
 		String h = getHeader(name);
-		if (h == null)
-			return def;
-		return beanSession.convertToType(h, c);
+		return beanSession.convertToType(h, type);
 	}
 
 	/**
-	 * Returns the specified header value converted to a POJO.
-	 * <p>
-	 * 	The type can be any POJO type convertable from a <code>String</code> (See <a class='doclink' href='package-summary.html#PojosConvertableFromString'>POJOs Convertable From Strings</a>).
+	 * Same as {@link #getHeader(String, Class)} but returns a default value if not found.
 	 *
 	 * @param name The HTTP header name.
-	 * @param c The class type to convert the header value to.
+	 * @param def The default value if the header was not specified or is <jk>null</jk>.
+	 * @param type The class type to convert the header value to.
 	 * @param <T> The class type to convert the header value to.
 	 * @return The parameter value converted to the specified class type.
 	 */
-	public <T> T getHeader(String name, Class<T> c) {
+	public <T> T getHeader(String name, T def, Class<T> type) {
 		String h = getHeader(name);
-		return beanSession.convertToType(h, c);
+		if (h == null)
+			return def;
+		return beanSession.convertToType(h, type);
 	}
 
 	/**
-	 * Same as {@link #getHeader(String, Class)} except works on parameterized
-	 * types such as those returned by {@link Method#getGenericParameterTypes()}
+	 * Returns the specified header value converted to a POJO.
+	 * <p>
+	 * The type can be any POJO type convertable from a <code>String</code>
+	 * (See <a class="doclink" href="package-summary.html#PojosConvertableFromString">POJOs Convertable From Strings</a>).
+	 * <p>
+	 * <h5 class='section'>Examples:</h5>
+	 * <p class='bcode'>
+	 * 	<jc>// Parse into a linked-list of strings.</jc>
+	 * 	List&lt;String&gt; myheader = req.getHeader(<js>"My-Header"</js>, LinkedList.<jk>class</jk>, String.<jk>class</jk>);
+	 * </p>
 	 *
 	 * @param name The HTTP header name.
-	 * @param c The class type to convert the header value to.
+	 * @param type The type of object to create.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * @param args The type arguments of the class if it's a collection or map.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * 	<br>Ignored if the main type is not a map or collection.
 	 * @param <T> The class type to convert the header value to.
 	 * @return The parameter value converted to the specified class type.
 	 */
-	public <T> T getHeader(String name, Type c) {
+	public <T> T getHeader(String name, Type type, Type...args) {
 		String h = getHeader(name);
-		return (T)beanSession.convertToType(null, h, beanSession.getClassMeta(c));
+		return (T)beanSession.convertToType(null, h, beanSession.getClassMeta(type, args));
 	}
 
 	/**
 	 * Returns all the request headers as an {@link ObjectMap}.
 	 * <p>
-	 * 	Altering entries in this map does not alter headers in the underlying request.
+	 * Altering entries in this map does not alter headers in the underlying request.
 	 *
 	 * @return The request headers.  Never <jk>null</jk>.
 	 */
@@ -312,9 +327,9 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	 * Returns the <code>Content-Type</code> header value on the request, stripped
 	 * 	of any parameters such as <js>";charset=X"</js>.
 	 * <p>
-	 * 	Example: <js>"text/json"</js>.
+	 * Example: <js>"text/json"</js>.
 	 * <p>
-	 * 	If the content type is not specified, and the content is specified via a
+	 * If the content type is not specified, and the content is specified via a
 	 * 	<code>&amp;body</code> query parameter, the content type is assumed to be
 	 * 	<js>"text/uon"</js>.  Otherwise, the content type is assumed to be <js>"text/json"</js>.
 	 *
@@ -333,7 +348,7 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns the <code>Time-Zone</code> header value on the request if there is one.
 	 * <p>
-	 * 	Example: <js>"GMT"</js>.
+	 * Example: <js>"GMT"</js>.
 	 *
 	 * @return The <code>Time-Zone</code> header value on the request, or <jk>null</jk> if not present.
 	 */
@@ -362,8 +377,7 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	}
 
 	/**
-	 * Returns the charset specified on the <code>Content-Type</code> header, or
-	 * <js>"UTF-8"</js> if not specified.
+	 * Returns the charset specified on the <code>Content-Type</code> header, or <js>"UTF-8"</js> if not specified.
 	 */
 	@Override /* ServletRequest */
 	public String getCharacterEncoding() {
@@ -430,11 +444,9 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns a query parameter value.
 	 * <p>
-	 * 	Same as {@link #getParameter(String)} except only looks in the URL string,
-	 * 	not parameters from URL-Encoded FORM posts.
+	 * Same as {@link #getParameter(String)} except only looks in the URL string, not parameters from URL-Encoded FORM posts.
 	 * <p>
-	 * This method can be used to retrieve a parameter without triggering the underlying
-	 * 	servlet API to load and parse the request body.
+	 * This method can be used to retrieve a parameter without triggering the underlying servlet API to load and parse the request body.
 	 *
 	 * @param name The URL parameter name.
 	 * @return The parameter value, or <jk>null</jk> if parameter not specified or has no value (e.g. <js>"&amp;foo"</js>.
@@ -459,8 +471,7 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	}
 
 	/**
-	 * Same as {@link #getQueryParameter(String)} but returns the specified default
-	 * 	value if the query parameter was not specified.
+	 * Same as {@link #getQueryParameter(String)} but returns the specified default value if the query parameter was not specified.
 	 *
 	 * @param name The URL parameter name.
 	 * @param def The default value.
@@ -474,75 +485,109 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns the specified query parameter value converted to a POJO.
 	 * <p>
-	 * This method can be used to retrieve a parameter without triggering the underlying
-	 * 	servlet API to load and parse the request body.
+	 * This method can be used to retrieve a parameter without triggering the underlying servlet API to load and parse the request body.
+	 * <p>
+	 * <h5 class='section'>Examples:</h5>
+	 * <p class='bcode'>
+	 * 	<jc>// Parse into an integer.</jc>
+	 * 	<jk>int</jk> myparam = req.getQueryParameter(<js>"myparam"</js>, <jk>int</jk>.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into an int array.</jc>
+	 * 	<jk>int</jk>[] myparam = req.getQueryParameter(<js>"myparam"</js>, <jk>int</jk>[].<jk>class</jk>);
+
+	 * 	<jc>// Parse into a bean.</jc>
+	 * 	MyBean myparam = req.getQueryParameter(<js>"myparam"</js>, MyBean.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a linked-list of objects.</jc>
+	 * 	List myparam = req.getQueryParameter(<js>"myparam"</js>, LinkedList.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a map of object keys/values.</jc>
+	 * 	Map myparam = req.getQueryParameter(<js>"myparam"</js>, TreeMap.<jk>class</jk>);
+	 * </p>
 	 *
 	 * @param name The parameter name.
-	 * @param c The class type to convert the parameter value to.
-	 * @param def The default value if the parameter was not specified or is <jk>null</jk>.
+	 * @param type The class type to convert the parameter value to.
 	 * @param <T> The class type to convert the parameter value to.
 	 * @return The parameter value converted to the specified class type.
 	 * @throws ParseException
 	 */
-	public <T> T getQueryParameter(String name, Class<T> c, T def) throws ParseException {
-		return getQueryParameter(name, beanSession.getClassMeta(c), def);
+	public <T> T getQueryParameter(String name, Class<T> type) throws ParseException {
+		return getQueryParameter(name, beanSession.getClassMeta(type));
 	}
 
 	/**
-	 * Returns the specified query parameter value converted to a POJO.
-	 * <p>
-	 * This method can be used to retrieve a parameter without triggering the underlying
-	 * 	servlet API to load and parse the request body.
+	 * Same as {@link #getQueryParameter(String, Class)} except returns a default value if not found.
 	 *
 	 * @param name The parameter name.
-	 * @param cm The class type to convert the parameter value to.
 	 * @param def The default value if the parameter was not specified or is <jk>null</jk>.
+	 * @param type The class type to convert the parameter value to.
 	 * @param <T> The class type to convert the parameter value to.
 	 * @return The parameter value converted to the specified class type.
 	 * @throws ParseException
 	 */
-	public <T> T getQueryParameter(String name, ClassMeta<T> cm, T def) throws ParseException {
-		String val = getQueryParameter(name);
-		if (val == null)
-			return def;
-		return parseParameter(val, cm);
+	public <T> T getQueryParameter(String name, T def, Class<T> type) throws ParseException {
+		return getQueryParameter(name, def, beanSession.getClassMeta(type));
 	}
 
 	/**
 	 * Returns the specified query parameter value converted to a POJO.
 	 * <p>
-	 * This method can be used to retrieve a parameter without triggering the underlying
-	 * 	servlet API to load and parse the request body.
+	 * This method can be used to retrieve a parameter without triggering the underlying servlet API to load and parse the request body.
+	 * <p>
+	 * Use this method if you want to parse into a parameterized <code>Map</code>/<code>Collection</code> object.
+	 * <p>
+	 * <h5 class='section'>Examples:</h5>
+	 * <p class='bcode'>
+	 * 	<jc>// Parse into a linked-list of strings.</jc>
+	 * 	Listt&lt;String&gt; myparam = req.getQueryParameter(<js>"myparam"</js>, LinkedList.<jk>class</jk>, String.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a linked-list of linked-lists of strings.</jc>
+	 * 	Listt&lt;List&lt;String&gt&gt; myparam = req.getQueryParameter(<js>"myparam"</js>, LinkedList.<jk>class</jk>, LinkedList.<jk>class</jk>, String.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a map of string keys/values.</jc>
+	 * 	Map&lt;String,String&gt; myparam = req.getQueryParameter(<js>"myparam"</js>, TreeMap.<jk>class</jk>, String.<jk>class</jk>, String.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a map containing string keys and values of lists containing beans.</jc>
+	 * 	Map&lt;String,List&lt;MyBean&gt;&gt; myparam = req.getQueryParameter(<js>"myparam"</js>, TreeMap.<jk>class</jk>, String.<jk>class</jk>, List.<jk>class</jk>, MyBean.<jk>class</jk>);
+	 * </p>
 	 *
 	 * @param name The parameter name.
-	 * @param c The class type to convert the parameter value to.
+	 * @param type The type of object to create.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * @param args The type arguments of the class if it's a collection or map.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * 	<br>Ignored if the main type is not a map or collection.
 	 * @param <T> The class type to convert the parameter value to.
 	 * @return The parameter value converted to the specified class type.
 	 * @throws ParseException
 	 */
-	public <T> T getQueryParameter(String name, Class<T> c) throws ParseException {
-		return getQueryParameter(name, beanSession.getClassMeta(c));
+	public <T> T getQueryParameter(String name, Type type, Type...args) throws ParseException {
+		return (T)getQueryParameter(name, beanSession.getClassMeta(type, args));
 	}
 
 	/**
-	 * Same as {@link #getQueryParameter(String, Class)} except for use on multi-part parameters
-	 * 	(e.g. <js>"&amp;key=1&amp;key=2&amp;key=3"</js> instead of <js>"&amp;key=(1,2,3)"</js>).
-	 * <p>
-	 * 	This method must only be called when parsing into classes of type Collection or array.
+	 * Same as {@link #getQueryParameter(String, Class)} except returns a default value if not found.
 	 *
-	 * @param name The query parameter name.
-	 * @param c The class type to convert the parameter value to.
+	 * @param name The parameter name.
+	 * @param type The type of object to create.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * @param args The type arguments of the class if it's a collection or map.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * 	<br>Ignored if the main type is not a map or collection.
+	 * @param def The default value if the parameter was not specified or is <jk>null</jk>.
 	 * @param <T> The class type to convert the parameter value to.
-	 * @return The query parameter value converted to the specified class type.
+	 * @return The parameter value converted to the specified class type.
 	 * @throws ParseException
 	 */
-	public <T> T getQueryParameters(String name, Class<T> c) throws ParseException {
-		return getQueryParameters(name, beanSession.getClassMeta(c));
+	public <T> T getQueryParameter(String name, Object def, Type type, Type...args) throws ParseException {
+		return (T)getQueryParameter(name, def, getBeanSession().getClassMeta(type, args));
 	}
 
 	/**
-	 * Same as {@link #getQueryParameter(String, Class)} except works on parameterized
-	 * types such as those returned by {@link Method#getGenericParameterTypes()}
+	 * Same as {@link #getQueryParameter(String, Class)} except for use on multi-part parameters
+	 * (e.g. <js>"&amp;key=1&amp;key=2&amp;key=3"</js> instead of <js>"&amp;key=(1,2,3)"</js>).
+	 * <p>
+	 * This method must only be called when parsing into classes of type Collection or array.
 	 *
 	 * @param name The query parameter name.
 	 * @param c The class type to convert the parameter value to.
@@ -550,93 +595,36 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	 * @return The query parameter value converted to the specified class type.
 	 * @throws ParseException
 	 */
-	public <T> T getQueryParameter(String name, Type c) throws ParseException {
-		return (T)getQueryParameter(name, beanSession.getClassMeta(c));
+	public <T> T getQueryParameters(String name, Class<T> c) throws ParseException {
+		return getQueryParameters(name, beanSession.getClassMeta(c));
 	}
 
 	/**
-	 * Same as {@link #getQueryParameter(String, Type)} except for use on multi-part parameters
-	 * 	(e.g. <js>"&amp;key=1&amp;key=2&amp;key=3"</js> instead of <js>"&amp;key=(1,2,3)"</js>).
+	 * Same as {@link #getQueryParameter(String, Type, Type...)} except for use on multi-part parameters
+	 * (e.g. <js>"&amp;key=1&amp;key=2&amp;key=3"</js> instead of <js>"&amp;key=(1,2,3)"</js>).
 	 * <p>
-	 * 	This method must only be called when parsing into classes of type Collection or array.
+	 * This method must only be called when parsing into classes of type Collection or array.
 	 *
 	 * @param name The query parameter name.
-	 * @param c The class type to convert the parameter value to.
+	 * @param type The type of object to create.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * @param args The type arguments of the class if it's a collection or map.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * 	<br>Ignored if the main type is not a map or collection.
 	 * @param <T> The class type to convert the parameter value to.
 	 * @return The query parameter value converted to the specified class type.
 	 * @throws ParseException
 	 */
-	public <T> T getQueryParameters(String name, Type c) throws ParseException {
-		return (T)getQueryParameters(name, beanSession.getClassMeta(c));
-	}
-
-	/**
-	 * Returns the specified query parameter value converted to a POJO.
-	 * <p>
-	 * 	This method can be used to retrieve a parameter without triggering the underlying
-	 * 	servlet API to load and parse the request body.
-	 *
-	 * @param name The parameter name.
-	 * @param cm The class type to convert the parameter value to.
-	 * @param <T> The class type to convert the parameter value to.
-	 * @return The parameter value converted to the specified class type.
-	 * @throws ParseException
-	 */
-	public <T> T getQueryParameter(String name, ClassMeta<T> cm) throws ParseException {
-
-		String val = getQueryParameter(name);
-
-		if (cm.isPrimitive() && (val == null || val.isEmpty()))
-			return cm.getPrimitiveDefault();
-		return parseParameter(val, cm);
-	}
-
-	/**
-	 * Same as {@link #getQueryParameter(String, ClassMeta)} except for use on multi-part parameters
-	 * 	(e.g. <js>"&amp;key=1&amp;key=2&amp;key=3"</js> instead of <js>"&amp;key=(1,2,3)"</js>).
-	 * <p>
-	 * 	This method must only be called when parsing into classes of type Collection or array.
-	 *
-	 * @param name The parameter name.
-	 * @param cm The class type to convert the parameter value to.
-	 * @param <T> The class type to convert the parameter value to.
-	 * @return The parameter value converted to the specified class type.
-	 * @throws ParseException
-	 */
-	@SuppressWarnings("rawtypes")
-	public <T> T getQueryParameters(String name, ClassMeta<T> cm) throws ParseException {
-		String[] p = getQueryParameters(name);
-		if (p == null)
-			return null;
-		if (cm.isArray()) {
-			List c = new ArrayList();
-			for (int i = 0; i < p.length; i++)
-				c.add(parseParameter(p[i], cm.getElementType()));
-			return (T)ArrayUtils.toArray(c, cm.getElementType().getInnerClass());
-		} else if (cm.isCollection()) {
-			try {
-				Collection c = (Collection)(cm.canCreateNewInstance() ? cm.newInstance() : new ObjectList());
-				for (int i = 0; i < p.length; i++)
-					c.add(parseParameter(p[i], cm.getElementType()));
-				return (T)c;
-			} catch (ParseException e) {
-				throw e;
-			} catch (Exception e) {
-				// Typically an instantiation exception.
-				throw new ParseException(e);
-			}
-		}
-		throw new ParseException("Invalid call to getQueryParameters(String, ClassMeta).  Class type must be a Collection or array.");
+	public <T> T getQueryParameters(String name, Type type, Type...args) throws ParseException {
+		return (T)getQueryParameters(name, getBeanSession().getClassMeta(type, args));
 	}
 
 	/**
 	 * Returns the list of all query parameters with the specified name.
 	 * <p>
-	 * 	Same as {@link #getParameterValues(String)} except only looks in the URL string,
-	 * 	not parameters from URL-Encoded FORM posts.
+	 * Same as {@link #getParameterValues(String)} except only looks in the URL string, not parameters from URL-Encoded FORM posts.
 	 * <p>
-	 * 	This method can be used to retrieve parameters without triggering the underlying
-	 * 	servlet API to load and parse the request body.
+	 * This method can be used to retrieve parameters without triggering the underlying servlet API to load and parse the request body.
 	 *
 	 * @param name
 	 * @return the list of query parameters, or <jk>null</jk> if the parameter does not exist.
@@ -648,9 +636,9 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns <jk>true</jk> if the query parameters on this request contains the specified entry.
 	 * <p>
-	 * 	Note that this returns <jk>true</jk> even if the value is set to null (e.g. <js>"?key"</js>).
+	 * Note that this returns <jk>true</jk> even if the value is set to null (e.g. <js>"?key"</js>).
 	 * <p>
-	 * 	This method can be used to check the existence of a parameter without triggering the underlying
+	 * This method can be used to check the existence of a parameter without triggering the underlying
 	 * 	servlet API to load and parse the request body.
 	 *
 	 * @param name The URL parameter name.
@@ -676,10 +664,9 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Equivalent to {@link #getParameterMap()}, but only looks for query parameters in the URL, not form posts.
 	 * <p>
-	 * 	This method can be used to retrieve query parameters without triggering the underlying
-	 * 	servlet API to load and parse the request body.
+	 * This method can be used to retrieve query parameters without triggering the underlying servlet API to load and parse the request body.
 	 * <p>
-	 * 	This object is modifiable.
+	 * This object is modifiable.
 	 *
 	 * @return The query parameters as a modifiable map.
 	 */
@@ -690,10 +677,9 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Equivalent to {@link #getParameterNames()}, but only looks for query parameters in the URL, not form posts.
 	 * <p>
-	 * 	This method can be used to retrieve query parameters without triggering the underlying
-	 * 	servlet API to load and parse the request body.
+	 * This method can be used to retrieve query parameters without triggering the underlying servlet API to load and parse the request body.
 	 * <p>
-	 * 	This object is modifiable.
+	 * This object is modifiable.
 	 *
 	 * @return An iterator of query parameter names.
 	 */
@@ -701,6 +687,49 @@ public final class RestRequest extends HttpServletRequestWrapper {
 		return queryParams.keySet().iterator();
 	}
 
+	/* Workhorse method */
+	<T> T getQueryParameter(String name, T def, ClassMeta<T> cm) throws ParseException {
+		String val = getQueryParameter(name);
+		if (val == null)
+			return def;
+		return parseParameter(val, cm);
+	}
+
+	/* Workhorse method */
+	<T> T getQueryParameter(String name, ClassMeta<T> cm) throws ParseException {
+		String val = getQueryParameter(name);
+		if (cm.isPrimitive() && (val == null || val.isEmpty()))
+			return cm.getPrimitiveDefault();
+		return parseParameter(val, cm);
+	}
+
+	/* Workhorse method */
+	@SuppressWarnings("rawtypes")
+	<T> T getQueryParameters(String name, ClassMeta<T> cm) throws ParseException {
+		String[] p = getQueryParameters(name);
+		if (p == null)
+			return null;
+		if (cm.isArray()) {
+			List c = new ArrayList();
+			for (int i = 0; i < p.length; i++)
+				c.add(parseParameter(p[i], cm.getElementType()));
+			return (T)ArrayUtils.toArray(c, cm.getElementType().getInnerClass());
+		} else if (cm.isCollection()) {
+			try {
+				Collection c = (Collection)(cm.canCreateNewInstance() ? cm.newInstance() : new ObjectList());
+				for (int i = 0; i < p.length; i++)
+					c.add(parseParameter(p[i], cm.getElementType()));
+				return (T)c;
+			} catch (ParseException e) {
+				throw e;
+			} catch (Exception e) {
+				// Typically an instantiation exception.
+				throw new ParseException(e);
+			}
+		}
+		throw new ParseException("Invalid call to getQueryParameters(String, ClassMeta).  Class type must be a Collection or array.");
+	}
+
 	//--------------------------------------------------------------------------------
 	// Form data parameters
 	//--------------------------------------------------------------------------------
@@ -720,17 +749,18 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns a form data parameter value.
 	 * <p>
-	 * 	Parameter lookup is case-insensitive (consistent with WAS, but differs from Tomcat).
-	 * <p>
-	 * 	<i>Note:</i> Calling this method on URL-Encoded FORM posts causes the body content to be loaded and parsed by
-	 * 	the underlying servlet API.
+	 * Parameter lookup is case-insensitive (consistent with WAS, but differs from Tomcat).
 	 * <p>
-	 * 	<i>Note:</i> This method returns the raw unparsed value, and differs from calling <code>getFormDataParameter(name, String.<jk>class</js>)</code>
-	 * 	which will convert the value from UON notation:
+	 * <h5 class='section'>Notes:</h5>
 	 * <ul>
-	 * 	<li><js>"\u0000"</js> =&gt; <jk>null</jk>
-	 * 	<li><js>"$s(foo)"</js> =&gt; <js>"foo"</js>
-	 * 	<li><js>"(foo)"</js> =&gt; <js>"foo"</js>
+	 * 	<li>Calling this method on URL-Encoded FORM posts causes the body content to be loaded and parsed by the underlying servlet API.
+	 * 	<li>This method returns the raw unparsed value, and differs from calling <code>getFormDataParameter(name, String.<jk>class</js>)</code>
+	 * 		which will convert the value from UON notation:
+	 * 		<ul>
+	 * 			<li><js>"\u0000"</js> =&gt; <jk>null</jk>
+	 * 			<li><js>"$s(foo)"</js> =&gt; <js>"foo"</js>
+	 * 			<li><js>"(foo)"</js> =&gt; <js>"foo"</js>
+	 * 		</ul>
 	 * </ul>
 	 *
 	 * @param name The form data parameter name.
@@ -764,152 +794,156 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	 * Returns the specified form data parameter value converted to a POJO using the
 	 * 	{@link UrlEncodingParser} registered with this servlet.
 	 * <p>
-	 * 	<i>Note:</i> Calling this method on URL-Encoded FORM posts causes the body content to be loaded and parsed by
-	 * 	the underlying servlet API.
+	 * <h5 class='section'>Examples:</h5>
+	 * <p class='bcode'>
+	 * 	<jc>// Parse into an integer.</jc>
+	 * 	<jk>int</jk> myparam = req.getFormDataParameter(<js>"myparam"</js>, <jk>int</jk>.<jk>class</jk>);
 	 *
-	 * @param name The parameter name.
-	 * @param c The class type to convert the parameter value to.
-	 * @param def The default value if the parameter was not specified or is <jk>null</jk>.
-	 * @param <T> The class type to convert the parameter value to.
-	 * @return The parameter value converted to the specified class type.
-	 * @throws ParseException
-	 */
-	public <T> T getFormDataParameter(String name, Class<T> c, T def) throws ParseException {
-		return getFormDataParameter(name, beanSession.getClassMeta(c), def);
-	}
+	 * 	<jc>// Parse into an int array.</jc>
+	 * 	<jk>int</jk>[] myparam = req.getFormDataParameter(<js>"myparam"</js>, <jk>int</jk>[].<jk>class</jk>);
 
-	/**
-	 * Returns the specified form data parameter value converted to a POJO using the
-	 * 	{@link UrlEncodingParser} registered with this servlet.
-	 * <p>
-	 * 	<i>Note:</i> Calling this method on URL-Encoded FORM posts causes the body content to be loaded and parsed by
-	 * 	the underlying servlet API.
-	 * <p>
-	 * 	Unlike {@link #getFormDataParameter(String, Class, Object)}, this method can be used to parse parameters
-	 * 	of complex types involving JCF classes.
-	 * <p class='bcode'>
-	 * 	ClassMeta&lt;Map&lt;String,Integer&gt;&gt; cm = request.getBeanContext().getMapClassMeta(TreeMap.<jk>class</jk>, String.<jk>class</jk>, Integer.<jk>class</jk>);
-	 * 	Map&lt;String,Integer&gt; m = request.getFormDataParameter(<js>"myParameter"</js>, cm, <jk>new</jk> TreeMap&lt;String,Integer&gt;());
+	 * 	<jc>// Parse into a bean.</jc>
+	 * 	MyBean myparam = req.getFormDataParameter(<js>"myparam"</js>, MyBean.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a linked-list of objects.</jc>
+	 * 	List myparam = req.getFormDataParameter(<js>"myparam"</js>, LinkedList.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a map of object keys/values.</jc>
+	 * 	Map myparam = req.getFormDataParameter(<js>"myparam"</js>, TreeMap.<jk>class</jk>);
 	 * </p>
+	 * <p>
+	 * <h5 class='section'>Notes:</h5>
+	 * <ul>
+	 * 	<li>Calling this method on URL-Encoded FORM posts causes the body content to be loaded and parsed by the underlying servlet API.
+	 * </ul>
 	 *
 	 * @param name The parameter name.
-	 * @param cm The class type to convert the parameter value to.
-	 * @param def The default value if the parameter was not specified or is <jk>null</jk>.
+	 * @param type The class type to convert the parameter value to.
 	 * @param <T> The class type to convert the parameter value to.
 	 * @return The parameter value converted to the specified class type.
 	 * @throws ParseException
 	 */
-	public <T> T getFormDataParameter(String name, ClassMeta<T> cm, T def) throws ParseException {
-		String val = getParameter(name);
-		if (val == null)
-			return def;
-		return parseParameter(val, cm);
+	public <T> T getFormDataParameter(String name, Class<T> type) throws ParseException {
+		return getFormDataParameter(name, beanSession.getClassMeta(type));
 	}
 
 	/**
-	 * Returns the specified form data parameter value converted to a POJO using the
-	 * 	{@link UrlEncodingParser} registered with this servlet.
-	 * <p>
-	 * <i>Note:</i> Calling this method on URL-Encoded FORM posts causes the body content to be loaded and parsed by
-	 * 	the underlying servlet API.
+	 * Same as {@link #getFormDataParameter(String, Class)} except returns a default value if not specified.
 	 *
 	 * @param name The parameter name.
-	 * @param c The class type to convert the parameter value to.
+	 * @param def The default value if the parameter was not specified or is <jk>null</jk>.
+	 * @param type The class type to convert the parameter value to.
 	 * @param <T> The class type to convert the parameter value to.
 	 * @return The parameter value converted to the specified class type.
 	 * @throws ParseException
 	 */
-	public <T> T getFormDataParameter(String name, Class<T> c) throws ParseException {
-		return getFormDataParameter(name, beanSession.getClassMeta(c));
+	public <T> T getFormDataParameter(String name, T def, Class<T> type) throws ParseException {
+		return getFormDataParameter(name, def, beanSession.getClassMeta(type));
 	}
 
 	/**
 	 * Same as {@link #getFormDataParameter(String, Class)} except for use on multi-part parameters
 	 * 	(e.g. <js>"key=1&amp;key=2&amp;key=3"</js> instead of <js>"key=(1,2,3)"</js>)
 	 * <p>
-	 * 	This method must only be called when parsing into classes of type Collection or array.
+	 * This method must only be called when parsing into classes of type Collection or array.
 	 *
 	 * @param name The parameter name.
-	 * @param c The class type to convert the parameter value to.
+	 * @param type The class type to convert the parameter value to.
 	 * @return The parameter value converted to the specified class type.
 	 * @throws ParseException
 	 */
-	public <T> T getFormDataParameters(String name, Class<T> c) throws ParseException {
-		return getFormDataParameters(name, beanSession.getClassMeta(c));
+	public <T> T getFormDataParameters(String name, Class<T> type) throws ParseException {
+		return getFormDataParameters(name, beanSession.getClassMeta(type));
 	}
 
 	/**
-	 * Same as {@link #getFormDataParameter(String, Class)} except works on parameterized
-	 * types such as those returned by {@link Method#getGenericParameterTypes()}
+	 * Returns the specified form data parameter value converted to a POJO using the
+	 * 	{@link UrlEncodingParser} registered with this servlet.
+	 * <p>
+	 * <h5 class='section'>Notes:</h5>
+	 * <ul>
+	 * 	<li>Calling this method on URL-Encoded FORM posts causes the body content to be loaded and parsed by the underlying servlet API.
+	 * 	<li>Use this method if you want to parse into a parameterized <code>Map</code>/<code>Collection</code> object.
+	 * </ul>
+	 * <p>
+	 * <h5 class='section'>Examples:</h5>
+	 * <p class='bcode'>
+	 * 	<jc>// Parse into a linked-list of strings.</jc>
+	 * 	Listt&lt;String&gt; myparam = req.getFormDataParameter(<js>"myparam"</js>, LinkedList.<jk>class</jk>, String.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a linked-list of linked-lists of strings.</jc>
+	 * 	Listt&lt;List&lt;String&gt&gt; myparam = req.getFormDataParameter(<js>"myparam"</js>, LinkedList.<jk>class</jk>, LinkedList.<jk>class</jk>, String.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a map of string keys/values.</jc>
+	 * 	Map&lt;String,String&gt; myparam = req.getFormDataParameter(<js>"myparam"</js>, TreeMap.<jk>class</jk>, String.<jk>class</jk>, String.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a map containing string keys and values of lists containing beans.</jc>
+	 * 	Map&lt;String,List&lt;MyBean&gt;&gt; myparam = req.getFormDataParameter(<js>"myparam"</js>, TreeMap.<jk>class</jk>, String.<jk>class</jk>, List.<jk>class</jk>, MyBean.<jk>class</jk>);
+	 * </p>
 	 *
 	 * @param name The parameter name.
-	 * @param c The class type to convert the parameter value to.
+	 * @param type The type of object to create.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * @param args The type arguments of the class if it's a collection or map.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * 	<br>Ignored if the main type is not a map or collection.
 	 * @return The parameter value converted to the specified class type.
 	 * @throws ParseException
 	 */
-	public <T> T getFormDataParameter(String name, Type c) throws ParseException {
-		return (T)getFormDataParameter(name, beanSession.getClassMeta(c));
+	public <T> T getFormDataParameter(String name, Type type, Type...args) throws ParseException {
+		return (T)getFormDataParameter(name, beanSession.getClassMeta(type, args));
 	}
 
 	/**
-	 * Same as {@link #getFormDataParameter(String, Class)} except for use on multi-part parameters
+	 * Same as {@link #getFormDataParameter(String, Type, Type...)} except for use on multi-part parameters
 	 * 	(e.g. <js>"key=1&amp;key=2&amp;key=3"</js> instead of <js>"key=(1,2,3)"</js>)
 	 * <p>
-	 * 	This method must only be called when parsing into classes of type Collection or array.
+	 * This method must only be called when parsing into classes of type Collection or array.
 	 *
 	 * @param name The parameter name.
-	 * @param c The class type to convert the parameter value to.
+	 * @param type The type of object to create.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * @param args The type arguments of the class if it's a collection or map.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * 	<br>Ignored if the main type is not a map or collection.
 	 * @return The parameter value converted to the specified class type.
 	 * @throws ParseException
 	 */
-	public <T> T getFormDataParameters(String name, Type c) throws ParseException {
-		return (T)getFormDataParameters(name, beanSession.getClassMeta(c));
+	public <T> T getFormDataParameters(String name, Type type, Type...args) throws ParseException {
+		return (T)getFormDataParameters(name, beanSession.getClassMeta(type, args));
 	}
 
 	/**
-	 * Returns the specified form data parameter value converted to a POJO using the
-	 * 	{@link UrlEncodingParser} registered with this servlet.
-	 * <p>
-	 * 	<i>Note:</i> Calling this method on URL-Encoded FORM posts causes the body content to be loaded and parsed by
-	 * 	the underlying servlet API.
+	 * Returns <jk>true</jk> if the form data parameters on this request contains the specified entry.
 	 * <p>
-	 * 	Unlike {@link #getFormDataParameter(String, Class)}, this method can be used to parse parameters
-	 * 	of complex types involving JCF classes.
-	 * <p class='bcode'>
-	 * 	ClassMeta&lt;Map&lt;String,Integer&gt;&gt; cm = request.getBeanContext().getMapClassMeta(TreeMap.<jk>class</jk>, String.<jk>class</jk>, Integer.<jk>class</jk>);
-	 * 	Map&lt;String,Integer&gt; m = request.getFormDataParameter(<js>"myParameter"</js>, cm);
-	 * </p>
+	 * Note that this returns <jk>true</jk> even if the value is set to null (e.g. <js>"?key"</js>).
 	 *
-	 * @param name The parameter name.
-	 * @param cm The class type to convert the parameter value to.
-	 * @param <T> The class type to convert the parameter value to.
-	 * @return The parameter value converted to the specified class type.
-	 * @throws ParseException
+	 * @param name The URL parameter name.
+	 * @return <jk>true</jk> if the URL parameters on this request contains the specified entry.
 	 */
-	public <T> T getFormDataParameter(String name, ClassMeta<T> cm) throws ParseException {
+	public boolean hasFormDataParameter(String name) {
+		return getParameterMap().containsKey(name);
+	}
 
+	/* Workhorse method */
+	<T> T getFormDataParameter(String name, T def, ClassMeta<T> cm) throws ParseException {
 		String val = getParameter(name);
+		if (val == null)
+			return def;
+		return parseParameter(val, cm);
+	}
 
+	/* Workhorse method */
+	<T> T getFormDataParameter(String name, ClassMeta<T> cm) throws ParseException {
+		String val = getParameter(name);
 		if (cm.isPrimitive() && (val == null || val.isEmpty()))
 			return cm.getPrimitiveDefault();
-
 		return parseParameter(val, cm);
 	}
 
-	/**
-	 * Same as {@link #getFormDataParameter(String, ClassMeta)} except for use on multi-part parameters
-	 * 	(e.g. <js>"key=1&amp;key=2&amp;key=3"</js> instead of <js>"key=(1,2,3)"</js>)
-	 * <p>
-	 * 	This method must only be called when parsing into classes of type Collection or array.
-	 *
-	 * @param name The parameter name.
-	 * @param cm The class type to convert the parameter value to.
-	 * @param <T> The class type to convert the parameter value to.
-	 * @return The parameter value converted to the specified class type.
-	 * @throws ParseException
-	 */
+	/* Workhorse method */
 	@SuppressWarnings("rawtypes")
-	public <T> T getFormDataParameters(String name, ClassMeta<T> cm) throws ParseException {
+	<T> T getFormDataParameters(String name, ClassMeta<T> cm) throws ParseException {
 		String[] p = getParameterValues(name);
 		if (p == null)
 			return null;
@@ -934,18 +968,6 @@ public final class RestRequest extends HttpServletRequestWrapper {
 		throw new ParseException("Invalid call to getParameters(String, ClassMeta).  Class type must be a Collection or array.");
 	}
 
-	/**
-	 * Returns <jk>true</jk> if the form data parameters on this request contains the specified entry.
-	 * <p>
-	 * 	Note that this returns <jk>true</jk> even if the value is set to null (e.g. <js>"?key"</js>).
-	 *
-	 * @param name The URL parameter name.
-	 * @return <jk>true</jk> if the URL parameters on this request contains the specified entry.
-	 */
-	public boolean hasFormDataParameter(String name) {
-		return getParameterMap().containsKey(name);
-	}
-
 	//--------------------------------------------------------------------------------
 	// Path parameters
 	//--------------------------------------------------------------------------------
@@ -953,7 +975,7 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Sets a path parameter value.
 	 * <p>
-	 * 	A path parameter is a variable in the path pattern such as <js>"/{foo}"</js>
+	 * A path parameter is a variable in the path pattern such as <js>"/{foo}"</js>
 	 *
 	 * @param name The parameter name.
 	 * @param value The parameter value.
@@ -967,7 +989,7 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns a path parameter value.
 	 * <p>
-	 * 	A path parameter is a variable in the path pattern such as <js>"/{foo}"</js>
+	 * A path parameter is a variable in the path pattern such as <js>"/{foo}"</js>
 	 *
 	 * @param name The parameter name.
 	 * @return The paramter value, or <jk>null</jk> if path parameter not specified.
@@ -979,44 +1001,74 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns the specified path parameter converted to a POJO.
 	 * <p>
-	 * 	The type can be any POJO type convertable from a <code>String</code> (See <a class='doclink' href='package-summary.html#PojosConvertableFromString'>POJOs Convertable From Strings</a>).
+	 * The type can be any POJO type convertable from a <code>String</code> (See <a class="doclink" href="package-summary.html#PojosConvertableFromString">POJOs Convertable From Strings</a>).
+	 * <p>
+	 * <h5 class='section'>Examples:</h5>
+	 * <p class='bcode'>
+	 * 	<jc>// Parse into an integer.</jc>
+	 * 	<jk>int</jk> myparam = req.getPathParameter(<js>"myparam"</js>, <jk>int</jk>.<jk>class</jk>);
 	 *
-	 * @param name The attribute name.
-	 * @param c The class type to convert the attribute value to.
-	 * @param <T> The class type to convert the attribute value to.
-	 * @return The attribute value converted to the specified class type.
-	 * @throws ParseException
-	 */
-	public <T> T getPathParameter(String name, Class<T> c) throws ParseException {
-		return getPathParameter(name, beanSession.getClassMeta(c));
-	}
+	 * 	<jc>// Parse into an int array.</jc>
+	 * 	<jk>int</jk>[] myparam = req.getPathParameter(<js>"myparam"</js>, <jk>int</jk>[].<jk>class</jk>);
 
-	/**
-	 * Same as {@link #getPathParameter(String, Class)} except works on parameterized
-	 * types such as those returned by {@link Method#getGenericParameterTypes()}
+	 * 	<jc>// Parse into a bean.</jc>
+	 * 	MyBean myparam = req.getPathParameter(<js>"myparam"</js>, MyBean.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a linked-list of objects.</jc>
+	 * 	List myparam = req.getPathParameter(<js>"myparam"</js>, LinkedList.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a map of object keys/values.</jc>
+	 * 	Map myparam = req.getPathParameter(<js>"myparam"</js>, TreeMap.<jk>class</jk>);
+	 * </p>
 	 *
 	 * @param name The attribute name.
-	 * @param c The class type to convert the attribute value to.
+	 * @param type The class type to convert the attribute value to.
 	 * @param <T> The class type to convert the attribute value to.
 	 * @return The attribute value converted to the specified class type.
 	 * @throws ParseException
 	 */
-	public <T> T getPathParameter(String name, Type c) throws ParseException {
-		return (T)getPathParameter(name, beanSession.getClassMeta(c));
+	public <T> T getPathParameter(String name, Class<T> type) throws ParseException {
+		return getPathParameter(name, beanSession.getClassMeta(type));
 	}
 
 	/**
 	 * Returns the specified path parameter converted to a POJO.
 	 * <p>
-	 * 	The type can be any POJO type convertable from a <code>String</code> (See <a class='doclink' href='package-summary.html#PojosConvertableFromString'>POJOs Convertable From Strings</a>).
+	 * The type can be any POJO type convertable from a <code>String</code> (See <a class="doclink" href="package-summary.html#PojosConvertableFromString">POJOs Convertable From Strings</a>).
+	 * <p>
+	 * Use this method if you want to parse into a parameterized <code>Map</code>/<code>Collection</code> object.
+	 * <p>
+	 * <h5 class='section'>Examples:</h5>
+	 * <p class='bcode'>
+	 * 	<jc>// Parse into a linked-list of strings.</jc>
+	 * 	Listt&lt;String&gt; myparam = req.getPathParameter(<js>"myparam"</js>, LinkedList.<jk>class</jk>, String.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a linked-list of linked-lists of strings.</jc>
+	 * 	Listt&lt;List&lt;String&gt&gt; myparam = req.getPathParameter(<js>"myparam"</js>, LinkedList.<jk>class</jk>, LinkedList.<jk>class</jk>, String.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a map of string keys/values.</jc>
+	 * 	Map&lt;String,String&gt; myparam = req.getPathParameter(<js>"myparam"</js>, TreeMap.<jk>class</jk>, String.<jk>class</jk>, String.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a map containing string keys and values of lists containing beans.</jc>
+	 * 	Map&lt;String,List&lt;MyBean&gt;&gt; myparam = req.getPathParameter(<js>"myparam"</js>, TreeMap.<jk>class</jk>, String.<jk>class</jk>, List.<jk>class</jk>, MyBean.<jk>class</jk>);
+	 * </p>
 	 *
 	 * @param name The attribute name.
-	 * @param cm The class type to convert the attribute value to.
+	 * @param type The type of object to create.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * @param args The type arguments of the class if it's a collection or map.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * 	<br>Ignored if the main type is not a map or collection.
 	 * @param <T> The class type to convert the attribute value to.
 	 * @return The attribute value converted to the specified class type.
 	 * @throws ParseException
 	 */
-	public <T> T getPathParameter(String name, ClassMeta<T> cm) throws ParseException {
+	public <T> T getPathParameter(String name, Type type, Type...args) throws ParseException {
+		return (T)getPathParameter(name, beanSession.getClassMeta(type, args));
+	}
+
+	/* Workhorse method */
+	<T> T getPathParameter(String name, ClassMeta<T> cm) throws ParseException {
 		Object attr = getPathParameter(name);
 		T t = null;
 		if (attr != null)
@@ -1031,8 +1083,70 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	//--------------------------------------------------------------------------------
 
 	/**
-	 * Same as {@link #getBody(ClassMeta)}, except a shortcut for passing in regular {@link Class} objects
-	 * 	instead of having to look up {@link ClassMeta} objects.
+	 * Reads the input from the HTTP request as JSON, XML, or HTML and converts the input to a POJO.
+	 * <p>
+	 * If {@code allowHeaderParams} init parameter is <jk>true</jk>, then first looks for {@code &body=xxx} in the URL query string.
+	 * <p>
+	 * If type is <jk>null</jk> or <code>Object.<jk>class</jk></code>, then the actual type will be determined automatically based on the following input:
+	 * <table class='styled'>
+	 * 	<tr><th>Type</th><th>JSON input</th><th>XML input</th><th>Return type</th></tr>
+	 * 	<tr>
+	 * 		<td>object</td>
+	 * 		<td><js>"{...}"</js></td>
+	 * 		<td><code><xt>&lt;object&gt;</xt>...<xt>&lt;/object&gt;</xt></code><br><code><xt>&lt;x</xt> <xa>type</xa>=<xs>'object'</xs><xt>&gt;</xt>...<xt>&lt;/x&gt;</xt></code></td>
+	 * 		<td>{@link ObjectMap}</td>
+	 * 	</tr>
+	 * 	<tr>
+	 * 		<td>array</td>
+	 * 		<td><js>"[...]"</js></td>
+	 * 		<td><code><xt>&lt;array&gt;</xt>...<xt>&lt;/array&gt;</xt></code><br><code><xt>&lt;x</xt> <xa>type</xa>=<xs>'array'</xs><xt>&gt;</xt>...<xt>&lt;/x&gt;</xt></code></td>
+	 * 		<td>{@link ObjectList}</td>
+	 * 	</tr>
+	 * 	<tr>
+	 * 		<td>string</td>
+	 * 		<td><js>"'...'"</js></td>
+	 * 		<td><code><xt>&lt;string&gt;</xt>...<xt>&lt;/string&gt;</xt></code><br><code><xt>&lt;x</xt> <xa>type</xa>=<xs>'string'</xs><xt>&gt;</xt>...<xt>&lt;/x&gt;</xt></code></td>
+	 * 		<td>{@link String}</td>
+	 * 	</tr>
+	 * 	<tr>
+	 * 		<td>number</td>
+	 * 		<td><code>123</code></td>
+	 * 		<td><code><xt>&lt;number&gt;</xt>123<xt>&lt;/number&gt;</xt></code><br><code><xt>&lt;x</xt> <xa>type</xa>=<xs>'number'</xs><xt>&gt;</xt>...<xt>&lt;/x&gt;</xt></code></td>
+	 * 		<td>{@link Number}</td>
+	 *		</tr>
+	 *		<tr>
+	 * 		<td>boolean</td>
+	 * 		<td><jk>true</jk></td>
+	 * 		<td><code><xt>&lt;boolean&gt;</xt>true<xt>&lt;/boolean&gt;</xt></code><br><code><xt>&lt;x</xt> <xa>type</xa>=<xs>'boolean'</xs><xt>&gt;</xt>...<xt>&lt;/x&gt;</xt></code></td>
+	 * 		<td>{@link Boolean}</td>
+	 * 	</tr>
+	 * 	<tr>
+	 * 		<td>null</td>
+	 * 		<td><jk>null</jk> or blank</td>
+	 * 		<td><code><xt>&lt;null/&gt;</xt></code> or blank<br><code><xt>&lt;x</xt> <xa>type</xa>=<xs>'null'</xs><xt>/&gt;</xt></code></td>
+	 * 		<td><jk>null</jk></td>
+	 * 	</tr>
+	 * </table>
+	 * <p>
+	 * Refer to <a class="doclink" href="../../../../overview-summary.html#Core.PojoCategories">POJO Categories</a> for a complete definition of supported POJOs.
+	 * <p>
+	 * <h5 class='section'>Examples:</h5>
+	 * <p class='bcode'>
+	 * 	<jc>// Parse into an integer.</jc>
+	 * 	<jk>int</jk> body = req.getBody(<jk>int</jk>.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into an int array.</jc>
+	 * 	<jk>int</jk>[] body = req.getBody(<jk>int</jk>[].<jk>class</jk>);
+
+	 * 	<jc>// Parse into a bean.</jc>
+	 * 	MyBean body = req.getBody(MyBean.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a linked-list of objects.</jc>
+	 * 	List body = req.getBody(LinkedList.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a map of object keys/values.</jc>
+	 * 	Map body = req.getBody(TreeMap.<jk>class</jk>);
+	 * </p>
 	 *
 	 * @param type The class type to instantiate.
 	 * @param <T> The class type to instantiate.
@@ -1045,124 +1159,39 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	}
 
 	/**
-	 * Same as {@link #getBody(Class)} except works on parameterized
-	 * types such as those returned by {@link Method#getGenericParameterTypes()}
-	 *
-	 * @param type The class type to instantiate.
-	 * @param <T> The class type to instantiate.
-	 * @return The input parsed to a POJO.
-	 */
-	public <T> T getBody(Type type) {
-		return (T)getBody(beanSession.getClassMeta(type));
-	}
-
-	/**
 	 * Reads the input from the HTTP request as JSON, XML, or HTML and converts the input to a POJO.
 	 * <p>
-	 * 	If {@code allowHeaderParams} init parameter is <jk>true</jk>, then first looks
-	 * 	for {@code &body=xxx} in the URL query string.
-	 * <p>
-	 * 	If type is <jk>null</jk> or <code>Object.<jk>class</jk></code>, then the actual type will be determined automatically based on the
-	 * 	following input:
-	 * 	<table class='styled'>
-	 * 		<tr><th>Type</th><th>JSON input</th><th>XML input</th><th>Return type</th></tr>
-	 * 		<tr>
-	 * 			<td>object</td>
-	 * 			<td><js>"{...}"</js></td>
-	 * 			<td><code><xt>&lt;object&gt;</xt>...<xt>&lt;/object&gt;</xt></code><br><code><xt>&lt;x</xt> <xa>type</xa>=<xs>'object'</xs><xt>&gt;</xt>...<xt>&lt;/x&gt;</xt></code></td>
-	 * 			<td>{@link ObjectMap}</td>
-	 * 		</tr>
-	 * 		<tr>
-	 * 			<td>array</td>
-	 * 			<td><js>"[...]"</js></td>
-	 * 			<td><code><xt>&lt;array&gt;</xt>...<xt>&lt;/array&gt;</xt></code><br><code><xt>&lt;x</xt> <xa>type</xa>=<xs>'array'</xs><xt>&gt;</xt>...<xt>&lt;/x&gt;</xt></code></td>
-	 * 			<td>{@link ObjectList}</td>
-	 * 		</tr>
-	 * 		<tr>
-	 * 			<td>string</td>
-	 * 			<td><js>"'...'"</js></td>
-	 * 			<td><code><xt>&lt;string&gt;</xt>...<xt>&lt;/string&gt;</xt></code><br><code><xt>&lt;x</xt> <xa>type</xa>=<xs>'string'</xs><xt>&gt;</xt>...<xt>&lt;/x&gt;</xt></code></td>
-	 * 			<td>{@link String}</td>
-	 * 		</tr>
-	 * 		<tr>
-	 * 			<td>number</td>
-	 * 			<td><code>123</code></td>
-	 * 			<td><code><xt>&lt;number&gt;</xt>123<xt>&lt;/number&gt;</xt></code><br><code><xt>&lt;x</xt> <xa>type</xa>=<xs>'number'</xs><xt>&gt;</xt>...<xt>&lt;/x&gt;</xt></code></td>
-	 * 			<td>{@link Number}</td>
-	 * 		</tr>
-	 * 		<tr>
-	 * 			<td>boolean</td>
-	 * 			<td><jk>true</jk></td>
-	 * 			<td><code><xt>&lt;boolean&gt;</xt>true<xt>&lt;/boolean&gt;</xt></code><br><code><xt>&lt;x</xt> <xa>type</xa>=<xs>'boolean'</xs><xt>&gt;</xt>...<xt>&lt;/x&gt;</xt></code></td>
-	 * 			<td>{@link Boolean}</td>
-	 * 		</tr>
-	 * 		<tr>
-	 * 			<td>null</td>
-	 * 			<td><jk>null</jk> or blank</td>
-	 * 			<td><code><xt>&lt;null/&gt;</xt></code> or blank<br><code><xt>&lt;x</xt> <xa>type</xa>=<xs>'null'</xs><xt>/&gt;</xt></code></td>
-	 * 			<td><jk>null</jk></td>
-	 * 		</tr>
-	 * 	</table>
-	 * <p>
-	 * 	Refer to <a href='../../../../overview-summary.html#Core.PojoCategories' class='doclink'>POJO Categories</a> for a complete definition of supported POJOs.
+	 * <h5 class='section'>Examples:</h5>
+	 * <p class='bcode'>
+	 * 	<jc>// Parse into a linked-list of strings.</jc>
+	 * 	Listt&lt;String&gt; body = req.getBody(LinkedList.<jk>class</jk>, String.<jk>class</jk>);
 	 *
-	 * @param type The class type to instantiate.
+	 * 	<jc>// Parse into a linked-list of linked-lists of strings.</jc>
+	 * 	Listt&lt;List&lt;String&gt;&gt; body = req.getBody(LinkedList.<jk>class</jk>, LinkedList.<jk>class</jk>, String.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a map of string keys/values.</jc>
+	 * 	Map&lt;String,String&gt; body = req.getBody(TreeMap.<jk>class</jk>, String.<jk>class</jk>, String.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a map containing string keys and values of lists containing beans.</jc>
+	 * 	Map&lt;String,List&lt;MyBean&gt;&gt; body = req.getBody(TreeMap.<jk>class</jk>, String.<jk>class</jk>, List.<jk>class</jk>, MyBean.<jk>class</jk>);
+	 * </p>
+	 *
+	 * @param type The type of object to create.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * @param args The type arguments of the class if it's a collection or map.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * 	<br>Ignored if the main type is not a map or collection.
 	 * @param <T> The class type to instantiate.
 	 * @return The input parsed to a POJO.
-	 * @throws RestException If a problem occurred trying to read the input.
 	 */
-	public <T> T getBody(ClassMeta<T> type) throws RestException {
-
-		try {
-			if (type.isReader())
-				return (T)getReader();
-
-			if (type.isInputStream())
-				return (T)getInputStream();
-
-			TimeZone timeZone = getTimeZone();
-			Locale locale = getLocale();
-			ParserMatch pm = getParserMatch();
-
-			if (pm != null) {
-				Parser p = pm.getParser();
-				MediaType mediaType = pm.getMediaType();
-				try {
-					properties.append("mediaType", mediaType).append("characterEncoding", getCharacterEncoding());
-					if (! p.isReaderParser()) {
-						InputStreamParser p2 = (InputStreamParser)p;
-						ParserSession session = p2.createSession(getInputStream(), properties, getJavaMethod(), getServlet(), locale, timeZone, mediaType);
-						return p2.parse(session, type);
-					}
-					ReaderParser p2 = (ReaderParser)p;
-					ParserSession session = p2.createSession(getUnbufferedReader(), properties, getJavaMethod(), getServlet(), locale, timeZone, mediaType);
-					return p2.parse(session, type);
-				} catch (ParseException e) {
-					throw new RestException(SC_BAD_REQUEST,
-						"Could not convert request body content to class type ''{0}'' using parser ''{1}''.",
-						type, p.getClass().getName()
-					).initCause(e);
-				}
-			}
-
-			throw new RestException(SC_UNSUPPORTED_MEDIA_TYPE,
-				"Unsupported media-type in request header ''Content-Type'': ''{0}''\n\tSupported media-types: {1}",
-				getHeader("Content-Type"), parserGroup.getSupportedMediaTypes()
-			);
-
-		} catch (IOException e) {
-			throw new RestException(SC_INTERNAL_SERVER_ERROR,
-				"I/O exception occurred while attempting to handle request ''{0}''.",
-				getDescription()
-			).initCause(e);
-		}
+	public <T> T getBody(Type type, Type...args) {
+		return (T)getBody(beanSession.getClassMeta(type, args));
 	}
 
 	/**
 	 * Returns the HTTP body content as a plain string.
 	 * <p>
-	 * 	If {@code allowHeaderParams} init parameter is true, then first looks
-	 * 	for {@code &body=xxx} in the URL query string.
+	 * If {@code allowHeaderParams} init parameter is true, then first looks for {@code &body=xxx} in the URL query string.
 	 *
 	 * @return The incoming input from the connection as a plain string.
 	 * @throws IOException If a problem occurred trying to read from the reader.
@@ -1177,10 +1206,9 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns the HTTP body content as a {@link Reader}.
 	 * <p>
-	 * 	If {@code allowHeaderParams} init parameter is true, then first looks
-	 * 	for {@code &body=xxx} in the URL query string.
+	 * If {@code allowHeaderParams} init parameter is true, then first looks for {@code &body=xxx} in the URL query string.
 	 * <p>
-	 * 	Automatically handles GZipped input streams.
+	 * Automatically handles GZipped input streams.
 	 */
 	@Override /* ServletRequest */
 	public BufferedReader getReader() throws IOException {
@@ -1207,7 +1235,7 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns the HTTP body content as an {@link InputStream}.
 	 * <p>
-	 * 	Automatically handles GZipped input streams.
+	 * Automatically handles GZipped input streams.
 	 *
 	 * @return The negotiated input stream.
 	 * @throws IOException If any error occurred while trying to get the input stream or wrap it
@@ -1235,6 +1263,54 @@ public final class RestRequest extends HttpServletRequestWrapper {
 		return is;
 	}
 
+	/* Workhorse method */
+	<T> T getBody(ClassMeta<T> cm) throws RestException {
+
+		try {
+			if (cm.isReader())
+				return (T)getReader();
+
+			if (cm.isInputStream())
+				return (T)getInputStream();
+
+			TimeZone timeZone = getTimeZone();
+			Locale locale = getLocale();
+			ParserMatch pm = getParserMatch();
+
+			if (pm != null) {
+				Parser p = pm.getParser();
+				MediaType mediaType = pm.getMediaType();
+				try {
+					properties.append("mediaType", mediaType).append("characterEncoding", getCharacterEncoding());
+					if (! p.isReaderParser()) {
+						InputStreamParser p2 = (InputStreamParser)p;
+						ParserSession session = p2.createSession(getInputStream(), properties, getJavaMethod(), getServlet(), locale, timeZone, mediaType);
+						return p2.parseSession(session, cm);
+					}
+					ReaderParser p2 = (ReaderParser)p;
+					ParserSession session = p2.createSession(getUnbufferedReader(), properties, getJavaMethod(), getServlet(), locale, timeZone, mediaType);
+					return p2.parseSession(session, cm);
+				} catch (ParseException e) {
+					throw new RestException(SC_BAD_REQUEST,
+						"Could not convert request body content to class type ''{0}'' using parser ''{1}''.",
+						cm, p.getClass().getName()
+					).initCause(e);
+				}
+			}
+
+			throw new RestException(SC_UNSUPPORTED_MEDIA_TYPE,
+				"Unsupported media-type in request header ''Content-Type'': ''{0}''\n\tSupported media-types: {1}",
+				getHeader("Content-Type"), parserGroup.getSupportedMediaTypes()
+			);
+
+		} catch (IOException e) {
+			throw new RestException(SC_INTERNAL_SERVER_ERROR,
+				"I/O exception occurred while attempting to handle request ''{0}''.",
+				getDescription()
+			).initCause(e);
+		}
+	}
+
 	//--------------------------------------------------------------------------------
 	// URI-related methods
 	//--------------------------------------------------------------------------------
@@ -1251,9 +1327,9 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns the value {@link #getPathInfo()} split on the <js>'/'</js> character.
 	 * <p>
-	 * 	If path info is <jk>null</jk>, returns an empty list.
+	 * If path info is <jk>null</jk>, returns an empty list.
 	 * <p>
-	 * 	URL-encoded characters in segments are automatically decoded by this method.
+	 * URL-encoded characters in segments are automatically decoded by this method.
 	 *
 	 * @return The decoded segments, or an empty list if path info is <jk>null</jk>.
 	 */
@@ -1310,44 +1386,44 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns the decoded remainder of the URL following any path pattern matches.
 	 * <p>
-	 * 	The behavior of path remainder is shown below given the path pattern "/foo/*":
-	 * <p>
-	 * 	<table class='styled'>
-	 * 		<tr>
-	 * 			<th>URL</th>
-	 * 			<th>Path Remainder</th>
-	 * 		</tr>
-	 * 		<tr>
-	 * 			<th><code>/foo</code></th>
-	 * 			<th><jk>null</jk></th>
-	 * 		</tr>
-	 * 		<tr>
-	 * 			<th><code>/foo/</code></th>
-	 * 			<th><js>""</js></th>
-	 * 		</tr>
-	 * 		<tr>
-	 * 			<th><code>/foo//</code></th>
-	 * 			<th><js>"/"</js></th>
-	 * 		</tr>
-	 * 		<tr>
-	 * 			<th><code>/foo///</code></th>
-	 * 			<th><js>"//"</js></th>
-	 * 		</tr>
-	 * 		<tr>
-	 * 			<th><code>/foo/a/b</code></th>
-	 * 			<th><js>"a/b"</js></th>
-	 * 		</tr>
-	 * 		<tr>
-	 * 			<th><code>/foo//a/b/</code></th>
-	 * 			<th><js>"/a/b/"</js></th>
-	 * 		</tr>
-	 * 		<tr>
-	 * 			<th><code>/foo/a%2Fb</code></th>
-	 * 			<th><js>"a/b"</js></th>
-	 * 		</tr>
-	 * 	</table>
-	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * The behavior of path remainder is shown below given the path pattern "/foo/*":
+	 * <p>
+	 * <table class='styled'>
+	 * 	<tr>
+	 * 		<th>URL</th>
+	 * 		<th>Path Remainder</th>
+	 * 	</tr>
+	 * 	<tr>
+	 * 		<td><code>/foo</code></td>
+	 * 		<td><jk>null</jk></td>
+	 * 	</tr>
+	 * 	<tr>
+	 * 		<td><code>/foo/</code></td>
+	 * 		<td><js>""</js></td>
+	 * 	</tr>
+	 * 	<tr>
+	 * 		<td><code>/foo//</code></td>
+	 * 		<td><js>"/"</js></td>
+	 * 	</tr>
+	 * 	<tr>
+	 * 		<td><code>/foo///</code></td>
+	 * 		<td><js>"//"</js></td>
+	 * 	</tr>
+	 * 	<tr>
+	 * 		<td><code>/foo/a/b</code></td>
+	 * 		<td><js>"a/b"</js></td>
+	 * 	</tr>
+	 * 	<tr>
+	 * 		<td><code>/foo//a/b/</code></td>
+	 * 		<td><js>"/a/b/"</js></td>
+	 * 	</tr>
+	 * 	<tr>
+	 * 		<td><code>/foo/a%2Fb</code></td>
+	 * 		<td><js>"a/b"</js></td>
+	 * 	</tr>
+	 * </table>
+	 *
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// REST method</jc>
 	 * 	<ja>@RestMethod</ja>(name=<js>"GET"</js>,path=<js>"/foo/{bar}/*"</js>)
@@ -1377,39 +1453,39 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns the URI of the parent resource.
 	 * <p>
-	 * 	Trailing slashes in the path are ignored by this method.
-	 * <p>
-	 * 	The behavior is shown below:
-	 * 	<table class='styled'>
-	 * 		<tr>
-	 * 			<th>getRequestURI</th>
-	 * 			<th>getRequestParentURI</th>
-	 * 		</tr>
-	 * 		<tr>
-	 * 			<th><code>/foo/bar</code></th>
-	 * 			<th><code>/foo</code></th>
-	 * 		</tr>
-	 * 		<tr>
-	 * 			<th><code>/foo/bar?baz=bing</code></th>
-	 * 			<th><code>/foo</code></th>
-	 * 		</tr>
-	 * 		<tr>
-	 * 			<th><code>/foo/bar/</code></th>
-	 * 			<th><code>/foo</code></th>
-	 * 		</tr>
-	 * 		<tr>
-	 * 			<th><code>/foo/bar//</code></th>
-	 * 			<th><code>/foo</code></th>
-	 * 		</tr>
-	 * 		<tr>
-	 * 			<th><code>/foo//bar//</code></th>
-	 * 			<th><code>/foo/</code></th>
-	 * 		</tr>
-	 * 		<tr>
-	 * 			<th><code>/foo</code></th>
-	 * 			<th>/</th>
-	 * 		</tr>
-	 * 	</table>
+	 * Trailing slashes in the path are ignored by this method.
+	 * <p>
+	 * The behavior is shown below:
+	 * <table class='styled'>
+	 * 	<tr>
+	 * 		<th>getRequestURI</th>
+	 * 		<th>getRequestParentURI</th>
+	 * 	</tr>
+	 * 	<tr>
+	 * 		<td><code>/foo/bar</code></td>
+	 * 		<td><code>/foo</code></td>
+	 * 	</tr>
+	 * 	<tr>
+	 * 		<td><code>/foo/bar?baz=bing</code></td>
+	 * 		<td><code>/foo</code></td>
+	 * 	</tr>
+	 * 	<tr>
+	 * 		<td><code>/foo/bar/</code></td>
+	 * 		<td><code>/foo</code></td>
+	 * 	</tr>
+	 * 	<tr>
+	 * 		<td><code>/foo/bar//</code></td>
+	 * 		<td><code>/foo</code></td>
+	 * 	</tr>
+	 * 	<tr>
+	 * 		<td><code>/foo//bar//</code></td>
+	 * 		<td><code>/foo/</code></td>
+	 * 	</tr>
+	 * 	<tr>
+	 * 		<td><code>/foo</code></td>
+	 * 		<td>/</td>
+	 * 	</tr>
+	 * </table>
 	 *
 	 * @return The request parent URI.
 	 */
@@ -1483,7 +1559,7 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns the localized servlet title.
 	 * <p>
-	 * 	Equivalent to calling {@link RestServlet#getTitle(RestRequest)} with this object.
+	 * Equivalent to calling {@link RestServlet#getTitle(RestRequest)} with this object.
 	 *
 	 * @return The localized servlet label.
 	 */
@@ -1494,7 +1570,7 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns the localized servlet description.
 	 * <p>
-	 * 	Equivalent to calling {@link RestServlet#getDescription(RestRequest)} with this object.
+	 * Equivalent to calling {@link RestServlet#getDescription(RestRequest)} with this object.
 	 *
 	 * @return The localized servlet description.
 	 */
@@ -1505,7 +1581,7 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns the localized method summary.
 	 * <p>
-	 * 	Equivalent to calling {@link RestServlet#getMethodSummary(String, RestRequest)} with this object.
+	 * Equivalent to calling {@link RestServlet#getMethodSummary(String, RestRequest)} with this object.
 	 *
 	 * @return The localized method description.
 	 */
@@ -1516,7 +1592,7 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns the localized method description.
 	 * <p>
-	 * 	Equivalent to calling {@link RestServlet#getMethodDescription(String, RestRequest)} with this object.
+	 * Equivalent to calling {@link RestServlet#getMethodDescription(String, RestRequest)} with this object.
 	 *
 	 * @return The localized method description.
 	 */
@@ -1591,8 +1667,7 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns the method of this request.
 	 * <p>
-	 * 	If <code>allowHeaderParams</code> init parameter is <jk>true</jk>, then first looks
-	 * 	for <code>&amp;method=xxx</code> in the URL query string.
+	 * If <code>allowHeaderParams</code> init parameter is <jk>true</jk>, then first looks for <code>&amp;method=xxx</code> in the URL query string.
 	 */
 	@Override /* ServletRequest */
 	public String getMethod() {
@@ -1608,10 +1683,10 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns <jk>true</jk> if <code>&amp;plainText=true</code> was specified as a URL parameter.
 	 * <p>
-	 * 	This indicates that the <code>Content-Type</code> of the output should always be set to <js>"text/plain"</js>
+	 * This indicates that the <code>Content-Type</code> of the output should always be set to <js>"text/plain"</js>
 	 * 	to make it easy to render in a browser.
 	 * <p>
-	 * 	This feature is useful for debugging.
+	 * This feature is useful for debugging.
 	 *
 	 * @return <jk>true</jk> if {@code &amp;plainText=true} was specified as a URL parameter
 	 */
@@ -1620,11 +1695,10 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	}
 
 	/**
-	 * Shortcut method for calling {@link RestServlet#getMessage(Locale, String, Object...)} based
-	 * 	on the request locale.
+	 * Shortcut method for calling {@link RestServlet#getMessage(Locale, String, Object...)} based on the request locale.
 	 *
 	 * @param key The message key.
-	 * @param args Optional {@link MessageFormat} variable values in the value.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 * @return The localized message.
 	 */
 	public String getMessage(String key, Object...args) {
@@ -1643,7 +1717,7 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns the servlet handling the request.
 	 * <p>
-	 * 	Can be used to access servlet-init parameters or annotations during requests,
+	 * Can be used to access servlet-init parameters or annotations during requests,
 	 * 	such as in calls to {@link RestGuard#guard(RestRequest, RestResponse)}..
 	 *
 	 * @return The servlet handling the request.
@@ -1655,11 +1729,13 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns the java method handling the request.
 	 * <p>
-	 * 	Can be used to access the method name or method annotations during requests, such
+	 * Can be used to access the method name or method annotations during requests, such
 	 * 	as in calls to {@link RestGuard#guard(RestRequest, RestResponse)}.
 	 * <p>
-	 * 	Note:  This returns null when evaluating servlet-level guards since the method
-	 * 	has not been resolved at that point of execution.
+	 * <h5 class='section'>Notes:</h5>
+	 * <ul>
+	 * 	<li>This returns null when evaluating servlet-level guards since the method has not been resolved at that point of execution.
+	 * </ul>
 	 *
 	 * @return The Java method handling the request, or <code>null</code> if the method
 	 * 	has not yet been resolved.
@@ -1768,10 +1844,10 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	/**
 	 * Returns the localized Swagger from the file system.
 	 * <p>
-	 * 	Looks for a file called <js>"{ServletClass}_{locale}.json"</js> in the same package
+	 * Looks for a file called <js>"{ServletClass}_{locale}.json"</js> in the same package
 	 * 	as this servlet and returns it as a parsed {@link Swagger} object.
 	 * <p>
-	 * 	Returned objects are cached for later quick-lookup.
+	 * Returned objects are cached for later quick-lookup.
 	 *
 	 * @return The parsed swagger object, or <jk>null</jk> if the swagger file could not be found.
 	 */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/RestResponse.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestResponse.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestResponse.java
index 5e65648..0318f59 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestResponse.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestResponse.java
@@ -37,7 +37,7 @@ import org.apache.juneau.xml.*;
  * 	convenience methods, or revert to using lower level methods like any other servlet response.
  * </p>
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<ja>@RestMethod</ja>(name=<js>"GET"</js>)
  * 	<jk>public void</jk> doGet(RestRequest req, RestResponse res) {
@@ -46,7 +46,7 @@ import org.apache.juneau.xml.*;
  * 	}
  * </p>
  * <p>
- * 	Refer to <a class='doclink' href='package-summary.html#TOC'>REST Servlet API</a> for information about using this class.
+ * 	Refer to <a class="doclink" href="package-summary.html#TOC">REST Servlet API</a> for information about using this class.
  * </p>
  */
 public final class RestResponse extends HttpServletResponseWrapper {
@@ -153,7 +153,7 @@ public final class RestResponse extends HttpServletResponseWrapper {
 	 * 	<ul>
 	 * 	  <li> {@link InputStream}
 	 * 	  <li> {@link Reader}
-	 * 	  <li> Any serializable type defined in <a href='../../../../overview-summary.html#Core.PojoCategories'>POJO Categories</a>
+	 * 	  <li> Any serializable type defined in <a class="doclink" href="../../../../overview-summary.html#Core.PojoCategories">POJO Categories</a>
 	 * 	</ul>
 	 * <p>
 	 * 	If it's an {@link InputStream} or {@link Reader}, you must also specify the <code>Content-Type</code> using the {@link #setContentType(String)} method.
@@ -199,7 +199,7 @@ public final class RestResponse extends HttpServletResponseWrapper {
 	/**
 	 * Shortcut method that allows you to use varargs to simplify setting array output.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Instead of...</jc>
 	 * 	response.setOutput(<jk>new</jk> Object[]{x,y,z});

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/RestServlet.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestServlet.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestServlet.java
index a6606c1..b7b9321 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestServlet.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestServlet.java
@@ -46,7 +46,6 @@ import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.parser.ParseException;
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.annotation.Parameter;
 import org.apache.juneau.rest.annotation.Properties;
 import org.apache.juneau.rest.response.*;
 import org.apache.juneau.rest.vars.*;
@@ -59,7 +58,7 @@ import org.apache.juneau.utils.*;
 /**
  * Servlet implementation of a REST resource.
  * <p>
- * 	Refer to <a class='doclink' href='package-summary.html#TOC'>REST Servlet API</a> for information about using this class.
+ * 	Refer to <a class="doclink" href="package-summary.html#TOC">REST Servlet API</a> for information about using this class.
  * </p>
  */
 @SuppressWarnings({"rawtypes","hiding"})
@@ -1229,7 +1228,7 @@ public abstract class RestServlet extends HttpServlet {
 	 *
 	 * @param level The log level.
 	 * @param msg The message to log.
-	 * @param args {@link MessageFormat} style arguments in the message.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	protected void log(Level level, String msg, Object...args) {
 		log(level, null, msg, args);
@@ -1243,14 +1242,14 @@ public abstract class RestServlet extends HttpServlet {
 	 * 		it's safe to use this method from within debug log statements.
 	 *	</p>
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	logObjects(<jsf>DEBUG</jsf>, <js>"Pojo contents:\n{0}"</js>, myPojo);
 	 * </p>
 	 *
 	 * @param level The log level.
 	 * @param msg The message to log.
-	 * @param args {@link MessageFormat} style arguments in the message.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	protected void logObjects(Level level, String msg, Object...args) {
 		for (int i = 0; i < args.length; i++)
@@ -1268,7 +1267,7 @@ public abstract class RestServlet extends HttpServlet {
 	 * @param level The log level.
 	 * @param cause The cause.
 	 * @param msg The message to log.
-	 * @param args {@link MessageFormat} style arguments in the message.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	protected void log(Level level, Throwable cause, String msg, Object...args) {
 		JuneauLogger log = getLogger();
@@ -1700,16 +1699,15 @@ public abstract class RestServlet extends HttpServlet {
 	 * @param req The current request.
 	 * @return The localized contact information of this REST resource, or <jk>null</jk> if no contact information was found.
 	 */
-	@SuppressWarnings("unchecked")
 	public List<Tag> getTags(RestRequest req) {
 		VarResolverSession vr = req.getVarResolverSession();
 		JsonParser jp = JsonParser.DEFAULT;
 		try {
 			if (tags != null)
-				return jp.parseCollection(vr.resolve(tags), ArrayList.class, Tag.class);
+				return jp.parse(vr.resolve(tags), ArrayList.class, Tag.class);
 			String tags = msgs.findFirstString(req.getLocale(), "tags");
 			if (tags != null)
-				return jp.parseCollection(vr.resolve(tags), ArrayList.class, Tag.class);
+				return jp.parse(vr.resolve(tags), ArrayList.class, Tag.class);
 			Swagger s = req.getSwaggerFromFile();
 			if (s != null)
 				return s.getTags();
@@ -1786,7 +1784,7 @@ public abstract class RestServlet extends HttpServlet {
 	 *
 	 * @param locale The client locale.
 	 * @param key The resource bundle key.
-	 * @param args Optional {@link java.text.MessageFormat} variable values to replace.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 * @return The localized message.
 	 */
 	public String getMessage(Locale locale, String key, Object...args) {
@@ -1979,7 +1977,7 @@ public abstract class RestServlet extends HttpServlet {
 		Map<String,String> m = new LinkedHashMap<String,String>();
 		for (RestResource r : restResourceAnnotationsParentFirst.values())
 			if (! r.staticFiles().isEmpty())
-				m.putAll(JsonParser.DEFAULT.parseMap(getVarResolver().resolve(r.staticFiles()), LinkedHashMap.class, String.class, String.class));
+				m.putAll(JsonParser.DEFAULT.parse(getVarResolver().resolve(r.staticFiles()), LinkedHashMap.class));
 		return m;
 	}
 
@@ -2122,7 +2120,6 @@ public abstract class RestServlet extends HttpServlet {
 				throw new ServletException("Use of multipart flag on parameter that's not an array or Collection on method" + m);
 		}
 
-		@SuppressWarnings("unchecked")
 		private Object getValue(RestRequest req, RestResponse res) throws Exception {
 			BeanSession session = req.getBeanSession();
 			switch(paramType) {
@@ -2390,16 +2387,15 @@ public abstract class RestServlet extends HttpServlet {
 			return null;
 		}
 
-		@SuppressWarnings("unchecked")
 		private List<String> getTags(RestRequest req) {
 			VarResolverSession vr = req.getVarResolverSession();
 			JsonParser jp = JsonParser.DEFAULT;
 			try {
 				if (tags != null)
-					return jp.parseCollection(vr.resolve(tags), ArrayList.class, String.class);
+					return jp.parse(vr.resolve(tags), ArrayList.class, String.class);
 				String tags = msgs.findFirstString(req.getLocale(), method.getName() + ".tags");
 				if (tags != null)
-					return jp.parseCollection(vr.resolve(tags), ArrayList.class, String.class);
+					return jp.parse(vr.resolve(tags), ArrayList.class, String.class);
 				Operation o = getSwaggerOperationFromFile(req);
 				if (o != null)
 					return o.getTags();
@@ -2569,7 +2565,7 @@ public abstract class RestServlet extends HttpServlet {
 				ResponseInfo r2 = ResponseInfo.create(description);
 
 				if (r.headers().length > 0) {
-					for (Parameter v : r.headers()) {
+					for (org.apache.juneau.rest.annotation.Parameter v : r.headers()) {
 						HeaderInfo h = HeaderInfo.createStrict(vr.resolve(v.type()));
 						if (! v.collectionFormat().isEmpty())
 							h.setCollectionFormat(vr.resolve(v.collectionFormat()));
@@ -2632,7 +2628,7 @@ public abstract class RestServlet extends HttpServlet {
 					} else if ("schema".equals(name)) {
 						r2.setSchema(jp.parse(value, SchemaInfo.class));
 					} else if ("examples".equals(name)) {
-						r2.setExamples(jp.parseMap(value, TreeMap.class, String.class, Object.class));
+						r2.setExamples(jp.parse(value, TreeMap.class));
 					} else {
 						System.err.println("Unknown bundle key '"+key+"'");
 					}
@@ -2930,7 +2926,7 @@ public abstract class RestServlet extends HttpServlet {
 	 * <p>
 	 * 	Subclasses can augment this list by adding their own variables.
 	 * </p>
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<ja>@Override</ja>
 	 * 	<jk>protected</jk> StringVarResolver createVarResolver() {
@@ -3032,14 +3028,17 @@ public abstract class RestServlet extends HttpServlet {
 	/**
 	 * Returns the class-level properties associated with this servlet.
 	 * <p>
-	 * 	Created by the {@link #createGuards(ObjectMap)} method.
+	 * Created by the {@link #createGuards(ObjectMap)} method.
 	 * <p>
-	 * 	<b>Important note:</b>  The returned {@code Map} is mutable.  Therefore, subclasses are free to override
+	 * <h5 class='section'>Notes:</h5>
+	 * <ul>
+	 * 	<li>The returned {@code Map} is mutable.  Therefore, subclasses are free to override
 	 * 	or set additional initialization parameters in their {@code init()} method.
+	 * </ul>
 	 * <p>
-	 * 	This method can be called from {@link HttpServlet#init(ServletConfig)} or {@link HttpServlet#init()}.
+	 * This method can be called from {@link HttpServlet#init(ServletConfig)} or {@link HttpServlet#init()}.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Old way of getting a boolean init parameter</jc>
 	 * 	String s = getInitParam(<js>"allowMethodParam"</js>);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletContext.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletContext.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletContext.java
index 5124931..83eac97 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletContext.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletContext.java
@@ -118,7 +118,7 @@ public final class RestServletContext extends Context {
 	 * 	Use "*" to represent all methods.
 	 * 	For backwards compatibility, "true" also means "*".
 	 * <p>
-	 * 	Note that per the <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html">HTTP specification</a>, special care should
+	 * 	Note that per the <a class="doclink" href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html">HTTP specification</a>, special care should
 	 * 	be taken when allowing non-safe (POST, PUT, DELETE) methods to be invoked through GET requests.
 	 * <p>
 	 * 	Applicable to servlet class only.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletException.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletException.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletException.java
index dabf8e5..61295fc 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletException.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletException.java
@@ -27,7 +27,7 @@ public class RestServletException extends ServletException {
 	 * Constructor.
 	 *
 	 * @param message The detailed message.
-	 * @param args Optional message arguments.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public RestServletException(String message, Object...args) {
 		super(args.length == 0 ? message : MessageFormat.format(message, args));

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Body.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Body.java b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Body.java
index 7455460..f302e34 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Body.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Body.java
@@ -22,7 +22,7 @@ import java.lang.annotation.*;
  * Annotation that can be applied to a parameter of a {@link RestMethod} annotated method
  * 	to identify it as the HTTP request body converted to a POJO.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<ja>@RestMethod</ja>(name=<js>"POST"</js>)
  * 	<jk>public void</jk> doPostPerson(RestRequest req, RestResponse res, <ja>@Body</ja> Person person) {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/FormData.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/FormData.java b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/FormData.java
index 293f3b8..1086956 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/FormData.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/FormData.java
@@ -23,7 +23,7 @@ import org.apache.juneau.rest.*;
  * Annotation that can be applied to a parameter of a {@link RestMethod} annotated method
  * 	to identify it as a form post entry converted to a POJO.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<ja>@RestMethod</ja>(name=<js>"POST"</js>)
  * 	<jk>public void</jk> doPost(RestRequest req, RestResponse res,

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HasFormData.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HasFormData.java b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HasFormData.java
index 527a6c9..3a8e207 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HasFormData.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HasFormData.java
@@ -25,7 +25,7 @@ import org.apache.juneau.rest.*;
  * <p>
  * 	Note that this can be used to detect the existence of a parameter when it's not set to a particular value.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<ja>@RestMethod</ja>(name=<js>"POST"</js>)
  * 	<jk>public void</jk> doPost(<ja>@HasFormData</ja>(<js>"p1"</js>) <jk>boolean</jk> p1) {


[7/7] incubator-juneau git commit: Eliminate ClassMeta dependencies from Parser. Clean up docs.

Posted by ja...@apache.org.
Eliminate ClassMeta dependencies from Parser.  Clean up docs.

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

Branch: refs/heads/master
Commit: 30dd3b93677907ccbbac7594985f0f8a6f2cba64
Parents: 642f5dd
Author: JamesBognar <ja...@apache.org>
Authored: Tue Feb 7 20:15:48 2017 -0500
Committer: JamesBognar <ja...@apache.org>
Committed: Tue Feb 7 20:15:48 2017 -0500

----------------------------------------------------------------------
 .../apache/juneau/jena/RdfCommonContext.java    |   34 +-
 .../java/org/apache/juneau/jena/RdfParser.java  |   10 +-
 .../apache/juneau/jena/RdfParserContext.java    |    6 +-
 .../org/apache/juneau/jena/RdfSerializer.java   |    8 +-
 .../juneau/jena/RdfSerializerContext.java       |    6 +-
 .../juneau/jena/annotation/RdfSchema.java       |    2 +-
 .../juneau/a/rttests/RoundTripBeanMapsTest.java |   67 +-
 .../juneau/a/rttests/RoundTripMapsTest.java     |   22 +-
 .../a/rttests/RoundTripPrimitivesBeansTest.java |    4 +-
 .../a/rttests/RoundTripSimpleObjectsTest.java   |    2 +-
 .../apache/juneau/a/rttests/RoundTripTest.java  |   28 +-
 .../a/rttests/RoundTripToObjectMapsTest.java    |    6 +-
 .../juneau/dto/html5/BasicHtmlSchemaTest.java   |    4 +-
 .../juneau/dto/html5/HtmlTemplatesTest.java     |    4 +-
 .../java/org/apache/juneau/jena/CommonTest.java |    3 +-
 .../java/org/apache/juneau/jena/RdfTest.java    |    3 +-
 .../java/org/apache/juneau/json/JsonTest.java   |    6 +-
 .../transforms/ByteArrayBase64SwapTest.java     |    9 +-
 .../CommonParser_UrlEncodingTest.java           |    3 +-
 .../juneau/urlencoding/UonParserTest.java       |   62 +-
 .../urlencoding/UrlEncodingParserTest.java      |   42 +-
 .../java/org/apache/juneau/BeanContext.java     |  215 ++--
 .../main/java/org/apache/juneau/BeanMap.java    |    8 +-
 .../java/org/apache/juneau/BeanMapEntry.java    |    2 +-
 .../main/java/org/apache/juneau/BeanMeta.java   |    2 +-
 .../org/apache/juneau/BeanPropertyMeta.java     |    6 +-
 .../java/org/apache/juneau/BeanRegistry.java    |   20 +-
 .../java/org/apache/juneau/BeanSession.java     |  120 +-
 .../main/java/org/apache/juneau/ClassMeta.java  |    2 +-
 .../main/java/org/apache/juneau/CoreApi.java    |    2 +-
 .../org/apache/juneau/FormattedException.java   |    4 +-
 .../juneau/FormattedRuntimeException.java       |    4 +-
 .../main/java/org/apache/juneau/MediaRange.java |    2 +-
 .../main/java/org/apache/juneau/MediaType.java  |   16 +-
 .../main/java/org/apache/juneau/ObjectList.java |    4 +-
 .../main/java/org/apache/juneau/ObjectMap.java  |    2 +-
 .../apache/juneau/PropertyNamerDashedLC.java    |    2 +-
 .../org/apache/juneau/PropertyNamerDefault.java |    2 +-
 .../main/java/org/apache/juneau/Session.java    |    2 +-
 .../main/java/org/apache/juneau/Visibility.java |    2 +-
 .../java/org/apache/juneau/annotation/Bean.java |    8 +-
 .../apache/juneau/annotation/BeanProperty.java  |    8 +-
 .../org/apache/juneau/annotation/Consumes.java  |    4 +-
 .../java/org/apache/juneau/annotation/Pojo.java |    2 +-
 .../org/apache/juneau/annotation/Produces.java  |    4 +-
 .../java/org/apache/juneau/annotation/URI.java  |    2 +-
 .../org/apache/juneau/dto/cognos/DataSet.java   |    2 +-
 .../apache/juneau/dto/jsonschema/JsonType.java  |    2 +-
 .../org/apache/juneau/dto/swagger/Contact.java  |    2 +-
 .../dto/swagger/ExternalDocumentation.java      |    2 +-
 .../apache/juneau/dto/swagger/HeaderInfo.java   |    2 +-
 .../org/apache/juneau/dto/swagger/Info.java     |    2 +-
 .../org/apache/juneau/dto/swagger/Items.java    |    2 +-
 .../org/apache/juneau/dto/swagger/License.java  |    2 +-
 .../apache/juneau/dto/swagger/Operation.java    |    2 +-
 .../apache/juneau/dto/swagger/ResponseInfo.java |    2 +-
 .../juneau/dto/swagger/SecurityScheme.java      |    2 +-
 .../java/org/apache/juneau/dto/swagger/Tag.java |    2 +-
 .../org/apache/juneau/encoders/Encoder.java     |    2 +-
 .../apache/juneau/encoders/EncoderGroup.java    |    4 +-
 .../apache/juneau/html/HtmlDocSerializer.java   |    6 +-
 .../juneau/html/HtmlDocSerializerContext.java   |   16 +-
 .../java/org/apache/juneau/html/HtmlParser.java |   11 +-
 .../apache/juneau/html/HtmlParserContext.java   |    6 +-
 .../juneau/html/HtmlSchemaDocSerializer.java    |    4 +-
 .../org/apache/juneau/html/HtmlSerializer.java  |    8 +-
 .../juneau/html/HtmlSerializerContext.java      |    6 +-
 .../juneau/html/HtmlStrippedDocSerializer.java  |    4 +-
 .../apache/juneau/html/SimpleHtmlWriter.java    |    2 +-
 .../java/org/apache/juneau/ini/ConfigFile.java  |    2 +-
 .../java/org/apache/juneau/ini/ConfigMgr.java   |    2 +-
 .../org/apache/juneau/internal/ClassUtils.java  |    2 +-
 .../apache/juneau/internal/IdentityList.java    |    6 +-
 .../apache/juneau/internal/JuneauLogger.java    |  100 +-
 .../org/apache/juneau/internal/StringUtils.java |    6 +-
 .../apache/juneau/internal/ThrowableUtils.java  |    6 +-
 .../juneau/jso/JavaSerializedObjectParser.java  |    2 +-
 .../jso/JavaSerializedObjectSerializer.java     |    2 +-
 .../java/org/apache/juneau/json/JsonParser.java |   13 +-
 .../apache/juneau/json/JsonParserContext.java   |   10 +-
 .../juneau/json/JsonSchemaSerializer.java       |    4 +-
 .../org/apache/juneau/json/JsonSerializer.java  |    8 +-
 .../juneau/json/JsonSerializerContext.java      |    6 +-
 .../java/org/apache/juneau/json/JsonWriter.java |    5 +-
 .../org/apache/juneau/json/annotation/Json.java |    2 +-
 .../juneau/msgpack/MsgPackInputStream.java      |    5 +-
 .../juneau/msgpack/MsgPackOutputStream.java     |    5 +-
 .../apache/juneau/msgpack/MsgPackParser.java    |    5 +-
 .../juneau/msgpack/MsgPackParserContext.java    |    6 +-
 .../juneau/msgpack/MsgPackSerializer.java       |    4 +-
 .../msgpack/MsgPackSerializerContext.java       |    6 +-
 .../apache/juneau/parser/InputStreamParser.java |    2 +-
 .../apache/juneau/parser/ParseException.java    |    4 +-
 .../java/org/apache/juneau/parser/Parser.java   |  174 ++-
 .../org/apache/juneau/parser/ParserGroup.java   |    4 +-
 .../org/apache/juneau/parser/ReaderParser.java  |    2 +-
 .../juneau/plaintext/PlainTextParser.java       |    8 +-
 .../juneau/plaintext/PlainTextSerializer.java   |    6 +-
 .../serializer/OutputStreamSerializer.java      |    2 +-
 .../juneau/serializer/SerializeException.java   |    4 +-
 .../apache/juneau/serializer/Serializer.java    |    4 +-
 .../juneau/serializer/SerializerContext.java    |    9 +-
 .../juneau/serializer/SerializerGroup.java      |    4 +-
 .../juneau/serializer/SerializerWriter.java     |    2 +-
 .../apache/juneau/serializer/StringObject.java  |    2 +-
 .../juneau/serializer/WriterSerializer.java     |    2 +-
 .../apache/juneau/soap/SoapXmlSerializer.java   |    6 +-
 .../juneau/soap/SoapXmlSerializerContext.java   |    6 +-
 .../java/org/apache/juneau/svl/VarResolver.java |    4 +-
 .../org/apache/juneau/svl/vars/ArgsVar.java     |    2 +-
 .../apache/juneau/svl/vars/ConfigFileVar.java   |    2 +-
 .../apache/juneau/svl/vars/EnvVariablesVar.java |    2 +-
 .../apache/juneau/svl/vars/ManifestFileVar.java |    2 +-
 .../juneau/svl/vars/SystemPropertiesVar.java    |    2 +-
 .../juneau/transform/BeanFilterBuilder.java     |    4 +-
 .../org/apache/juneau/transform/PojoSwap.java   |    4 +-
 .../juneau/transforms/BeanStringSwap.java       |    2 +-
 .../apache/juneau/transforms/CalendarSwap.java  |   46 +-
 .../org/apache/juneau/transforms/DateSwap.java  |   46 +-
 .../apache/juneau/transforms/ReaderSwap.java    |    4 +-
 .../apache/juneau/urlencoding/UonParser.java    |   11 +-
 .../juneau/urlencoding/UonParserContext.java    |    6 +-
 .../juneau/urlencoding/UonSerializer.java       |    8 +-
 .../urlencoding/UonSerializerContext.java       |    6 +-
 .../apache/juneau/urlencoding/UonWriter.java    |    5 +-
 .../juneau/urlencoding/UrlEncodingContext.java  |   11 +-
 .../juneau/urlencoding/UrlEncodingParser.java   |   45 +-
 .../urlencoding/UrlEncodingParserContext.java   |   13 +-
 .../urlencoding/UrlEncodingSerializer.java      |    8 +-
 .../UrlEncodingSerializerContext.java           |   13 +-
 .../main/java/org/apache/juneau/utils/Args.java |    6 +-
 .../org/apache/juneau/utils/MessageBundle.java  |    6 +-
 .../apache/juneau/utils/PojoIntrospector.java   |    2 +-
 .../java/org/apache/juneau/utils/PojoQuery.java |    8 +-
 .../java/org/apache/juneau/utils/PojoRest.java  |   27 +-
 .../apache/juneau/utils/PojoRestException.java  |    2 +-
 .../org/apache/juneau/utils/ProcBuilder.java    |    2 +-
 .../org/apache/juneau/xml/XmlDocSerializer.java |    4 +-
 .../java/org/apache/juneau/xml/XmlParser.java   |    7 +-
 .../org/apache/juneau/xml/XmlParserContext.java |   11 +-
 .../juneau/xml/XmlSchemaDocSerializer.java      |    4 +-
 .../apache/juneau/xml/XmlSchemaSerializer.java  |    6 +-
 .../org/apache/juneau/xml/XmlSerializer.java    |    6 +-
 .../apache/juneau/xml/XmlSerializerContext.java |   16 +-
 .../java/org/apache/juneau/xml/XmlWriter.java   |    5 +-
 .../org/apache/juneau/xml/annotation/Xml.java   |    4 +-
 .../apache/juneau/xml/annotation/XmlSchema.java |    2 +-
 juneau-core/src/main/javadoc/javadoc.css        |    5 +
 juneau-core/src/main/javadoc/overview.html      |   77 +-
 .../juneau-examples-rest.launch                 |   30 +
 .../examples/rest/MethodExampleResource.java    |    2 +-
 .../juneau/microservice/Microservice.java       |    6 +-
 .../juneau/microservice/RestMicroservice.java   |    2 +-
 .../juneau/rest/client/AllowAllRedirects.java   |    7 +-
 .../juneau/rest/client/NameValuePairs.java      |    2 +-
 .../juneau/rest/client/ResponsePattern.java     |    2 +-
 .../org/apache/juneau/rest/client/RestCall.java |   98 +-
 .../apache/juneau/rest/client/RestClient.java   |    4 +-
 .../rest/client/SerializedNameValuePair.java    |    2 +-
 .../apache/juneau/rest/jaxrs/BaseProvider.java  |    6 +-
 .../juneau/rest/jaxrs/JuneauProvider.java       |    2 +-
 .../java/org/apache/juneau/rest/Redirect.java   |    4 +-
 .../org/apache/juneau/rest/RestConverter.java   |    2 +-
 .../org/apache/juneau/rest/RestException.java   |    2 +-
 .../java/org/apache/juneau/rest/RestGuard.java  |    2 +-
 .../org/apache/juneau/rest/RestMatcher.java     |    2 +-
 .../org/apache/juneau/rest/RestRequest.java     | 1038 ++++++++++--------
 .../org/apache/juneau/rest/RestResponse.java    |    8 +-
 .../org/apache/juneau/rest/RestServlet.java     |   43 +-
 .../apache/juneau/rest/RestServletContext.java  |    2 +-
 .../juneau/rest/RestServletException.java       |    2 +-
 .../org/apache/juneau/rest/annotation/Body.java |    2 +-
 .../apache/juneau/rest/annotation/FormData.java |    2 +-
 .../juneau/rest/annotation/HasFormData.java     |    2 +-
 .../apache/juneau/rest/annotation/HasQuery.java |    2 +-
 .../apache/juneau/rest/annotation/Header.java   |    2 +-
 .../apache/juneau/rest/annotation/Messages.java |    2 +-
 .../apache/juneau/rest/annotation/Method.java   |    2 +-
 .../juneau/rest/annotation/Parameter.java       |   21 +-
 .../org/apache/juneau/rest/annotation/Path.java |    2 +-
 .../juneau/rest/annotation/PathRemainder.java   |    2 +-
 .../juneau/rest/annotation/Properties.java      |    2 +-
 .../apache/juneau/rest/annotation/Query.java    |    2 +-
 .../apache/juneau/rest/annotation/Response.java |    6 +-
 .../juneau/rest/annotation/RestMethod.java      |   12 +-
 .../juneau/rest/annotation/RestResource.java    |   20 +-
 .../juneau/rest/converters/Queryable.java       |   15 +-
 .../juneau/rest/labels/ResourceDescription.java |    2 +-
 .../apache/juneau/rest/labels/ResourceLink.java |    4 +-
 189 files changed, 1568 insertions(+), 1565 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfCommonContext.java
----------------------------------------------------------------------
diff --git a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfCommonContext.java b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfCommonContext.java
index 61414c1..548dce5 100644
--- a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfCommonContext.java
+++ b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfCommonContext.java
@@ -309,7 +309,7 @@ public interface RdfCommonContext {
 	 * <ul class='spaced-list'>
 	 * 	<li><js>"lax"</js> - The rules for RDF URI references only, which does permit spaces although the use of spaces is not good practice.
 	 * 	<li><js>"strict"</js> - Sets the IRI engine with rules for valid IRIs, XLink and RDF; it does not permit spaces in IRIs.
-	 * 	<li><js>"iri"</js> - Sets the IRI engine to IRI (<a href='http://www.ietf.org/rfc/rfc3986.txt'>RFC 3986</a>, <a href='http://www.ietf.org/rfc/rfc3987.txt'>RFC 3987</a>).
+	 * 	<li><js>"iri"</js> - Sets the IRI engine to IRI (<a class="doclink" href="http://www.ietf.org/rfc/rfc3986.txt">RFC 3986</a>, <a class="doclink" href="http://www.ietf.org/rfc/rfc3987.txt">RFC 3987</a>).
 	 * </ul>
 	 */
 	public static final String RDF_arp_iriRules = "Rdf.jena.rdfXml.iri-rules";
@@ -338,10 +338,10 @@ public interface RdfCommonContext {
 	 * <p>
 	 * 	See also:
 	 * <ul class='spaced-list'>
-	 * 	<li><a href='http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/rdf/arp/ARPOptions.html#setDefaultErrorMode()'>ARPOptions.setDefaultErrorMode()</a>
-	 * 	<li><a href='http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/rdf/arp/ARPOptions.html#setLaxErrorMode()'>ARPOptions.setLaxErrorMode()</a>
-	 * 	<li><a href='http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/rdf/arp/ARPOptions.html#setStrictErrorMode()'>ARPOptions.setStrictErrorMode()</a>
-	 * 	<li><a href='http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/rdf/arp/ARPOptions.html#setStrictErrorMode(int)'>ARPOptions.setStrictErrorMode(int)</a>
+	 * 	<li><a class="doclink" href="http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/rdf/arp/ARPOptions.html#setDefaultErrorMode()">ARPOptions.setDefaultErrorMode()</a>
+	 * 	<li><a class="doclink" href="http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/rdf/arp/ARPOptions.html#setLaxErrorMode()">ARPOptions.setLaxErrorMode()</a>
+	 * 	<li><a class="doclink" href="http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/rdf/arp/ARPOptions.html#setStrictErrorMode()">ARPOptions.setStrictErrorMode()</a>
+	 * 	<li><a class="doclink" href="http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/rdf/arp/ARPOptions.html#setStrictErrorMode(int)">ARPOptions.setStrictErrorMode(int)</a>
 	 * </ul>
 	 */
 	public static final String RDF_arp_errorMode = "Rdf.jena.rdfXml.error-mode";
@@ -359,7 +359,7 @@ public interface RdfCommonContext {
 	 * <p>
 	 * 	See also:
 	 * <ul class='spaced-list'>
-	 * 	<li><a href='http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/rdf/arp/ARPOptions.html#setEmbedding(boolean)'>ARPOptions.setEmbedding(boolean)</a>
+	 * 	<li><a class="doclink" href="http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/rdf/arp/ARPOptions.html#setEmbedding(boolean)">ARPOptions.setEmbedding(boolean)</a>
 	 * </ul>
 	 */
 	public static final String RDF_arp_embedding = "Rdf.jena.rdfXml.embedding";
@@ -384,8 +384,8 @@ public interface RdfCommonContext {
 	 * <p>
 	 * 	See also:
 	 * <ul class='spaced-list'>
-	 * 	<li><a href='http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/rdf/arp/ARPErrorNumbers.html'>ARPErrorNumbers</a>
-	 * 	<li><a href='http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/rdf/arp/ARPOptions.html#setErrorMode(int,%20int)'>ARPOptions.setErrorMode(int, int)</a>
+	 * 	<li><a class="doclink" href="http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/rdf/arp/ARPErrorNumbers.html">ARPErrorNumbers</a>
+	 * 	<li><a class="doclink" href="http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/rdf/arp/ARPOptions.html#setErrorMode(int,%20int)">ARPOptions.setErrorMode(int, int)</a>
 	 * </ul>
 	 */
 	public static final String RDF_arp_err_ = "Rdf.jena.rdfXml.ERR_";
@@ -549,7 +549,7 @@ public interface RdfCommonContext {
 	 * 	<li><b>Default:</b> <js>""</js>
 	 * </ul>
 	 * <p>
-	 * 	A list of <code>Resource</code> or a <code>String</code> being a comma separated list of fragment IDs from <a href='http://www.w3.org/TR/rdf-syntax-grammar'>RDF Syntax Grammar</a> indicating grammar rules that will not be used.
+	 * 	A list of <code>Resource</code> or a <code>String</code> being a comma separated list of fragment IDs from <a class="doclink" href="http://www.w3.org/TR/rdf-syntax-grammar">RDF Syntax Grammar</a> indicating grammar rules that will not be used.
 	 */
 	public static final String RDF_rdfxml_blockRules = "Rdf.jena.rdfXml.blockRules";
 
@@ -701,9 +701,11 @@ public interface RdfCommonContext {
 	 * 	<li><js>"LIST"</js> - RDF List container.
 	 * 	<li><js>"MULTI_VALUED"</js> - Multi-valued properties.
 	 * </ul>
-	 *	<p>
-	 *		Important Note:  If you use <js>"BAG"</js> or <js>"MULTI_VALUED"</js>, the order of the elements
-	 *		in the collection will get lost.
+	 * <p>
+	 * <h5 class='section'>Notes:</h5>
+	 * <ul>
+	 * 	<li>If you use <js>"BAG"</js> or <js>"MULTI_VALUED"</js>, the order of the elements in the collection will get lost.
+	 * </ul>
 	 */
 	public static final String RDF_collectionFormat = "Rdf.collectionFormat";
 
@@ -726,7 +728,7 @@ public interface RdfCommonContext {
 	 *	This setting is typically only useful if the beans being parsed into do not have a bean property
 	 *	annotated with {@link Rdf#beanUri @Rdf(beanUri=true)}.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	WriterSerializer s = <jk>new</jk> RdfSerializer.XmlAbbrev().setProperty(<jsf>RDF_looseCollection</jsf>, <jk>true</jk>);
 	 * 	ReaderParser p = <jk>new</jk> RdfParser.Xml().setProperty(<jsf>RDF_looseCollection</jsf>, <jk>true</jk>);
@@ -736,15 +738,15 @@ public interface RdfCommonContext {
 	 * 	<jc>// Serialize to RDF/XML as loose resources</jc>
 	 * 	String rdfXml = s.serialize(l);
 	 *
-	 *		<jc>// Parse back into a Java collection</jc>
-	 * 	l = p.parseCollection(rdfXml, LinkedList.<jk>class</jk>, MyBean.<jk>class</jk>);
+	 *	<jc>// Parse back into a Java collection</jc>
+	 * 	l = p.parse(rdfXml, LinkedList.<jk>class</jk>, MyBean.<jk>class</jk>);
 	 *
 	 * 	MyBean[] b = createArrayOfMyBeans();
 	 *
 	 * 	<jc>// Serialize to RDF/XML as loose resources</jc>
 	 * 	String rdfXml = s.serialize(b);
 	 *
-	 *		<jc>// Parse back into a bean array</jc>
+	 *	<jc>// Parse back into a bean array</jc>
 	 * 	b = p.parse(rdfXml, MyBean[].<jk>class</jk>);
 	 * </p>
 	 */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
----------------------------------------------------------------------
diff --git a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
index eec0ffc..9ac292f 100644
--- a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
+++ b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
@@ -30,9 +30,9 @@ import com.hp.hpl.jena.util.iterator.*;
 /**
  * Parses RDF into POJOs.
  *
- * <h6 class='topic'>Configurable properties</h6>
+ * <h5 class='section'>Configurable properties:</h5>
  * <p>
- * 	Refer to <a class='doclink' href='package-summary.html#ParserConfigurableProperties'>Configurable Properties</a>
+ * 	Refer to <a class="doclink" href="package-summary.html#ParserConfigurableProperties">Configurable Properties</a>
  * 		for the entire list of configurable properties.
  *
  * <h6 class='topic'>Behavior-specific subclasses</h6>
@@ -45,9 +45,9 @@ import com.hp.hpl.jena.util.iterator.*;
  * 	<li>{@link RdfParser.N3} - N3.
  * </ul>
  *
- * <h6 class='topic'>Additional Information</h6>
+ * <h5 class='section'>Additional information:</h5>
  * <p>
- * 	See <a class='doclink' href='package-summary.html#TOC'>RDF Overview</a> for an overview of RDF support in Juneau.
+ * 	See <a class="doclink" href="package-summary.html#TOC">RDF Overview</a> for an overview of RDF support in Juneau.
  */
 @Consumes(value="text/xml+rdf")
 public class RdfParser extends ReaderParser {
@@ -108,8 +108,6 @@ public class RdfParser extends ReaderParser {
 
 		RdfParserSession s = (RdfParserSession)session;
 
-		type = session.normalizeClassMeta(type);
-
 		Model model = s.getModel();
 		RDFReader r = s.getRdfReader();
 		r.read(model, session.getReader(), null);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParserContext.java
----------------------------------------------------------------------
diff --git a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParserContext.java b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParserContext.java
index eb0c1f9..224dc13 100644
--- a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParserContext.java
+++ b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParserContext.java
@@ -51,11 +51,11 @@ import org.apache.juneau.xml.*;
  *
  * <h6 class='topic' id='ConfigProperties'>Configurable properties inherited by the RDF parsers</h6>
  * <ul class='javahierarchy'>
- * 	<li class='c'><a class='doclink' href='../BeanContext.html#ConfigProperties'>BeanContext</a> - Properties associated with handling beans on serializers and parsers.
+ * 	<li class='c'><a class="doclink" href="../BeanContext.html#ConfigProperties">BeanContext</a> - Properties associated with handling beans on serializers and parsers.
  * 	<ul>
- * 		<li class='c'><a class='doclink' href='../parser/ParserContext.html#ConfigProperties'>ParserContext</a> - Configurable properties common to all parsers.
+ * 		<li class='c'><a class="doclink" href="../parser/ParserContext.html#ConfigProperties">ParserContext</a> - Configurable properties common to all parsers.
  * 		<ul>
- * 			<li class='i'><a class='doclink' href='RdfCommonContext.html#ConfigProperties'>RdfCommonContext</a> - Configurable properties common to the RDF serializers and parsers.
+ * 			<li class='i'><a class="doclink" href="RdfCommonContext.html#ConfigProperties">RdfCommonContext</a> - Configurable properties common to the RDF serializers and parsers.
  * 		</ul>
  * 	</ul>
  * </ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
index 461decb..f296666 100644
--- a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
+++ b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
@@ -30,9 +30,9 @@ import com.hp.hpl.jena.rdf.model.*;
 /**
  * Serializes POJOs to RDF.
  *
- * <h6 class='topic'>Configurable properties</h6>
+ * <h5 class='section'>Configurable properties:</h5>
  * <p>
- * 	Refer to <a class='doclink' href='package-summary.html#SerializerConfigurableProperties'>Configurable Properties</a>
+ * 	Refer to <a class="doclink" href="package-summary.html#SerializerConfigurableProperties">Configurable Properties</a>
  * 		for the entire list of configurable properties.
  *
  * <h6 class='topic'>Behavior-specific subclasses</h6>
@@ -46,9 +46,9 @@ import com.hp.hpl.jena.rdf.model.*;
  * 	<li>{@link RdfSerializer.N3} - N3.
  * </ul>
  *
- * <h6 class='topic'>Additional Information</h6>
+ * <h5 class='section'>Additional information:</h5>
  * <p>
- * 	See <a class='doclink' href='package-summary.html#TOC'>RDF Overview</a> for an overview of RDF support in Juneau.
+ * 	See <a class="doclink" href="package-summary.html#TOC">RDF Overview</a> for an overview of RDF support in Juneau.
  */
 @SuppressWarnings({ "rawtypes", "unchecked" })
 @Produces(value="text/xml+rdf+abbrev", contentType="text/xml+rdf")

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerContext.java
----------------------------------------------------------------------
diff --git a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerContext.java b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerContext.java
index fec2789..2e3e5f0 100644
--- a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerContext.java
+++ b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerContext.java
@@ -72,11 +72,11 @@ import org.apache.juneau.xml.*;
  *
  * <h6 class='topic' id='ConfigProperties'>Configurable properties inherited by the RDF serializers</h6>
  * <ul class='javahierarchy'>
- * 	<li class='c'><a class='doclink' href='../BeanContext.html#ConfigProperties'>BeanContext</a> - Properties associated with handling beans on serializers and parsers.
+ * 	<li class='c'><a class="doclink" href="../BeanContext.html#ConfigProperties">BeanContext</a> - Properties associated with handling beans on serializers and parsers.
  * 	<ul>
- * 		<li class='c'><a class='doclink' href='../serializer/SerializerContext.html#ConfigProperties'>SerializerContext</a> - Configurable properties common to all serializers.
+ * 		<li class='c'><a class="doclink" href="../serializer/SerializerContext.html#ConfigProperties">SerializerContext</a> - Configurable properties common to all serializers.
  * 		<ul>
- * 			<li class='c'><a class='doclink' href='RdfCommonContext.html#ConfigProperties'>RdfCommonContext</a> - Configurable properties common to the RDF serializers and parsers.
+ * 			<li class='c'><a class="doclink" href="RdfCommonContext.html#ConfigProperties">RdfCommonContext</a> - Configurable properties common to the RDF serializers and parsers.
  * 		</ul>
  * 	</ul>
  * </ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-rdf/src/main/java/org/apache/juneau/jena/annotation/RdfSchema.java
----------------------------------------------------------------------
diff --git a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/annotation/RdfSchema.java b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/annotation/RdfSchema.java
index 5471bcf..3520f0e 100644
--- a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/annotation/RdfSchema.java
+++ b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/annotation/RdfSchema.java
@@ -52,7 +52,7 @@ public @interface RdfSchema {
 	 * <p>
 	 * 	Inherited by child packages.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p>
 	 * 	Contents of <code>package-info.java</code>...
 	 * </p>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java
index c610ee5..7d30f9a 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java
@@ -19,7 +19,6 @@ import java.util.*;
 
 import javax.xml.datatype.*;
 
-import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.json.annotation.*;
@@ -97,21 +96,21 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		}};
 
 		l.get(0).setF1("bar");
-		l = roundTripCollection(l, List.class, IBean.class);
+		l = roundTrip(l, List.class, IBean.class);
 		assertEquals("bar", l.get(0).getF1());
-		l = roundTripCollection(l, LinkedList.class, IBean.class);
+		l = roundTrip(l, LinkedList.class, IBean.class);
 		assertEquals("bar", l.get(0).getF1());
 
 		l.get(0).setF1("baz");
-		l = roundTripCollection(l, List.class, ABean.class);
+		l = roundTrip(l, List.class, ABean.class);
 		assertEquals("baz", l.get(0).getF1());
-		l = roundTripCollection(l, LinkedList.class, ABean.class);
+		l = roundTrip(l, LinkedList.class, ABean.class);
 		assertEquals("baz", l.get(0).getF1());
 
 		l.get(0).setF1("bing");
-		l = roundTripCollection(l, List.class, CBean.class);
+		l = roundTrip(l, List.class, CBean.class);
 		assertEquals("bing", l.get(0).getF1());
-		l = roundTripCollection(l, LinkedList.class, CBean.class);
+		l = roundTrip(l, LinkedList.class, CBean.class);
 		assertEquals("bing", l.get(0).getF1());
 	}
 
@@ -125,21 +124,21 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		}};
 
 		l.get("foo").setF1("bar");
-		l = roundTripMap(l, Map.class, String.class, IBean.class);
+		l = roundTrip(l, Map.class, String.class, IBean.class);
 		assertEquals("bar", l.get("foo").getF1());
-		l = roundTripMap(l, LinkedHashMap.class, String.class, IBean.class);
+		l = roundTrip(l, LinkedHashMap.class, String.class, IBean.class);
 		assertEquals("bar", l.get("foo").getF1());
 
 		l.get("foo").setF1("baz");
-		l = roundTripMap(l, Map.class, String.class, ABean.class);
+		l = roundTrip(l, Map.class, String.class, ABean.class);
 		assertEquals("baz", l.get("foo").getF1());
-		l = roundTripMap(l, LinkedHashMap.class, String.class, ABean.class);
+		l = roundTrip(l, LinkedHashMap.class, String.class, ABean.class);
 		assertEquals("baz", l.get("foo").getF1());
 
 		l.get("foo").setF1("bing");
-		l = roundTripMap(l, Map.class, String.class, CBean.class);
+		l = roundTrip(l, Map.class, String.class, CBean.class);
 		assertEquals("bing", l.get("foo").getF1());
-		l = roundTripMap(l, LinkedHashMap.class, String.class, CBean.class);
+		l = roundTrip(l, LinkedHashMap.class, String.class, CBean.class);
 		assertEquals("bing", l.get("foo").getF1());
 	}
 
@@ -925,7 +924,7 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 
 		Map<String,L> m = new LinkedHashMap<String,L>();
 		m.put("bar", L.create());
-		roundTripMap(m, LinkedHashMap.class, String.class, L.class);
+		roundTrip(m, LinkedHashMap.class, String.class, L.class);
 	}
 
 	@Json(wrapperAttr="foo")
@@ -949,7 +948,7 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 
 		Map<String,M> m = new LinkedHashMap<String,M>();
 		m.put("bar", M.create());
-		roundTripMap(m, LinkedHashMap.class, String.class, M.class);
+		roundTrip(m, LinkedHashMap.class, String.class, M.class);
 	}
 
 	@Json(wrapperAttr="foo")
@@ -973,42 +972,4 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 			return m;
 		}
 	}
-
-	//====================================================================================================
-	// Test parsing into top-level non-static inner classes with outer context.
-	//====================================================================================================
-	@Test
-	public void testParsingIntoTopLevelNonStaticInnerClasses() throws Exception {
-		N n = new N(1);
-
-		if (returnOriginalObject)
-			return;
-
-		Serializer s = getSerializer();
-		Parser p = getParser();
-
-		Object r = s.serialize(n.n2);
-		n = new N(2);
-		ParserSession session = p.createSession(r, null, null, n, null, null, null);
-
-		N.N2 n2 = p.parse(session, BeanContext.DEFAULT.getClassMeta(N.N2.class));
-
-		// The inner N2.f1 field should be the value of the outer object passed in through the context.
-		assertEquals(2, n2.f1);
-	}
-
-	public static class N {
-		public int f1;
-		public N2 n2;
-
-		public N(int f1) {
-			this.f1 = f1;
-			n2 = new N2();
-		}
-		public class N2 {
-			private int f1 = N.this.f1;
-			public int dummy = 1;
-		}
-	}
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripMapsTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripMapsTest.java b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripMapsTest.java
index abd4c72..41a3475 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripMapsTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripMapsTest.java
@@ -31,7 +31,7 @@ import org.junit.*;
  * Tests designed to serialize and parse objects to make sure we end up
  * with the same objects for all serializers and parsers.
  */
-@SuppressWarnings({"unchecked","deprecation","javadoc"})
+@SuppressWarnings({"deprecation","javadoc"})
 public class RoundTripMapsTest extends RoundTripTest {
 
 	public RoundTripMapsTest(String label, Serializer s, Parser p, int flags) throws Exception {
@@ -55,7 +55,7 @@ public class RoundTripMapsTest extends RoundTripTest {
 		Map<Integer,String> t = new TreeMap<Integer,String>();
 		t.put(1, "a");
 		t.put(2, null);
-		t = roundTripMap(t, TreeMap.class, Integer.class, String.class);
+		t = roundTrip(t, TreeMap.class, Integer.class, String.class);
 		assertEquals("a", t.get(1));
 		assertNull(null, t.get(2));
 
@@ -63,7 +63,7 @@ public class RoundTripMapsTest extends RoundTripTest {
 		t.put(1, "a");
 		t.put(2, null);
 		t.put(null, "b");
-		t = roundTripMap(t, HashMap.class, Integer.class, String.class);
+		t = roundTrip(t, HashMap.class, Integer.class, String.class);
 		assertEquals("a", t.get(1));
 		assertNull(t.get(2));
 		assertEquals("b", t.get(null));
@@ -77,7 +77,7 @@ public class RoundTripMapsTest extends RoundTripTest {
 		Map<Boolean,String> t = new TreeMap<Boolean,String>();
 		t.put(true, "a");
 		t.put(false, null);
-		t = roundTripMap(t, TreeMap.class, Boolean.class, String.class);
+		t = roundTrip(t, TreeMap.class, Boolean.class, String.class);
 		assertEquals("a", t.get(true));
 		assertNull(null, t.get(false));
 
@@ -85,7 +85,7 @@ public class RoundTripMapsTest extends RoundTripTest {
 		t.put(true, "a");
 		t.put(false, null);
 		t.put(null, "b");
-		t = roundTripMap(t, HashMap.class, Boolean.class, String.class);
+		t = roundTrip(t, HashMap.class, Boolean.class, String.class);
 		assertEquals("a", t.get(true));
 		assertNull(t.get(false));
 		assertEquals("b", t.get(null));
@@ -144,7 +144,7 @@ public class RoundTripMapsTest extends RoundTripTest {
 		Map<Date,String> t = new TreeMap<Date,String>();
 		t.put(td1, "a");
 		t.put(td2, null);
-		t = roundTripMap(t, TreeMap.class, Date.class, String.class);
+		t = roundTrip(t, TreeMap.class, Date.class, String.class);
 		assertEquals("a", t.get(td1));
 		assertNull(null, t.get(td2));
 
@@ -152,7 +152,7 @@ public class RoundTripMapsTest extends RoundTripTest {
 		t.put(td1, "a");
 		t.put(td2, null);
 		t.put(null, "b");
-		t = roundTripMap(t, HashMap.class, Date.class, String.class);
+		t = roundTrip(t, HashMap.class, Date.class, String.class);
 		assertEquals("a", t.get(td1));
 		assertNull(t.get(td2));
 		assertEquals("b", t.get(null));
@@ -171,7 +171,7 @@ public class RoundTripMapsTest extends RoundTripTest {
 		Map<Calendar,String> t = new TreeMap<Calendar,String>();
 		t.put(td1, "a");
 		t.put(td2, null);
-		t = roundTripMap(t, TreeMap.class, GregorianCalendar.class, String.class);
+		t = roundTrip(t, TreeMap.class, GregorianCalendar.class, String.class);
 		assertEquals("a", t.get(td1));
 		assertNull(null, t.get(td2));
 
@@ -179,7 +179,7 @@ public class RoundTripMapsTest extends RoundTripTest {
 		t.put(td1, "a");
 		t.put(td2, null);
 		t.put(null, "b");
-		t = roundTripMap(t, HashMap.class, GregorianCalendar.class, String.class);
+		t = roundTrip(t, HashMap.class, GregorianCalendar.class, String.class);
 		assertEquals("a", t.get(td1));
 		assertNull(t.get(td2));
 		assertEquals("b", t.get(null));
@@ -194,7 +194,7 @@ public class RoundTripMapsTest extends RoundTripTest {
 		Map<TestEnum,String> t = new TreeMap<TestEnum,String>();
 		t.put(TestEnum.FOO, "a");
 		t.put(TestEnum.BAR, null);
-		t = roundTripMap(t, TreeMap.class, TestEnum.class, String.class);
+		t = roundTrip(t, TreeMap.class, TestEnum.class, String.class);
 		assertEquals("a", t.get(TestEnum.FOO));
 		assertNull(null, t.get(TestEnum.BAR));
 
@@ -202,7 +202,7 @@ public class RoundTripMapsTest extends RoundTripTest {
 		t.put(TestEnum.FOO, "a");
 		t.put(TestEnum.BAR, null);
 		t.put(null, "b");
-		t = roundTripMap(t, HashMap.class, TestEnum.class, String.class);
+		t = roundTrip(t, HashMap.class, TestEnum.class, String.class);
 		assertEquals("a", t.get(TestEnum.FOO));
 		assertNull(t.get(TestEnum.BAR));
 		assertEquals("b", t.get(null));

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripPrimitivesBeansTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripPrimitivesBeansTest.java b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripPrimitivesBeansTest.java
index 8dd1407..49b18f8 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripPrimitivesBeansTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripPrimitivesBeansTest.java
@@ -24,7 +24,7 @@ import org.junit.*;
  * Tests designed to serialize and parse objects to make sure we end up
  * with the same objects for all serializers and parsers.
  */
-@SuppressWarnings({"unchecked","serial","javadoc"})
+@SuppressWarnings({"serial","javadoc"})
 public class RoundTripPrimitivesBeansTest extends RoundTripTest {
 
 	public RoundTripPrimitivesBeansTest(String label, Serializer s, Parser p, int flags) throws Exception {
@@ -274,7 +274,7 @@ public class RoundTripPrimitivesBeansTest extends RoundTripTest {
 		}};
 		if (p == null)
 			return;
-		t = roundTrip(t, p.getBeanContext().createSession().getCollectionClassMeta(List.class, PrimitivesBean.class));
+		t = roundTrip(t, List.class, PrimitivesBean.class);
 
 		PrimitivesBean t2 = t.get(2);
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripSimpleObjectsTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripSimpleObjectsTest.java b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripSimpleObjectsTest.java
index 217209a..33cbe28 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripSimpleObjectsTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripSimpleObjectsTest.java
@@ -734,7 +734,7 @@ public class RoundTripSimpleObjectsTest extends RoundTripTest {
 		t.add(1);
 		t.add(2);
 		t.add(3);
-		t = roundTripCollection(t, Vector.class, Integer.class);
+		t = roundTrip(t, Vector.class, Integer.class);
 	}
 
 	//====================================================================================================

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java
index 675084a..c0e8070 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java
@@ -19,6 +19,7 @@ import static org.apache.juneau.urlencoding.UrlEncodingContext.*;
 import static org.apache.juneau.xml.XmlSerializerContext.*;
 import static org.apache.juneau.html.HtmlSerializerContext.*;
 
+import java.lang.reflect.Type;
 import java.util.*;
 import java.util.Map.*;
 
@@ -230,34 +231,11 @@ public abstract class RoundTripTest {
 		return null;
 	}
 
-	public <T> T roundTrip(T object, ClassMeta<? extends T> t) throws Exception {
+	public <T> T roundTrip(T object, Type c, Type...args) throws Exception {
 		Object out = serialize(object, this.s);
 		if (p == null)
 			return object;
-		T o = this.p.parse(out, t);
-		return (returnOriginalObject ? object : o);
-	}
-	public <T> T roundTrip(T object, Class<? extends T> c) throws Exception {
-		Object out = serialize(object, this.s);
-		if (p == null)
-			return object;
-		T o = this.p.parse(out, p.getBeanContext().getClassMeta(c));
-		return (returnOriginalObject ? object : o);
-	}
-	public <K,V,T extends Map<K,V>> T roundTripMap(T object, Class<? extends T> c, Class<K> k, Class<V> v) throws Exception {
-		Object out = serialize(object, this.s);
-		if (p == null)
-			return object;
-		ClassMeta<? extends T> cm = p.getBeanContext().getClassMeta(c, k, v);
-		T o = this.p.parse(out, cm);
-		return (returnOriginalObject ? object : o);
-	}
-	public <E,T extends Collection<E>> T roundTripCollection(T object, Class<? extends T> c, Class<E> e) throws Exception {
-		Object out = serialize(object, this.s);
-		if (p == null)
-			return object;
-		ClassMeta<? extends T> cm = p.getBeanContext().getClassMeta(c, e);
-		T o = this.p.parse(out, cm);
+		T o = (T)this.p.parse(out, c, args);
 		return (returnOriginalObject ? object : o);
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripToObjectMapsTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripToObjectMapsTest.java b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripToObjectMapsTest.java
index 3c7b33a..a3aa3b6 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripToObjectMapsTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripToObjectMapsTest.java
@@ -35,7 +35,7 @@ public class RoundTripToObjectMapsTest extends RoundTripTest {
 	//====================================================================================================
 	// Class with X(ObjectMap) constructor and toObjectMap() method.
 	//====================================================================================================
-	@SuppressWarnings({ "serial", "unchecked" })
+	@SuppressWarnings({"serial"})
 	@Test
 	public void test() throws Exception {
 		A a = new A(new ObjectMap("{f1:'a',f2:2}"));
@@ -50,13 +50,13 @@ public class RoundTripToObjectMapsTest extends RoundTripTest {
 		assertEquals(2, aa[0].f2);
 
 		List<A> a2 = new ArrayList<A>(){{add(new A(new ObjectMap("{f1:'a',f2:2}")));}};
-		a2 = roundTrip(a2, BeanContext.DEFAULT.createSession().getCollectionClassMeta(List.class, A.class));
+		a2 = roundTrip(a2, List.class, A.class);
 		assertEquals(1, a2.size());
 		assertEquals("a", a2.get(0).f1);
 		assertEquals(2, a2.get(0).f2);
 
 		Map<String,A> a3 = new LinkedHashMap<String,A>(){{put("a", new A(new ObjectMap("{f1:'a',f2:2}")));}};
-		a3 = roundTrip(a3, BeanContext.DEFAULT.createSession().getMapClassMeta(Map.class, String.class, A.class));
+		a3 = roundTrip(a3, Map.class, String.class, A.class);
 		assertEquals(1, a3.size());
 		assertEquals("a", a3.get("a").f1);
 		assertEquals(2, a3.get("a").f2);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/BasicHtmlSchemaTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/BasicHtmlSchemaTest.java b/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/BasicHtmlSchemaTest.java
index 9291052..ae3a028 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/BasicHtmlSchemaTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/BasicHtmlSchemaTest.java
@@ -807,7 +807,7 @@ public class BasicHtmlSchemaTest {
 		} catch (AssertionError e) {
 			throw e;
 		} catch (Exception e) {
-			throw new AssertionError(label + " test failed", e);
+			throw new AssertionError(label + " test failed.  exception=" + e.getLocalizedMessage());
 		}
 	}
 
@@ -820,7 +820,7 @@ public class BasicHtmlSchemaTest {
 		} catch (AssertionError e) {
 			throw e;
 		} catch (Exception e) {
-			throw new AssertionError(label + " test failed", e);
+			throw new AssertionError(label + " test failed.  exception=" + e.getLocalizedMessage());
 		}
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/HtmlTemplatesTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/HtmlTemplatesTest.java b/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/HtmlTemplatesTest.java
index 6606228..e4c442c 100644
--- a/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/HtmlTemplatesTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/HtmlTemplatesTest.java
@@ -105,7 +105,7 @@ public class HtmlTemplatesTest {
 		} catch (AssertionError e) {
 			throw e;
 		} catch (Exception e) {
-			throw new AssertionError(label + " test failed", e);
+			throw new AssertionError(label + " test failed.  exception=" + e.getLocalizedMessage());
 		}
 	}
 
@@ -118,7 +118,7 @@ public class HtmlTemplatesTest {
 		} catch (AssertionError e) {
 			throw e;
 		} catch (Exception e) {
-			throw new AssertionError(label + " test failed", e);
+			throw new AssertionError(label + " test failed.  exception=" + e.getLocalizedMessage());
 		}
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonTest.java b/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonTest.java
index 45994ec..1e8daff 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonTest.java
@@ -236,8 +236,7 @@ public class CommonTest {
 
 		String r = s.serialize(l1);
 		assertEquals("<rdf:Seq><rdf:li rdf:parseType='Resource'><jp:x1><rdf:Seq><rdf:li rdf:parseType='Resource'><jp:x2>2</jp:x2></rdf:li></rdf:Seq></jp:x1><jp:x2>2</jp:x2></rdf:li></rdf:Seq>", strip(r));
-		ClassMeta<LinkedList<F>> cm = p.getBeanContext().getClassMeta(LinkedList.class, F.class);
-		l2 = p.parse(r, cm);
+		l2 = p.parse(r, LinkedList.class, F.class);
 		assertEqualObjects(l1, l2);
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-test/src/test/java/org/apache/juneau/jena/RdfTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/jena/RdfTest.java b/juneau-core-test/src/test/java/org/apache/juneau/jena/RdfTest.java
index 6becb22..d84ca86 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/jena/RdfTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/jena/RdfTest.java
@@ -524,7 +524,6 @@ public class RdfTest {
 	}
 
 	@Test
-	@SuppressWarnings("unchecked")
 	public void testLooseCollectionsOfBeans() throws Exception {
 		WriterSerializer s = new RdfSerializer.XmlAbbrev().setProperty(RDF_looseCollections, true);
 		ReaderParser p = new RdfParser.Xml().setProperty(RDF_looseCollections, true);
@@ -548,7 +547,7 @@ public class RdfTest {
 				+ "\n</rdf:RDF>";
 		assertXmlEquals(expected, rdfXml);
 
-		l = p.parseCollection(rdfXml, LinkedList.class, D.class);
+		l = p.parse(rdfXml, LinkedList.class, D.class);
 		D[] da = l.toArray(new D[l.size()]);
 		rdfXml = s.serialize(da);
 		expected =

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-test/src/test/java/org/apache/juneau/json/JsonTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/json/JsonTest.java b/juneau-core-test/src/test/java/org/apache/juneau/json/JsonTest.java
index 0963c4f..cfe4096 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/json/JsonTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/json/JsonTest.java
@@ -194,7 +194,6 @@ public class JsonTest {
 	// testWrapperAttrAnnotationOnBean
 	//====================================================================================================
 	@Test
-	@SuppressWarnings("unchecked")
 	public void testWrapperAttrAnnotationOnBean() throws Exception {
 		JsonSerializer s = JsonSerializer.DEFAULT_LAX;
 		JsonParser p = JsonParser.DEFAULT;
@@ -211,7 +210,7 @@ public class JsonTest {
 		r = s.serialize(m);
 		assertEquals("{bar:{foo:{f1:1}}}", r);
 
-		m = p.parseMap(r, LinkedHashMap.class, String.class, A.class);
+		m = p.parse(r, LinkedHashMap.class, String.class, A.class);
 		assertEquals(1, m.get("bar").f1);
 	}
 
@@ -230,7 +229,6 @@ public class JsonTest {
 	// testWrapperAttrAnnotationOnNonBean
 	//====================================================================================================
 	@Test
-	@SuppressWarnings("unchecked")
 	public void testWrapperAttrAnnotationOnNonBean() throws Exception {
 		JsonSerializer s = JsonSerializer.DEFAULT_LAX;
 		JsonParser p = JsonParser.DEFAULT;
@@ -247,7 +245,7 @@ public class JsonTest {
 		r = s.serialize(m);
 		assertEquals("{bar:{foo:'1'}}", r);
 
-		m = p.parseMap(r, LinkedHashMap.class, String.class, B.class);
+		m = p.parse(r, LinkedHashMap.class, String.class, B.class);
 		assertEquals(1, m.get("bar").f1);
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-test/src/test/java/org/apache/juneau/transforms/ByteArrayBase64SwapTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/transforms/ByteArrayBase64SwapTest.java b/juneau-core-test/src/test/java/org/apache/juneau/transforms/ByteArrayBase64SwapTest.java
index ab8565f..a7d593e 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/transforms/ByteArrayBase64SwapTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/transforms/ByteArrayBase64SwapTest.java
@@ -17,14 +17,13 @@ import static org.junit.Assert.*;
 
 import java.util.*;
 
-import org.apache.juneau.*;
 import org.apache.juneau.a.rttests.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
 import org.junit.*;
 
-@SuppressWarnings({"unchecked","serial","javadoc"})
+@SuppressWarnings({"serial","javadoc"})
 public class ByteArrayBase64SwapTest extends RoundTripTest {
 
 	public ByteArrayBase64SwapTest(String label, Serializer s, Parser p, int flags) throws Exception {
@@ -64,15 +63,13 @@ public class ByteArrayBase64SwapTest extends RoundTripTest {
 		if (p == null)
 			return;
 
-		BeanSession session = p.getBeanContext().createSession();
-
 		List<byte[]> fl = new ArrayList<byte[]>() {{
 			add(new byte[]{1,2,3});
 			add(new byte[]{4,5,6});
 			add(null);
 		}};
 		assertEquals("['AQID','BAUG',null]", s.serialize(fl));
-		fl = roundTrip(fl, session.getCollectionClassMeta(List.class, byte[].class));
+		fl = roundTrip(fl, List.class, byte[].class);
 		assertEquals(1, fl.get(0)[0]);
 		assertEquals(5, fl.get(1)[1]);
 		assertNull(fl.get(2));
@@ -83,7 +80,7 @@ public class ByteArrayBase64SwapTest extends RoundTripTest {
 			put(null, new byte[]{4,5,6});
 			put("null", new byte[]{7,8,9});
 		}};
-		fm = roundTrip(fm, session.getMapClassMeta(Map.class, String.class, byte[].class));
+		fm = roundTrip(fm, Map.class, String.class, byte[].class);
 		assertEquals(1, fm.get("foo")[0]);
 		assertNull(fm.get(1));
 		assertEquals(5, fm.get(null)[1]);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java
index 6e3823a..5739068 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java
@@ -179,8 +179,7 @@ public class CommonParser_UrlEncodingTest {
 		assertEquals("0=foo&1=bar", s.serialize(l));
 
 		String in =  "0=foo&1=bar";
-		ClassMeta<LinkedList<String>> cm = p.getBeanContext().createSession().getClassMeta(LinkedList.class, String.class);
-		l = p.parse(in, cm);
+		l = p.parse(in, LinkedList.class, String.class);
 		assertObjectEquals("['foo','bar']",l);
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonParserTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonParserTest.java b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonParserTest.java
index b18f791..375de89 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonParserTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonParserTest.java
@@ -19,7 +19,7 @@ import java.util.*;
 import org.apache.juneau.parser.*;
 import org.junit.*;
 
-@SuppressWarnings({"rawtypes","unchecked","javadoc"})
+@SuppressWarnings({"rawtypes","javadoc"})
 public class UonParserTest {
 
 	static UonParser p = UonParser.DEFAULT;
@@ -48,12 +48,12 @@ public class UonParserTest {
 
 		// 2nd level
 		t = "$o(a=a)";
-		assertEquals("a", p.parse(t, Map.class).get("a"));
-		assertEquals("a", pe.parse(t, Map.class).get("a"));
+		assertEquals("a", ((Map)p.parse(t, Map.class)).get("a"));
+		assertEquals("a", ((Map)pe.parse(t, Map.class)).get("a"));
 
 		t = "(a=a)";
-		assertEquals("a", p.parse(t, Map.class).get("a"));
-		assertEquals("a", pe.parse(t, Map.class).get("a"));
+		assertEquals("a", ((Map)p.parse(t, Map.class)).get("a"));
+		assertEquals("a", ((Map)pe.parse(t, Map.class)).get("a"));
 
 		// Simple map
 		// Top level
@@ -70,7 +70,7 @@ public class UonParserTest {
 		assertNull(m.get("f"));
 
 		t = "(a=true)";
-		m = p.parseMap(t, HashMap.class, String.class, Boolean.class);
+		m = p.parse(t, HashMap.class, String.class, Boolean.class);
 		assertTrue(m.get("a") instanceof Boolean);
 		assertEquals("true", m.get("a").toString());
 
@@ -122,14 +122,14 @@ public class UonParserTest {
 
 		// 2nd level in map
 		t = "$o(x=$a())";
-		m = p.parseMap(t, HashMap.class, String.class, List.class);
+		m = p.parse(t, HashMap.class, String.class, List.class);
 		assertTrue(m.containsKey("x"));
 		assertTrue(((List)m.get("x")).isEmpty());
 		m = (Map)p.parse(t, Object.class);
 		assertTrue(m.containsKey("x"));
 		assertTrue(((List)m.get("x")).isEmpty());
 		t = "(x=())";
-		m = p.parseMap(t, HashMap.class, String.class, List.class);
+		m = p.parse(t, HashMap.class, String.class, List.class);
 		assertTrue(m.containsKey("x"));
 		assertTrue(((List)m.get("x")).isEmpty());
 
@@ -140,7 +140,7 @@ public class UonParserTest {
 		l = (List)l.get(0);
 		assertTrue(l.isEmpty());
 		t = "(())";
-		l = p.parseCollection(t, LinkedList.class, List.class);
+		l = p.parse(t, LinkedList.class, List.class);
 		assertTrue(l.size() == 1);
 		l = (List)l.get(0);
 		assertTrue(l.isEmpty());
@@ -152,7 +152,7 @@ public class UonParserTest {
 		assertTrue(l.size() == 1);
 		assertEquals("", l.get(0));
 		t = "(())";
-		l = p.parseCollection(t, List.class, String.class);
+		l = p.parse(t, List.class, String.class);
 		assertTrue(l.size() == 1);
 		assertEquals("", l.get(0));
 
@@ -161,7 +161,7 @@ public class UonParserTest {
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("", ((List)m.get("")).get(0));
 		t = "(=(()))";
-		m = p.parseMap(t, HashMap.class, String.class, List.class);
+		m = p.parse(t, HashMap.class, String.class, List.class);
 		assertEquals("", ((List)m.get("")).get(0));
 
 		// Array containing 3 empty strings
@@ -172,7 +172,7 @@ public class UonParserTest {
 		assertEquals("", l.get(1));
 		assertEquals("", l.get(2));
 		t = "(,,)";
-		l = p.parseCollection(t, List.class, Object.class);
+		l = p.parse(t, List.class, Object.class);
 		assertTrue(l.size() == 3);
 		assertEquals("", l.get(0));
 		assertEquals("", l.get(1));
@@ -192,10 +192,10 @@ public class UonParserTest {
 		assertTrue(m.size() == 1);
 		assertEquals("\u0000", m.get("\u0000"));
 		t = "((\u0000)=(\u0000))";
-		m = p.parseMap(t, HashMap.class, String.class, String.class);
+		m = p.parse(t, HashMap.class, String.class, String.class);
 		assertTrue(m.size() == 1);
 		assertEquals("\u0000", m.get("\u0000"));
-		m = p.parseMap(t, HashMap.class, String.class, Object.class);
+		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertTrue(m.size() == 1);
 		assertEquals("\u0000", m.get("\u0000"));
 
@@ -215,10 +215,10 @@ public class UonParserTest {
 		m = (Map)p.parse(t, Object.class);
 		assertEquals(Boolean.FALSE, m.get("x"));
 		t = "(x=$b(false))";
-		m = p.parseMap(t, HashMap.class, String.class, Object.class);
+		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals(Boolean.FALSE, m.get("x"));
 		t = "(x=false)";
-		m = p.parseMap(t, HashMap.class, String.class, Boolean.class);
+		m = p.parse(t, HashMap.class, String.class, Boolean.class);
 		assertEquals(Boolean.FALSE, m.get("x"));
 
 		// Number
@@ -241,9 +241,9 @@ public class UonParserTest {
 		m = (Map)p.parse(t, Object.class);
 		assertEquals(123, ((Integer)m.get("x")).intValue());
 		t = "(x=123)";
-		m = p.parseMap(t, HashMap.class, String.class, Number.class);
+		m = p.parse(t, HashMap.class, String.class, Number.class);
 		assertEquals(123, ((Integer)m.get("x")).intValue());
-		m = p.parseMap(t, HashMap.class, String.class, Double.class);
+		m = p.parse(t, HashMap.class, String.class, Double.class);
 		assertEquals(123, ((Double)m.get("x")).intValue());
 
 		// Unencoded chars
@@ -256,9 +256,9 @@ public class UonParserTest {
 		t = "$o(x;/?:@-_.!*'=x;/?:@-_.!*')";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("x;/?:@-_.!*'", m.get("x;/?:@-_.!*'"));
-		m = p.parseMap(t, HashMap.class, String.class, Object.class);
+		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("x;/?:@-_.!*'", m.get("x;/?:@-_.!*'"));
-		m = p.parseMap(t, HashMap.class, String.class, String.class);
+		m = p.parse(t, HashMap.class, String.class, String.class);
 		assertEquals("x;/?:@-_.!*'", m.get("x;/?:@-_.!*'"));
 
 		// Encoded chars
@@ -330,13 +330,13 @@ public class UonParserTest {
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("x=", m.get("x="));
 		t = "(x~==x~=)";
-		m = p.parseMap(t, HashMap.class, String.class, Object.class);
+		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("x=", m.get("x="));
 		t = "((x~=)=(x~=))";
-		m = p.parseMap(t, HashMap.class, String.class, Object.class);
+		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("x=", m.get("x="));
 		t = "($s(x~=)=$s(x~=))";
-		m = p.parseMap(t, HashMap.class, String.class, Object.class);
+		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("x=", m.get("x="));
 		t = "$o(x~%3D=x~%3D)";
 		m = (Map)pe.parse(t, Object.class);
@@ -348,13 +348,13 @@ public class UonParserTest {
 		m = (Map)pe.parse(t, Object.class);
 		assertEquals("x=", m.get("x="));
 		t = "(x~%3D=x~%3D)";
-		m = pe.parseMap(t, HashMap.class, String.class, Object.class);
+		m = pe.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("x=", m.get("x="));
 		t = "((x~%3D)=(x~%3D))";
-		m = pe.parseMap(t, HashMap.class, String.class, Object.class);
+		m = pe.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("x=", m.get("x="));
 		t = "($s(x~%3D)=$s(x~%3D))";
-		m = pe.parseMap(t, HashMap.class, String.class, Object.class);
+		m = pe.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("x=", m.get("x="));
 
 		// String starting with parenthesis
@@ -375,10 +375,10 @@ public class UonParserTest {
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("()", m.get("()"));
 		t = "((~(~))=(~(~)))";
-		m = p.parseMap(t, HashMap.class, String.class, Object.class);
+		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("()", m.get("()"));
 		t = "($s(~(~))=$s(~(~)))";
-		m = p.parseMap(t, HashMap.class, String.class, Object.class);
+		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("()", m.get("()"));
 
 		// String starting with $
@@ -393,7 +393,7 @@ public class UonParserTest {
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("$a", m.get("$a"));
 		t = "(($a)=($a))";
-		m = p.parseMap(t, HashMap.class, String.class, Object.class);
+		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("$a", m.get("$a"));
 
 		// Blank string
@@ -407,7 +407,7 @@ public class UonParserTest {
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("", m.get(""));
 		t = "(=)";
-		m = p.parseMap(t, HashMap.class, String.class, Object.class);
+		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("", m.get(""));
 
 		// 3rd level
@@ -415,7 +415,7 @@ public class UonParserTest {
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("", ((Map)m.get("")).get(""));
 		t = "(=(=))";
-		m = p.parseMap(t, HashMap.class, String.class, HashMap.class);
+		m = p.parse(t, HashMap.class, String.class, HashMap.class);
 		assertEquals("", ((Map)m.get("")).get(""));
 
 		// Newline character

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
index 18f12c9..911bf22 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
@@ -21,7 +21,7 @@ import org.apache.juneau.*;
 import org.apache.juneau.parser.*;
 import org.junit.*;
 
-@SuppressWarnings({"rawtypes","unchecked","javadoc"})
+@SuppressWarnings({"rawtypes","javadoc"})
 public class UrlEncodingParserTest {
 
 	static UrlEncodingParser p = UrlEncodingParser.DEFAULT;
@@ -58,7 +58,7 @@ public class UrlEncodingParserTest {
 
 		// 2nd level
 		t = "?a=a";
-		assertEquals("a", p.parse(t, Map.class).get("a"));
+		assertEquals("a", ((Map)p.parse(t, Map.class)).get("a"));
 
 		// Simple map
 		// Top level
@@ -90,7 +90,7 @@ public class UrlEncodingParserTest {
 		assertNull(m.get("f"));
 
 		t = "?a=true";
-		m = p.parseMap(t, HashMap.class, String.class, Boolean.class);
+		m = p.parse(t, HashMap.class, String.class, Boolean.class);
 		assertTrue(m.get("a") instanceof Boolean);
 		assertEquals("true", m.get("a").toString());
 
@@ -137,14 +137,14 @@ public class UrlEncodingParserTest {
 
 		// 2nd level in map
 		t = "?x=$a()";
-		m = p.parseMap(t, HashMap.class, String.class, List.class);
+		m = p.parse(t, HashMap.class, String.class, List.class);
 		assertTrue(m.containsKey("x"));
 		assertTrue(((List)m.get("x")).isEmpty());
 		m = (Map)p.parse(t, Object.class);
 		assertTrue(m.containsKey("x"));
 		assertTrue(((List)m.get("x")).isEmpty());
 		t = "?x=()";
-		m = p.parseMap(t, HashMap.class, String.class, List.class);
+		m = p.parse(t, HashMap.class, String.class, List.class);
 		assertTrue(m.containsKey("x"));
 		assertTrue(((List)m.get("x")).isEmpty());
 
@@ -155,7 +155,7 @@ public class UrlEncodingParserTest {
 		l = (List)l.get(0);
 		assertTrue(l.isEmpty());
 		t = "0=()";
-		l = p.parseCollection(t, LinkedList.class, List.class);
+		l = p.parse(t, LinkedList.class, List.class);
 		assertTrue(l.size() == 1);
 		l = (List)l.get(0);
 		assertTrue(l.isEmpty());
@@ -165,7 +165,7 @@ public class UrlEncodingParserTest {
 		l = (List)l.get(0);
 		assertTrue(l.isEmpty());
 		t = "(())";
-		l = (List)p.parseParameter(t, p.getBeanContext().getClassMeta(LinkedList.class, List.class));
+		l = (List)p.parseParameter(t, LinkedList.class, List.class);
 		assertTrue(l.size() == 1);
 		l = (List)l.get(0);
 		assertTrue(l.isEmpty());
@@ -177,7 +177,7 @@ public class UrlEncodingParserTest {
 		assertTrue(l.size() == 1);
 		assertEquals("", l.get(0));
 		t = "0=()";
-		l = p.parseCollection(t, List.class, String.class);
+		l = p.parse(t, List.class, String.class);
 		assertTrue(l.size() == 1);
 		assertEquals("", l.get(0));
 		t = "$a(())";
@@ -185,7 +185,7 @@ public class UrlEncodingParserTest {
 		assertTrue(l.size() == 1);
 		assertEquals("", l.get(0));
 		t = "(())";
-		l = (List)p.parseParameter(t, p.getBeanContext().getClassMeta(List.class, String.class));
+		l = (List)p.parseParameter(t, List.class, String.class);
 		assertTrue(l.size() == 1);
 		assertEquals("", l.get(0));
 
@@ -194,7 +194,7 @@ public class UrlEncodingParserTest {
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("", ((List)m.get("")).get(0));
 		t = "?()=(())";
-		m = p.parseMap(t, HashMap.class, String.class, List.class);
+		m = p.parse(t, HashMap.class, String.class, List.class);
 		assertEquals("", ((List)m.get("")).get(0));
 
 		// Array containing 3 empty strings
@@ -205,7 +205,7 @@ public class UrlEncodingParserTest {
 		assertEquals("", l.get(1));
 		assertEquals("", l.get(2));
 		t = "0=&1=&2=";
-		l = p.parseCollection(t, List.class, Object.class);
+		l = p.parse(t, List.class, Object.class);
 		assertTrue(l.size() == 3);
 		assertEquals("", l.get(0));
 		assertEquals("", l.get(1));
@@ -217,7 +217,7 @@ public class UrlEncodingParserTest {
 		assertEquals("", l.get(1));
 		assertEquals("", l.get(2));
 		t = "(,,)";
-		l = (List)p.parseParameter(t, p.getBeanContext().getClassMeta(List.class, Object.class));
+		l = (List)p.parseParameter(t, List.class, Object.class);
 		assertTrue(l.size() == 3);
 		assertEquals("", l.get(0));
 		assertEquals("", l.get(1));
@@ -241,7 +241,7 @@ public class UrlEncodingParserTest {
 		m = (Map)p.parse(t, Object.class);
 		assertTrue(m.size() == 1);
 		assertEquals("\u0000", m.get("\u0000"));
-		m = p.parseMap(t, HashMap.class, String.class, Object.class);
+		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertTrue(m.size() == 1);
 		assertEquals("\u0000", m.get("\u0000"));
 
@@ -269,7 +269,7 @@ public class UrlEncodingParserTest {
 		m = (Map)p.parse(t, Object.class);
 		assertEquals(Boolean.FALSE, m.get("x"));
 		t = "?x=false";
-		m = p.parseMap(t, HashMap.class, String.class, Boolean.class);
+		m = p.parse(t, HashMap.class, String.class, Boolean.class);
 		assertEquals(Boolean.FALSE, m.get("x"));
 
 		// Number
@@ -303,7 +303,7 @@ public class UrlEncodingParserTest {
 		t = "?x=$n(123)";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals(123, ((Integer)m.get("x")).intValue());
-		m = p.parseMap(t, HashMap.class, String.class, Double.class);
+		m = p.parse(t, HashMap.class, String.class, Double.class);
 		assertEquals(123, ((Double)m.get("x")).intValue());
 
 		// Unencoded chars
@@ -317,9 +317,9 @@ public class UrlEncodingParserTest {
 		t = "?x;/?:@-_.!*'=x;/?:@-_.!*'";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("x;/?:@-_.!*'", m.get("x;/?:@-_.!*'"));
-		m = p.parseMap(t, HashMap.class, String.class, Object.class);
+		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("x;/?:@-_.!*'", m.get("x;/?:@-_.!*'"));
-		m = p.parseMap(t, HashMap.class, String.class, String.class);
+		m = p.parse(t, HashMap.class, String.class, String.class);
 		assertEquals("x;/?:@-_.!*'", m.get("x;/?:@-_.!*'"));
 
 		// Encoded chars
@@ -419,7 +419,7 @@ public class UrlEncodingParserTest {
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("()", m.get("()"));
 		t = "?(~(~))=(~(~))";
-		m = p.parseMap(t, HashMap.class, String.class, Object.class);
+		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("()", m.get("()"));
 
 		// String starting with $
@@ -437,7 +437,7 @@ public class UrlEncodingParserTest {
 		t = "?(~$a)=(~$a)";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("$a", m.get("$a"));
-		m = p.parseMap(t, HashMap.class, String.class, Object.class);
+		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("$a", m.get("$a"));
 
 		// Blank string
@@ -451,7 +451,7 @@ public class UrlEncodingParserTest {
 		t = "?=";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("", m.get(""));
-		m = p.parseMap(t, HashMap.class, String.class, Object.class);
+		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("", m.get(""));
 
 		// 3rd level
@@ -459,7 +459,7 @@ public class UrlEncodingParserTest {
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("", ((Map)m.get("")).get(""));
 		t = "?=(=)";
-		m = p.parseMap(t, HashMap.class, String.class, HashMap.class);
+		m = p.parse(t, HashMap.class, String.class, HashMap.class);
 		assertEquals("", ((Map)m.get("")).get(""));
 
 		// Newline character

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/BeanContext.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/BeanContext.java b/juneau-core/src/main/java/org/apache/juneau/BeanContext.java
index d0a229d..dd88562 100644
--- a/juneau-core/src/main/java/org/apache/juneau/BeanContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/BeanContext.java
@@ -76,7 +76,7 @@ import org.apache.juneau.transform.*;
  * <p>
  * 	Settings are specified using the {@link ContextFactory#setProperty(String, Object)} method and related convenience methods.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Construct a context from scratch.</jc>
  * 	BeanContext beanContext = ContextFactory.<jsm>create</jsm>()
@@ -316,6 +316,15 @@ import org.apache.juneau.transform.*;
  * 	</tr>
  * 	<tr>
  * 		<td>
+ * 			{@link #BEAN_mediaType}
+ * 		</td>
+ * 		<td>Default media type value for serializer and parser sessions</td>
+ * 		<td>{@link MediaType}</td>
+ * 		<td><jk>null</jk></td>
+ * 		<td><jk>true</jk></td>
+ * 	</tr>
+ * 	<tr>
+ * 		<td>
  * 			{@link #BEAN_debug}
  * 		</td>
  * 		<td>Debug mode.</td>
@@ -337,7 +346,7 @@ import org.apache.juneau.transform.*;
  * 		<li> {@link BeanSession#newBeanMap(Class) BeanSession.newBeanMap()} - Create a new bean instance wrapped in a {@code Map} wrapper.
  * 	</ol>
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// A sample bean class</jc>
  * 	<jk>public class</jk> Person {
@@ -366,7 +375,7 @@ import org.apache.juneau.transform.*;
  * <p>
  * 	This package contains annotations that can be applied to
  * 	class definitions to override what properties are detected on a bean.
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Bean class definition where only property 'name' is detected.</jc>
  * 	<ja>&#64;Bean</ja>(properties=<js>"name"</js>)
@@ -1262,163 +1271,99 @@ public class BeanContext extends Context {
 	}
 
 	/**
-	 * Returns the class type bound to this bean context if the specified class type
-	 * 	is from another bean context.
-	 * <p>
-	 * For example, this method allows you to pass in an object from <code>BeanContext.<jsf>DEFAULT</jsf>.getMapClassMeta(...)</code>
-	 * 	to any of the <code>ReaderParser.parse(Reader, ClassMeta, ParserContext)</code> methods, and the parsers
-	 * 	will use this method to replace the class type with the one registered with the parser.
-	 * This ensures that registered transforms are applied correctly.
-	 *
-	 * @param <T> The class type.
-	 * @param cm The class type.
-	 * @return The class type bound by this bean context.
-	 */
-	protected final <T> ClassMeta<T> normalizeClassMeta(ClassMeta<T> cm) {
-		if (cm == null)
-			return (ClassMeta<T>)object();
-		if (cm.getBeanContext().equals(this))
-			return cm;
-		if (cm.isMap()) {
-			ClassMeta<Map> cm2 = (ClassMeta<Map>)cm;
-			cm2 = getClassMeta(cm2.getInnerClass(), cm2.getKeyType().getInnerClass(), cm2.getValueType().getInnerClass());
-			return (ClassMeta<T>)cm2;
-		}
-		if (cm.isCollection()) {
-			ClassMeta<Collection> cm2 = (ClassMeta<Collection>)cm;
-			cm2 = getClassMeta(cm2.getInnerClass(), cm2.getElementType().getInnerClass());
-			return (ClassMeta<T>)cm2;
-		}
-		return getClassMeta(cm.getInnerClass());
-	}
-
-	/**
-	 * Resolves the following types of objects:
-	 * <ul>
-	 * 	<li>{@link Class}
-	 * 	<li><code>Object[2]</code> containing <code>{Class&lt;? extends Collection&gt;, Object}</code>
-	 * 		where the 2nd entry is the entry type which can be anything on this list.
-	 * 	<li><code>Object[3]</code> containing <code>{Class&lt;? extends Map&gt;, Object, Object}</code>
-	 * 		where the 2nd entry is the key type and 3rd entry is the value type which can be anything on this list.
-	 * </ul>
-	 *
-	 * @param o
-	 * @return The resolved class meta.
-	 */
-	public final <T> ClassMeta<T> getClassMeta(Object o) {
-		if (o == null)
-			return null;
-		if (o instanceof Class)
-			return getClassMeta((Class)o);
-		if (o instanceof Type)
-			return getClassMeta((Type)o);
-		if (List.class.isAssignableFrom(o.getClass())) {
-			List l = (List)o;
-			o = l.toArray(new Object[l.size()]);
-			return getClassMeta((Object[])o);
-		}
-		if (o.getClass().isArray())
-			return getClassMeta((Object[])o);
-		throw new BeanRuntimeException("Invalid object type passed to getClassMeta(): ''{0}''.  Only Class or arrays containing Class is supported.", o.getClass().getName());
-	}
-
-	/**
-	 * Resolves the following types of objects:
-	 * <ul>
-	 * 	<li><code>Object[2]</code> containing <code>{Class&lt;? extends Collection&gt;, Object}</code>
-	 * 		where the 2nd entry is the entry type which can be anything on this list.
-	 * 	<li><code>Object[3]</code> containing <code>{Class&lt;? extends Map&gt;, Object, Object}</code>
-	 * 		where the 2nd entry is the key type and 3rd entry is the value type which can be anything on this list.
-	 * </ul>
-	 *
-	 * @param o
-	 * @return The resolved class meta.
-	 */
-	public final <T> ClassMeta<T> getClassMeta(Object...o) {
-		if (o == null)
-			return null;
-		int len = o.length;
-		if (len == 2) {
-			Object oc = Array.get(o, 0);
-			if (oc instanceof Class) {
-				Class c = (Class)oc;
-				if (Collection.class.isAssignableFrom(c)) {
-					ClassMeta<?> rawType = getClassMeta(c);
-					ClassMeta<?> ce = getClassMeta(Array.get(o, 1));
-					if (ce.isObject())
-						return (ClassMeta<T>)rawType;
-					return new ClassMeta(rawType, null, null, ce);
-				}
-			}
-		} else if (len == 3) {
-			Object oc = Array.get(o, 0);
-			if (oc instanceof Class) {
-				Class c = (Class)oc;
-				if (Map.class.isAssignableFrom(c)) {
-					ClassMeta<?> rawType = getClassMeta(c);
-					ClassMeta<?> ck = getClassMeta(Array.get(o, 1));
-					ClassMeta<?> cv = getClassMeta(Array.get(o, 2));
-					if (ck.isObject() && cv.isObject())
-						return (ClassMeta<T>)rawType;
-					return new ClassMeta(rawType, ck, cv, null);
-				}
-			}
-		}
-		throw new BeanRuntimeException("Invalid object type passed to getClassMeta(): ''{0}''.  Only Class or arrays containing Class is supported.", o.getClass().getName());
-	}
-
-	/**
 	 * Construct a {@code ClassMeta} wrapper around a {@link Class} object.
 	 *
 	 * @param <T> The class type being wrapped.
-	 * @param c The class being wrapped.
-	 * 	of type {@link Class} or {@link ClassMeta}.
+	 * @param type The class to resolve.
 	 * @return If the class is not an array, returns a cached {@link ClassMeta} object.
 	 * 	Otherwise, returns a new {@link ClassMeta} object every time.<br>
 	 */
-	public final <T> ClassMeta<T> getClassMeta(Class<T> c) {
+	public final <T> ClassMeta<T> getClassMeta(Class<T> type) {
 
 		// If this is an array, then we want it wrapped in an uncached ClassMeta object.
 		// Note that if it has a pojo swap, we still want to cache it so that
 		// we can cache something like byte[] with ByteArrayBase64Swap.
-		if (c.isArray() && findPojoSwap(c) == null)
-			return new ClassMeta(c, this, findImplClass(c), findBeanFilter(c), findPojoSwap(c), findChildPojoSwaps(c));
+		if (type.isArray() && findPojoSwap(type) == null)
+			return new ClassMeta(type, this, findImplClass(type), findBeanFilter(type), findPojoSwap(type), findChildPojoSwaps(type));
 
 		// This can happen if we have transforms defined against String or Object.
 		if (cmCache == null)
 			return null;
 
-		ClassMeta<T> cm = cmCache.get(c);
+		ClassMeta<T> cm = cmCache.get(type);
 		if (cm == null) {
 
 			synchronized (this) {
 				// Make sure someone didn't already set it while this thread was blocked.
-				cm = cmCache.get(c);
+				cm = cmCache.get(type);
 				if (cm == null)
-					cm = new ClassMeta<T>(c, this, findImplClass(c), findBeanFilter(c), findPojoSwap(c), findChildPojoSwaps(c));
+					cm = new ClassMeta<T>(type, this, findImplClass(type), findBeanFilter(type), findPojoSwap(type), findChildPojoSwaps(type));
 			}
 		}
 		return cm;
 	}
 
 	/**
-	 * Constructs a ClassMeta object given the specified object and parameters.
+	 * Used to resolve <code>ClassMetas</code> of type <code>Collection</code> and <code>Map</code> that have
+	 * <code>ClassMeta</code> values that themselves could be collections or maps.
+	 * <p>
+	 * <code>Collection</code> meta objects are assumed to be followed by zero or one meta objects indicating the element type.
+	 * <p>
+	 * <code>Map</code> meta objects are assumed to be followed by zero or two meta objects indicating the key and value types.
+	 * <p>
+	 * The array can be arbitrarily long to indicate arbitrarily complex data structures.
 	 *
-	 * @param o The parent class type.
-	 * 	Can be any of the following types:
-	 * 	<ul class='spaced-list'>
-	 * 		<li>{@link ClassMeta} object, which just returns the same object.
-	 * 		<li>{@link Class} object (e.g. <code>String.<jk>class</jk></code>).
-	 * 		<li>{@link Type} object (e.g. {@link ParameterizedType} or {@link GenericArrayType}.
-	 * 		<li>Anything else is interpreted as {@code getClassMeta(o.getClass(), parameters);}
-	 * 	</ul>
-	 * @return A ClassMeta object, or <jk>null</jk> if the object is null.
+	 * <h5 class='section'>Examples:</h5>
+	 * <ul>
+	 * 	<li><code>getClassMeta(String.<jk>class</jk>);</code> - A normal type.
+	 * 	<li><code>getClassMeta(List.<jk>class</jk>);</code> - A list containing objects.
+	 * 	<li><code>getClassMeta(List.<jk>class</jk>, String.<jk>class</jk>);</code> - A list containing strings.
+	 * 	<li><code>getClassMeta(LinkedList.<jk>class</jk>, String.<jk>class</jk>);</code> - A linked-list containing strings.
+	 * 	<li><code>getClassMeta(LinkedList.<jk>class</jk>, LinkedList.<jk>class</jk>, String.<jk>class</jk>);</code> - A linked-list containing linked-lists of strings.
+	 * 	<li><code>getClassMeta(Map.<jk>class</jk>);</code> - A map containing object keys/values.
+	 * 	<li><code>getClassMeta(Map.<jk>class</jk>, String.<jk>class</jk>, String.<jk>class</jk>);</code> - A map containing string keys/values.
+	 * 	<li><code>getClassMeta(Map.<jk>class</jk>, String.<jk>class</jk>, List.<jk>class</jk>, MyBean.<jk>class</jk>);</code> - A map containing string keys and values of lists containing beans.
+	 * </ul>
+	 *
+	 * @param type The class to resolve.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * @param args The type arguments of the class if it's a collection or map.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * 	<br>Ignored if the main type is not a map or collection.
+	 * @return The resolved class meta.
 	 */
-	public final ClassMeta getClassMeta(Type o) {
-		return getClassMeta(o, null);
+	public final <T> ClassMeta<T> getClassMeta(Type type, Type...args) {
+		if (type == null)
+			return null;
+		ClassMeta<T> cm = type instanceof Class ? getClassMeta((Class)type) : resolveClassMeta(type, null);
+		if (args.length == 0)
+			return cm;
+		ClassMeta<?>[] cma = new ClassMeta[args.length+1];
+		cma[0] = cm;
+		for (int i = 0; i < Array.getLength(args); i++) {
+			Type arg = (Type)Array.get(args, i);
+			cma[i+1] = arg instanceof Class ? getClassMeta((Class)arg) : resolveClassMeta(arg, null);
+		}
+		return (ClassMeta<T>) getTypedClassMeta(cma, 0);
+	}
+
+	/*
+	 * Resolves the 'genericized' class meta at the specified position in the ClassMeta array.
+	 */
+	private ClassMeta<?> getTypedClassMeta(ClassMeta<?>[] c, int pos) {
+		ClassMeta<?> cm = c[pos++];
+		if (cm.isCollection()) {
+			ClassMeta<?> ce = c.length == pos ? object() : getTypedClassMeta(c, pos);
+			return (ce.isObject() ? cm : new ClassMeta(cm, null, null, ce));
+		} else if (cm.isMap()) {
+			 ClassMeta<?> ck = c.length == pos ? object() : c[pos++];
+			 ClassMeta<?> cv = c.length == pos ? object() : getTypedClassMeta(c, pos);
+			 return (ck.isObject() && cv.isObject() ? cm : new ClassMeta(cm, ck, cv, null));
+		}
+		return cm;
 	}
 
-	final ClassMeta getClassMeta(Type o, Map<Class<?>,Class<?>[]> typeVarImpls) {
+	final ClassMeta resolveClassMeta(Type o, Map<Class<?>,Class<?>[]> typeVarImpls) {
 		if (o == null)
 			return null;
 
@@ -1530,7 +1475,7 @@ public class BeanContext extends Context {
 				for (Type pt2 : pt.getActualTypeArguments()) {
 					if (pt2 instanceof WildcardType || pt2 instanceof TypeVariable)
 						return null;
-					l.add(getClassMeta(pt2, null));
+					l.add(resolveClassMeta(pt2, null));
 				}
 				if (l.isEmpty())
 					return null;
@@ -1567,13 +1512,13 @@ public class BeanContext extends Context {
 	 * 	Can be <jk>null</jk> if the information is not known.
 	 * @return The new {@code ClassMeta} object wrapped around the {@code Type} object.
 	 */
-	protected final <T> ClassMeta<T> getClassMeta(BeanProperty p, Type t, Map<Class<?>,Class<?>[]> typeVarImpls) {
-		ClassMeta<T> cm = getClassMeta(t, typeVarImpls);
+	protected final <T> ClassMeta<T> resolveClassMeta(BeanProperty p, Type t, Map<Class<?>,Class<?>[]> typeVarImpls) {
+		ClassMeta<T> cm = resolveClassMeta(t, typeVarImpls);
 		ClassMeta<T> cm2 = cm;
 		if (p != null) {
 
 			if (p.type() != Object.class)
-				cm2 = getClassMeta(p.type(), typeVarImpls);
+				cm2 = resolveClassMeta(p.type(), typeVarImpls);
 
 			if (cm2.isMap()) {
 				Class<?>[] pParams = (p.params().length == 0 ? new Class[]{Object.class, Object.class} : p.params());
@@ -1619,7 +1564,7 @@ public class BeanContext extends Context {
 //	/**
 //	 * Converts class name strings to ClassMeta objects.
 //	 *
-//	 * <h6 class='topic'>Example:</h6>
+//	 * <h5 class='section'>Example:</h5>
 //	 * <ul>
 //	 * 	<li><js>"java.lang.String"</js>
 //	 * 	<li><js>"com.foo.sample.MyBean[]"</js>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/BeanMap.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/BeanMap.java b/juneau-core/src/main/java/org/apache/juneau/BeanMap.java
index 8b7d563..4e1bad6 100644
--- a/juneau-core/src/main/java/org/apache/juneau/BeanMap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/BeanMap.java
@@ -24,7 +24,7 @@ import org.apache.juneau.xml.annotation.*;
 /**
  * Java bean wrapper class.
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	A wrapper that wraps Java bean instances inside of a {@link Map} interface that allows
  * 	properties on the wrapped object can be accessed using the {@link Map#get(Object) get()} and {@link Map#put(Object,Object) put()} methods.
@@ -170,7 +170,7 @@ public class BeanMap<T> extends AbstractMap<String,Object> implements Delegate<T
 	 * 	{@link BeanProperty#swap() @BeanProperty.swap()} annotation, the value being passed in must be
 	 * 	a String containing an ISO8601 date-time string value.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Construct a bean with a 'birthDate' Date field</jc>
 	 * 	Person p = <jk>new</jk> Person();
@@ -253,7 +253,7 @@ public class BeanMap<T> extends AbstractMap<String,Object> implements Delegate<T
 	 * 	{@link BeanProperty#swap() @BeanProperty.swap()} annotation, this method will return a String
 	 * 	containing an ISO8601 date-time string value.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Construct a bean with a 'birthDate' Date field</jc>
 	 * 	Person p = <jk>new</jk> Person();
@@ -294,7 +294,7 @@ public class BeanMap<T> extends AbstractMap<String,Object> implements Delegate<T
 	 * 	depends on the default parser specified by the {@link BeanContext#BEAN_defaultParser} property
 	 * 	value on the config that created the context that created this map.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	aPersonBean.load(<js>"{name:'John Smith',age:21}"</js>)
 	 * </p>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/BeanMapEntry.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/BeanMapEntry.java b/juneau-core/src/main/java/org/apache/juneau/BeanMapEntry.java
index 47da2b8..b7a2758 100644
--- a/juneau-core/src/main/java/org/apache/juneau/BeanMapEntry.java
+++ b/juneau-core/src/main/java/org/apache/juneau/BeanMapEntry.java
@@ -22,7 +22,7 @@ import org.apache.juneau.transform.*;
  * <p>
  * 	This class can be used to get and set property values on a bean, or to get metadata on a property.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Construct a new bean</jc>
  * 	Person p = <jk>new</jk> Person();

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/BeanMeta.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/BeanMeta.java b/juneau-core/src/main/java/org/apache/juneau/BeanMeta.java
index 4716371..42425ee 100644
--- a/juneau-core/src/main/java/org/apache/juneau/BeanMeta.java
+++ b/juneau-core/src/main/java/org/apache/juneau/BeanMeta.java
@@ -29,7 +29,7 @@ import org.apache.juneau.utils.*;
 /**
  * Encapsulates all access to the properties of a bean class (like a souped-up {@link java.beans.BeanInfo}).
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Uses introspection to find all the properties associated with this class.  If the {@link Bean @Bean} annotation
  * 	is present on the class, or the class has a {@link BeanFilter} registered with it in the bean context,


[4/7] incubator-juneau git commit: Eliminate ClassMeta dependencies from Parser. Clean up docs.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
index a3a6722..2c68e09 100644
--- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
@@ -18,7 +18,6 @@ import java.lang.reflect.*;
 import java.util.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.MediaType;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
@@ -27,11 +26,11 @@ import org.apache.juneau.transform.*;
 /**
  * Parses URL-encoded text into POJO models.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Content-Type</code> types: <code>application/x-www-form-urlencoded</code>
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Parses URL-Encoded text (e.g. <js>"foo=bar&amp;baz=bing"</js>) into POJOs.
  * <p>
@@ -39,7 +38,7 @@ import org.apache.juneau.transform.*;
  * <p>
  * 	This parser uses a state machine, which makes it very fast and efficient.
  *
- * <h6 class='topic'>Configurable properties</h6>
+ * <h5 class='section'>Configurable properties:</h5>
  * <p>
  * 	This class has the following properties associated with it:
  * <ul>
@@ -429,17 +428,21 @@ public class UrlEncodingParser extends UonParser {
 	 * Parses a single query parameter value into the specified class type.
 	 *
 	 * @param in The input query string value.
-	 * @param type The class type of the object to create.
+	 * @param type The object type to create.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * @param args The type arguments of the class if it's a collection or map.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * 	<br>Ignored if the main type is not a map or collection.
 	 * @return A new instance of the specified type.
 	 * @throws ParseException
 	 */
-	public <T> T parseParameter(CharSequence in, ClassMeta<T> type) throws ParseException {
+	public <T> T parseParameter(CharSequence in, Type type, Type...args) throws ParseException {
 		if (in == null)
 			return null;
 		UonParserSession session = createParameterSession(in);
 		try {
 			UonReader r = session.getReader();
-			return super.parseAnything(session, type, r, null, true, null);
+			return (T)super.parseAnything(session, session.getClassMeta(type, args), r, null, true, null);
 		} catch (ParseException e) {
 			throw e;
 		} catch (Exception e) {
@@ -473,6 +476,31 @@ public class UrlEncodingParser extends UonParser {
 		}
 	}
 
+	/**
+	 * Same as {@link #parseParameter(CharSequence, Type, Type...)} except the type has already
+	 * been converted to a {@link ClassMeta} object.
+	 *
+	 * @param in The input query string value.
+	 * @param type The class type of the object to create.
+	 * @return A new instance of the specified type.
+	 * @throws ParseException
+	 */
+	public <T> T parseParameter(CharSequence in, ClassMeta<T> type) throws ParseException {
+		if (in == null)
+			return null;
+		UonParserSession session = createParameterSession(in);
+		try {
+			UonReader r = session.getReader();
+			return super.parseAnything(session, type, r, null, true, null);
+		} catch (ParseException e) {
+			throw e;
+		} catch (Exception e) {
+			throw new ParseException(session, e);
+		} finally {
+			session.close();
+		}
+	}
+
 	//--------------------------------------------------------------------------------
 	// Overridden methods
 	//--------------------------------------------------------------------------------
@@ -485,7 +513,6 @@ public class UrlEncodingParser extends UonParser {
 	@Override /* Parser */
 	protected <T> T doParse(ParserSession session, ClassMeta<T> type) throws Exception {
 		UrlEncodingParserSession s = (UrlEncodingParserSession)session;
-		type = session.normalizeClassMeta(type);
 		UonReader r = s.getReader();
 		T o = parseAnything(s, type, r, s.getOuter());
 		return o;
@@ -505,7 +532,7 @@ public class UrlEncodingParser extends UonParser {
 		UonReader r = s.getReader();
 		if (r.peek() == '?')
 			r.read();
-		m = parseIntoMap(s, r, m, session.getClassMeta(keyType), session.getClassMeta(valueType));
+		m = parseIntoMap(s, r, m, (ClassMeta<K>)session.getClassMeta(keyType), (ClassMeta<V>)session.getClassMeta(valueType));
 		return m;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserContext.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserContext.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserContext.java
index 5df8849..fa13729 100644
--- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserContext.java
@@ -60,7 +60,7 @@ public class UrlEncodingParserContext extends UonParserContext {
 	 * 	If <jk>false</jk>, serializing the array <code>[1,2,3]</code> results in <code>?key=$a(1,2,3)</code>.
 	 * 	If <jk>true</jk>, serializing the same array results in <code>?key=1&amp;key=2&amp;key=3</code>.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jk>public class</jk> A {
 	 * 		<jk>public</jk> String[] f1 = {<js>"a"</js>,<js>"b"</js>};
@@ -74,11 +74,14 @@ public class UrlEncodingParserContext extends UonParserContext {
 	 * 	String s2 = p2.serialize(<jk>new</jk> A()); <jc>// Produces "f1=a&amp;f1=b&amp;f2=c&amp;f2=d"</jc>
 	 * </p>
 	 * <p>
-	 * 	<b>Important note:</b>  If parsing multi-part parameters, it's highly recommended to use Collections or Lists
-	 * 	as bean property types instead of arrays since arrays have to be recreated from scratch every time a value
-	 * 	is added to it.
-	 * <p>
 	 * 	This option only applies to beans.
+	 * <p>
+	 * <h5 class='section'>Notes:</h5>
+	 * <ul>
+	 * 	<li>If parsing multi-part parameters, it's highly recommended to use Collections or Lists
+	 * 		as bean property types instead of arrays since arrays have to be recreated from scratch every time a value
+	 * 		is added to it.
+	 * </ul>
 	 */
 	public static final String URLENC_expandedParams = "UrlEncoding.expandedParams";
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
index e96ef9b..6bb81d5 100644
--- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
@@ -29,18 +29,18 @@ import org.apache.juneau.transform.*;
 /**
  * Serializes POJO models to URL-encoded notation with UON-encoded values (a notation for URL-encoded query paramter values).
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Accept</code> types: <code>application/x-www-form-urlencoded</code>
  * <p>
  * 	Produces <code>Content-Type</code> types: <code>application/x-www-form-urlencoded</code>
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	This serializer provides several serialization options.  Typically, one of the predefined DEFAULT serializers will be sufficient.
  * 	However, custom serializers can be constructed to fine-tune behavior.
  *
- * <h6 class='topic'>Configurable properties</h6>
+ * <h5 class='section'>Configurable properties:</h5>
  * <p>
  * 	This class has the following properties associated with it:
  * <ul>
@@ -121,7 +121,7 @@ import org.apache.juneau.transform.*;
  * 	)
  * </p>
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Serialize a Map</jc>
  * 	Map m = <jk>new</jk> ObjectMap(<js>"{a:'b',c:1,d:false,e:['f',1,false],g:{h:'i'}}"</js>);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerContext.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerContext.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerContext.java
index fc5bd2c..0e68416 100644
--- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerContext.java
@@ -61,7 +61,7 @@ public class UrlEncodingSerializerContext extends UonSerializerContext {
 	 * If <jk>false</jk>, serializing the array <code>[1,2,3]</code> results in <code>?key=$a(1,2,3)</code>.
 	 * If <jk>true</jk>, serializing the same array results in <code>?key=1&amp;key=2&amp;key=3</code>.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jk>public class</jk> A {
 	 * 		<jk>public</jk> String[] f1 = {<js>"a"</js>,<js>"b"</js>};
@@ -75,11 +75,14 @@ public class UrlEncodingSerializerContext extends UonSerializerContext {
 	 * 	String s2 = p2.serialize(<jk>new</jk> A()); <jc>// Produces "f1=a&amp;f1=b&amp;f2=c&amp;f2=d"</jc>
 	 * </p>
 	 * <p>
-	 * <b>Important note:</b>  If parsing multi-part parameters, it's highly recommended to use Collections or Lists
-	 * as bean property types instead of arrays since arrays have to be recreated from scratch every time a value
-	 * is added to it.
-	 * <p>
 	 * This option only applies to beans.
+	 * <p>
+	 * <h5 class='section'>Notes:</h5>
+	 * <ul>
+	 * 	<li>If parsing multi-part parameters, it's highly recommended to use Collections or Lists
+	 * 		as bean property types instead of arrays since arrays have to be recreated from scratch every time a value
+	 * 		is added to it.
+	 * </ul>
 	 */
 	public static final String URLENC_expandedParams = "UrlEncoding.expandedParams";
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/utils/Args.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/utils/Args.java b/juneau-core/src/main/java/org/apache/juneau/utils/Args.java
index 58176db..4d4d01d 100644
--- a/juneau-core/src/main/java/org/apache/juneau/utils/Args.java
+++ b/juneau-core/src/main/java/org/apache/juneau/utils/Args.java
@@ -37,7 +37,7 @@ import org.apache.juneau.internal.*;
  * 	<li><code>java com.sample.MyClass mainArg1 -optArg1 optArg1Val1 -optArg1 optArg1Val2</code>
  * </ul>
  *
- * <h6 class='topic'>Code examples</h6>
+ * <h5 class='section'>Examples:</h5>
  * <p class='bcode'>
  *
  * 	<jc>// Main method with arguments</jc>
@@ -193,7 +193,7 @@ public final class Args extends ObjectMap {
 	 * <p>
 	 * If the optional arg has multiple values, returns only the first converted value.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 *	<p class='bcode'>
 	 * 	<jc>// Command:  java com.sample.MyClass -verbose true -debug 5</jc>
 	 * 	<jk>boolean</jk> b = args.getArg(<jk>boolean</jk>.<jk>class</jk>, <js>"verbose"</js>);
@@ -215,7 +215,7 @@ public final class Args extends ObjectMap {
 	/**
 	 * Returns the optional argument values as a list of strings.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Command:  java com.sample.MyClass -extraArgs foo bar baz</jc>
 	 * 	List&lt;String&gt; l1 = args.getArgs(<js>"extraArgs"</js>); <jc>// ['foo','bar','baz']</jc>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/utils/MessageBundle.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/utils/MessageBundle.java b/juneau-core/src/main/java/org/apache/juneau/utils/MessageBundle.java
index 965a2d9..190e68c 100644
--- a/juneau-core/src/main/java/org/apache/juneau/utils/MessageBundle.java
+++ b/juneau-core/src/main/java/org/apache/juneau/utils/MessageBundle.java
@@ -154,7 +154,7 @@ public class MessageBundle extends ResourceBundle {
 	 * Similar to {@link ResourceBundle#getString(String)} except allows you to pass in {@link MessageFormat} objects.
 	 *
 	 * @param key The resource bundle key.
-	 * @param args Optional variable replacement arguments.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 * @return The resolved value.  Never <jk>null</jk>.  <js>"{!!key}"</js> if the bundle is missing.  <js>"{!key}"</js> if the key is missing.
 	 */
 	public String getString(String key, Object...args) {
@@ -171,7 +171,7 @@ public class MessageBundle extends ResourceBundle {
 	 *
 	 * @param locale The locale of the resource bundle to retrieve message from.
 	 * @param key The resource bundle key.
-	 * @param args Optional variable replacement arguments.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 * @return The resolved value.  Never <jk>null</jk>.  <js>"{!!key}"</js> if the bundle is missing.  <js>"{!key}"</js> if the key is missing.
 	 */
 	public String getString(Locale locale, String key, Object...args) {
@@ -184,7 +184,7 @@ public class MessageBundle extends ResourceBundle {
 	 * Same as {@link #getString(String, Object...)} but uses the locale specified on the call to {@link #setClientLocale(Locale)}.
 	 *
 	 * @param key The resource bundle key.
-	 * @param args Optional variable replacement arguments.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 * @return The resolved value.  Never <jk>null</jk>.  <js>"{!!key}"</js> if the bundle is missing.  <js>"{!key}"</js> if the key is missing.
 	 */
 	public String getClientString(String key, Object...args) {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/utils/PojoIntrospector.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/utils/PojoIntrospector.java b/juneau-core/src/main/java/org/apache/juneau/utils/PojoIntrospector.java
index 44d5580..908fc5d 100644
--- a/juneau-core/src/main/java/org/apache/juneau/utils/PojoIntrospector.java
+++ b/juneau-core/src/main/java/org/apache/juneau/utils/PojoIntrospector.java
@@ -23,7 +23,7 @@ import org.apache.juneau.parser.*;
 /**
  * Used to invoke methods on {@code Objects} using arguments in serialized form.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  *	<p class='bcode'>
  *		String s = <js>"foobar"</js>;
  *		String s2 = (String)<jk>new</jk> PojoIntrospector(s).invoke(<js>"substring(int,int)"</js>, <js>"[3,6]"</js>);  <jc>// "bar"</jc>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/utils/PojoQuery.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/utils/PojoQuery.java b/juneau-core/src/main/java/org/apache/juneau/utils/PojoQuery.java
index 4e0d2ec..1f2ff64 100644
--- a/juneau-core/src/main/java/org/apache/juneau/utils/PojoQuery.java
+++ b/juneau-core/src/main/java/org/apache/juneau/utils/PojoQuery.java
@@ -66,7 +66,7 @@ import org.apache.juneau.internal.*;
  * 	Search patterns can be either {@code Strings} or {@code Maps}.<br>
  * 	Multiple search patterns are ANDed (i.e. all patterns must match for the row to be returned).
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <ul class='spaced-list'>
  * 	<li><tt>{fi:'123'}</tt> - Return only rows where the <tt>fi</tt> column is 123.
  * 	<li><tt>{fs:'foobar'}</tt> - Return only rows where the <tt>fs</tt> column is 'foobar'.
@@ -95,7 +95,7 @@ import org.apache.juneau.internal.*;
  * 	<li><tt>foo?</tt> - <tt>?</tt> matches exactly one character
  * </ul>
  *
- * <h6 class='topic'>Notes</h6>
+ * <h5 class='section'>Notes:</h5>
  * <ul class='spaced-list'>
  * 	<li>Whitespace is ignored around search patterns.
  * 	<li>Prepend <tt>+</tt> to tokens that must match.  (e.g. <tt>+foo* +*bar</tt>)
@@ -118,7 +118,7 @@ import org.apache.juneau.internal.*;
  * 	<li><tt>!123</tt> - Not 123
  * </ul>
  *
- * <h6 class='topic'>Notes</h6>
+ * <h5 class='section'>Notes:</h5>
  * <ul class='spaced-list'>
  * 	<li>Whitespace is ignored in search patterns.
  * 	<li>Negative numbers are supported.
@@ -149,7 +149,7 @@ import org.apache.juneau.internal.*;
  * 	<li><tt>2001 2003 2005</tt>	- Multiple date patterns are ORed.
  * </ul>
  *
- * <h6 class='topic'>Notes</h6>
+ * <h5 class='section'>Notes:</h5>
  * <ul>
  * 	<li>Whitespace is ignored in search patterns.
  * </ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/utils/PojoRest.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/utils/PojoRest.java b/juneau-core/src/main/java/org/apache/juneau/utils/PojoRest.java
index 6f690cf..851bc9b 100644
--- a/juneau-core/src/main/java/org/apache/juneau/utils/PojoRest.java
+++ b/juneau-core/src/main/java/org/apache/juneau/utils/PojoRest.java
@@ -42,7 +42,7 @@ import org.apache.juneau.parser.*;
  * <p>
  * 	Leading slashes in URLs are ignored.  So <js>"/xxx/yyy/zzz"</js> and <js>"xxx/yyy/zzz"</js> are considered identical.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Construct an unstructured POJO model</jc>
  * 	ObjectMap m = <jk>new</jk> ObjectMap(<js>""</js>
@@ -106,7 +106,7 @@ import org.apache.juneau.parser.*;
  * 	can be used in lieu of index numbers on GET requests to return a map/bean with a specified attribute value.<br>
  * 	The syntax is {@code @attr=val}, where attr is the attribute name on the child map, and val is the matching value.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Get map/bean with name attribute value of 'foo' from a list of items</jc>
  * 	Map m = pojoRest.getMap(<js>"/items/@name=foo"</js>);
@@ -528,21 +528,24 @@ public final class PojoRest {
 	/**
 	 * Adds a value to a list element in a POJO model.
 	 * <p>
-	 * 	The URL is the address of the list being added to.
+	 * The URL is the address of the list being added to.
 	 * <p>
-	 * 	If the list does not already exist, it will be created.
+	 * If the list does not already exist, it will be created.
 	 * <p>
-	 * 	This method expands the POJO model as necessary to create the new element.
+	 * This method expands the POJO model as necessary to create the new element.
 	 * <p>
-	 * 	Note:  You can only post to three types of nodes:
-	 * 	<ul class='spaced-list'>
-	 * 		<li>{@link List Lists}
-	 * 		<li>{@link Map Maps} containing integers as keys (i.e sparse arrays)
-	 * 		<li>arrays
-	 * 	</ul>
+	 * <h5 class='section'>Notes:</h5>
+	 * <ul>
+	 * 	<li>You can only post to three types of nodes:
+	 * 		<ul class='spaced-list'>
+	 * 			<li>{@link List Lists}
+	 * 			<li>{@link Map Maps} containing integers as keys (i.e sparse arrays)
+	 * 			<li>arrays
+	 * 		</ul>
+	 * </ul>
 	 *
 	 * @param url The URL of the element being added to.
-	 * 		If null or blank, the root itself (assuming it's one of the types specified above) is added to.
+	 * 		<br>If <jk>null</jk> or blank, the root itself (assuming it's one of the types specified above) is added to.
 	 * @param val The value being added.
 	 * @return The URL of the element that was added.
 	 */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/utils/PojoRestException.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/utils/PojoRestException.java b/juneau-core/src/main/java/org/apache/juneau/utils/PojoRestException.java
index 2dc190c..ad74cef 100644
--- a/juneau-core/src/main/java/org/apache/juneau/utils/PojoRestException.java
+++ b/juneau-core/src/main/java/org/apache/juneau/utils/PojoRestException.java
@@ -38,7 +38,7 @@ public final class PojoRestException extends RuntimeException {
 	 *
 	 * @param status The HTTP-equivalent status code.
 	 * @param message The detailed message.
-	 * @param args Optional message arguments.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public PojoRestException(int status, String message, Object...args) {
 		super(args.length == 0 ? message : MessageFormat.format(message, args));

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/utils/ProcBuilder.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/utils/ProcBuilder.java b/juneau-core/src/main/java/org/apache/juneau/utils/ProcBuilder.java
index 6b253e2..376317b 100644
--- a/juneau-core/src/main/java/org/apache/juneau/utils/ProcBuilder.java
+++ b/juneau-core/src/main/java/org/apache/juneau/utils/ProcBuilder.java
@@ -71,7 +71,7 @@ public class ProcBuilder {
 	 * Command arguments if the specified matcher matches.
 	 * Can be used for specifying os-specific commands.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	ProcessBuilder pb = ProcessBuilder
 	 * 		.create()

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/xml/XmlDocSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlDocSerializer.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlDocSerializer.java
index eb58b7c..501de0f 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlDocSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlDocSerializer.java
@@ -20,13 +20,13 @@ import org.apache.juneau.serializer.*;
 /**
  * Serializes POJOs to HTTP responses as XML.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Accept</code> types: <code>text/xml</code>
  * <p>
  * 	Produces <code>Content-Type</code> types: <code>text/xml</code>
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Same as {@link XmlSerializer}, except prepends <code><xt>&lt;?xml</xt> <xa>version</xa>=<xs>'1.0'</xs> <xa>encoding</xa>=<xs>'UTF-8'</xs><xt>?&gt;</xt></code> to the response
  * 	to make it a valid XML document.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java
index 29dea9f..0e04e3f 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java
@@ -31,15 +31,15 @@ import org.apache.juneau.xml.annotation.*;
 /**
  * Parses text generated by the {@link XmlSerializer} class back into a POJO model.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Content-Type</code> types: <code>text/xml</code>
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	See the {@link XmlSerializer} class for a description of Juneau-generated XML.
  *
- * <h6 class='topic'>Configurable properties</h6>
+ * <h5 class='section'>Configurable properties:</h5>
  * <p>
  * 	This class has the following properties associated with it:
  * <ul>
@@ -510,7 +510,6 @@ public class XmlParser extends ReaderParser {
 	@Override /* Parser */
 	protected <T> T doParse(ParserSession session, ClassMeta<T> type) throws Exception {
 		XmlParserSession s = (XmlParserSession)session;
-		type = session.normalizeClassMeta(type);
 		return parseAnything(s, type, null, s.getXmlStreamReader(), s.getOuter(), true, null);
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserContext.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserContext.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserContext.java
index 765fbd6..a5b6802 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserContext.java
@@ -84,11 +84,11 @@ import org.apache.juneau.parser.*;
  * 	</tr>
  * </table>
  *
- * <h6 class='topic'>Configurable properties inherited from parent classes</h6>
+ * <h5 class='section'>Inherited configurable properties:</h5>
  * <ul class='javahierarchy'>
- * 	<li class='c'><a class='doclink' href='../BeanContext.html#ConfigProperties'>BeanContext</a> - Properties associated with handling beans on serializers and parsers.
+ * 	<li class='c'><a class="doclink" href="../BeanContext.html#ConfigProperties">BeanContext</a> - Properties associated with handling beans on serializers and parsers.
  * 	<ul>
- * 		<li class='c'><a class='doclink' href='../parser/ParserContext.html#ConfigProperties'>ParserContext</a> - Configurable properties common to all parsers.
+ * 		<li class='c'><a class="doclink" href="../parser/ParserContext.html#ConfigProperties">ParserContext</a> - Configurable properties common to all parsers.
  * 	</ul>
  * </ul>
  */
@@ -135,7 +135,10 @@ public class XmlParserContext extends ParserContext {
 	 * <p>
 	 * Associates an {@link XMLReporter} with this parser.
 	 * <p>
-	 * Note:  Reporters are not copied to new parsers during a clone.
+	 * <h5 class='section'>Notes:</h5>
+	 * <ul>
+	 * 	<li>Reporters are not copied to new parsers during a clone.
+	 * </ul>
 	 */
 	public static final String XML_reporter = "XmlParser.reporter";
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaDocSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaDocSerializer.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaDocSerializer.java
index 95a8024..195abf1 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaDocSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaDocSerializer.java
@@ -18,13 +18,13 @@ import org.apache.juneau.serializer.*;
 /**
  * Serializes POJO metadata to HTTP responses as XML.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Accept</code> types: <code>text/xml+schema</code>
  * <p>
  * 	Produces <code>Content-Type</code> types: <code>text/xml</code>
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Same as {@link XmlSchemaSerializer}, except prepends <code><xt>&lt;?xml</xt> <xa>version</xa>=<xs>'1.0'</xs> <xa>encoding</xa>=<xs>'UTF-8'</xs><xt>?&gt;</xt></code> to the response
  * 	to make it a valid XML document.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java
index 35effd0..01d8138 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java
@@ -35,17 +35,17 @@ import org.w3c.dom.ls.*;
 /**
  * Serializes POJO metadata to HTTP responses as XML.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Accept</code> types: <code>text/xml+schema</code>
  * <p>
  * 	Produces <code>Content-Type</code> types: <code>text/xml</code>
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Produces the XML-schema representation of the XML produced by the {@link XmlSerializer} class with the same properties.
  *
- * <h6 class='topic'>Configurable properties</h6>
+ * <h5 class='section'>Configurable properties:</h5>
  * <p>
  * 	This class has the following properties associated with it:
  * <ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java
index e8e0bbf..3a86e00 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java
@@ -31,13 +31,13 @@ import org.apache.juneau.xml.annotation.*;
 /**
  * Serializes POJO models to XML.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Accept</code> types: <code>text/xml</code>
  * <p>
  * 	Produces <code>Content-Type</code> types: <code>text/xml</code>
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	See the {@link JsonSerializer} class for details on how Java models map to JSON.
  * <p>
@@ -105,7 +105,7 @@ import org.apache.juneau.xml.annotation.*;
  * <p>
  * 	If an attribute name contains any non-valid XML element characters, they will be escaped using standard {@code _x####_} notation.
  *
- * <h6 class='topic'>Configurable properties</h6>
+ * <h5 class='section'>Configurable properties:</h5>
  * <p>
  * 	This class has the following properties associated with it:
  * <ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerContext.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerContext.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerContext.java
index d1d51df..215a5e1 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerContext.java
@@ -81,11 +81,11 @@ import org.apache.juneau.serializer.*;
  * 	</tr>
  * </table>
  *
- * <h6 class='topic'>Configurable properties inherited from parent classes</h6>
+ * <h5 class='section'>Inherited configurable properties:</h5>
  * <ul class='javahierarchy'>
- * 	<li class='c'><a class='doclink' href='../BeanContext.html#ConfigProperties'>BeanContext</a> - Properties associated with handling beans on serializers and parsers.
+ * 	<li class='c'><a class="doclink" href="../BeanContext.html#ConfigProperties">BeanContext</a> - Properties associated with handling beans on serializers and parsers.
  * 	<ul>
- * 		<li class='c'><a class='doclink' href='../serializer/SerializerContext.html#ConfigProperties'>SerializerContext</a> - Configurable properties common to all serializers.
+ * 		<li class='c'><a class="doclink" href="../serializer/SerializerContext.html#ConfigProperties">SerializerContext</a> - Configurable properties common to all serializers.
  * 	</ul>
  * </ul>
  */
@@ -127,10 +127,12 @@ public class XmlSerializerContext extends SerializerContext {
 	 * <p>
 	 * This setting is ignored if {@link #XML_enableNamespaces} is not enabled.
 	 * <p>
-	 * <b>IMPORTANT NOTE:</b>
-	 * Auto-detection of namespaces can be costly performance-wise.
-	 * In high-performance environments, it's recommended that namespace detection be
-	 * 	disabled, and that namespaces be manually defined through the {@link #XML_namespaces} property.
+	 * <h5 class='section'>Notes:</h5>
+	 * <ul>
+	 * 	<li>Auto-detection of namespaces can be costly performance-wise.
+	 * 		In high-performance environments, it's recommended that namespace detection be
+	 * 		disabled, and that namespaces be manually defined through the {@link #XML_namespaces} property.
+	 * </ul>
 	 */
 	public static final String XML_autoDetectNamespaces = "XmlSerializer.autoDetectNamespaces";
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/xml/XmlWriter.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlWriter.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlWriter.java
index 281e664..1140561 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlWriter.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlWriter.java
@@ -20,7 +20,10 @@ import org.apache.juneau.xml.annotation.*;
 /**
  * Specialized writer for serializing XML.
  * <p>
- * 	<b>Note:  This class is not intended for external use.</b>
+ * <h5 class='section'>Notes:</h5>
+ * <ul>
+ * 	<li>This class is not intended for external use.
+ * </ul>
  */
 public class XmlWriter extends SerializerWriter {
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/xml/annotation/Xml.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/annotation/Xml.java b/juneau-core/src/main/java/org/apache/juneau/xml/annotation/Xml.java
index e901f58..5d53451 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/annotation/Xml.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/annotation/Xml.java
@@ -40,7 +40,7 @@ public @interface Xml {
 	 * <p>
 	 * 	Applies only to collection and array bean properties.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jk>public class</jk> MyBean {
 	 * 		<ja>@Xml</ja>(childName=<js>"child"</js>}
@@ -98,7 +98,7 @@ public @interface Xml {
 	/**
 	 * The {@link XmlFormat} to use for serializing this object type.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jk>public class</jk> MyBean {
 	 *

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/xml/annotation/XmlSchema.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/annotation/XmlSchema.java b/juneau-core/src/main/java/org/apache/juneau/xml/annotation/XmlSchema.java
index adf06e5..1bd5945 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/annotation/XmlSchema.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/annotation/XmlSchema.java
@@ -52,7 +52,7 @@ public @interface XmlSchema {
 	 * <p>
 	 * 	Inherited by child packages.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p>
 	 * 	Contents of <code>package-info.java</code>...
 	 * </p>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/javadoc/javadoc.css
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/javadoc/javadoc.css b/juneau-core/src/main/javadoc/javadoc.css
index 66d7637..dc99fdb 100755
--- a/juneau-core/src/main/javadoc/javadoc.css
+++ b/juneau-core/src/main/javadoc/javadoc.css
@@ -673,3 +673,8 @@ h1.hidden {
 	font-weight: bold;
 }
 
+h5.section, h6.section {
+	color: #4e4e4e;
+	margin: 10px 0 5px 0;
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/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 f55c6a2..ce52a4e 100644
--- a/juneau-core/src/main/javadoc/overview.html
+++ b/juneau-core/src/main/javadoc/overview.html
@@ -388,12 +388,16 @@
 
 	<jc>// Parse a JSON object as a HashMap&lt;String,Person&gt;.</jc>
 	json = <js>"{a:{name:'John Smith',age:21},b:{name:'Joe Smith',age:42}}"</js>;
-	Map&lt;String,Person&gt; m4 = parser.parseMap(json, HashMap.<jk>class</jk>, String.<jk>class</jk>, Person.<jk>class</jk>)
+	Map&lt;String,Person&gt; m4 = parser.parse(json, HashMap.<jk>class</jk>, String.<jk>class</jk>, Person.<jk>class</jk>)
+
+	<jc>// Parse a JSON object as a HashMap&lt;String,LinkedList&lt;Person&gt;&gt;.</jc>
+	json = <js>"{a:[{name:'John Smith',age:21},{name:'Joe Smith',age:42}]}"</js>;
+	Map&lt;String,List&lt;Person&gt;&gt; m5 = parser.parse(json, HashMap.<jk>class</jk>, String.<jk>class</jk>, LinkedList.<jk>class</jk>, Person.<jk>class</jk>)
 
 	<jc>// Parse a JSON array of integers as a Collection of Integers or int[] array.</jc>
 	json = <js>"[1,2,3]"</js>;
-	List&lt;Integer&gt; l5 = parser.parseCollection(json, LinkedList.<jk>class</jk>, Integer.<jk>class</jk>);
-	<jk>int</jk>[] i6 = parser.parse(json, <jk>int</jk>[].<jk>class</jk>);
+	List&lt;Integer&gt; l6 = parser.parse(json, LinkedList.<jk>class</jk>, Integer.<jk>class</jk>);
+	<jk>int</jk>[] i7 = parser.parse(json, <jk>int</jk>[].<jk>class</jk>);
 		</p>
 		<p>
 			The parsers can also be used to populating existing bean and collection objects:
@@ -5330,7 +5334,7 @@
 	
 	<h5 class='toc'>What's new in each release</h5>
 	<ul class='toc'>
-		<li><p><a class='doclink' href='#6.0.2'>6.0.2 (TBD)</a></p>
+		<li><p><a class='doclink' href='#6.1.0'>6.1.0 (TBD)</a></p>
 		<li><p><a class='doclink' href='#6.0.1'>6.0.1 (Jan 3, 2017)</a></p>
 		<li><p><a class='doclink' href='#6.0.0'>6.0.0 (Oct 3, 2016)</a></p>
 		<li><p><a class='doclink' href='#5.2.0.1'>5.2.0.1 (Mar 23, 2016)</a></p>
@@ -5397,12 +5401,11 @@
 
 
 	<!-- ======================================================================================================== -->
-	<a id="6.0.2"></a>
-	<h3 class='topic' onclick='toggle(this)'>6.0.2 (TBD)</h3>
+	<a id="6.1.0"></a>
+	<h3 class='topic' onclick='toggle(this)'>6.1.0 (TBD)</h3>
 	<div class='topic'>
 		<p>
-			Juneau 6.0.2 is a moderate update that provides localized serialization and parsing.
-			For example, dates can now be serialized to and parsed from locale-targeted formats.
+			Juneau 6.1.0 is a major update.
 		</p>
 		<p>
 			In particular, this release cleans up the {@link org.apache.juneau.BeanContext} API to match
@@ -5461,6 +5464,18 @@
 				<li>{@link org.apache.juneau.BeanContext#BEAN_timeZone} - Specifies a default timezone at the context level.
 				<li>{@link org.apache.juneau.BeanContext#BEAN_mediaType} - Specifies a default media type at the context level.
 			</ul>
+			<li>Improvements to Parser class:  
+			<ul>
+				<li>Simplified the parse methods (e.g. <code>parseMap()</code>, <code>parseCollection()</code>)
+				by replacing them with two simple methods: 
+				<ul>
+					<li>{@link org.apache.juneau.parser.Parser#parse(Object,Class)} - Normal method.
+					<li>{@link org.apache.juneau.parser.Parser#parse(Object,Type,Type...)} - Method for parsing into parameterized maps and collections.
+				</ul>
+				<li>Arbitrarily-complex parameterized maps and collections can now be parsed without the need for creating intermediate <code>ClassMeta</code> objects.
+				<li>No need for casting anymore if you were using the old <code>parseMap()</code> and <code>parseCollection()</code> methods!
+				<li>Changes allow me to eliminate <code>BeanContext.normalizeClassMeta()</code> method.
+			</ul>
 			<li>Simplified {@link org.apache.juneau.transform.PojoSwap} class.  Now just two methods:
 			<ul>
 				<li>{@link org.apache.juneau.transform.PojoSwap#swap(BeanSession,Object)}
@@ -5521,7 +5536,7 @@
 				</ul>
 			<li>New {@link org.apache.juneau.transform.MapSwap} and {@link org.apache.juneau.transform.StringSwap} classes.
 			<li>New {@link org.apache.juneau.serializer.WriterSerializer#println(Object)} method.  Useful for debugging purposes.
-			<li>New {@link org.apache.juneau.BeanContext#getClassMeta(Object[])} and {@link org.apache.juneau.BeanSession#getClassMeta(Object[])}
+			<li>New {@link org.apache.juneau.BeanContext#getClassMeta(Type,Type...)} and {@link org.apache.juneau.BeanSession#getClassMeta(Type,Type...)}
 				methods for retrieving Map and Collection class metas.  
 				Replaces the various <code>getMapClassMeta()</code>/<code>getCollectionClassMeta()</code> methods.  
 			<li>New section added to this document:	<a class='doclink' href='#DTOs'>Juneau Data Transfer Objects (org.apache.juneau.dto)</a>
@@ -5531,6 +5546,28 @@
 		<ul class='spaced-list'>
 			<li>{@link org.apache.juneau.rest.RestRequest} now passes locale and timezone to serializers/parsers/transforms.
 			<li>New {@link org.apache.juneau.rest.RestRequest#getTimeZone()} method.
+			<li>Standardized the following methods in {@link org.apache.juneau.rest.RestRequest} to remove dependency on <code>ClassMeta</code>
+				objects and eliminate the need for casts:
+			<ul>
+				<li>{@link org.apache.juneau.rest.RestRequest#getHeader(String,Class)}
+				<li>{@link org.apache.juneau.rest.RestRequest#getHeader(String,Object,Class)}
+				<li>{@link org.apache.juneau.rest.RestRequest#getHeader(String,Type,Type...)}
+				<li>{@link org.apache.juneau.rest.RestRequest#getQueryParameter(String,Class)}
+				<li>{@link org.apache.juneau.rest.RestRequest#getQueryParameter(String,Object,Class)}
+				<li>{@link org.apache.juneau.rest.RestRequest#getQueryParameter(String,Type,Type...)}
+				<li>{@link org.apache.juneau.rest.RestRequest#getQueryParameter(String,Object,Type,Type...)}
+				<li>{@link org.apache.juneau.rest.RestRequest#getQueryParameters(String,Class)}
+				<li>{@link org.apache.juneau.rest.RestRequest#getQueryParameters(String,Type,Type...)}
+				<li>{@link org.apache.juneau.rest.RestRequest#getFormDataParameter(String,Class)}
+				<li>{@link org.apache.juneau.rest.RestRequest#getFormDataParameter(String,Object,Class)}
+				<li>{@link org.apache.juneau.rest.RestRequest#getFormDataParameters(String,Class)}
+				<li>{@link org.apache.juneau.rest.RestRequest#getFormDataParameter(String,Type,Type...)}
+				<li>{@link org.apache.juneau.rest.RestRequest#getFormDataParameters(String,Type,Type...)}
+				<li>{@link org.apache.juneau.rest.RestRequest#getPathParameter(String,Class)}
+				<li>{@link org.apache.juneau.rest.RestRequest#getPathParameter(String,Type,Type...)}
+				<li>{@link org.apache.juneau.rest.RestRequest#getBody(Class)}
+				<li>{@link org.apache.juneau.rest.RestRequest#getBody(Type,Type...)}
+			</ul>
 		</ul>
 	</div>
 	
@@ -6572,10 +6609,26 @@
 		
 		<h6 class='topic'>Client</h6>
 		<ul class='spaced-list'>
-			<li>New convenience methods in {@link org.apache.juneau.rest.client.RestCall}:
+			<li>New methods in {@link org.apache.juneau.rest.client.RestCall}:
 				<ol>
-					<li>{@link org.apache.juneau.rest.client.RestCall#getResponseMap(Class,Class,Class)}
-					<li>{@link org.apache.juneau.rest.client.RestCall#getResponseCollection(Class,Class)}
+<li>{@link org.apache.juneau.rest.RestRequest#getHeader(String,Class)}
+<li>{@link org.apache.juneau.rest.RestRequest#getHeader(String,Object,Class)}
+<li>{@link org.apache.juneau.rest.RestRequest#getHeader(String,Type,Type...)}
+<li>{@link org.apache.juneau.rest.RestRequest#getQueryParameter(String,Class)}
+<li>{@link org.apache.juneau.rest.RestRequest#getQueryParameter(String,Object,Class)}
+<li>{@link org.apache.juneau.rest.RestRequest#getQueryParameter(String,Type,Type...)}
+<li>{@link org.apache.juneau.rest.RestRequest#getQueryParameter(String,Object,Type,Type...)}
+<li>{@link org.apache.juneau.rest.RestRequest#getQueryParameters(String,Class)}
+<li>{@link org.apache.juneau.rest.RestRequest#getQueryParameters(String,Type,Type...)}
+<li>{@link org.apache.juneau.rest.RestRequest#getFormDataParameter(String,Class)}
+<li>{@link org.apache.juneau.rest.RestRequest#getFormDataParameter(String,Object,Class)}
+<li>{@link org.apache.juneau.rest.RestRequest#getFormDataParameters(String,Class)}
+<li>{@link org.apache.juneau.rest.RestRequest#getFormDataParameter(String,Type,Type...)}
+<li>{@link org.apache.juneau.rest.RestRequest#getFormDataParameters(String,Type,Type...)}
+<li>{@link org.apache.juneau.rest.RestRequest#getPathParameter(String,Class)}
+<li>{@link org.apache.juneau.rest.RestRequest#getPathParameter(String,Type,Type...)}
+<li>{@link org.apache.juneau.rest.RestRequest#getBody(Class)}
+<li>{@link org.apache.juneau.rest.RestRequest#getBody(Type,Type...)}
 				</ol>
 			</li>
 		</ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-examples-rest/juneau-examples-rest.launch
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/juneau-examples-rest.launch b/juneau-examples-rest/juneau-examples-rest.launch
new file mode 100644
index 0000000..129975b
--- /dev/null
+++ b/juneau-examples-rest/juneau-examples-rest.launch
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+ ***************************************************************************************************************************
+ * 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.                                              *
+ ***************************************************************************************************************************
+-->
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<stringAttribute key="bad_container_name" value="/juneau-examples"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.jdt.debug.ui.CONSIDER_INHERITED_MAIN" value="true"/>
+<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
+<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.juneau.microservice.RestMicroservice"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="examples.cfg"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="juneau-examples-rest"/>
+</launchConfiguration>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/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 c523cbf..c056a09 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
@@ -71,7 +71,7 @@ public class MethodExampleResource extends Resource {
 		UUID a3 = req.getPathParameter("a3", UUID.class);
 
 		// Optional GET parameters
-		int p1 = req.getQueryParameter("p1", int.class, 0);
+		int p1 = req.getQueryParameter("p1", 0, int.class);
 		String p2 = req.getQueryParameter("p2", String.class);
 		UUID p3 = req.getQueryParameter("p3", UUID.class);
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-microservice/src/main/java/org/apache/juneau/microservice/Microservice.java
----------------------------------------------------------------------
diff --git a/juneau-microservice/src/main/java/org/apache/juneau/microservice/Microservice.java b/juneau-microservice/src/main/java/org/apache/juneau/microservice/Microservice.java
index 6efd127..e604231 100755
--- a/juneau-microservice/src/main/java/org/apache/juneau/microservice/Microservice.java
+++ b/juneau-microservice/src/main/java/org/apache/juneau/microservice/Microservice.java
@@ -220,7 +220,7 @@ public abstract class Microservice {
 	 * <p>
 	 * Subclasses can override this method to provide their own variables.
 	 * 
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jd>/**
 	 * 	 * Augment default var resolver with a custom $B{...} variable that simply wraps strings inside square brackets.
@@ -289,7 +289,7 @@ public abstract class Microservice {
 	 * <p>
 	 * This method can be called from the class constructor.
 	 * 
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<cc>#--------------------------</cc>
 	 * 	<cc># My section</cc>
@@ -367,7 +367,7 @@ public abstract class Microservice {
 	 * <p>
 	 * This method can be called from the class constructor.
 	 * 
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Get Main-Class from manifest file.</jc>
 	 * 	String mainClass = Microservice.<jsm>getManifest</jsm>().getString(<js>"Main-Class"</js>, <js>"unknown"</js>);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java
----------------------------------------------------------------------
diff --git a/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java b/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java
index 839f606..a86eb4c 100755
--- a/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java
+++ b/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java
@@ -85,7 +85,7 @@ public class RestMicroservice extends Microservice {
 	/**
 	 * Constructor.
 	 *
-	 * @param args The command line arguments.
+	 * @param args Command line arguments.
 	 * @throws Exception
 	 */
 	public RestMicroservice(String...args) throws Exception {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/AllowAllRedirects.java
----------------------------------------------------------------------
diff --git a/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/AllowAllRedirects.java b/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/AllowAllRedirects.java
index 619bfca..044e3b1 100644
--- a/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/AllowAllRedirects.java
+++ b/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/AllowAllRedirects.java
@@ -17,8 +17,11 @@ import org.apache.http.impl.client.*;
 /**
  * Redirect strategy that allows for redirects on any request type, not just <code>GET</code> or <code>HEAD</code>.
  * <p>
- * Note:  This class is similar to <code>org.apache.http.impl.client.LaxRedirectStrategy</code>
- * 	in Apache HttpClient 4.2, but also allows for redirects on <code>PUTs</code> and <code>DELETEs</code>.
+ * <h5 class='section'>Notes:</h5>
+ * <ul>
+ * 	<li>This class is similar to <code>org.apache.http.impl.client.LaxRedirectStrategy</code>
+ * 		in Apache HttpClient 4.2, but also allows for redirects on <code>PUTs</code> and <code>DELETEs</code>.
+ * </ul>
  */
 public class AllowAllRedirects extends DefaultRedirectStrategy {
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/NameValuePairs.java
----------------------------------------------------------------------
diff --git a/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/NameValuePairs.java b/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/NameValuePairs.java
index da6393a..ee97ac1 100644
--- a/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/NameValuePairs.java
+++ b/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/NameValuePairs.java
@@ -21,7 +21,7 @@ import org.apache.http.client.entity.*;
  * Convenience class for constructing instances of <code>List&lt;NameValuePair&gt;</code>
  * 	for the {@link UrlEncodedFormEntity} class.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	NameValuePairs params = <jk>new</jk> NameValuePairs()
  * 		.append(<jk>new</jk> BasicNameValuePair(<js>"j_username"</js>, user))

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponsePattern.java
----------------------------------------------------------------------
diff --git a/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponsePattern.java b/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponsePattern.java
index 7398bd1..b56797f 100644
--- a/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponsePattern.java
+++ b/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponsePattern.java
@@ -20,7 +20,7 @@ import java.util.regex.*;
  * <p>
  * Response patterns are applied to REST calls through the {@link RestCall#addResponsePattern(ResponsePattern)} method.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * This example shows how to use a response pattern finder to find and capture patterns for <js>"x=number"</js> and <js>"y=string"</js>
  * 	from a response body.
  * <p>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCall.java
----------------------------------------------------------------------
diff --git a/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCall.java b/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCall.java
index b49c59a..5fbf663 100644
--- a/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCall.java
+++ b/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCall.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.rest.client;
 
 import java.io.*;
+import java.lang.reflect.*;
 import java.net.*;
 import java.util.*;
 import java.util.logging.*;
@@ -47,9 +48,9 @@ import org.apache.juneau.utils.*;
  * <p>
  * 	The actual connection and request/response transaction occurs when calling one of the <code>getResponseXXX()</code> methods.
  *
- * <h6 class='topic'>Additional Information</h6>
+ * <h5 class='section'>Additional information:</h5>
  * <ul>
- * 	<li><a class='doclink' href='package-summary.html#RestClient'>org.apache.juneau.rest.client &gt; REST client API</a> for more information and code examples.
+ * 	<li><a class="doclink" href="package-summary.html#RestClient">org.apache.juneau.rest.client &gt; REST client API</a> for more information and code examples.
  * </ul>
  */
 public final class RestCall {
@@ -339,7 +340,7 @@ public final class RestCall {
 	 * This method uses {@link #getCapturedResponse()} to read the response text and so does not affect the other output
 	 * 	methods such as {@link #getResponseAsString()}.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Throw a RestCallException if FAILURE or ERROR is found in the output.</jc>
 	 * 	restClient.doGet(<jsf>URL</jsf>)
@@ -370,7 +371,7 @@ public final class RestCall {
 	 * This method uses {@link #getCapturedResponse()} to read the response text and so does not affect the other output
 	 * 	methods such as {@link #getResponseAsString()}.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Throw a RestCallException if SUCCESS is not found in the output.</jc>
 	 * 	restClient.doGet(<jsf>URL</jsf>)
@@ -446,7 +447,7 @@ public final class RestCall {
 	 * The response entity is discarded unless one of the pipe methods have been specified to pipe the
 	 * 	 output to an output stream or writer.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jk>try</jk> {
 	 * 		RestClient client = <jk>new</jk> RestClient();
@@ -745,6 +746,38 @@ public final class RestCall {
 	}
 
 	/**
+	 * Same as {@link #getResponse(Class)}, but useful for parsing into maps and collections of specific types.
+	 *
+	 * @param type The class to resolve.
+	 * 	Can be any of the following:
+	 * 	<ul>
+	 * 		<li>{@link ClassMeta}
+	 * 		<li>{@link Class}
+	 * 		<li>{@link ParameterizedType}
+	 * 		<li>{@link GenericArrayType}
+	 * 	</ul>
+	 * @param args The type arguments of the class if it's a collection or map.
+	 * 	Can be any of the following:
+	 * 	<ul>
+	 * 		<li>{@link ClassMeta}
+	 * 		<li>{@link Class}
+	 * 		<li>{@link ParameterizedType}
+	 * 		<li>{@link GenericArrayType}
+	 * 	</ul>
+	 * @param <T> The class to convert the input to.
+	 * @return The parsed output.
+	 * @throws IOException If a connection error occurred.
+	 * @throws ParseException If the input contains a syntax error or is malformed for the <code>Content-Type</code> header.
+	 */
+	@SuppressWarnings("unchecked")
+	public <T> T getResponse(Type type, Type...args) throws IOException, ParseException {
+		BeanContext bc = getParser().getBeanContext();
+		if (bc == null)
+			bc = BeanContext.DEFAULT;
+		return (T)getResponse(bc.getClassMeta(type, args));
+	}
+
+	/**
 	 * Parses the output from the connection into the specified type and then wraps that in a {@link PojoRest}.
 	 * <p>
 	 * Useful if you want to quickly retrieve a single value from inside of a larger JSON document.
@@ -771,61 +804,6 @@ public final class RestCall {
 		return getResponsePojoRest(ObjectMap.class);
 	}
 
-	/**
-	 * Convenience method when you want to parse into a Map&lt;K,V&gt; object.
-	 *
-	 * <h6 class='topic'>Example:</h6>
-	 * <p class='bcode'>
-	 * 	Map&lt;String,MyBean&gt; m = client.doGet(url).getResponseMap(LinkedHashMap.<jk>class</jk>, String.<jk>class</jk>, MyBean.<jk>class</jk>);
-	 * </p>
-	 * <p>
-	 * 	A simpler approach is often to just extend the map class you want and just use the normal {@link #getResponse(Class)} method:
-	 * </p>
-	 * <p class='bcode'>
-	 * 	<jk>public static class</jk> MyMap <jk>extends</jk> LinkedHashMap&lt;String,MyBean&gt; {}
-	 *
-	 * 	Map&lt;String,MyBean&gt; m = client.doGet(url).getResponse(MyMap.<jk>class</jk>);
-	 * </p>
-	 *
-	 * @param mapClass The map class to use (e.g. <code>TreeMap</code>)
-	 * @param keyClass The class type of the keys (e.g. <code>String</code>)
-	 * @param valueClass The class type of the values (e.g. <code>MyBean</code>)
-	 * @return The response parsed as a map.
-	 * @throws ParseException
-	 * @throws IOException
-	 */
-	public final <K,V,T extends Map<K,V>> T getResponseMap(Class<T> mapClass, Class<K> keyClass, Class<V> valueClass) throws ParseException, IOException {
-		ClassMeta<T> cm = getBeanContext().getClassMeta(mapClass, keyClass, valueClass);
-		return getResponse(cm);
-	}
-
-	/**
-	 * Convenience method when you want to parse into a Collection&lt;E&gt; object.
-	 *
-	 * <h6 class='topic'>Example:</h6>
-	 * <p class='bcode'>
-	 * 	List&lt;MyBean&gt; l = client.doGet(url).getResponseCollection(LinkedList.<jk>class</jk>, MyBean.<jk>class</jk>);
-	 * </p>
-	 * <p>
-	 * 	A simpler approach is often to just extend the collection class you want and just use the normal {@link #getResponse(Class)} method:
-	 * </p>
-	 * <p class='bcode'>
-	 * 	<jk>public static class</jk> MyList <jk>extends</jk> LinkedList&lt;MyBean&gt; {}
-	 *
-	 * 	List&lt;MyBean&gt; l = client.doGet(url).getResponse(MyList.<jk>class</jk>);
-	 * </p>
-	 *
-	 * @param collectionClass The collection class to use (e.g. <code>LinkedList</code>)
-	 * @param entryClass The class type of the values (e.g. <code>MyBean</code>)
-	 * @return The response parsed as a collection.
-	 * @throws ParseException
-	 * @throws IOException
-	 */
-	public final <E,T extends Collection<E>> T getResponseCollection(Class<T> collectionClass, Class<E> entryClass) throws ParseException, IOException {
-		ClassMeta<T> cm = getBeanContext().getClassMeta(collectionClass, entryClass);
-		return getResponse(cm);
-	}
-
 	<T> T getResponse(ClassMeta<T> type) throws IOException, ParseException {
 		try {
 		Parser p = getParser();

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
----------------------------------------------------------------------
diff --git a/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java b/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
index a088461..54ee36d 100644
--- a/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
+++ b/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
@@ -63,9 +63,9 @@ import org.apache.juneau.urlencoding.*;
  * 	<li>API for interacting with remoteable services.
  * </ul>
  *
- * <h6 class='topic'>Additional Information</h6>
+ * <h5 class='section'>Additional information:</h5>
  * <ul>
- * 	<li><a class='doclink' href='package-summary.html#RestClient'>org.apache.juneau.rest.client &gt; REST client API</a> for more information and code examples.
+ * 	<li><a class="doclink" href="package-summary.html#RestClient">org.apache.juneau.rest.client &gt; REST client API</a> for more information and code examples.
  * </ul>
  */
 public class RestClient extends CoreApi {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/SerializedNameValuePair.java
----------------------------------------------------------------------
diff --git a/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/SerializedNameValuePair.java b/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/SerializedNameValuePair.java
index 51de853..17a7dde 100644
--- a/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/SerializedNameValuePair.java
+++ b/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/SerializedNameValuePair.java
@@ -24,7 +24,7 @@ import org.apache.juneau.urlencoding.*;
  * Subclass of {@link NameValuePair} for serializing POJOs as URL-encoded form post entries
  * 	using the {@link UrlEncodingSerializer class}.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	NameValuePairs params = <jk>new</jk> NameValuePairs()
  * 		.append(<jk>new</jk> SerializedNameValuePair(<js>"myPojo"</js>, pojo, UrlEncodingSerializer.<jsf>DEFAULT_SIMPLE</jsf>))

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/BaseProvider.java
----------------------------------------------------------------------
diff --git a/juneau-rest-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/BaseProvider.java b/juneau-rest-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/BaseProvider.java
index bc2242f..1a26708 100644
--- a/juneau-rest-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/BaseProvider.java
+++ b/juneau-rest-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/BaseProvider.java
@@ -132,8 +132,6 @@ public class BaseProvider implements MessageBodyReader<Object>, MessageBodyWrite
 			if (pm == null)
 				throw new WebApplicationException(SC_UNSUPPORTED_MEDIA_TYPE);
 			Parser p = pm.getParser();
-			BeanContext bc = p.getBeanContext();
-			ClassMeta<?> cm = bc.getClassMeta(gType);
 			ObjectMap mp = getMethodProperties(a);
 			mp.put("mediaType", mediaType.toString());
 			Locale locale = getLocale(headers);
@@ -142,11 +140,11 @@ public class BaseProvider implements MessageBodyReader<Object>, MessageBodyWrite
 				ReaderParser p2 = (ReaderParser)p;
 				InputStreamReader r = new InputStreamReader(in, IOUtils.UTF8);
 				ParserSession session = p2.createSession(r, mp, null, null, locale, timeZone, pm.getMediaType());
-				return p2.parse(session, cm);
+				return p2.parseSession(session, p.getBeanContext().getClassMeta(gType));
 			}
 			InputStreamParser p2 = (InputStreamParser)p;
 			ParserSession session = p2.createSession(in, mp, null, null, locale, timeZone, pm.getMediaType());
-			return p2.parse(session, cm);
+			return p2.parseSession(session, p.getBeanContext().getClassMeta(gType));
 		} catch (ParseException e) {
 			throw new IOException(e);
 		}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/JuneauProvider.java
----------------------------------------------------------------------
diff --git a/juneau-rest-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/JuneauProvider.java b/juneau-rest-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/JuneauProvider.java
index b0e54c0..bbca603 100644
--- a/juneau-rest-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/JuneauProvider.java
+++ b/juneau-rest-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/JuneauProvider.java
@@ -29,7 +29,7 @@ import org.apache.juneau.xml.*;
 /**
  * Annotations applicable to subclasses of {@link BaseProvider}.
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Used to associate serializers, parsers, filters, and properties with instances of {@link BaseProvider}.
  */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/Redirect.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/Redirect.java b/juneau-rest/src/main/java/org/apache/juneau/rest/Redirect.java
index ab3923f..962e432 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/Redirect.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/Redirect.java
@@ -75,7 +75,7 @@ public final class Redirect {
 	 * Relative paths are interpreted as relative to the servlet path.
 	 *
 	 * @param url The URL to redirect to.
-	 * @param args Optional {@link MessageFormat} arguments to replace in the URL string.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public Redirect(CharSequence url, Object...args) {
 		this.url = (url == null ? null : url.toString());
@@ -98,7 +98,7 @@ public final class Redirect {
 	 *
 	 * @param httpResponseCode The HTTP response code.
 	 * @param url The URL to redirect to.
-	 * @param args Optional {@link MessageFormat} arguments to replace in the URL string.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public Redirect(int httpResponseCode, CharSequence url, Object...args) {
 		this.httpResponseCode = httpResponseCode;

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/RestConverter.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestConverter.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestConverter.java
index 9c3e378..cc401ec 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestConverter.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestConverter.java
@@ -24,7 +24,7 @@ import org.apache.juneau.serializer.*;
  * 	converted to some other POJO after invocation of the REST method.
  * <p>
  * 	Converters are associated with REST methods through the {@link RestMethod#converters()} annotation.
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jk>public class</jk> RequestEchoResource <jk>extends</jk> RestServlet {
  *

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/RestException.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestException.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestException.java
index 2f510bb..4ad7fd1 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestException.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestException.java
@@ -33,7 +33,7 @@ public class RestException extends RuntimeException {
 	 *
 	 * @param status The HTTP status code.
 	 * @param msg The status message.
-	 * @param args Optional string format arguments.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public RestException(int status, String msg, Object...args) {
 		super(args.length == 0 ? msg : MessageFormat.format(msg, args));

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/RestGuard.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestGuard.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestGuard.java
index 82db0ca..6b406ca 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestGuard.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestGuard.java
@@ -19,7 +19,7 @@ import org.apache.juneau.rest.annotation.*;
 /**
  * REST method guard.
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Implements a guard mechanism for REST method calls that allows requests to be
  * 		rejected before invocation of the REST method.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/RestMatcher.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestMatcher.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestMatcher.java
index 84a14f3..236545f 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestMatcher.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestMatcher.java
@@ -30,7 +30,7 @@ import org.apache.juneau.rest.annotation.*;
  * This is opposite from the {@link RestMethod#guards()} annotation, where all guards
  * 	are required to match in order to execute the method.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jk>public class</jk> MyResource <jk>extends</jk> RestServlet {
  *


[2/7] incubator-juneau git commit: Eliminate ClassMeta dependencies from Parser. Clean up docs.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HasQuery.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HasQuery.java b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HasQuery.java
index 10fdcb7..0d60f43 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HasQuery.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HasQuery.java
@@ -28,7 +28,7 @@ import org.apache.juneau.rest.*;
  * Therefore, this annotation can be used in conjunction with the {@link Body @Body} annotation
  * 	or {@link RestRequest#getBody(Class)} method for <code>application/x-www-form-urlencoded POST</code> calls.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<ja>@RestMethod</ja>(name=<js>"GET"</js>)
  * 	<jk>public void</jk> doPost(<ja>@HasQuery</ja>(<js>"p1"</js>) <jk>boolean</jk> p1, <ja>@Body</ja> Bean myBean) {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Header.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Header.java b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Header.java
index 6cdbbf0..bc4cdb5 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Header.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Header.java
@@ -21,7 +21,7 @@ import java.lang.annotation.*;
  * Annotation that can be applied to a parameter of a {@link RestMethod} annotated method
  * 	to identify it as a HTTP request header converted to a POJO.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<ja>@RestMethod</ja>(name=<js>"GET"</js>)
  * 	<jk>public void</jk> doGet(RestRequest req, RestResponse res, <ja>@Header</ja>(<js>"ETag"</js>) UUID etag) {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Messages.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Messages.java b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Messages.java
index 5e1bb2a..ae396a3 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Messages.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Messages.java
@@ -26,7 +26,7 @@ import org.apache.juneau.utils.*;
  * <p>
  * 	Parameter type must be either {@link ResourceBundle} or {@link MessageBundle}.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<ja>@RestMethod</ja>(name=<js>"GET"</js>)
  * 	<jk>public</jk> String doGet(<ja>@Messages</ja> ResourceBundle messages) {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Method.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Method.java b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Method.java
index a1e2495..fbdbe66 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Method.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Method.java
@@ -23,7 +23,7 @@ import java.lang.annotation.*;
  * <p>
  * 	Typically used for HTTP method handlers of type <js>"*"</js> (i.e. handle all requests).
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<ja>@RestMethod</ja>(name=<js>"*"</js>)
  * 	<jk>public void</jk> doAnything(RestRequest req, RestResponse res, <ja>@Method</ja> String method) {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Parameter.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Parameter.java b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Parameter.java
index 77a9c23..668638a 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Parameter.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Parameter.java
@@ -21,7 +21,7 @@ import java.lang.annotation.*;
  * Annotation used in conjunction with {@link RestMethod#parameters()} to identify content and header descriptions
  * 	on specific method requests.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<ja>@RestMethod</ja>(
  * 		name=<js>"*"</js>,
@@ -58,8 +58,9 @@ public @interface Parameter {
 	 * The name of the parameter (e.g. <js>"Content-Range"</js>).
 	 * <p>
 	 * Parameter names are case sensitive.
-	 * If <code>in</code> is <js>"path"</js>, the name field MUST correspond to the associated path segment from the <code>path</code> field in the <a href='http://swagger.io/specification/#pathsObject'>Paths Object</a>.
-	 * See <a href='http://swagger.io/specification/#pathTemplating'>Path Templating</a> for further information.
+	 * If <code>in</code> is <js>"path"</js>, the name field MUST correspond to the associated path segment from the <code>path</code> field in
+	 * 	the <a class="doclink" href="http://swagger.io/specification/#pathsObject">Paths Object</a>.
+	 * See <a class="doclink" href="http://swagger.io/specification/#pathTemplating">Path Templating</a> for further information.
 	 * For all other cases, the name corresponds to the parameter name used based on the <code>in</code> property.
 	 */
 	String name() default "";
@@ -69,7 +70,7 @@ public @interface Parameter {
 	 * <p>
 	 * A brief description of the parameter.
 	 * This could contain examples of use.
-	 * <a href='https://help.github.com/articles/github-flavored-markdown'>GFM syntax</a> can be used for rich text representation.
+	 * <a class="doclink" href="https://help.github.com/articles/github-flavored-markdown">GFM syntax</a> can be used for rich text representation.
 	 * <p>
 	 * The default value pulls the description from the <code>description</code> entry in the servlet resource bundle.
 	 * (e.g. <js>"myMethod.res.[code].[category].[name] = foo"</js> or <js>"MyServlet.myMethod.res.[code].[category].[name] = foo"</js>).
@@ -89,9 +90,9 @@ public @interface Parameter {
 	 * <p>
 	 * 	Only applicable for <code>in</code> of type <js>"body"</js>.
 	 * <p>
-	 * 	The schema is a JSON object specified <a href='http://swagger.io/specification/#schemaObject'>here</a>.
+	 * 	The schema is a JSON object specified <a class="doclink" href="http://swagger.io/specification/#schemaObject">here</a>.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<ja>@RestMethod</ja>(
 	 * 		parameters={
@@ -117,7 +118,7 @@ public @interface Parameter {
 	/**
 	 * The extending format for the previously mentioned <code>type</code>.
 	 * <p>
-	 * See <a href='http://swagger.io/specification/#dataTypeFormat'>Data Type Formats</a> for further details.
+	 * See <a class="doclink" href="http://swagger.io/specification/#dataTypeFormat">Data Type Formats</a> for further details.
 	 */
 	String format() default "";
 
@@ -134,7 +135,7 @@ public @interface Parameter {
 	 * <p>
 	 * Describes the type of items in the array.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<ja>@RestMethod</ja>(
 	 * 		parameters={
@@ -148,7 +149,7 @@ public @interface Parameter {
 	 * 	<jk>public void</jk> doAnything() {
 	 * </p>
 	 * <p>
-	 * See <a href='http://swagger.io/specification/#itemsObject'>Items Object</a> for further details.
+	 * See <a class="doclink" href="http://swagger.io/specification/#itemsObject">Items Object</a> for further details.
 	 */
 	String items() default "";
 
@@ -173,7 +174,7 @@ public @interface Parameter {
 	 * <p>
 	 * For example a "count" to control the number of results per page might default to 100 if not supplied by the client in the request.
 	 * (Note: "default" has no meaning for required parameters.)
-	 * See <a href='http://json-schema.org/latest/json-schema-validation.html#anchor101'>http://json-schema.org/latest/json-schema-validation.html#anchor101</a>.
+	 * See <a class="doclink" href="http://json-schema.org/latest/json-schema-validation.html#anchor101">http://json-schema.org/latest/json-schema-validation.html#anchor101</a>.
 	 * Unlike JSON Schema this value MUST conform to the defined <code>type</code> for this parameter.
 	 */
 	String _default() default "";

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Path.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Path.java b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Path.java
index e64ccf3..1333656 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Path.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Path.java
@@ -21,7 +21,7 @@ import java.lang.annotation.*;
  * Annotation that can be applied to a parameter of a {@link RestMethod} annotated method
  * 	to identify it as a variable in a URL path pattern converted to a POJO.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<ja>@RestMethod</ja>(name=<js>"GET"</js>, path=<js>"/myurl/{foo}/{bar}/{baz}/*"</js>)
  * 	<jk>public void</jk> doGet(RestRequest req, RestResponse res,

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/PathRemainder.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/PathRemainder.java b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/PathRemainder.java
index 728fde0..ea93705 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/PathRemainder.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/PathRemainder.java
@@ -21,7 +21,7 @@ import java.lang.annotation.*;
  * Annotation that can be applied to a parameter of a {@link RestMethod} annotated method
  * 	to identify it as the URL parameter remainder after a path pattern match.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<ja>@RestMethod</ja>(name=<js>"GET"</js>, path=<js>"/foo/*"</js>)
  * 	<jk>public void</jk> doGet(RestRequest req, RestResponse res, <ja>@PathRemainder</ja> String remainder) {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Properties.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Properties.java b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Properties.java
index a70e908..4957c1d 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Properties.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Properties.java
@@ -23,7 +23,7 @@ import org.apache.juneau.*;
  * Annotation that can be applied to a parameter of a {@link RestMethod} annotated method
  * 	to identify the request-duration properties object for the current request.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<ja>@RestMethod</ja>(name=<js>"GET"</js>)
  * 	<jk>public Person</jk> doGetPerson(<ja>@Properties</ja> ObjectMap properties) {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Query.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Query.java b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Query.java
index a08113a..649b7cd 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Query.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Query.java
@@ -28,7 +28,7 @@ import org.apache.juneau.rest.*;
  * Therefore, this annotation can be used in conjunction with the {@link Body @Body} annotation
  * 	or {@link RestRequest#getBody(Class)} method for <code>application/x-www-form-urlencoded POST</code> calls.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<ja>@RestMethod</ja>(name=<js>"GET"</js>)
  * 	<jk>public void</jk> doGet(RestRequest req, RestResponse res,

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Response.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Response.java b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Response.java
index 6cc7860..3b72a74 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Response.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/Response.java
@@ -20,7 +20,7 @@ import java.lang.annotation.*;
 /**
  * Annotation used in conjunction with {@link RestMethod#responses()} to identify possible responses by the method.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<ja>@RestMethod</ja>(
  * 		name=<js>"*"</js>,
@@ -63,10 +63,10 @@ public @interface Response {
 	 * <p>
 	 * It can be a primitive, an array or an object.
 	 * If this field does not exist, it means no content is returned as part of the response.
-	 * As an extension to the <a href='http://swagger.io/specification/#schemaObject'>Schema Object</a>, its root type value may also be <js>"file"</js>.
+	 * As an extension to the <a class="doclink" href="http://swagger.io/specification/#schemaObject">Schema Object</a>, its root type value may also be <js>"file"</js>.
 	 * This SHOULD be accompanied by a relevant produces mime-type.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<ja>@RestMethod</ja>(
 	 * 		name=<js>"*"</js>,

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java
index 1dc75e9..530f563 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java
@@ -255,7 +255,7 @@ public @interface RestMethod {
 	 * <p>
 	 * 	Header values specified at the method level override header values specified at the servlet level.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Assume "text/json" Accept value when Accept not specified</jc>
 	 * 	<ja>@RestMethod</ja>(name=<js>"GET"</js>, path=<js>"/*"</js>, defaultRequestHeaders={<js>"Accept: text/json"</js>})
@@ -320,7 +320,7 @@ public @interface RestMethod {
 	 * 	The default value pulls the description from the <code>(className.?)[javaMethodName].externalDocs</code> entry in the servlet resource bundle.
 	 * 	(e.g. <js>"MyClass.myMethod.externalDocs = {url:'http://juneau.apache.org'}"</js> or <js>"myMethod.externalDocs = {url:'http://juneau.apache.org'}"</js>).
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<ja>@RestMethod</ja>(externalDocs=<js>"{url:'http://juneau.apache.org'}"</js>)
 	 * </p>
@@ -342,7 +342,7 @@ public @interface RestMethod {
 	 * 	The default value pulls the description from the <code>(className.?)[javaMethodName].tags</code> entry in the servlet resource bundle.
 	 * 	(e.g. <js>"MyClass.myMethod.tags = foo,bar"</js> or <js>"myMethod.tags = foo,bar"</js>).
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<ja>@RestMethod</ja>(tags=<js>"foo,bar"</js>)
 	 * </p>
@@ -361,7 +361,7 @@ public @interface RestMethod {
 	 * 	The default value pulls the description from the <code>(className.?)[javaMethodName].deprecated</code> entry in the servlet resource bundle.
 	 * 	(e.g. <js>"MyClass.myMethod.deprecated = true"</js> or <js>"myMethod.deprecated = foo,bar"</js>).
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<ja>@RestMethod</ja>(deprecated=<jk>true</jk>)
 	 * </p>
@@ -378,7 +378,7 @@ public @interface RestMethod {
 	 * 	This annotation is provided for documentation purposes and is used to populate the method <js>"parameters"</js> column
 	 * 		on the Swagger page.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<ja>@RestMethod</ja>(
 	 * 		name=<js>"POST"</js>, path=<js>"/{a}"</js>,
@@ -415,7 +415,7 @@ public @interface RestMethod {
 	 * 	This annotation is provided for documentation purposes and is used to populate the method <js>"responses"</js> column
 	 * 		on the Swagger page.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<ja>@RestMethod</ja>(
 	 * 		name=<js>"GET"</js>, path=<js>"/"</js>,

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/RestResource.java b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
index 1948ce0..f41bd53 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
@@ -177,7 +177,7 @@ public @interface RestResource {
 	 * <p>
 	 * 	This annotation can only be used on {@link Encoder} classes that have no-arg constructors.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Servlet with automated support for GZIP compression</jc>
 	 * 	<ja>@RestResource</ja>(encoders={GzipEncoder.<jk>class</jk>})
@@ -200,7 +200,7 @@ public @interface RestResource {
 	 * <p>
 	 * 	Only one header value can be specified per entry (i.e. it's not a delimited list of header entries).
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Assume "text/json" Accept value when Accept not specified</jc>
 	 * 	<ja>@RestResource</ja>(defaultRequestHeaders={<js>"Accept: text/json"</js>})
@@ -222,7 +222,7 @@ public @interface RestResource {
 	 * <p>
 	 * 	Only one header value can be specified per entry (i.e. it's not a delimited list of header entries).
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Add a version header attribute to all responses</jc>
 	 * 	<ja>@RestResource</ja>(defaultResponseHeaders={<js>"X-Version: 1.0"</js>})
@@ -347,7 +347,7 @@ public @interface RestResource {
 	 * 	The default value pulls the description from the <code>contact</code> entry in the servlet resource bundle.
 	 * 	(e.g. <js>"contact = {name:'John Smith',email:'john.smith@foo.bar'}"</js> or <js>"MyServlet.contact = {name:'John Smith',email:'john.smith@foo.bar'}"</js>).
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(contact=<js>"{name:'John Smith',email:'john.smith@foo.bar'}"</js>)
 	 * </p>
@@ -375,7 +375,7 @@ public @interface RestResource {
 	 * 	The default value pulls the description from the <code>license</code> entry in the servlet resource bundle.
 	 * 	(e.g. <js>"license = {name:'Apache 2.0',url:'http://www.apache.org/licenses/LICENSE-2.0.html'}"</js> or <js>"MyServlet.license = {name:'Apache 2.0',url:'http://www.apache.org/licenses/LICENSE-2.0.html'}"</js>).
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(license=<js>"{name:'Apache 2.0',url:'http://www.apache.org/licenses/LICENSE-2.0.html'}"</js>)
 	 * </p>
@@ -424,7 +424,7 @@ public @interface RestResource {
 	 * 	The default value pulls the description from the <code>tags</code> entry in the servlet resource bundle.
 	 * 	(e.g. <js>"tags = [{name:'Foo',description:'Foobar'}]"</js> or <js>"MyServlet.tags = [{name:'Foo',description:'Foobar'}]"</js>).
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(tags=<js>"[{name:'Foo',description:'Foobar'}]"</js>)
 	 * </p>
@@ -452,7 +452,7 @@ public @interface RestResource {
 	 * 	The default value pulls the description from the <code>externalDocs</code> entry in the servlet resource bundle.
 	 * 	(e.g. <js>"externalDocs = {url:'http://juneau.apache.org'}"</js> or <js>"MyServlet.externalDocs = {url:'http://juneau.apache.org'}"</js>).
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(externalDocs=<js>"{url:'http://juneau.apache.org'}"</js>)
 	 * </p>
@@ -495,7 +495,7 @@ public @interface RestResource {
 	 * <p>
 	 * 	If the file cannot be located, the request to <js>"[servletpath]/style.css"</js> will return {@link HttpServletResponse#SC_NOT_FOUND}.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jk>package</jk> com.foo.mypackage;
 	 *
@@ -525,7 +525,7 @@ public @interface RestResource {
 	 * <p>
 	 * 	If the file cannot be located, the request to <js>"[servletpath]/favicon.ico"</js> will return {@link HttpServletResponse#SC_NOT_FOUND}.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jk>package</jk> com.foo.mypackage;
 	 *
@@ -557,7 +557,7 @@ public @interface RestResource {
 	 * <p>
 	 * 	The media type on the response is determined by the {@link RestServlet#getMimetypesFileTypeMap()} method.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jk>package</jk> com.foo.mypackage;
 	 *

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/converters/Queryable.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/converters/Queryable.java b/juneau-rest/src/main/java/org/apache/juneau/rest/converters/Queryable.java
index 297097f..911b0b4 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/converters/Queryable.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/converters/Queryable.java
@@ -71,18 +71,15 @@ public final class Queryable implements RestConverter {
 
 				if (o instanceof Collection || o.getClass().isArray()) {
 					ObjectMap query = req.getQueryParameter("q", ObjectMap.class);
-					ClassMeta<List<String>> cm1 = session.getCollectionClassMeta(List.class, String.class);
-					List<String> view = req.getQueryParameter("v", cm1);
-					ClassMeta<List<Object>> cm2 = session.getCollectionClassMeta(List.class, String.class);
-					List sort = req.getQueryParameter("s", cm2);
-					boolean ignoreCase = req.getQueryParameter("i", Boolean.class, false);
-					int pos = req.getQueryParameter("p", Integer.class, 0);
-					int limit = req.getQueryParameter("l", Integer.class, 0);
+					List<String> view = req.getQueryParameter("v", List.class, String.class);
+					List sort = req.getQueryParameter("s", List.class, String.class);
+					boolean ignoreCase = req.getQueryParameter("i", false, Boolean.class);
+					int pos = req.getQueryParameter("p", 0, Integer.class);
+					int limit = req.getQueryParameter("l", 0, Integer.class);
 					o = f.filterCollection(query, view, sort, pos, limit, ignoreCase);
 
 				} else {
-					ClassMeta<List<String>> cm2 = session.getCollectionClassMeta(List.class, String.class);
-					List<String> view = req.getQueryParameter("v", cm2);
+					List<String> view = req.getQueryParameter("v", List.class, String.class);
 					o = f.filterMap(view);
 				}
 			}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/labels/ResourceDescription.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/labels/ResourceDescription.java b/juneau-rest/src/main/java/org/apache/juneau/rest/labels/ResourceDescription.java
index f99c3c9..29ea2e9 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/labels/ResourceDescription.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/labels/ResourceDescription.java
@@ -18,7 +18,7 @@ import org.apache.juneau.rest.*;
 /**
  * Shortcut label for child resources.  Typically used in router resources.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Instead of this...</jc>
  * 	<jk>new</jk> NameDescription(<jk>new</jk> Link(<js>"httpTool"</js>, uri + <js>"/httpTool"</js>), <js>"HTTP request test client"</js>);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-rest/src/main/java/org/apache/juneau/rest/labels/ResourceLink.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/labels/ResourceLink.java b/juneau-rest/src/main/java/org/apache/juneau/rest/labels/ResourceLink.java
index 4c3e234..2325fdd 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/labels/ResourceLink.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/labels/ResourceLink.java
@@ -27,7 +27,7 @@ public class ResourceLink extends Link {
 	 *
 	 * @param req The HTTP request from the parent resource.
 	 * @param childPath The child resource path.
-	 * @param args Optional {@link MessageFormat}-style arguments in the child path.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public ResourceLink(RestRequest req, String childPath, Object...args) {
 		super(getName(getPath(childPath,args)), getHref(req, getPath(childPath,args)));
@@ -39,7 +39,7 @@ public class ResourceLink extends Link {
 	 * @param label The label for the link.
 	 * @param req The HTTP request from the parent resource.
 	 * @param childPath The child resource path.
-	 * @param args Optional {@link MessageFormat}-style arguments in the child path.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public ResourceLink(String label, RestRequest req, String childPath, Object...args) {
 		super(label, getHref(req, getPath(childPath,args)));


[5/7] incubator-juneau git commit: Eliminate ClassMeta dependencies from Parser. Clean up docs.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializer.java b/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializer.java
index 3559590..d5c2b3f 100644
--- a/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializer.java
@@ -25,13 +25,13 @@ import org.apache.juneau.transform.*;
 /**
  * Serializes POJO models to JSON.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Accept</code> types: <code>application/json, text/json</code>
  * <p>
  * 	Produces <code>Content-Type</code> types: <code>application/json</code>
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	The conversion is as follows...
  * 	<ul class='spaced-list'>
@@ -52,7 +52,7 @@ import org.apache.juneau.transform.*;
  * 	This serializer provides several serialization options.  Typically, one of the predefined DEFAULT serializers will be sufficient.
  * 	However, custom serializers can be constructed to fine-tune behavior.
  *
- * <h6 class='topic'>Configurable properties</h6>
+ * <h5 class='section'>Configurable properties:</h5>
  * <p>
  * 	This class has the following properties associated with it:
  * <ul>
@@ -69,7 +69,7 @@ import org.apache.juneau.transform.*;
  * 	<li>{@link SimpleReadable} - Default serializer, single quotes, simple mode, with whitespace.
  * </ul>
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Use one of the default serializers to serialize a POJO</jc>
  * 	String json = JsonSerializer.<jsf>DEFAULT</jsf>.serialize(someObject);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializerContext.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializerContext.java b/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializerContext.java
index 8478384..c4a62cd 100644
--- a/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializerContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializerContext.java
@@ -60,11 +60,11 @@ import org.apache.juneau.serializer.*;
  * 	</tr>
  * </table>
  *
- * <h6 class='topic'>Configurable properties inherited from parent classes</h6>
+ * <h5 class='section'>Inherited configurable properties:</h5>
  * <ul class='javahierarchy'>
- * 	<li class='c'><a class='doclink' href='../BeanContext.html#ConfigProperties'>BeanContext</a> - Properties associated with handling beans on serializers and parsers.
+ * 	<li class='c'><a class="doclink" href="../BeanContext.html#ConfigProperties">BeanContext</a> - Properties associated with handling beans on serializers and parsers.
  * 	<ul>
- * 		<li class='c'><a class='doclink' href='../serializer/SerializerContext.html#ConfigProperties'>SerializerContext</a> - Configurable properties common to all serializers.
+ * 		<li class='c'><a class="doclink" href="../serializer/SerializerContext.html#ConfigProperties">SerializerContext</a> - Configurable properties common to all serializers.
  * 	</ul>
  * </ul>
  */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/json/JsonWriter.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/json/JsonWriter.java b/juneau-core/src/main/java/org/apache/juneau/json/JsonWriter.java
index 59e622a..374cf94 100644
--- a/juneau-core/src/main/java/org/apache/juneau/json/JsonWriter.java
+++ b/juneau-core/src/main/java/org/apache/juneau/json/JsonWriter.java
@@ -20,7 +20,10 @@ import org.apache.juneau.serializer.*;
 /**
  * Specialized writer for serializing JSON.
  * <p>
- * 	<b>Note:  This class is not intended for external use.</b>
+ * <h5 class='section'>Notes:</h5>
+ * <ul>
+ * 	<li>This class is not intended for external use.
+ * </ul>
  */
 public final class JsonWriter extends SerializerWriter {
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/json/annotation/Json.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/json/annotation/Json.java b/juneau-core/src/main/java/org/apache/juneau/json/annotation/Json.java
index 6a32832..f8ee5d0 100644
--- a/juneau-core/src/main/java/org/apache/juneau/json/annotation/Json.java
+++ b/juneau-core/src/main/java/org/apache/juneau/json/annotation/Json.java
@@ -40,7 +40,7 @@ public @interface Json {
 	 * <p>
 	 * 	This annotation can be applied to beans as well as other objects serialized to other types (e.g. strings).
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<ja>@Json</ja>(wrapperAttr=<js>"myWrapper"</js>)
 	 * 	<jk>public class</jk> MyBean {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackInputStream.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackInputStream.java b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackInputStream.java
index 7835858..64fe9d9 100644
--- a/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackInputStream.java
+++ b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackInputStream.java
@@ -21,7 +21,10 @@ import org.apache.juneau.internal.*;
 /**
  * Specialized input stream for parsing MessagePack streams.
  * <p>
- * 	<b>Note:  This class is not intended for external use.</b>
+ * <h5 class='section'>Notes:</h5>
+ * <ul>
+ * 	<li>This class is not intended for external use.
+ * </ul>
  */
 public final class MsgPackInputStream extends InputStream {
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackOutputStream.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackOutputStream.java b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackOutputStream.java
index 94d0c76..73673dd 100644
--- a/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackOutputStream.java
+++ b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackOutputStream.java
@@ -21,7 +21,10 @@ import java.util.concurrent.atomic.*;
 /**
  * Specialized output stream for serializing MessagePack streams.
  * <p>
- * 	<b>Note:  This class is not intended for external use.</b>
+ * <h5 class='section'>Notes:</h5>
+ * <ul>
+ * 	<li>This class is not intended for external use.
+ * </ul>
  */
 public final class MsgPackOutputStream extends OutputStream {
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java
index 8ea0f4a..9113093 100644
--- a/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java
@@ -26,11 +26,11 @@ import org.apache.juneau.transform.*;
 /**
  * Parses a MessagePack stream into a POJO model.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Content-Type</code> types: <code>octal/msgpack</code>
  *
- * <h6 class='topic'>Configurable properties</h6>
+ * <h5 class='section'>Configurable properties:</h5>
  * <p>
  * 	This class has the following properties associated with it:
  * <ul>
@@ -193,7 +193,6 @@ public final class MsgPackParser extends InputStreamParser {
 	@Override /* Parser */
 	protected <T> T doParse(ParserSession session, ClassMeta<T> type) throws Exception {
 		MsgPackParserSession s = (MsgPackParserSession)session;
-		type = s.normalizeClassMeta(type);
 		MsgPackInputStream is = s.getInputStream();
 		T o = parseAnything(s, type, is, s.getOuter(), null);
 		return o;

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackParserContext.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackParserContext.java b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackParserContext.java
index 0eda758..2e04978 100644
--- a/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackParserContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackParserContext.java
@@ -38,11 +38,11 @@ import org.apache.juneau.parser.*;
  * <p>
  * 	None.
  *
- * <h6 class='topic'>Configurable properties inherited from parent classes</h6>
+ * <h5 class='section'>Inherited configurable properties:</h5>
  * <ul class='javahierarchy'>
- * 	<li class='c'><a class='doclink' href='../BeanContext.html#ConfigProperties'>BeanContext</a> - Properties associated with handling beans on serializers and parsers.
+ * 	<li class='c'><a class="doclink" href="../BeanContext.html#ConfigProperties">BeanContext</a> - Properties associated with handling beans on serializers and parsers.
  * 	<ul>
- * 		<li class='c'><a class='doclink' href='../parser/ParserContext.html#ConfigProperties'>ParserContext</a> - Configurable properties common to all parsers.
+ * 		<li class='c'><a class="doclink" href="../parser/ParserContext.html#ConfigProperties">ParserContext</a> - Configurable properties common to all parsers.
  * 	</ul>
  * </ul>
  */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java
index 4e4ed0d..4ab038b 100644
--- a/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java
@@ -23,13 +23,13 @@ import org.apache.juneau.transform.*;
 /**
  * Serializes POJO models to MessagePack.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Accept</code> types: <code>octal/msgpack</code>
  * <p>
  * 	Produces <code>Content-Type</code> types: <code>octal/msgpack</code>
  *
- * <h6 class='topic'>Configurable properties</h6>
+ * <h5 class='section'>Configurable properties:</h5>
  * <p>
  * 	This class has the following properties associated with it:
  * <ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerContext.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerContext.java b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerContext.java
index 282d7ac..ced4439 100644
--- a/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerContext.java
@@ -38,11 +38,11 @@ import org.apache.juneau.serializer.*;
  * <p>
  * 	None.
  *
- * <h6 class='topic'>Configurable properties inherited from parent classes</h6>
+ * <h5 class='section'>Inherited configurable properties:</h5>
  * <ul class='javahierarchy'>
- * 	<li class='c'><a class='doclink' href='../BeanContext.html#ConfigProperties'>BeanContext</a> - Properties associated with handling beans on serializers and parsers.
+ * 	<li class='c'><a class="doclink" href="../BeanContext.html#ConfigProperties">BeanContext</a> - Properties associated with handling beans on serializers and parsers.
  * 	<ul>
- * 		<li class='c'><a class='doclink' href='../serializer/SerializerContext.html#ConfigProperties'>SerializerContext</a> - Configurable properties common to all serializers.
+ * 		<li class='c'><a class="doclink" href="../serializer/SerializerContext.html#ConfigProperties">SerializerContext</a> - Configurable properties common to all serializers.
  * 	</ul>
  * </ul>
  */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/parser/InputStreamParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/parser/InputStreamParser.java b/juneau-core/src/main/java/org/apache/juneau/parser/InputStreamParser.java
index 24de153..6abdeb5 100644
--- a/juneau-core/src/main/java/org/apache/juneau/parser/InputStreamParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/parser/InputStreamParser.java
@@ -17,7 +17,7 @@ import org.apache.juneau.annotation.*;
 /**
  * Subclass of {@link Parser} for byte-based parsers.
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	This class is typically the parent class of all byte-based parsers.
  * 	It has 1 abstract method to implement...

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/parser/ParseException.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/parser/ParseException.java b/juneau-core/src/main/java/org/apache/juneau/parser/ParseException.java
index f3180a7..6e98c2a 100644
--- a/juneau-core/src/main/java/org/apache/juneau/parser/ParseException.java
+++ b/juneau-core/src/main/java/org/apache/juneau/parser/ParseException.java
@@ -30,7 +30,7 @@ public final class ParseException extends FormattedException {
 	 *
 	 * @param session The parser session to extract information from.
 	 * @param message The exception message containing {@link MessageFormat}-style arguments.
-	 * @param args Message arguments.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public ParseException(ParserSession session, String message, Object...args) {
 		super(getMessage(session, message, args));
@@ -40,7 +40,7 @@ public final class ParseException extends FormattedException {
 	 * Constructor.
 	 *
 	 * @param message The exception message containing {@link MessageFormat}-style arguments.
-	 * @param args Message arguments.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public ParseException(String message, Object...args) {
 		super(getMessage(null, message, args));

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/parser/Parser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/parser/Parser.java b/juneau-core/src/main/java/org/apache/juneau/parser/Parser.java
index 08fb31f..9ec061a 100644
--- a/juneau-core/src/main/java/org/apache/juneau/parser/Parser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/parser/Parser.java
@@ -20,7 +20,6 @@ import java.text.*;
 import java.util.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.MediaType;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.transform.*;
@@ -37,7 +36,7 @@ import org.apache.juneau.utils.*;
  * 	However, the media types can also be specified programmatically by overriding the {@link #getMediaTypes()} method.
  *
  * <a id='ValidDataConversions'></a><h6 class='topic'>Valid data conversions</h6>
- * 	Parsers can parse any parsable POJO types, as specified in the <a class='doclink' href='../../../../overview-summary.html#Core.PojoCategories'>POJO Categories</a>.
+ * 	Parsers can parse any parsable POJO types, as specified in the <a class="doclink" href="../../../../overview-summary.html#Core.PojoCategories">POJO Categories</a>.
  * <p>
  * 	Some examples of conversions are shown below...
  * </p>
@@ -161,7 +160,6 @@ public abstract class Parser extends CoreApi {
 	 * @param type The class type of the object to create.
 	 * 	If <jk>null</jk> or <code>Object.<jk>class</jk></code>, object type is based on what's being parsed.
 	 * 	For example, when parsing JSON text, it may return a <code>String</code>, <code>Number</code>, <code>ObjectMap</code>, etc...
-	 *
 	 * @param <T> The class type of the object to create.
 	 * @return The parsed object.
 	 * @throws Exception If thrown from underlying stream, or if the input contains a syntax error or is malformed.
@@ -180,17 +178,16 @@ public abstract class Parser extends CoreApi {
 	//--------------------------------------------------------------------------------
 
 	/**
-	 * Parses the content of the reader and creates an object of the specified type.
+	 * Entry point for all parsing calls.
+	 * <p>
+	 * Calls the {@link #doParse(ParserSession, ClassMeta)} implementation class and catches/rewraps any exceptions thrown.
 	 * @param session The runtime session returned by {@link #createSession(Object, ObjectMap, Method, Object, Locale, TimeZone, MediaType)}.
 	 * @param type The class type of the object to create.
-	 * 	If <jk>null</jk> or <code>Object.<jk>class</jk></code>, object type is based on what's being parsed.
-	 * 	For example, when parsing JSON text, it may return a <code>String</code>, <code>Number</code>, <code>ObjectMap</code>, etc...
-	 *
 	 * @param <T> The class type of the object to create.
 	 * @return The parsed object.
 	 * @throws ParseException If the input contains a syntax error or is malformed, or is not valid for the specified type.
 	 */
-	public final <T> T parse(ParserSession session, ClassMeta<T> type) throws ParseException {
+	public final <T> T parseSession(ParserSession session, ClassMeta<T> type) throws ParseException {
 		try {
 			return doParse(session, type);
 		} catch (ParseException e) {
@@ -207,10 +204,41 @@ public abstract class Parser extends CoreApi {
 	}
 
 	/**
-	 * Parses the content of the reader and creates an object of the specified type.
+	 * Parses input into the specified object type.
+	 * The type can be a simple type (e.g. beans, strings, numbers) or parameterized type (collections/maps).
+	 *
+	 * <h5 class='section'>Examples:</h5>
+	 * <p class='bcode'>
+	 * 	ReaderParser p = JsonParser.<jsf>DEFAULT</jsf>;
+	 *
+	 * 	<jc>// Parse into a linked-list of strings.</jc>
+	 * 	List l = p.parse(json, LinkedList.<jk>class</jk>, String.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a linked-list of beans.</jc>
+	 * 	List l = p.parse(json, LinkedList.<jk>class</jk>, MyBean.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a linked-list of linked-lists of strings.</jc>
+	 * 	List l = p.parse(json, LinkedList.<jk>class</jk>, LinkedList.<jk>class</jk>, String.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a map of string keys/values.</jc>
+	 * 	Map m = p.parse(json, TreeMap.<jk>class</jk>, String.<jk>class</jk>, String.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a map containing string keys and values of lists containing beans.</jc>
+	 * 	Map m = p.parse(json, TreeMap.<jk>class</jk>, String.<jk>class</jk>, List.<jk>class</jk>, MyBean.<jk>class</jk>);
+	 * </p>
 	 * <p>
-	 * Equivalent to calling <code>parser.parse(in, type, <jk>null</jk>);</code>
+	 * <code>Collection</code> classes are assumed to be followed by zero or one objects indicating the element type.
+	 * <p>
+	 * <code>Map</code> classes are assumed to be followed by zero or two meta objects indicating the key and value types.
+	 * <p>
+	 * The array can be arbitrarily long to indicate arbitrarily complex data structures.
+	 * <p>
+	 * <h5 class='section'>Notes:</h5>
+	 * <ul>
+	 * 	<li>Use the {@link #parse(Object, Class)} method instead if you don't need a parameterized map/collection.
+	 * </ul>
 	 *
+	 * @param <T> The class type of the object to create.
 	 * @param input The input.
 	 * 	<br>Character-based parsers can handle the following input class types:
 	 * 	<ul>
@@ -228,123 +256,67 @@ public abstract class Parser extends CoreApi {
 	 * 		<li><code><jk>byte</jk>[]</code>
 	 * 		<li>{@link File}
 	 * 	</ul>
-	 * @param type The class type of the object to create.
-	 * 	If <jk>null</jk> or <code>Object.<jk>class</jk></code>, object type is based on what's being parsed.
-	 * 	For example, when parsing JSON text, it may return a <code>String</code>, <code>Number</code>, <code>ObjectMap</code>, etc...
-	 * @param <T> The class type of the object to create.
+	 * @param type The object type to create.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * @param args The type arguments of the class if it's a collection or map.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * 	<br>Ignored if the main type is not a map or collection.
 	 * @return The parsed object.
 	 * @throws ParseException If the input contains a syntax error or is malformed, or is not valid for the specified type.
 	 */
-	public final <T> T parse(Object input, ClassMeta<T> type) throws ParseException {
+	@SuppressWarnings("unchecked")
+	public final <T> T parse(Object input, Type type, Type...args) throws ParseException {
 		ParserSession session = createSession(input);
-		return parse(session, type);
+		return (T)parseSession(session, session.getClassMeta(type, args));
 	}
 
 	/**
-	 * Parses input into the specified object type.
-	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * Same as {@link #parse(Object, Type, Type...)} except optimized for a non-parameterized class.
+	 * <p>
+	 * This is the preferred parse method for simple types since you don't need to cast the results.
+	 * <h5 class='section'>Examples:</h5>
 	 * <p class='bcode'>
 	 * 	ReaderParser p = JsonParser.<jsf>DEFAULT</jsf>;
-	 * 	MyBean b = p.parse(json, MyBean.<jk>class</jk>);
-	 * 		</p>
-	 * 		<p>
-	 * 		This method equivalent to the following code:
-	 * 		<p class='bcode'>
-	 * 	ReaderParser p = JsonParser.<jsf>DEFAULT</jsf>;
-	 * 	ClassMeta&lt;MyBean&gt; cm = p.getBeanContext().getClassMeta(MyBean.<jk>class</jk>);
-	 * 	MyBean b = p.parse(json, cm, <jk>null</jk>);
-	 * </p>
 	 *
-	 * @param <T> The class type of the object to create.
-	 * @param input The input.  See {@link #parse(Object, ClassMeta)} for supported input types.
-	 * @param type The class type of the object to create.
-	 * @return The parsed object.
-	 * @throws ParseException If the input contains a syntax error or is malformed, or is not valid for the specified type.
-	 */
-	public final <T> T parse(Object input, Class<T> type) throws ParseException {
-		ParserSession session = createSession(input);
-		return parse(session, session.getClassMeta(type));
-	}
-
-	/**
-	 * Parses input into a map with specified key and value types.
+	 * 	<jc>// Parse into a string.</jc>
+	 * 	MyBean b = p.parse(json, String.<jk>class</jk>);
 	 *
-	 * <h6 class='topic'>Example:</h6>
-	 * <p class='bcode'>
-	 * 	ReaderParser p = JsonParser.<jsf>DEFAULT</jsf>;
-	 * 	Map&lt;String,MyBean&gt; m = p.parseMap(json, LinkedHashMap.<jk>class</jk>, String.<jk>class</jk>, MyBean.<jk>class</jk>);
-	 * </p>
-	 * <p>
-	 * 	A simpler approach is often to just extend the map class you want and just use the normal {@link #parse(Object, Class)} method:
-	 * </p>
-	 * <p class='bcode'>
-	 * 	<jk>public static class</jk> MyMap <jk>extends</jk> LinkedHashMap&lt;String,MyBean&gt; {}
+	 * 	<jc>// Parse into a bean.</jc>
+	 * 	MyBean b = p.parse(json, MyBean.<jk>class</jk>);
 	 *
-	 * 	ReaderParser p = JsonParser.<jsf>DEFAULT</jsf>;
-	 * 	Map&lt;String,MyBean&gt; m = p.parse(json, MyMap.<jk>class</jk>);
-	 * </p>
-	 * <p>
-	 * 	This method equivalent to the following code:
-	 * </p>
-	 * <p class='bcode'>
-	 * 	ReaderParser p = JsonParser.<jsf>DEFAULT</jsf>;
-	 * 	ClassMeta&lt;Map&lt;String,MyBean&gt;&gt; cm = p.getBeanContext().getMapClassMeta(LinkedList.<jk>class</jk>, String.<jk>class</jk>, MyBean.<jk>class</jk>);
-	 * 	Map&lt;String,MyBean&gt; m = p.parse(json, cm, <jk>null</jk>);
+	 * 	<jc>// Parse into a linked-list of objects.</jc>
+	 * 	List l = p.parse(json, LinkedList.<jk>class</jk>);
+	 *
+	 * 	<jc>// Parse into a map of object keys/values.</jc>
+	 * 	Map m = p.parse(json, TreeMap.<jk>class</jk>);
 	 * </p>
 	 *
-	 * @param <T> The class type of the object to create.
-	 * @param input The input.  See {@link #parse(Object, ClassMeta)} for supported input types.
-	 * @param mapClass The map class type.
-	 * @param keyClass The key class type.
-	 * @param valueClass The value class type.
+	 * @param <T> The class type of the object being created.
+	 * @param input The input.
+	 * 	See {@link #parse(Object, Type, Type...)} for details.
+	 * @param type The object type to create.
 	 * @return The parsed object.
 	 * @throws ParseException If the input contains a syntax error or is malformed, or is not valid for the specified type.
 	 */
-	public final <K,V,T extends Map<K,V>> T parseMap(Object input, Class<T> mapClass, Class<K> keyClass, Class<V> valueClass) throws ParseException {
+	public final <T> T parse(Object input, Class<T> type) throws ParseException {
 		ParserSession session = createSession(input);
-		ClassMeta<T> cm = session.getClassMeta(mapClass, keyClass, valueClass);
-		return parse(session, cm);
+		return parseSession(session, session.getClassMeta(type));
 	}
 
 	/**
-	 * Parses input into a collection with a specified element type.
-	 *
-	 * <h6 class='topic'>Example:</h6>
-	 * <p class='bcode'>
-	 * 	ReaderParser p = JsonParser.<jsf>DEFAULT</jsf>;
-	 * 	List&lt;MyBean&gt; l = p.parseCollection(json, LinkedList.<jk>class</jk>, MyBean.<jk>class</jk>);
-	 * </p>
+	 * Same as {@link #parse(Object, Type, Type...)} except the type has already been converted into a {@link ClassMeta} object.
 	 * <p>
-	 * 	A simpler approach is often to just extend the collection class you want and just use the normal {@link #parse(Object, Class)} method:
-	 * </p>
-	 * <p class='bcode'>
-	 * 	<jk>public static class</jk> MyBeanCollection <jk>extends</jk> LinkedList&lt;MyBean&gt; {}
+	 * This is mostly an internal method used by the framework.
 	 *
-	 * 	ReaderParser p = JsonParser.<jsf>DEFAULT</jsf>;
-	 * 	List&lt;MyBean&gt; l = p.parse(json, MyBeanCollection.<jk>class</jk>);
-	 * 		</p>
-	 * 		<p>
-	 * 			This method equivalent to the following code:
-	 * 		</p>
-	 * 		<p class='bcode'>
-	 * 	ReaderParser p = JsonParser.<jsf>DEFAULT</jsf>;
-	 * 	ClassMeta&lt;List&lt;MyBean&gt;&gt; cm = p.getBeanContext().getCollectionClassMeta(LinkedList.<jk>class</jk>, MyBean.<jk>class</jk>);
-	 * 	List&lt;MyBean&gt; l = p.parse(json, cm, <jk>null</jk>);
-	 * </p>
-	 *
-	 * @param <T> The class type of the object to create.
-	 * @param input The input.  See {@link #parse(Object, ClassMeta)} for supported input types.
-	 * @param collectionClass The collection class type.
-	 * @param entryClass The class type of entries in the collection.
+	 * @param <T> The class type of the object being created.
+	 * @param input The input.
+	 * 	See {@link #parse(Object, Type, Type...)} for details.
+	 * @param type The object type to create.
 	 * @return The parsed object.
 	 * @throws ParseException If the input contains a syntax error or is malformed, or is not valid for the specified type.
-	 * @throws IOException If a problem occurred trying to read from the reader.
 	 */
-	public final <E,T extends Collection<E>> T parseCollection(Object input, Class<T> collectionClass, Class<E> entryClass) throws ParseException, IOException {
-		ParserSession session = createSession(input);
-		ClassMeta<T> cm = session.getClassMeta(collectionClass, entryClass);
-		return parse(session, cm);
+	public final <T> T parse(Object input, ClassMeta<T> type) throws ParseException {
+		return parseSession(createSession(input), type);
 	}
 
 	/**

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/parser/ParserGroup.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/parser/ParserGroup.java b/juneau-core/src/main/java/org/apache/juneau/parser/ParserGroup.java
index 33b78fd..800db11 100644
--- a/juneau-core/src/main/java/org/apache/juneau/parser/ParserGroup.java
+++ b/juneau-core/src/main/java/org/apache/juneau/parser/ParserGroup.java
@@ -22,7 +22,7 @@ import org.apache.juneau.*;
 /**
  * Represents a group of {@link Parser Parsers} that can be looked up by media type.
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Provides the following features:
  * <ul class='spaced-list'>
@@ -42,7 +42,7 @@ import org.apache.juneau.*;
  * 	For example, calling <code>g.append(P1.<jk>class</jk>,P2.<jk>class</jk>).append(P3.<jk>class</jk>,P4.<jk>class</jk>)</code>
  * 	will result in the order <code>P3, P4, P1, P2</code>.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Construct a new parser group</jc>
  * 	ParserGroup g = <jk>new</jk> ParserGroup();

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/parser/ReaderParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/parser/ReaderParser.java b/juneau-core/src/main/java/org/apache/juneau/parser/ReaderParser.java
index 6473ea4..d0ea5b9 100644
--- a/juneau-core/src/main/java/org/apache/juneau/parser/ReaderParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/parser/ReaderParser.java
@@ -17,7 +17,7 @@ import org.apache.juneau.annotation.*;
 /**
  * Subclass of {@link Parser} for characters-based parsers.
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	This class is typically the parent class of all character-based parsers.
  * 	It has 1 abstract method to implement...

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java b/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
index 4a8cc65..68d6a33 100644
--- a/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
@@ -19,22 +19,22 @@ import org.apache.juneau.parser.*;
 import org.apache.juneau.transform.*;
 
 /**
- * Parsers HTTP plain text request bodies into <a href='../../../../overview-summary.html#Core.PojoCategories'>Group 5</a> POJOs.
+ * Parsers HTTP plain text request bodies into <a class="doclink" href="../../../../overview-summary.html#Core.PojoCategories">Group 5</a> POJOs.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Accept</code> types: <code>text/plain</code>
  * <p>
  * 	Produces <code>Content-Type</code> types: <code>text/plain</code>
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Essentially just converts plain text to POJOs via static <code>fromString()</code> or <code>valueOf()</code>, or
  * 	through constructors that take a single string argument.
  * <p>
  * 	Also parses objects using a transform if the object class has an {@link PojoSwap PojoSwap&lt;?,String&gt;} transform defined on it.
  *
- * <h6 class='topic'>Configurable properties</h6>
+ * <h5 class='section'>Configurable properties:</h5>
  * <p>
  * 	This class has the following properties associated with it:
  * <ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java b/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
index 52ae7f8..0d04110 100644
--- a/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
@@ -20,19 +20,19 @@ import org.apache.juneau.transform.*;
 /**
  * Serializes POJOs to plain text using just the <code>toString()</code> method on the serialized object.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Accept</code> types: <code>text/plain</code>
  * <p>
  * 	Produces <code>Content-Type</code> types: <code>text/plain</code>
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Essentially converts POJOs to plain text using the <code>toString()</code> method.
  * <p>
  * 	Also serializes objects using a transform if the object class has an {@link PojoSwap PojoSwap&lt;?,String&gt;} transform defined on it.
  *
- * <h6 class='topic'>Configurable properties</h6>
+ * <h5 class='section'>Configurable properties:</h5>
  * <p>
  * 	This class has the following properties associated with it:
  * <ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java b/juneau-core/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
index 08edceb..9fddf75 100644
--- a/juneau-core/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
@@ -19,7 +19,7 @@ import org.apache.juneau.annotation.*;
 /**
  * Subclass of {@link Serializer} for byte-based serializers.
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	This class is typically the parent class of all byte-based serializers.
  * 	It has 1 abstract method to implement...

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/serializer/SerializeException.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/serializer/SerializeException.java b/juneau-core/src/main/java/org/apache/juneau/serializer/SerializeException.java
index 71b9b9e..5f974dc 100644
--- a/juneau-core/src/main/java/org/apache/juneau/serializer/SerializeException.java
+++ b/juneau-core/src/main/java/org/apache/juneau/serializer/SerializeException.java
@@ -30,7 +30,7 @@ public final class SerializeException extends FormattedException {
 	 *
 	 * @param session The serializer session to extract information from.
 	 * @param message The exception message containing {@link MessageFormat}-style arguments.
-	 * @param args Message arguments.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public SerializeException(SerializerSession session, String message, Object...args) {
 		super(getMessage(session, message, args));
@@ -40,7 +40,7 @@ public final class SerializeException extends FormattedException {
 	 * Constructor.
 	 *
 	 * @param message The exception message containing {@link MessageFormat}-style arguments.
-	 * @param args Message arguments.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public SerializeException(String message, Object...args) {
 		super(getMessage(null, message, args));

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/serializer/Serializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/serializer/Serializer.java b/juneau-core/src/main/java/org/apache/juneau/serializer/Serializer.java
index c2264aa..ccd0cc8 100644
--- a/juneau-core/src/main/java/org/apache/juneau/serializer/Serializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/serializer/Serializer.java
@@ -25,7 +25,7 @@ import org.apache.juneau.soap.*;
 /**
  * Parent class for all Juneau serializers.
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Base serializer class that serves as the parent class for all serializers.
  * <p>
@@ -38,7 +38,7 @@ import org.apache.juneau.soap.*;
  * 	However, the media types can also be specified programmatically by overriding the {@link #getMediaTypes()}
  * 		and {@link #getResponseContentType()} methods.
  *
- * <h6 class='topic'>Configurable properties</h6>
+ * <h5 class='section'>Configurable properties:</h5>
  * 	See {@link SerializerContext} for a list of configurable properties that can be set on this class
  * 	using the {@link #setProperty(String, Object)} method.
  */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerContext.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerContext.java b/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerContext.java
index 3bc0f06..7031b12 100644
--- a/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerContext.java
@@ -181,7 +181,10 @@ public class SerializerContext extends BeanContext {
 	 * 	the following when <jsf>SERIALIZER_ignoreRecursions</jsf> is <jk>true</jk>...
 	 * <code>{A:{B:{C:null}}}</code><br>
 	 * <p>
-	 * Note:  Checking for recursion can cause a small performance penalty.
+	 * <h5 class='section'>Notes:</h5>
+	 * <ul>
+	 * 	<li>Checking for recursion can cause a small performance penalty.
+	 * </ul>
 	 */
 	public static final String SERIALIZER_detectRecursions = "Serializer.detectRecursions";
 
@@ -334,7 +337,7 @@ public class SerializerContext extends BeanContext {
 	 * (i.e. URIs not containing a schema and not starting with <js>'/'</js>).
 	 * (e.g. <js>"foo/bar"</js>)
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <table class='styled'>
 	 *		<tr><th>SERIALIZER_relativeUriBase</th><th>URI</th><th>Serialized URI</th></tr>
 	 * 	<tr>
@@ -370,7 +373,7 @@ public class SerializerContext extends BeanContext {
 	 * (i.e. URIs starting with <js>'/'</js>).
 	 * (e.g. <js>"/foo/bar"</js>)
 	 *
-	 * <h6 class='topic'>Examples:</h6>
+	 * <h5 class='section'>Examples:</h5>
 	 * <table class='styled'>
 	 * 	<tr><th>SERIALIZER_absolutePathUriBase</th><th>URI</th><th>Serialized URI</th></tr>
 	 * 	<tr>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerGroup.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerGroup.java b/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerGroup.java
index 4761265..ec62ae8 100644
--- a/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerGroup.java
+++ b/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerGroup.java
@@ -22,7 +22,7 @@ import org.apache.juneau.*;
 /**
  * Represents a group of {@link Serializer Serializers} that can be looked up by media type.
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Provides the following features:
  * <ul class='spaced-list'>
@@ -42,7 +42,7 @@ import org.apache.juneau.*;
  * 	For example, calling <code>g.append(S1.<jk>class</jk>,S2.<jk>class</jk>).append(S3.<jk>class</jk>,S4.<jk>class</jk>)</code>
  * 	will result in the order <code>S3, S4, S1, S2</code>.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Construct a new serializer group</jc>
  * 	SerializerGroup g = <jk>new</jk> SerializerGroup();

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/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 115608b..00f8b8b 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
@@ -23,7 +23,7 @@ import org.apache.juneau.internal.*;
  * Modeled after the Java ProcessBuilder class so that you can chain commands to reduce
  * 	the need for string concatenation for performance reasons.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	writer.append(<js>"foo"</js>).nl().i(5).append(<js>"bar"</js>);
  * </p>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/serializer/StringObject.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/serializer/StringObject.java b/juneau-core/src/main/java/org/apache/juneau/serializer/StringObject.java
index f291639..65166bd 100644
--- a/juneau-core/src/main/java/org/apache/juneau/serializer/StringObject.java
+++ b/juneau-core/src/main/java/org/apache/juneau/serializer/StringObject.java
@@ -23,7 +23,7 @@ import org.apache.juneau.*;
  * <p>
  * Instances of this method are created by the {@link WriterSerializer#toStringObject(Object)} method.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// The POJO will not be serialized unless DEBUG is enabled.</jc>
  * 	logger.log(<jsf>DEBUG</jsf>, <js>"Object contents are: {0}"</js>, JsonSerializer.<jsf>DEFAULT</jsf>.toObjectString(myPojo));

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/serializer/WriterSerializer.java b/juneau-core/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
index a84b9f9..5f38d4a 100644
--- a/juneau-core/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
@@ -22,7 +22,7 @@ import org.apache.juneau.annotation.*;
 /**
  * Subclass of {@link Serializer} for character-based serializers.
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	This class is typically the parent class of all character-based serializers.
  * 	It has 2 abstract methods to implement...

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/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 f340ff7..c32dd80 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
@@ -22,17 +22,17 @@ import org.apache.juneau.xml.*;
 /**
  * Serializes POJOs to HTTP responses as XML+SOAP.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Accept</code> types: <code>text/xml+soap</code>
  * <p>
  * 	Produces <code>Content-Type</code> types: <code>text/xml+soap</code>
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Essentially the same output as {@link XmlDocSerializer}, except wrapped in a standard SOAP envelope.
  *
- * <h6 class='topic'>Configurable properties</h6>
+ * <h5 class='section'>Configurable properties:</h5>
  * <p>
  * 	This class has the following properties associated with it:
  * <ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializerContext.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializerContext.java b/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializerContext.java
index 4f63db4..d85befc 100644
--- a/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializerContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializerContext.java
@@ -27,11 +27,11 @@ package org.apache.juneau.soap;
  * 	</tr>
  * </table>
  *
- * <h6 class='topic'>Configurable properties inherited from parent classes</h6>
+ * <h5 class='section'>Inherited configurable properties:</h5>
  * <ul class='javahierarchy'>
- * 	<li class='c'><a class='doclink' href='../BeanContext.html#ConfigProperties'>BeanContext</a> - Properties associated with handling beans on serializers and parsers.
+ * 	<li class='c'><a class="doclink" href="../BeanContext.html#ConfigProperties">BeanContext</a> - Properties associated with handling beans on serializers and parsers.
  * 	<ul>
- * 		<li class='c'><a class='doclink' href='../serializer/SerializerContext.html#ConfigProperties'>SerializerContext</a> - Configurable properties common to all serializers.
+ * 		<li class='c'><a class="doclink" href="../serializer/SerializerContext.html#ConfigProperties">SerializerContext</a> - Configurable properties common to all serializers.
  * 	</ul>
  * </ul>
  */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/svl/VarResolver.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/svl/VarResolver.java b/juneau-core/src/main/java/org/apache/juneau/svl/VarResolver.java
index 1d39c77..6ffdaeb 100644
--- a/juneau-core/src/main/java/org/apache/juneau/svl/VarResolver.java
+++ b/juneau-core/src/main/java/org/apache/juneau/svl/VarResolver.java
@@ -32,7 +32,7 @@ import org.apache.juneau.svl.vars.*;
  * <p>
  * The {@link Var} interface defines how variables are converted to values.
  * <p>
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jk>public class</jk> SystemPropertiesVar <jk>extends</jk> SimpleVar {
  *
@@ -85,7 +85,7 @@ import org.apache.juneau.svl.vars.*;
  * Var resolvers can be cloned by using the {@link #clone()} method.
  * Cloning a resolver will copy it's {@link Var} class names and context objects.
  * <p>
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Create a resolver that copies the default resolver and adds $C and $ARG vars.</jc>
  * 	VarResolver myVarResolver = VarResolver.<jsf>DEFAULT</jsf>.clone().addVars(ConfigVar.<jk>class</jk>, ArgsVar.<jk>class</jk>);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java b/juneau-core/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java
index 2c2fc4d..b005c1f 100644
--- a/juneau-core/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java
+++ b/juneau-core/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java
@@ -23,7 +23,7 @@ import org.apache.juneau.utils.*;
  * This variable resolver requires that an {@link Args} object be set as a context object on the resolver or a
  * 	session object on the resolver session.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Create an args object from the main(String[]) method.</jc>
  * 	Args args = new Args(argv);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/svl/vars/ConfigFileVar.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/svl/vars/ConfigFileVar.java b/juneau-core/src/main/java/org/apache/juneau/svl/vars/ConfigFileVar.java
index 1a84833..ff0d2d3 100644
--- a/juneau-core/src/main/java/org/apache/juneau/svl/vars/ConfigFileVar.java
+++ b/juneau-core/src/main/java/org/apache/juneau/svl/vars/ConfigFileVar.java
@@ -24,7 +24,7 @@ import org.apache.juneau.svl.*;
  * This variable resolver requires that a {@link ConfigFile} object be set as a context object on the resolver or a
  * 	session object on the resolver session.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Create a config file object.</jc>
  * 	ConfigFile configFile = ConfigMgr.<jsf>DEFAULT</jsf>.get(<js>"MyConfig.cfg"</js>);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/svl/vars/EnvVariablesVar.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/svl/vars/EnvVariablesVar.java b/juneau-core/src/main/java/org/apache/juneau/svl/vars/EnvVariablesVar.java
index d6f3f12..d58e442 100644
--- a/juneau-core/src/main/java/org/apache/juneau/svl/vars/EnvVariablesVar.java
+++ b/juneau-core/src/main/java/org/apache/juneau/svl/vars/EnvVariablesVar.java
@@ -19,7 +19,7 @@ import org.apache.juneau.svl.*;
  * <p>
  * The format for this var is <js>"$E{envVar}"</js> or <js>"$E{envVar,defaultValue}"</js>
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Create a variable resolver that resolves environment variables (e.g. "$E{PATH}")</jc>
  * 	VarResolver r = <jk>new</jk> VarResolver().addVars(EnvVariablesVar.<js>class</js>);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java b/juneau-core/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java
index ac1f250..2e35666 100644
--- a/juneau-core/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java
+++ b/juneau-core/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java
@@ -23,7 +23,7 @@ import org.apache.juneau.utils.*;
  * This variable resolver requires that a {@link ManifestFile} object be set as a context object on the resolver or a
  * 	session object on the resolver session.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Create a ManifestFile object that contains the manifest of the jar file containing this class.</jc>
  * 	ManifestFile mf = <jk>new</jk> ManifestFile(<jk>this</jk>.getClass());

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/svl/vars/SystemPropertiesVar.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/svl/vars/SystemPropertiesVar.java b/juneau-core/src/main/java/org/apache/juneau/svl/vars/SystemPropertiesVar.java
index 1261f0e..937b149 100644
--- a/juneau-core/src/main/java/org/apache/juneau/svl/vars/SystemPropertiesVar.java
+++ b/juneau-core/src/main/java/org/apache/juneau/svl/vars/SystemPropertiesVar.java
@@ -19,7 +19,7 @@ import org.apache.juneau.svl.*;
  * <p>
  * The format for this var is <js>"$S{systemProperty}"</js> or <js>"$S{systemProperty,defaultValue}"</js>
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Create a variable resolver that resolves system properties (e.g. "$S{java.home}")</jc>
  * 	VarResolver r = <jk>new</jk> VarResolver().addVars(SystemPropertiesVar.<js>class</js>);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java b/juneau-core/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java
index 46e6ec4..6c2928f 100644
--- a/juneau-core/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java
+++ b/juneau-core/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java
@@ -23,7 +23,7 @@ import org.apache.juneau.*;
  * 	Bean filter builders must have a public no-arg constructor.
  * 	Builder settings should be set in the constructor using the provided setters on this class.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Create our serializer with a bean filter.</jc>
  * 	WriterSerializer s = <jk>new</jk> JsonSerializer().addBeanFilters(AddressFilter.<jk>class</jk>);
@@ -40,7 +40,7 @@ import org.apache.juneau.*;
  * 	}
  * </p>
  *
- * <h6 class='topic'>Additional information</h6>
+ * <h5 class='section'>Additional information:</h5>
  * 	See {@link org.apache.juneau.transform} for more information.
  */
 public abstract class BeanFilterBuilder {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java b/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java
index 5a1d104..efd94d1 100644
--- a/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java
@@ -22,7 +22,7 @@ import org.apache.juneau.serializer.*;
 /**
  * Used to swap out non-serializable objects with serializable replacements during serialization, and vis-versa during parsing.
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	<code>PojoSwaps</code> are used to extend the functionality of the serializers and parsers to be able to handle POJOs
  * 	that aren't automatically handled by the serializers or parsers.  For example, JSON does not have a standard
@@ -90,7 +90,7 @@ import org.apache.juneau.serializer.*;
  * 	in which case it's not possible to reparse it back into a {@code Date}, since there is no way for the {@code Parser} to
  * 	know it's a {@code Date} from just the JSON or XML text.
  *
- * <h6 class='topic'>Additional information</h6>
+ * <h5 class='section'>Additional information:</h5>
  * 	See {@link org.apache.juneau.transform} for more information.
  *
  * @param <T> The normal form of the class.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/transforms/BeanStringSwap.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/transforms/BeanStringSwap.java b/juneau-core/src/main/java/org/apache/juneau/transforms/BeanStringSwap.java
index f6d38f7..c7d1c67 100644
--- a/juneau-core/src/main/java/org/apache/juneau/transforms/BeanStringSwap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/transforms/BeanStringSwap.java
@@ -22,7 +22,7 @@ import org.apache.juneau.transform.*;
  * 	being turned into Maps by the {@link BeanContext} (or worse, throwing {@link BeanRuntimeException BeanRuntimeExceptions}).
  * <p>
  * 	This is usually a one-way transform.
- * 	Beans serialized as strings cannot be reconstituted using a parser unless it is a <a class='doclink' href='../../../../overview-summary.html#Core.PojoCategories'>Type 5 POJO</a>.
+ * 	Beans serialized as strings cannot be reconstituted using a parser unless it is a <a class="doclink" href="../../../../overview-summary.html#Core.PojoCategories">Type 5 POJO</a>.
  *
  * @param <T> The class type of the bean.
  */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/transforms/CalendarSwap.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/transforms/CalendarSwap.java b/juneau-core/src/main/java/org/apache/juneau/transforms/CalendarSwap.java
index f6b1f3e..a4bf22c 100644
--- a/juneau-core/src/main/java/org/apache/juneau/transforms/CalendarSwap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/transforms/CalendarSwap.java
@@ -88,7 +88,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Transforms {@link Calendar Calendars} to {@link String Strings} using the {@code Date.toString()} method.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * 	<ul>
 	 * 	<li><js>"Wed Jul 04 15:30:45 EST 2001"</js>
 	 * </ul>
@@ -103,7 +103,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Transforms {@link Calendar Calendars} to ISO8601 date-time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"2001-07-04T15:30:45-05:00"</js>
 	 * 	<li><js>"2001-07-04T15:30:45Z"</js>
@@ -148,7 +148,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Same as {@link ISO8601DT}, except always serializes in GMT.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <js>"2001-07-04T15:30:45Z"</js>
 	 */
 	public static class ISO8601DTZ extends CalendarSwap {
@@ -183,7 +183,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Same as {@link CalendarSwap.ISO8601DT} except serializes to millisecond precision.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <js>"2001-07-04T15:30:45.123Z"</js>
 	 */
 	public static class ISO8601DTP extends ISO8601DT {
@@ -198,7 +198,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Same as {@link CalendarSwap.ISO8601DTZ} except serializes to millisecond precision.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <js>"2001-07-04T15:30:45.123"</js>
 	 */
 	public static class ISO8601DTPZ extends ISO8601DTZ {
@@ -213,7 +213,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Transforms {@link Calendar Calendars} to RFC2822 date-time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"Sat, 03 Mar 2001 10:11:12 +0000"</js> <jc>// en_US</jc>
 	 * 	<li><js>"\u571f, 03 3 2001 10:11:12 +0000"</js> <jc>// ja_JP</jc>
@@ -230,7 +230,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Same as {@link RFC2822DT}, except always serializes in GMT.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"Sat, 03 Mar 2001 10:11:12 GMT"</js> <jc>// en_US</jc>
 	 * 	<li><js>"\u571f, 03 3 2001 10:11:12 GMT"</js> <jc>// ja_JP</jc>
@@ -247,7 +247,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Transforms {@link Calendar Calendars} to RFC2822 date strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"03 Mar 2001"</js> <jc>// en_US</jc>
 	 * 	<li><js>"03 3 2001"</js> <jc>// ja_JP</jc>
@@ -264,7 +264,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Transforms {@link Calendar Calendars} to simple <js>"yyyy/MM/dd HH:mm:ss"</js> date-time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"2001/03/03 10:11:12"</js>
 	 * </ul>
@@ -279,7 +279,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Transforms {@link Calendar Calendars} to simple <js>"yyyy/MM/dd"</js> date strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"2001/03/03"</js>
 	 * </ul>
@@ -294,7 +294,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Transforms {@link Calendar Calendars} to simple <js>"HH:mm:ss"</js> time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"10:11:12"</js>
 	 * </ul>
@@ -309,7 +309,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Transforms {@link Calendar Calendars} to {@link DateFormat#FULL} date strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"Saturday, March 3, 2001"</js> <jc>// en_US</jc>
 	 * 	<li><js>"2001\u5e743\u67083\u65e5"</js> <jc>// ja_JP</jc>
@@ -326,7 +326,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Transforms {@link Calendar Calendars} to {@link DateFormat#LONG} date strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"March 3, 2001"</js> <jc>// en_US</jc>
 	 * 	<li><js>"2001/03/03"</js> <jc>// ja_JP</jc>
@@ -343,7 +343,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Transforms {@link Calendar Calendars} to {@link DateFormat#MEDIUM} date strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"Mar 3, 2001"</js> <jc>// en_US</jc>
 	 * 	<li><js>"2001/03/03"</js> <jc>// ja_JP</jc>
@@ -360,7 +360,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Transforms {@link Calendar Calendars} to {@link DateFormat#SHORT} date strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"3/3/01"</js> <jc>// en_US</jc>
 	 * 	<li><js>"01/03/03"</js> <jc>// ja_JP</jc>
@@ -377,7 +377,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Transforms {@link Calendar Calendars} to {@link DateFormat#FULL} time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"10:11:12 AM GMT"</js> <jc>// en_US</jc>
 	 * 	<li><js>"10\u664211\u520612\u79d2 GMT"</js> <jc>// ja_JP</jc>
@@ -394,7 +394,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Transforms {@link Calendar Calendars} to {@link DateFormat#LONG} time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"10:11:12 AM GMT"</js> <jc>// en_US</jc>
 	 * 	<li><js>"10:11:12 GMT"</js> <jc>// ja_JP</jc>
@@ -411,7 +411,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Transforms {@link Calendar Calendars} to {@link DateFormat#MEDIUM} time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"10:11:12 AM"</js> <jc>// en_US</jc>
 	 * 	<li><js>"10:11:12"</js> <jc>// ja_JP</jc>
@@ -428,7 +428,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Transforms {@link Calendar Calendars} to {@link DateFormat#SHORT} time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"10:11 AM"</js> <jc>// en_US</jc>
 	 * 	<li><js>"10:11 AM"</js> <jc>// ja_JP</jc>
@@ -445,7 +445,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Transforms {@link Calendar Calendars} to {@link DateFormat#FULL} date-time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"Saturday, March 3, 2001 10:11:12 AM GMT"</js> <jc>// en_US</jc>
 	 * 	<li><js>"2001\u5e743\u67083\u65e5 10\u664211\u520612\u79d2 GMT"</js> <jc>// ja_JP</jc>
@@ -462,7 +462,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Transforms {@link Calendar Calendars} to {@link DateFormat#LONG} date-time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"March 3, 2001 10:11:12 AM GMT"</js> <jc>// en_US</jc>
 	 * 	<li><js>"2001/03/03 10:11:12 GMT"</js> <jc>// ja_JP</jc>
@@ -479,7 +479,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Transforms {@link Calendar Calendars} to {@link DateFormat#MEDIUM} date-time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"Mar 3, 2001 10:11:12 AM"</js> <jc>// en_US</jc>
 	 * 	<li><js>"2001/03/03 10:11:12"</js> <jc>// ja_JP</jc>
@@ -496,7 +496,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 	/**
 	 * Transforms {@link Calendar Calendars} to {@link DateFormat#SHORT} date-time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"3/3/01 10:11 AM"</js> <jc>// en_US</jc>
 	 * 	<li><js>"01/03/03 10:11"</js> <jc>// ja_JP</jc>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/transforms/DateSwap.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/transforms/DateSwap.java b/juneau-core/src/main/java/org/apache/juneau/transforms/DateSwap.java
index 95673df..8e8b8a7 100644
--- a/juneau-core/src/main/java/org/apache/juneau/transforms/DateSwap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/transforms/DateSwap.java
@@ -87,7 +87,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Transforms {@link Date Dates} to {@link String Strings} using the {@code Date.toString()} method.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * 	<ul>
 	 * 	<li><js>"Wed Jul 04 15:30:45 EST 2001"</js>
 	 * </ul>
@@ -102,7 +102,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Transforms {@link Calendar Calendars} to ISO8601 date-time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"2001-07-04T15:30:45-05:00"</js>
 	 * 	<li><js>"2001-07-04T15:30:45Z"</js>
@@ -149,7 +149,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Same as {@link ISO8601DT}, except always serializes in GMT.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <js>"2001-07-04T15:30:45Z"</js>
 	 */
 	public static class ISO8601DTZ extends DateSwap {
@@ -186,7 +186,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Same as {@link CalendarSwap.ISO8601DT} except serializes to millisecond precision.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <js>"2001-07-04T15:30:45.123Z"</js>
 	 */
 	public static class ISO8601DTP extends ISO8601DT {
@@ -203,7 +203,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Same as {@link CalendarSwap.ISO8601DTZ} except serializes to millisecond precision.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <js>"2001-07-04T15:30:45.123"</js>
 	 */
 	public static class ISO8601DTPZ extends ISO8601DTZ {
@@ -220,7 +220,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Transforms {@link Date Dates} to RFC2822 date-time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"Sat, 03 Mar 2001 10:11:12 +0000"</js> <jc>// en_US</jc>
 	 * 	<li><js>"\u571f, 03 3 2001 10:11:12 +0000"</js> <jc>// ja_JP</jc>
@@ -237,7 +237,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Same as {@link DateSwap.RFC2822DT}, except always serializes in GMT.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"Sat, 03 Mar 2001 10:11:12 GMT"</js> <jc>// en_US</jc>
 	 * 	<li><js>"\u571f, 03 3 2001 10:11:12 GMT"</js> <jc>// ja_JP</jc>
@@ -254,7 +254,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Transforms {@link Date Dates} to RFC2822 date strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"03 Mar 2001"</js> <jc>// en_US</jc>
 	 * 	<li><js>"03 3 2001"</js> <jc>// ja_JP</jc>
@@ -271,7 +271,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Transforms {@link Date Dates} to simple <js>"yyyy/MM/dd HH:mm:ss"</js> date-time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"2001/03/03 10:11:12"</js>
 	 * </ul>
@@ -286,7 +286,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Transforms {@link Date Dates} to simple <js>"yyyy/MM/dd"</js> date strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"2001/03/03"</js>
 	 * </ul>
@@ -301,7 +301,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Transforms {@link Date Dates} to simple <js>"HH:mm:ss"</js> time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"10:11:12"</js>
 	 * </ul>
@@ -316,7 +316,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Transforms {@link Date Dates} to {@link DateFormat#FULL} date strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"Saturday, March 3, 2001"</js> <jc>// en_US</jc>
 	 * 	<li><js>"2001\u5e743\u67083\u65e5"</js> <jc>// ja_JP</jc>
@@ -333,7 +333,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Transforms {@link Date Dates} to {@link DateFormat#LONG} date strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"March 3, 2001"</js> <jc>// en_US</jc>
 	 * 	<li><js>"2001/03/03"</js> <jc>// ja_JP</jc>
@@ -350,7 +350,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Transforms {@link Date Dates} to {@link DateFormat#MEDIUM} date strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"Mar 3, 2001"</js> <jc>// en_US</jc>
 	 * 	<li><js>"2001/03/03"</js> <jc>// ja_JP</jc>
@@ -367,7 +367,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Transforms {@link Date Dates} to {@link DateFormat#SHORT} date strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"3/3/01"</js> <jc>// en_US</jc>
 	 * 	<li><js>"01/03/03"</js> <jc>// ja_JP</jc>
@@ -384,7 +384,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Transforms {@link Date Dates} to {@link DateFormat#FULL} time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"10:11:12 AM GMT"</js> <jc>// en_US</jc>
 	 * 	<li><js>"10\u664211\u520612\u79d2 GMT"</js> <jc>// ja_JP</jc>
@@ -401,7 +401,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Transforms {@link Date Dates} to {@link DateFormat#LONG} time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"10:11:12 AM GMT"</js> <jc>// en_US</jc>
 	 * 	<li><js>"10:11:12 GMT"</js> <jc>// ja_JP</jc>
@@ -418,7 +418,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Transforms {@link Date Dates} to {@link DateFormat#MEDIUM} time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"10:11:12 AM"</js> <jc>// en_US</jc>
 	 * 	<li><js>"10:11:12"</js> <jc>// ja_JP</jc>
@@ -435,7 +435,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Transforms {@link Date Dates} to {@link DateFormat#SHORT} time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"10:11 AM"</js> <jc>// en_US</jc>
 	 * 	<li><js>"10:11 AM"</js> <jc>// ja_JP</jc>
@@ -452,7 +452,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Transforms {@link Date Dates} to {@link DateFormat#FULL} date-time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"Saturday, March 3, 2001 10:11:12 AM GMT"</js> <jc>// en_US</jc>
 	 * 	<li><js>"2001\u5e743\u67083\u65e5 10\u664211\u520612\u79d2 GMT"</js> <jc>// ja_JP</jc>
@@ -469,7 +469,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Transforms {@link Date Dates} to {@link DateFormat#LONG} date-time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"March 3, 2001 10:11:12 AM GMT"</js> <jc>// en_US</jc>
 	 * 	<li><js>"2001/03/03 10:11:12 GMT"</js> <jc>// ja_JP</jc>
@@ -486,7 +486,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Transforms {@link Date Dates} to {@link DateFormat#MEDIUM} date-time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"Mar 3, 2001 10:11:12 AM"</js> <jc>// en_US</jc>
 	 * 	<li><js>"2001/03/03 10:11:12"</js> <jc>// ja_JP</jc>
@@ -503,7 +503,7 @@ public class DateSwap extends StringSwap<Date> {
 	/**
 	 * Transforms {@link Date Dates} to {@link DateFormat#SHORT} date-time strings.
 	 *
-	 * <h6 class='topic'>Example output:</h6>
+	 * <h5 class='section'>Example output:</h5>
 	 * <ul>
 	 * 	<li><js>"3/3/01 10:11 AM"</js> <jc>// en_US</jc>
 	 * 	<li><js>"01/03/03 10:11"</js> <jc>// ja_JP</jc>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/transforms/ReaderSwap.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/transforms/ReaderSwap.java b/juneau-core/src/main/java/org/apache/juneau/transforms/ReaderSwap.java
index d434a73..f8129ac 100644
--- a/juneau-core/src/main/java/org/apache/juneau/transforms/ReaderSwap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/transforms/ReaderSwap.java
@@ -26,7 +26,7 @@ import org.apache.juneau.xml.*;
 /**
  * Transforms the contents of a {@link Reader} into an {@code Object}.
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	The {@code Reader} must contain JSON, Juneau-generated XML (output from {@link XmlSerializer}),
  * 		or Juneau-generated HTML (output from {@link JsonSerializer}) in order to be parsed correctly.
@@ -98,7 +98,7 @@ public class ReaderSwap extends PojoSwap<Reader,Object> {
 		try {
 			if (parser == null)
 				return IOUtils.read(o);
-			return parser.parse(o, session.object());
+			return parser.parse(o, Object.class);
 		} catch (IOException e) {
 			return e.getLocalizedMessage();
 		} catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonParser.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonParser.java
index 0b78561..7f803ae 100644
--- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonParser.java
@@ -27,15 +27,15 @@ import org.apache.juneau.transform.*;
 /**
  * Parses UON (a notation for URL-encoded query parameter values) text into POJO models.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Content-Type</code> types: <code>text/uon</code>
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	This parser uses a state machine, which makes it very fast and efficient.
  *
- * <h6 class='topic'>Configurable properties</h6>
+ * <h5 class='section'>Configurable properties:</h5>
  * <p>
  * 	This class has the following properties associated with it:
  * <ul>
@@ -731,7 +731,6 @@ public class UonParser extends ReaderParser {
 	@Override /* Parser */
 	protected <T> T doParse(ParserSession session, ClassMeta<T> type) throws Exception {
 		UonParserSession s = (UonParserSession)session;
-		type = session.normalizeClassMeta(type);
 		UonReader r = s.getReader();
 		T o = parseAnything(s, type, r, s.getOuter(), true, null);
 		validateEnd(s, r);
@@ -743,7 +742,7 @@ public class UonParser extends ReaderParser {
 		UonParserSession s = (UonParserSession)session;
 		UonReader r = s.getReader();
 		readFlag(s, r, 'o');
-		m = parseIntoMap(s, r, m, session.getClassMeta(keyType), session.getClassMeta(valueType), null);
+		m = parseIntoMap(s, r, m, (ClassMeta<K>)session.getClassMeta(keyType), (ClassMeta<V>)session.getClassMeta(valueType), null);
 		validateEnd(s, r);
 		return m;
 	}
@@ -753,7 +752,7 @@ public class UonParser extends ReaderParser {
 		UonParserSession s = (UonParserSession)session;
 		UonReader r = s.getReader();
 		readFlag(s, r, 'a');
-		c = parseIntoCollection(s, r, c, session.getClassMeta(elementType), false, null);
+		c = parseIntoCollection(s, r, c, (ClassMeta<E>)session.getClassMeta(elementType), false, null);
 		validateEnd(s, r);
 		return c;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonParserContext.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonParserContext.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonParserContext.java
index 6f40db5..144ade5 100644
--- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonParserContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonParserContext.java
@@ -53,11 +53,11 @@ import org.apache.juneau.parser.*;
  * 	</tr>
  * </table>
  *
- * <h6 class='topic'>Configurable properties inherited from parent classes</h6>
+ * <h5 class='section'>Inherited configurable properties:</h5>
  * <ul class='javahierarchy'>
- * 	<li class='c'><a class='doclink' href='../BeanContext.html#ConfigProperties'>BeanContext</a> - Properties associated with handling beans on serializers and parsers.
+ * 	<li class='c'><a class="doclink" href="../BeanContext.html#ConfigProperties">BeanContext</a> - Properties associated with handling beans on serializers and parsers.
  * 	<ul>
- * 		<li class='c'><a class='doclink' href='../parser/ParserContext.html#ConfigProperties'>ParserContext</a> - Configurable properties common to all parsers.
+ * 		<li class='c'><a class="doclink" href="../parser/ParserContext.html#ConfigProperties">ParserContext</a> - Configurable properties common to all parsers.
  * 	</ul>
  * </ul>
  */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializer.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializer.java
index 9c752f2..4a227ed 100644
--- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializer.java
@@ -26,18 +26,18 @@ import org.apache.juneau.transform.*;
 /**
  * Serializes POJO models to UON (a notation for URL-encoded query parameter values).
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Accept</code> types: <code>text/uon</code>
  * <p>
  * 	Produces <code>Content-Type</code> types: <code>text/uon</code>
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	This serializer provides several serialization options.  Typically, one of the predefined DEFAULT serializers will be sufficient.
  * 	However, custom serializers can be constructed to fine-tune behavior.
  *
- * <h6 class='topic'>Configurable properties</h6>
+ * <h5 class='section'>Configurable properties:</h5>
  * <p>
  * 	This class has the following properties associated with it:
  * <ul>
@@ -122,7 +122,7 @@ import org.apache.juneau.transform.*;
  * 	)
  * </p>
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Serialize a Map</jc>
  * 	Map m = <jk>new</jk> ObjectMap(<js>"{a:'b',c:1,d:false,e:['f',1,false],g:{h:'i'}}"</js>);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializerContext.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializerContext.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializerContext.java
index b7be793..5c7e30e 100644
--- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializerContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializerContext.java
@@ -60,11 +60,11 @@ import org.apache.juneau.serializer.*;
  * 	</tr>
  * </table>
  *
- * <h6 class='topic'>Configurable properties inherited from parent classes</h6>
+ * <h5 class='section'>Inherited configurable properties:</h5>
  * <ul class='javahierarchy'>
- * 	<li class='c'><a class='doclink' href='../BeanContext.html#ConfigProperties'>BeanContext</a> - Properties associated with handling beans on serializers and parsers.
+ * 	<li class='c'><a class="doclink" href="../BeanContext.html#ConfigProperties">BeanContext</a> - Properties associated with handling beans on serializers and parsers.
  * 	<ul>
- * 		<li class='c'><a class='doclink' href='../serializer/SerializerContext.html#ConfigProperties'>SerializerContext</a> - Configurable properties common to all serializers.
+ * 		<li class='c'><a class="doclink" href="../serializer/SerializerContext.html#ConfigProperties">SerializerContext</a> - Configurable properties common to all serializers.
  * 	</ul>
  * </ul>
  */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonWriter.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonWriter.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonWriter.java
index f2b4c79..118b5e8 100644
--- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonWriter.java
+++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonWriter.java
@@ -20,7 +20,10 @@ import org.apache.juneau.serializer.*;
 /**
  * Specialized writer for serializing UON-encoded text.
  * <p>
- * 	<b>Note:  This class is not intended for external use.</b>
+ * <h5 class='section'>Notes:</h5>
+ * <ul>
+ * 	<li>This class is not intended for external use.
+ * </ul>
  */
 public final class UonWriter extends SerializerWriter {
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingContext.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingContext.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingContext.java
index 6e6a8d4..95fe474 100644
--- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingContext.java
@@ -40,11 +40,14 @@ public final class UrlEncodingContext implements Cloneable {
 	 * 	String s2 = p2.serialize(<jk>new</jk> A()); <jc>// Produces "f1=a&amp;f1=b&amp;f2=c&amp;f2=d"</jc>
 	 * </p>
 	 * <p>
-	 * 	<b>Important note:</b>  If parsing multi-part parameters, it's highly recommended to use Collections or Lists
-	 * 	as bean property types instead of arrays since arrays have to be recreated from scratch every time a value
-	 * 	is added to it.
+	 * This option only applies to beans.
 	 * <p>
-	 * 	This option only applies to beans.
+	 * <h5 class='section'>Notes:</h5>
+	 * <ul>
+	 * 	<li>If parsing multi-part parameters, it's highly recommended to use <code>Collections</code> or <code>Lists</code>
+	 * 		as bean property types instead of arrays since arrays have to be recreated from scratch every time a value
+	 * 		is added to it.
+	 * </ul>
 	 */
 	public static final String URLENC_expandedParams = "UrlEncoding.expandedParams";
 


[6/7] incubator-juneau git commit: Eliminate ClassMeta dependencies from Parser. Clean up docs.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMeta.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMeta.java b/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMeta.java
index a9e52f0..33a163a 100644
--- a/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMeta.java
+++ b/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMeta.java
@@ -251,7 +251,7 @@ public class BeanPropertyMeta {
 
 		if (field != null) {
 			BeanProperty p = field.getAnnotation(BeanProperty.class);
-			rawTypeMeta = f.getClassMeta(p, field.getGenericType(), typeVarImpls);
+			rawTypeMeta = f.resolveClassMeta(p, field.getGenericType(), typeVarImpls);
 			isUri |= (rawTypeMeta.isUri() || field.isAnnotationPresent(org.apache.juneau.annotation.URI.class));
 			if (p != null) {
 				swap = getPropertyPojoSwap(p);
@@ -264,7 +264,7 @@ public class BeanPropertyMeta {
 		if (getter != null) {
 			BeanProperty p = getter.getAnnotation(BeanProperty.class);
 			if (rawTypeMeta == null)
-				rawTypeMeta = f.getClassMeta(p, getter.getGenericReturnType(), typeVarImpls);
+				rawTypeMeta = f.resolveClassMeta(p, getter.getGenericReturnType(), typeVarImpls);
 			isUri |= (rawTypeMeta.isUri() || getter.isAnnotationPresent(org.apache.juneau.annotation.URI.class));
 			if (p != null) {
 				if (swap == null)
@@ -278,7 +278,7 @@ public class BeanPropertyMeta {
 		if (setter != null) {
 			BeanProperty p = setter.getAnnotation(BeanProperty.class);
 			if (rawTypeMeta == null)
-				rawTypeMeta = f.getClassMeta(p, setter.getGenericParameterTypes()[0], typeVarImpls);
+				rawTypeMeta = f.resolveClassMeta(p, setter.getGenericParameterTypes()[0], typeVarImpls);
 			isUri |= (rawTypeMeta.isUri() || setter.isAnnotationPresent(org.apache.juneau.annotation.URI.class));
 			if (p != null) {
 			if (swap == null)

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/BeanRegistry.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/BeanRegistry.java b/juneau-core/src/main/java/org/apache/juneau/BeanRegistry.java
index 0bc404c..13f9657 100644
--- a/juneau-core/src/main/java/org/apache/juneau/BeanRegistry.java
+++ b/juneau-core/src/main/java/org/apache/juneau/BeanRegistry.java
@@ -69,7 +69,14 @@ public class BeanRegistry {
 					Map<?,?> m = (Map<?,?>)c.newInstance();
 					for (Map.Entry<?,?> e : m.entrySet()) {
 						String typeName = StringUtils.toString(e.getKey());
-						ClassMeta<?> val = beanContext.getClassMeta(e.getValue());
+						Object v = e.getValue();
+						ClassMeta<?> val = null;
+						if (v instanceof Type)
+							val = beanContext.getClassMeta((Type)v);
+						else if (v.getClass().isArray())
+							val = getTypedClassMeta(v);
+						else
+							throw new BeanRuntimeException("Class ''{0}'' was passed to BeanRegistry but value of type ''{1}'' found in map is not a Type object.", c.getName(), v.getClass().getName());
 						map.put(typeName, val);
 					}
 				} else {
@@ -86,6 +93,17 @@ public class BeanRegistry {
 		}
 	}
 
+	private ClassMeta<?> getTypedClassMeta(Object array) {
+		int len = Array.getLength(array);
+		if (len == 0)
+			throw new BeanRuntimeException("Map entry had an empty array value.");
+		Type type = (Type)Array.get(array, 0);
+		Type[] args = new Type[len-1];
+		for (int i = 1; i < len; i++)
+			args[i-1] = (Type)Array.get(array, i);
+		return beanContext.getClassMeta(type, args);
+	}
+
 	/**
 	 * Converts the specified object map into a bean if it contains a <js>"_type"</js> entry in it.
 	 *

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/BeanSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/BeanSession.java b/juneau-core/src/main/java/org/apache/juneau/BeanSession.java
index dc54ac4..540329b 100644
--- a/juneau-core/src/main/java/org/apache/juneau/BeanSession.java
+++ b/juneau-core/src/main/java/org/apache/juneau/BeanSession.java
@@ -613,7 +613,7 @@ public class BeanSession extends Session {
 	 * <p>
 	 * 	If object is not a true bean, then throws a {@link BeanRuntimeException} with an explanation of why it's not a bean.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Construct a bean map around a bean instance</jc>
 	 * 	BeanMap&lt;Person&gt; bm = BeanContext.<jsf>DEFAULT</jsf>.forBean(<jk>new</jk> Person());
@@ -655,7 +655,7 @@ public class BeanSession extends Session {
 	 * <p>
 	 * 	If object is not a true bean, throws a {@link BeanRuntimeException} with an explanation of why it's not a bean.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Construct a bean map for new bean using only properties defined in a superclass</jc>
 	 * 	BeanMap&lt;MySubBean&gt; bm = BeanContext.<jsf>DEFAULT</jsf>.forBean(<jk>new</jk> MySubBean(), MySuperBean.<jk>class</jk>);
@@ -693,7 +693,7 @@ public class BeanSession extends Session {
 	 * <p>
 	 * 	If object is not a true bean, then throws a {@link BeanRuntimeException} with an explanation of why it's not a bean.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Construct a new bean map wrapped around a new Person object</jc>
 	 * 	BeanMap&lt;Person&gt; bm = BeanContext.<jsf>DEFAULT</jsf>.newBeanMap(Person.<jk>class</jk>);
@@ -735,7 +735,7 @@ public class BeanSession extends Session {
 	 * Creates a new empty bean of the specified type, except used for instantiating inner member classes that must
 	 * 	be instantiated within another class instance.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Construct a new instance of the specified bean class</jc>
 	 * 	Person p = BeanContext.<jsf>DEFAULT</jsf>.newBean(Person.<jk>class</jk>);
@@ -797,23 +797,6 @@ public class BeanSession extends Session {
 	}
 
 	/**
-	 * Returns the class type bound to this bean context if the specified class type
-	 * 	is from another bean context.
-	 * <p>
-	 * For example, this method allows you to pass in an object from <code>BeanContext.<jsf>DEFAULT</jsf>.getMapClassMeta(...)</code>
-	 * 	to any of the <code>ReaderParser.parse(Reader, ClassMeta, ParserContext)</code> methods, and the parsers
-	 * 	will use this method to replace the class type with the one registered with the parser.
-	 * This ensures that registered transforms are applied correctly.
-	 *
-	 * @param <T> The class type.
-	 * @param cm The class type.
-	 * @return The class type bound by this bean context.
-	 */
-	public final <T> ClassMeta<T> normalizeClassMeta(ClassMeta<T> cm) {
-		return ctx.normalizeClassMeta(cm);
-	}
-
-	/**
 	 * Returns a {@code ClassMeta} wrapper around a {@link Class} object.
 	 *
 	 * @param <T> The class type being wrapped.
@@ -825,83 +808,36 @@ public class BeanSession extends Session {
 	}
 
 	/**
-	 * Returns a {@code ClassMeta} wrapper around a {@link Class} or {@link Type} object.
-	 *
-	 * @param <T> The class type being wrapped.
-	 * @param c The class being wrapped.
-	 * @return The class meta object containing information about the class.
-	 */
-	public final <T> ClassMeta<T> getClassMeta(Object c) {
-		return ctx.getClassMeta(c);
-	}
-
-	/**
-	 * Returns a {@link ClassMeta} wrapper around a {@link Map} or {@link Collection} class.
+	 * Used to resolve <code>ClassMetas</code> of type <code>Collection</code> and <code>Map</code> that have
+	 * <code>ClassMeta</code> values that themselves could be collections or maps.
 	 * <p>
-	 * Handles the following object arrays:
-	 * <ul>
-	 * 	<li><code>Object[2]</code> containing <code>{Class&lt;? extends Collection&gt;, Object}</code>
-	 * 		where the 2nd entry is the entry type which can be a Class/Type or another array.
-	 * 	<li><code>Object[3]</code> containing <code>{Class&lt;? extends Map&gt;, Object, Object}</code>
-	 * 		where the 2nd entry is the key type which can be a Class/Type and 3rd entry is the value type which can be a Class/Type or another array.
-	 * </ul>
-	 *
-	 * @param c The object array being resolved.
-	 * @return The class meta object containing information about the class.
-	 */
-	public final <T> ClassMeta<T> getClassMeta(Object...c) {
-		return ctx.getClassMeta(c);
-	}
-
-	/**
-	 * Convenience method for creating a {@link Map} class meta.
+	 * <code>Collection</code> meta objects are assumed to be followed by zero or one meta objects indicating the element type.
 	 * <p>
-	 * Equivalent to calling <code>getClassMeta(c, keyType, valueType)</code>.
-	 *
-	 * @param <K> The map key class type.
-	 * @param <V> The map value class type.
-	 * @param <T> The map class type.
-	 * @param c The map class type.
-	 * @param keyType The map key class type.
-	 * @param valueType The map value class type.
-	 * @return If the key and value types are Object, returns a cached {@link ClassMeta} object.<br>
-	 * 	Otherwise, returns a new {@link ClassMeta} object every time.
-	 */
-	public final <K,V,T extends Map<K,V>> ClassMeta<T> getMapClassMeta(Class<T> c, Class<K> keyType, Class<V> valueType) {
-		return getClassMeta(c, keyType, valueType);
-	}
-
-	/**
-	 * Convenience method for creating a {@link Collection} class meta.
+	 * <code>Map</code> meta objects are assumed to be followed by zero or two meta objects indicating the key and value types.
 	 * <p>
-	 * Equivalent to calling <code>getClassMeta(c, keyType, valueType)</code>.
+	 * The array can be arbitrarily long to indicate arbitrarily complex data structures.
 	 *
-	 * @param <E> The collection element class type.
-	 * @param <T> The collection class type.
-	 * @param c The collection class type.
-	 * @param elementType The collection element class type.
-	 * @return If the element type is <code>OBJECT</code>, returns a cached {@link ClassMeta} object.<br>
-	 * 	Otherwise, returns a new {@link ClassMeta} object every time.
-	 */
-	public final <E,T extends Collection<E>> ClassMeta<T> getCollectionClassMeta(Class<T> c, Class<E> elementType) {
-		return getClassMeta(c, getClassMeta(elementType));
-	}
-
-	/**
-	 * Constructs a ClassMeta object given the specified object and parameters.
+	 * <h5 class='section'>Examples:</h5>
+	 * <ul>
+	 * 	<li><code>getClassMeta(String.<jk>class</jk>);</code> - A normal type.
+	 * 	<li><code>getClassMeta(List.<jk>class</jk>);</code> - A list containing objects.
+	 * 	<li><code>getClassMeta(List.<jk>class</jk>, String.<jk>class</jk>);</code> - A list containing strings.
+	 * 	<li><code>getClassMeta(LinkedList.<jk>class</jk>, String.<jk>class</jk>);</code> - A linked-list containing strings.
+	 * 	<li><code>getClassMeta(LinkedList.<jk>class</jk>, LinkedList.<jk>class</jk>, String.<jk>class</jk>);</code> - A linked-list containing linked-lists of strings.
+	 * 	<li><code>getClassMeta(Map.<jk>class</jk>);</code> - A map containing object keys/values.
+	 * 	<li><code>getClassMeta(Map.<jk>class</jk>, String.<jk>class</jk>, String.<jk>class</jk>);</code> - A map containing string keys/values.
+	 * 	<li><code>getClassMeta(Map.<jk>class</jk>, String.<jk>class</jk>, List.<jk>class</jk>, MyBean.<jk>class</jk>);</code> - A map containing string keys and values of lists containing beans.
+	 * </ul>
 	 *
-	 * @param o The parent class type.
-	 * 	Can be any of the following types:
-	 * 	<ul class='spaced-list'>
-	 * 		<li>{@link ClassMeta} object, which just returns the same object.
-	 * 		<li>{@link Class} object (e.g. <code>String.<jk>class</jk></code>).
-	 * 		<li>{@link Type} object (e.g. {@link ParameterizedType} or {@link GenericArrayType}.
-	 * 		<li>Anything else is interpreted as {@code getClassMeta(o.getClass(), parameters);}
-	 * 	</ul>
-	 * @return A ClassMeta object, or <jk>null</jk> if the object is null.
+	 * @param type The class to resolve.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * @param args The type arguments of the class if it's a collection or map.
+	 * 	<br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}
+	 * 	<br>Ignored if the main type is not a map or collection.
+	 * @return The class meta.
 	 */
-	public final ClassMeta getClassMeta(Type o) {
-		return ctx.getClassMeta(o, null);
+	public final <T> ClassMeta<T> getClassMeta(Type type, Type...args) {
+		return ctx.getClassMeta(type, args);
 	}
 
 	/**

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java b/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java
index 69c8b33..fdcbd2a 100644
--- a/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java
+++ b/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java
@@ -739,7 +739,7 @@ public final class ClassMeta<T> implements Type {
 	 * @return The constructor, or <jk>null</jk> if no no-arg constructor exists with the required visibility.
 	 */
 	@SuppressWarnings({"rawtypes","unchecked"})
-	protected static <T> Constructor<? extends T> findNoArgConstructor(Class<T> c, Visibility v) {
+	protected static <T> Constructor<? extends T> findNoArgConstructor(Class<?> c, Visibility v) {
 		int mod = c.getModifiers();
 		if (Modifier.isAbstract(mod))
 			return null;

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/CoreApi.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/CoreApi.java b/juneau-core/src/main/java/org/apache/juneau/CoreApi.java
index 5df8994..1094632 100644
--- a/juneau-core/src/main/java/org/apache/juneau/CoreApi.java
+++ b/juneau-core/src/main/java/org/apache/juneau/CoreApi.java
@@ -15,7 +15,7 @@ package org.apache.juneau;
 /**
  * Common super class for all core-API serializers, parsers, and serializer/parser groups.
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * Maintains an inner {@link ContextFactory} instance that can be used by serializer and parser subclasses
  * 	to work with beans in a consistent way.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/FormattedException.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/FormattedException.java b/juneau-core/src/main/java/org/apache/juneau/FormattedException.java
index 7731f56..7dae895 100644
--- a/juneau-core/src/main/java/org/apache/juneau/FormattedException.java
+++ b/juneau-core/src/main/java/org/apache/juneau/FormattedException.java
@@ -25,7 +25,7 @@ public class FormattedException extends Exception {
 	 * Constructor.
 	 *
 	 * @param message The {@link MessageFormat}-style message.
-	 * @param args The arguments in the message.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public FormattedException(String message, Object...args) {
 		super(args.length == 0 ? message : MessageFormat.format(message, args));
@@ -36,7 +36,7 @@ public class FormattedException extends Exception {
 	 *
 	 * @param causedBy The cause of this exception.
 	 * @param message The {@link MessageFormat}-style message.
-	 * @param args The arguments in the message.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public FormattedException(Throwable causedBy, String message, Object...args) {
 		this(message, args);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/FormattedRuntimeException.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/FormattedRuntimeException.java b/juneau-core/src/main/java/org/apache/juneau/FormattedRuntimeException.java
index 8ee1f60..bf5e9d6 100644
--- a/juneau-core/src/main/java/org/apache/juneau/FormattedRuntimeException.java
+++ b/juneau-core/src/main/java/org/apache/juneau/FormattedRuntimeException.java
@@ -25,7 +25,7 @@ public class FormattedRuntimeException extends RuntimeException {
 	 * Constructor.
 	 *
 	 * @param message The {@link MessageFormat}-style message.
-	 * @param args The arguments in the message.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public FormattedRuntimeException(String message, Object...args) {
 		super(args.length == 0 ? message : MessageFormat.format(message, args));
@@ -36,7 +36,7 @@ public class FormattedRuntimeException extends RuntimeException {
 	 *
 	 * @param causedBy The cause of this exception.
 	 * @param message The {@link MessageFormat}-style message.
-	 * @param args The arguments in the message.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public FormattedRuntimeException(Throwable causedBy, String message, Object...args) {
 		this(message, args);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/MediaRange.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/MediaRange.java b/juneau-core/src/main/java/org/apache/juneau/MediaRange.java
index 8ef60fd..376fdee 100644
--- a/juneau-core/src/main/java/org/apache/juneau/MediaRange.java
+++ b/juneau-core/src/main/java/org/apache/juneau/MediaRange.java
@@ -109,7 +109,7 @@ public final class MediaRange implements Comparable<MediaRange>  {
 	/**
 	 * Returns the media type enclosed by this media range.
 	 *
-	 * <h6 class='topic'>Examples:</h6>
+	 * <h5 class='section'>Examples:</h5>
 	 * <ul>
 	 * 	<li><js>"text/html"</js>
 	 * 	<li><js>"text/*"</js>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/MediaType.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/MediaType.java b/juneau-core/src/main/java/org/apache/juneau/MediaType.java
index 6fa1819..4b54884 100644
--- a/juneau-core/src/main/java/org/apache/juneau/MediaType.java
+++ b/juneau-core/src/main/java/org/apache/juneau/MediaType.java
@@ -56,15 +56,17 @@ public final class MediaType {
 	 * The same media type strings always return the same objects so that these objects
 	 * can be compared for equality using '=='.
 	 * <p>
-	 * Note:  Spaces are replaced with <js>'+'</js> characters.
-	 * This gets around the issue where passing media type strings with <js>'+'</js> as HTTP GET parameters
-	 * 	get replaced with spaces by your browser.  Since spaces aren't supported by the spec, this
-	 * 	is doesn't break anything.
-	 * <p>
-	 * Anything including and following the <js>';'</js> character is ignored (e.g. <js>";charset=X"</js>).
+	 * <h5 class='section'>Notes:</h5>
+	 * <ul>
+	 * 	<li>Spaces are replaced with <js>'+'</js> characters.
+	 * 		This gets around the issue where passing media type strings with <js>'+'</js> as HTTP GET parameters
+	 * 		get replaced with spaces by your browser.  Since spaces aren't supported by the spec, this
+	 * 		is doesn't break anything.
+	 * 	<li>Anything including and following the <js>';'</js> character is ignored (e.g. <js>";charset=X"</js>).
+	 * </ul>
 	 *
 	 * @param s - The media type string.  Will be lowercased.
-	 * 	Returns <jk>null</jk> if input is null.
+	 * 	<br>Returns <jk>null</jk> if input is null.
 	 * @return A cached media type object.
 	 */
 	public static MediaType forString(String s) {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/ObjectList.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/ObjectList.java b/juneau-core/src/main/java/org/apache/juneau/ObjectList.java
index 908352c..d8526e8 100644
--- a/juneau-core/src/main/java/org/apache/juneau/ObjectList.java
+++ b/juneau-core/src/main/java/org/apache/juneau/ObjectList.java
@@ -32,7 +32,7 @@ import org.apache.juneau.utils.*;
  * 	constructor is provided for converting a JSON array string directly into a {@link List}.  It also contains
  * 	accessor methods for to avoid common typecasting when accessing elements in a list.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Construct an empty List</jc>
  * 	List l = <jk>new</jk> ObjectList();
@@ -456,7 +456,7 @@ public class ObjectList extends LinkedList<Object> {
 	 * <p>
 	 * See {@link BeanSession#convertToType(Object, ClassMeta)} for a description of valid conversions.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Iterate over a list of ObjectMaps.</jc>
 	 * 	ObjectList l = <jk>new</jk> ObjectList(<js>"[{foo:'bar'},{baz:123}]"</js>);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/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 5f54e5a..502189a 100644
--- a/juneau-core/src/main/java/org/apache/juneau/ObjectMap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/ObjectMap.java
@@ -36,7 +36,7 @@ import org.apache.juneau.utils.*;
  * 	constructor is provided for converting a JSON object string directly into a {@link Map}.  It also contains
  * 	accessor methods for to avoid common typecasting when accessing elements in a list.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Construct an empty Map</jc>
  * 	Map m = <jk>new</jk> ObjectMap();

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/PropertyNamerDashedLC.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/PropertyNamerDashedLC.java b/juneau-core/src/main/java/org/apache/juneau/PropertyNamerDashedLC.java
index 00b111f..6829262 100644
--- a/juneau-core/src/main/java/org/apache/juneau/PropertyNamerDashedLC.java
+++ b/juneau-core/src/main/java/org/apache/juneau/PropertyNamerDashedLC.java
@@ -15,7 +15,7 @@ package org.apache.juneau;
 /**
  * Converts property names to dashed-lower-case format.
  *
- * <h6 class='topic'>Examples:</h6>
+ * <h5 class='section'>Examples:</h5>
  * <ul>
  * 	<li><js>"fooBar"</js> -&gt; <js>"foo-bar"</js>
  * 	<li><js>"fooBarURL"</js> -&gt; <js>"foo-bar-url"</js>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/PropertyNamerDefault.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/PropertyNamerDefault.java b/juneau-core/src/main/java/org/apache/juneau/PropertyNamerDefault.java
index e5b6f9a..1a64676 100644
--- a/juneau-core/src/main/java/org/apache/juneau/PropertyNamerDefault.java
+++ b/juneau-core/src/main/java/org/apache/juneau/PropertyNamerDefault.java
@@ -17,7 +17,7 @@ import java.beans.*;
 /**
  * Default property namer.
  *
- * <h6 class='topic'>Examples:</h6>
+ * <h5 class='section'>Examples:</h5>
  * <ul>
  * 	<li><js>"fooBar"</js> -&gt; <js>"fooBar"</js>
  * 	<li><js>"fooBarURL"</js> -&gt; <js>"fooBarURL"</js>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/Session.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/Session.java b/juneau-core/src/main/java/org/apache/juneau/Session.java
index 3edcf80..fe33eb2 100644
--- a/juneau-core/src/main/java/org/apache/juneau/Session.java
+++ b/juneau-core/src/main/java/org/apache/juneau/Session.java
@@ -101,7 +101,7 @@ public abstract class Session {
 	 * Logs a warning message.
 	 *
 	 * @param msg The warning message.
-	 * @param args Optional printf arguments to replace in the error message.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public final void addWarning(String msg, Object... args) {
 		if (warnings == null)

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/Visibility.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/Visibility.java b/juneau-core/src/main/java/org/apache/juneau/Visibility.java
index d536100..59f9fee 100644
--- a/juneau-core/src/main/java/org/apache/juneau/Visibility.java
+++ b/juneau-core/src/main/java/org/apache/juneau/Visibility.java
@@ -46,7 +46,7 @@ public enum Visibility {
 	/**
 	 * Identifies if the specified mod matches this visibility.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <code>
 	 * 	<jsf>PUBLIC</jsf>.isVisible(MyPublicClass.<jk>class</jk>.getModifiers()); <jc>//true</jk>
 	 * 	<jsf>PUBLIC</jsf>.isVisible(MyPrivateClass.<jk>class</jk>.getModifiers()); <jc>//false</jk>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/annotation/Bean.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/annotation/Bean.java b/juneau-core/src/main/java/org/apache/juneau/annotation/Bean.java
index 03c2bd3..63ae64f 100644
--- a/juneau-core/src/main/java/org/apache/juneau/annotation/Bean.java
+++ b/juneau-core/src/main/java/org/apache/juneau/annotation/Bean.java
@@ -51,7 +51,7 @@ public @interface Bean {
 	 * 	a simple name/value mapping of names to classes.
 	 * Names do not need to be universally unique.  However, they must be unique within a dictionary.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<ja>@Bean</ja>(typeName=<js>"foo"</js>)
 	 * 	<jk>public class</jk> Foo {
@@ -98,7 +98,7 @@ public @interface Bean {
 	 * <p>
 	 * 	This annotation is an alternative to using the {@link BeanFilter} class with an implemented {@link BeanFilter#getProperties()} method.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Address class with only street/city/state properties (in that order).</jc>
 	 * 	<jc>// All other properties are ignored.</jc>
@@ -132,7 +132,7 @@ public @interface Bean {
 	 * <p>
 	 * 	This annotation is an alternative to using the {@link BeanFilter} class with an implemented {@link BeanFilter#getExcludeProperties()} method.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Address class with only street/city/state properties (in that order).</jc>
 	 * 	<jc>// All other properties are ignored.</jc>
@@ -152,7 +152,7 @@ public @interface Bean {
 	 * <p>
 	 * 	This annotation is an alternative to using the {@link BeanFilter} class with an implemented {@link BeanFilter#getPropertyNamer()} method.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Define a class with dashed-lowercase property names.</jc>
 	 * 	<ja>@Bean</ja>(propertyNamer=PropertyNamerDashedLC.<jk>class</jk>)

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/annotation/BeanProperty.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/annotation/BeanProperty.java b/juneau-core/src/main/java/org/apache/juneau/annotation/BeanProperty.java
index 3e4cc76..10e4919 100644
--- a/juneau-core/src/main/java/org/apache/juneau/annotation/BeanProperty.java
+++ b/juneau-core/src/main/java/org/apache/juneau/annotation/BeanProperty.java
@@ -67,7 +67,7 @@ public @interface BeanProperty {
 	 * <p>
 	 * 	This property must denote a concrete bean class with a no-arg constructor.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jk>public class</jk> MyBean {
 	 *
@@ -84,7 +84,7 @@ public @interface BeanProperty {
 	 * the class types of the contents of the bean property object when the generic parameter
 	 * types are interfaces or abstract classes.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jk>public class</jk> MyBean {
 	 *
@@ -106,7 +106,7 @@ public @interface BeanProperty {
 	 * Typically used for rendering {@link Date Dates} and {@link Calendar Calendars}
 	 * 	as a particular string format.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jk>public class</jk> MyClass {
 	 *
@@ -129,7 +129,7 @@ public @interface BeanProperty {
 	 * 	<li>Bean/Map collections - Same, but applied to each element in the collection.
 	 * </ul>
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jk>public class</jk> MyClass {
 	 *

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/annotation/Consumes.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/annotation/Consumes.java b/juneau-core/src/main/java/org/apache/juneau/annotation/Consumes.java
index 30c588e..867db1c 100644
--- a/juneau-core/src/main/java/org/apache/juneau/annotation/Consumes.java
+++ b/juneau-core/src/main/java/org/apache/juneau/annotation/Consumes.java
@@ -22,7 +22,7 @@ import org.apache.juneau.parser.*;
 /**
  * Annotation used on subclasses of {@link Parser} to identify the media types that it consumes.
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Provides a way to define the contents of {@link Parser#getMediaTypes()} through an annotation.
  * <p>
@@ -31,7 +31,7 @@ import org.apache.juneau.parser.*;
  * 	It should be noted that this annotation is optional and that the {@link Parser#getMediaTypes()} method can
  * 		be overridden by subclasses to return the media types programmatically.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p>
  * 	Standard example:
  * <p class='bcode'>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/annotation/Pojo.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/annotation/Pojo.java b/juneau-core/src/main/java/org/apache/juneau/annotation/Pojo.java
index 6180de4..0f0e821 100644
--- a/juneau-core/src/main/java/org/apache/juneau/annotation/Pojo.java
+++ b/juneau-core/src/main/java/org/apache/juneau/annotation/Pojo.java
@@ -38,7 +38,7 @@ public @interface Pojo {
 	 * 	<li>Any other class.  Will get interpreted as a {@link SurrogateSwap}.
 	 * </ul>
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p>
 	 * 	In this case, a swap is being applied to a bean that will force it to be serialized as a <code>String</code>
 	 * <p class='bcode'>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/annotation/Produces.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/annotation/Produces.java b/juneau-core/src/main/java/org/apache/juneau/annotation/Produces.java
index d4c77fb..2361734 100644
--- a/juneau-core/src/main/java/org/apache/juneau/annotation/Produces.java
+++ b/juneau-core/src/main/java/org/apache/juneau/annotation/Produces.java
@@ -22,7 +22,7 @@ import org.apache.juneau.serializer.*;
 /**
  * Annotation used on subclasses of {@link Serializer} to identify the media types that it produces.
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Provides a way to define the contents of {@link Serializer#getMediaTypes()} through an annotation.
  * <p>
@@ -31,7 +31,7 @@ import org.apache.juneau.serializer.*;
  * 	It should be noted that this annotation is optional and that the {@link Serializer#getMediaTypes()} method can
  * 		be overridden by subclasses to return the media types programmatically.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p>
  * 	Standard example:
  * <p class='bcode'>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/annotation/URI.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/annotation/URI.java b/juneau-core/src/main/java/org/apache/juneau/annotation/URI.java
index 45769f6..7e7c0ad 100644
--- a/juneau-core/src/main/java/org/apache/juneau/annotation/URI.java
+++ b/juneau-core/src/main/java/org/apache/juneau/annotation/URI.java
@@ -34,7 +34,7 @@ import org.apache.juneau.serializer.*;
  * <p>
  * 	This annotation can be applied to classes, interfaces, or bean property methods for fields.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  *
  * 	<jc>// Applied to a class whose toString() method returns a URI.</jc>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/dto/cognos/DataSet.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/cognos/DataSet.java b/juneau-core/src/main/java/org/apache/juneau/dto/cognos/DataSet.java
index 6a0bc5d..5a57e52 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/cognos/DataSet.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/cognos/DataSet.java
@@ -47,7 +47,7 @@ import org.apache.juneau.xml.annotation.*;
  * <p>
  * 	Only 2-dimentional POJOs (arrays or collections of maps or beans) can be serialized to Cognos.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p>
  * 	The construct shown above is a serialized <code>AddressBook</code> object which is a subclass of <code>LinkedList&lt;Person&gt;</code>.
  * 	The code for generating the XML is as follows...

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/JsonType.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/JsonType.java b/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/JsonType.java
index ed7da4a..3beae9e 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/JsonType.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/JsonType.java
@@ -19,7 +19,7 @@ package org.apache.juneau.dto.jsonschema;
  * 		that override the default serialization/parsing behavior of <code>Enum</code> types
  * 		so that they are represented in lowercase form (as per the specification).
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	// Produces 'number', not 'NUMBER'.
  * 	String json = JsonSerializer.DEFAULT.serialize(JsonType.NUMBER);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Contact.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Contact.java b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Contact.java
index 7e9115b..2996c19 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Contact.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Contact.java
@@ -17,7 +17,7 @@ import org.apache.juneau.annotation.*;
 /**
  * Contact information for the exposed API.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	{
  * 		<js>"name"</js>: <js>"API Support"</js>,

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/dto/swagger/ExternalDocumentation.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/ExternalDocumentation.java b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/ExternalDocumentation.java
index 01bd5d6..0c03be9 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/ExternalDocumentation.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/ExternalDocumentation.java
@@ -17,7 +17,7 @@ import org.apache.juneau.annotation.*;
 /**
  * Allows referencing an external resource for extended documentation.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	{
  * 		<js>"description"</js>: <js>"Find more info here"</js>,

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/dto/swagger/HeaderInfo.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/HeaderInfo.java b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/HeaderInfo.java
index 11b8d0c..9dad31f 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/HeaderInfo.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/HeaderInfo.java
@@ -21,7 +21,7 @@ import org.apache.juneau.json.*;
 /**
  * Describes a single HTTP header.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	{
  * 		<js>"description"</js>: <js>"The number of allowed requests in the current period"</js>,

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Info.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Info.java b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Info.java
index 31325bb..4041cc9 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Info.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Info.java
@@ -17,7 +17,7 @@ import org.apache.juneau.annotation.*;
 /**
  * The object provides metadata about the API. The metadata can be used by the clients if needed, and can be presented in the Swagger-UI for convenience.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	{
  * 		<js>"title"</js>: <js>"Swagger Sample App"</js>,

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Items.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Items.java b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Items.java
index 38b465c..91afdaf 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Items.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Items.java
@@ -21,7 +21,7 @@ import org.apache.juneau.json.*;
 /**
  * A limited subset of JSON-Schema's items object. It is used by parameter definitions that are not located in "body".
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	{
  * 		<js>"type"</js>: <js>"string"</js>,

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/dto/swagger/License.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/License.java b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/License.java
index 3b5ad8a..fdd8f27 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/License.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/License.java
@@ -17,7 +17,7 @@ import org.apache.juneau.annotation.*;
 /**
  * License information for the exposed API.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	{
  * 		<js>"name"</js>: <js>"Apache 2.0"</js>,

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Operation.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Operation.java b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Operation.java
index 28b031a..cc0fbe9 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Operation.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Operation.java
@@ -20,7 +20,7 @@ import org.apache.juneau.annotation.*;
 /**
  * Describes a single API operation on a path.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	{
  * 		<js>"tags"</js>: [

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/dto/swagger/ResponseInfo.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/ResponseInfo.java b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/ResponseInfo.java
index 68125aa..a95081e 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/ResponseInfo.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/ResponseInfo.java
@@ -19,7 +19,7 @@ import org.apache.juneau.annotation.*;
 /**
  * Describes a single response from an API Operation.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	{
  * 		<js>"description"</js>: <js>"A complex object array response"</js>,

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/dto/swagger/SecurityScheme.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/SecurityScheme.java b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/SecurityScheme.java
index 90979d7..d3d8c36 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/SecurityScheme.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/SecurityScheme.java
@@ -23,7 +23,7 @@ import org.apache.juneau.json.*;
  * <p>
  * Supported schemes are basic authentication, an API key (either as a header or as a query parameter) and OAuth2's common flows (implicit, password, application and access code).
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Basic authentication sample</jc>
  * 	{

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Tag.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Tag.java b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Tag.java
index dba2be3..fe5f979 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Tag.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/Tag.java
@@ -19,7 +19,7 @@ import org.apache.juneau.annotation.*;
  * <p>
  * It is not mandatory to have a Tag Object per tag used there.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	{
  * 		<js>"name"</js>: <js>"pet"</js>,

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/encoders/Encoder.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/encoders/Encoder.java b/juneau-core/src/main/java/org/apache/juneau/encoders/Encoder.java
index ef9cb63..6f7c488 100644
--- a/juneau-core/src/main/java/org/apache/juneau/encoders/Encoder.java
+++ b/juneau-core/src/main/java/org/apache/juneau/encoders/Encoder.java
@@ -17,7 +17,7 @@ import java.io.*;
 /**
  * Used for enabling decompression on requests and compression on responses, such as support for GZIP compression.
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Used to wrap input and output streams withing compression/decompression streams.
  * <p>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/encoders/EncoderGroup.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/encoders/EncoderGroup.java b/juneau-core/src/main/java/org/apache/juneau/encoders/EncoderGroup.java
index 3cb2050..a40a93a 100644
--- a/juneau-core/src/main/java/org/apache/juneau/encoders/EncoderGroup.java
+++ b/juneau-core/src/main/java/org/apache/juneau/encoders/EncoderGroup.java
@@ -24,7 +24,7 @@ import org.apache.juneau.serializer.*;
 /**
  * Represents the group of {@link Encoder encoders} keyed by codings.
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Maintains a set of encoders and the codings that they can handle.
  * <p>
@@ -42,7 +42,7 @@ import org.apache.juneau.serializer.*;
  * 	For example, calling <code>g.append(E1.<jk>class</jk>,E2.<jk>class</jk>).append(E3.<jk>class</jk>,E4.<jk>class</jk>)</code>
  * 	will result in the order <code>E3, E4, E1, E2</code>.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Create an encoder group with support for gzip compression.</jc>
  * 	EncoderGroup g = <jk>new</jk> EncoderGroup().append(GzipEncoder.<jk>class</jk>);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
index de30779..ce1ec10 100644
--- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
@@ -24,18 +24,18 @@ import org.apache.juneau.serializer.*;
 /**
  * Serializes POJOs to HTTP responses as HTML documents.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Accept</code> types: <code>text/html</code>
  * <p>
  * 	Produces <code>Content-Type</code> types: <code>text/html</code>
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Same as {@link HtmlSerializer}, except wraps the response in <code><xt>&lt;html&gt;</code>, <code><xt>&lt;head&gt;</code>,
  * 	and <code><xt>&lt;body&gt;</code> tags so that it can be rendered in a browser.
  *
- * <h6 class='topic'>Configurable properties</h6>
+ * <h5 class='section'>Configurable properties:</h5>
  * <p>
  * 	This class has the following properties associated with it:
  * <ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/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 64e1009..64d8e3a 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
@@ -22,7 +22,7 @@ import org.apache.juneau.*;
  * 	These are typically specified via <ja>@RestResource.properties()</ja> and <ja>@RestMethod.properties()</ja> annotations,
  * 		although they can also be set programmatically via the <code>RestResponse.setProperty()</code> method.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<ja>@RestResource</ja>(
  * 		messages=<js>"nls/AddressBookResource"</js>,
@@ -87,13 +87,13 @@ import org.apache.juneau.*;
  * 	</tr>
  * </table>
  *
- * <h6 class='topic'>Configurable properties inherited from parent classes</h6>
+ * <h5 class='section'>Inherited configurable properties:</h5>
  * <ul class='javahierarchy'>
- * 	<li class='c'><a class='doclink' href='../BeanContext.html#ConfigProperties'>BeanContext</a> - Properties associated with handling beans on serializers and parsers.
+ * 	<li class='c'><a class="doclink" href="../BeanContext.html#ConfigProperties">BeanContext</a> - Properties associated with handling beans on serializers and parsers.
  * 	<ul>
- * 		<li class='c'><a class='doclink' href='../serializer/SerializerContext.html#ConfigProperties'>SerializerContext</a> - Configurable properties common to all serializers.
+ * 		<li class='c'><a class="doclink" href="../serializer/SerializerContext.html#ConfigProperties">SerializerContext</a> - Configurable properties common to all serializers.
  * 		<ul>
- * 			<li class='c'><a class='doclink' href='../html/HtmlSerializerContext.html#ConfigProperties'>HtmlSerializerContext</a> - Configurable properties on the HTML serializer.
+ * 			<li class='c'><a class="doclink" href="../html/HtmlSerializerContext.html#ConfigProperties">HtmlSerializerContext</a> - Configurable properties on the HTML serializer.
  * 		</ul>
  * 	</ul>
  * </ul>
@@ -111,7 +111,7 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 	 * </ul>
 	 * <p>
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p>
 	 * 	The <code>AddressBookResource</code> sample class uses this property...
 	 * </p>
@@ -148,7 +148,7 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 	 * </ul>
 	 * <p>
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p>
 	 * 	The <code>AddressBookResource</code> sample class uses this property...
 	 * </p>
@@ -196,7 +196,7 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 	 * 	Absolute (<js>"/myOtherContext/foo"</js>) and fully-qualified (<js>"http://localhost2/foo"</js>) URLs
 	 * 		can also be used.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p>
 	 * 	The <code>AddressBookResource</code> sample class uses this property...
 	 * </p>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/html/HtmlParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlParser.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlParser.java
index 27ff24f..1242265 100644
--- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlParser.java
@@ -32,17 +32,17 @@ import org.apache.juneau.xml.*;
 /**
  * Parses text generated by the {@link HtmlSerializer} class back into a POJO model.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Content-Type</code> types: <code>text/html</code>
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	See the {@link HtmlSerializer} class for a description of the HTML generated.
  * <p>
  * 	This class is used primarily for automated testing of the {@link HtmlSerializer} class.
  *
- * <h6 class='topic'>Configurable properties</h6>
+ * <h5 class='section'>Configurable properties:</h5>
  * <p>
  * 	This class has the following properties associated with it:
  * <ul>
@@ -537,20 +537,19 @@ public final class HtmlParser extends XmlParser {
 	@Override /* Parser */
 	protected <T> T doParse(ParserSession session, ClassMeta<T> type) throws Exception {
 		HtmlParserSession s = (HtmlParserSession)session;
-		type = s.normalizeClassMeta(type);
 		return parseAnything(s, type, s.getXmlStreamReader(), s.getOuter(), true, null);
 	}
 
 	@Override /* ReaderParser */
 	protected <K,V> Map<K,V> doParseIntoMap(ParserSession session, Map<K,V> m, Type keyType, Type valueType) throws Exception {
 		HtmlParserSession s = (HtmlParserSession)session;
-		return parseIntoMap(s, s.getXmlStreamReader(), m, s.getClassMeta(keyType), s.getClassMeta(valueType), null);
+		return parseIntoMap(s, s.getXmlStreamReader(), m, (ClassMeta<K>)s.getClassMeta(keyType), (ClassMeta<V>)s.getClassMeta(valueType), null);
 	}
 
 	@Override /* ReaderParser */
 	protected <E> Collection<E> doParseIntoCollection(ParserSession session, Collection<E> c, Type elementType) throws Exception {
 		HtmlParserSession s = (HtmlParserSession)session;
-		return parseIntoCollection(s, s.getXmlStreamReader(), c, s.getClassMeta(elementType), null);
+		return parseIntoCollection(s, s.getXmlStreamReader(), c, (ClassMeta<E>)s.getClassMeta(elementType), null);
 	}
 
 	@Override /* ReaderParser */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/html/HtmlParserContext.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlParserContext.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlParserContext.java
index a362bdc..2a1eca6 100644
--- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlParserContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlParserContext.java
@@ -38,11 +38,11 @@ import org.apache.juneau.xml.*;
  * <p>
  * 	None.
  *
- * <h6 class='topic'>Configurable properties inherited from parent classes</h6>
+ * <h5 class='section'>Inherited configurable properties:</h5>
  * <ul class='javahierarchy'>
- * 	<li class='c'><a class='doclink' href='../BeanContext.html#ConfigProperties'>BeanContext</a> - Properties associated with handling beans on serializers and parsers.
+ * 	<li class='c'><a class="doclink" href="../BeanContext.html#ConfigProperties">BeanContext</a> - Properties associated with handling beans on serializers and parsers.
  * 	<ul>
- * 		<li class='c'><a class='doclink' href='../parser/ParserContext.html#ConfigProperties'>ParserContext</a> - Configurable properties common to all parsers.
+ * 		<li class='c'><a class="doclink" href="../parser/ParserContext.html#ConfigProperties">ParserContext</a> - Configurable properties common to all parsers.
  * 	</ul>
  * </ul>
  */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java
index 1c481f5..4d46043 100644
--- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java
@@ -26,13 +26,13 @@ import org.apache.juneau.transform.*;
 /**
  * Serializes POJO metamodels to HTML.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Accept</code> types: <code>text/html+schema</code>
  * <p>
  * 	Produces <code>Content-Type</code> types: <code>text/html</code>
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Essentially the same as {@link HtmlSerializer}, except serializes the POJO metamodel
  * 		instead of the model itself.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/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 8828409..996333b 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
@@ -29,13 +29,13 @@ import org.apache.juneau.xml.annotation.*;
 /**
  * Serializes POJO models to HTML.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Accept</code> types: <code>text/html</code>
  * <p>
  * 	Produces <code>Content-Type</code> types: <code>text/html</code>
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	The conversion is as follows...
  * 	<ul class='spaced-list'>
@@ -50,7 +50,7 @@ import org.apache.juneau.xml.annotation.*;
  * <p>
  * 	The {@link HtmlLink} annotation can be used on beans to add hyperlinks to the output.
  *
- * <h6 class='topic'>Configurable properties</h6>
+ * <h5 class='section'>Configurable properties:</h5>
  * <p>
  * 	This class has the following properties associated with it:
  * <ul class='spaced-list'>
@@ -65,7 +65,7 @@ import org.apache.juneau.xml.annotation.*;
  * 	<li>{@link SqReadable} - Default serializer, single quotes, whitespace added.
  * </ul>
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	<jc>// Use one of the default serializers to serialize a POJO</jc>
  * 		String html = HtmlSerializer.<jsf>DEFAULT</jsf>.serialize(someObject);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializerContext.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializerContext.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializerContext.java
index 59be25e..2179a5e 100644
--- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializerContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializerContext.java
@@ -67,11 +67,11 @@ import org.apache.juneau.xml.*;
  * 	</tr>
  * </table>
  *
- * <h6 class='topic'>Configurable properties inherited from parent classes</h6>
+ * <h5 class='section'>Inherited configurable properties:</h5>
  * <ul class='javahierarchy'>
- * 	<li class='c'><a class='doclink' href='../BeanContext.html#ConfigProperties'>BeanContext</a> - Properties associated with handling beans on serializers and parsers.
+ * 	<li class='c'><a class="doclink" href="../BeanContext.html#ConfigProperties">BeanContext</a> - Properties associated with handling beans on serializers and parsers.
  * 	<ul>
- * 		<li class='c'><a class='doclink' href='../serializer/SerializerContext.html#ConfigProperties'>SerializerContext</a> - Configurable properties common to all serializers.
+ * 		<li class='c'><a class="doclink" href="../serializer/SerializerContext.html#ConfigProperties">SerializerContext</a> - Configurable properties common to all serializers.
  * 	</ul>
  * </ul>
  */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java
index a1c2495..168b648 100644
--- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java
@@ -21,13 +21,13 @@ import org.apache.juneau.serializer.*;
 /**
  * Serializes POJOs to HTTP responses as stripped HTML.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Accept</code> types: <code>text/html+stripped</code>
  * <p>
  * 	Produces <code>Content-Type</code> types: <code>text/html</code>
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Produces the same output as {@link HtmlDocSerializer}, but without the header and body tags and page title and description.
  * 	Used primarily for JUnit testing the {@link HtmlDocSerializer} class.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/html/SimpleHtmlWriter.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/html/SimpleHtmlWriter.java b/juneau-core/src/main/java/org/apache/juneau/html/SimpleHtmlWriter.java
index acc069c..2ae07f8 100644
--- a/juneau-core/src/main/java/org/apache/juneau/html/SimpleHtmlWriter.java
+++ b/juneau-core/src/main/java/org/apache/juneau/html/SimpleHtmlWriter.java
@@ -17,7 +17,7 @@ import java.io.*;
 /**
  * Utility class for creating custom HTML.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	String table = <jk>new</jk> SimpleHtmlWriter().sTag(<js>"table"</js>).sTag(<js>"tr"</js>).sTag(<js>"td"</js>).append(<js>"hello"</js>).eTag(<js>"td"</js>).eTag(<js>"tr"</js>).eTag(<js>"table"</js>).toString();
  * </p>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/ini/ConfigFile.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/ini/ConfigFile.java b/juneau-core/src/main/java/org/apache/juneau/ini/ConfigFile.java
index 7ae2f3e..70006c6 100644
--- a/juneau-core/src/main/java/org/apache/juneau/ini/ConfigFile.java
+++ b/juneau-core/src/main/java/org/apache/juneau/ini/ConfigFile.java
@@ -355,7 +355,7 @@ public abstract class ConfigFile implements Map<String,Section> {
 	 * <p>
 	 * <js>"M"</js> and <js>"K"</js> can be used to identify millions and thousands.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <ul class='spaced-list'>
 	 * 	<li><code><js>"100K"</js> => 1024000</code>
 	 * 	<li><code><js>"100M"</js> => 104857600</code>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/ini/ConfigMgr.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/ini/ConfigMgr.java b/juneau-core/src/main/java/org/apache/juneau/ini/ConfigMgr.java
index d65e95f..7188624 100644
--- a/juneau-core/src/main/java/org/apache/juneau/ini/ConfigMgr.java
+++ b/juneau-core/src/main/java/org/apache/juneau/ini/ConfigMgr.java
@@ -28,7 +28,7 @@ import org.apache.juneau.utils.*;
 /**
  * Manager for retrieving shared instances of {@link ConfigFile ConfigFiles}.
  *
- * <h6 class='topic'>Example:</h6>
+ * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  * 	ConfigFile cf = ConfigMgr.<jsf>DEFAULT</jsf>.get(<js>"MyConfig.cfg"</js>);
  * 	String setting = cf.get(<js>"MySection/mysetting"</js>);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/internal/ClassUtils.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/internal/ClassUtils.java b/juneau-core/src/main/java/org/apache/juneau/internal/ClassUtils.java
index fc063bc..cc4b2a2 100644
--- a/juneau-core/src/main/java/org/apache/juneau/internal/ClassUtils.java
+++ b/juneau-core/src/main/java/org/apache/juneau/internal/ClassUtils.java
@@ -63,7 +63,7 @@ public final class ClassUtils {
 	/**
 	 * Converts the specified class name to a readable form when class name is a special construct like <js>"[[Z"</js>.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jsm>getReadableClassName</jsm>(<js>"java.lang.Object"</js>);  <jc>// Returns "java.lang.Object"</jc>
 	 * 	<jsm>getReadableClassName</jsm>(<js>"boolean"</js>);  <jc>// Returns "boolean"</jc>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/internal/IdentityList.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/internal/IdentityList.java b/juneau-core/src/main/java/org/apache/juneau/internal/IdentityList.java
index 01c87a5..b3db4ba 100644
--- a/juneau-core/src/main/java/org/apache/juneau/internal/IdentityList.java
+++ b/juneau-core/src/main/java/org/apache/juneau/internal/IdentityList.java
@@ -21,8 +21,10 @@ import java.util.*;
  * 	<li>Order of insertion maintained.
  * </ul>
  * <p>
- * 	Note:  This class is NOT thread safe, and is intended for use on small lists.
- *
+ * <h5 class='section'>Notes:</h5>
+ * <ul>
+ * 	<li>This class is NOT thread safe, and is intended for use on small lists.
+ * </ul>
  * @param <T> Entry type.
  */
 public class IdentityList<T> extends LinkedList<T> {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/internal/JuneauLogger.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/internal/JuneauLogger.java b/juneau-core/src/main/java/org/apache/juneau/internal/JuneauLogger.java
index 87bb07b..b2a1e29 100644
--- a/juneau-core/src/main/java/org/apache/juneau/internal/JuneauLogger.java
+++ b/juneau-core/src/main/java/org/apache/juneau/internal/JuneauLogger.java
@@ -97,10 +97,10 @@ public class JuneauLogger extends java.util.logging.Logger {
 	}
 
 	/**
-     * Logs a message with the specified {@link MessageFormat}-style arguments at {@link Level#SEVERE} level.
-     *
-     * @param msg The message to log.
-     * @param args The {@link MessageFormat}-style arguments.
+	 * Logs a message with the specified {@link MessageFormat}-style arguments at {@link Level#SEVERE} level.
+	 *
+	 * @param msg The message to log.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public void severe(String msg, Object...args) {
 		if (isLoggable(SEVERE))
@@ -108,10 +108,10 @@ public class JuneauLogger extends java.util.logging.Logger {
 	}
 
 	/**
-    * Logs a message with the specified {@link MessageFormat}-style arguments at {@link Level#WARNING} level.
-    *
-    * @param msg The message to log.
-    * @param args The {@link MessageFormat}-style arguments.
+	 * Logs a message with the specified {@link MessageFormat}-style arguments at {@link Level#WARNING} level.
+	 *
+	 * @param msg The message to log.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public void warning(String msg, Object...args) {
 		if (isLoggable(WARNING))
@@ -119,10 +119,10 @@ public class JuneauLogger extends java.util.logging.Logger {
 	}
 
 	/**
-    * Logs a message with the specified {@link MessageFormat}-style arguments at {@link Level#INFO} level.
-    *
-    * @param msg The message to log.
-    * @param args The {@link MessageFormat}-style arguments.
+	 * Logs a message with the specified {@link MessageFormat}-style arguments at {@link Level#INFO} level.
+	 * 
+	 * @param msg The message to log.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public void info(String msg, Object...args) {
 		if (isLoggable(INFO))
@@ -130,10 +130,10 @@ public class JuneauLogger extends java.util.logging.Logger {
 	}
 
 	/**
-    * Logs a message with the specified {@link MessageFormat}-style arguments at {@link Level#CONFIG} level.
-    *
-    * @param msg The message to log.
-    * @param args The {@link MessageFormat}-style arguments.
+	 * Logs a message with the specified {@link MessageFormat}-style arguments at {@link Level#CONFIG} level.
+	 * 
+	 * @param msg The message to log.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public void config(String msg, Object...args) {
 		if (isLoggable(CONFIG))
@@ -141,10 +141,10 @@ public class JuneauLogger extends java.util.logging.Logger {
 	}
 
 	/**
-    * Logs a message with the specified {@link MessageFormat}-style arguments at {@link Level#FINE} level.
-    *
-    * @param msg The message to log.
-    * @param args The {@link MessageFormat}-style arguments.
+	 * Logs a message with the specified {@link MessageFormat}-style arguments at {@link Level#FINE} level.
+	 * 
+	 * @param msg The message to log.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public void fine(String msg, Object...args) {
 		if (isLoggable(FINE))
@@ -152,10 +152,10 @@ public class JuneauLogger extends java.util.logging.Logger {
 	}
 
 	/**
-    * Logs a message with the specified {@link MessageFormat}-style arguments at {@link Level#FINER} level.
-    *
-    * @param msg The message to log.
-    * @param args The {@link MessageFormat}-style arguments.
+	 * Logs a message with the specified {@link MessageFormat}-style arguments at {@link Level#FINER} level.
+	 * 
+	 * @param msg The message to log.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public void finer(String msg, Object...args) {
 		if (isLoggable(FINER))
@@ -163,10 +163,10 @@ public class JuneauLogger extends java.util.logging.Logger {
 	}
 
 	/**
-    * Logs a message with the specified {@link MessageFormat}-style arguments at {@link Level#FINEST} level.
-    *
-    * @param msg The message to log.
-    * @param args The {@link MessageFormat}-style arguments.
+	 * Logs a message with the specified {@link MessageFormat}-style arguments at {@link Level#FINEST} level.
+	 * 
+	 * @param msg The message to log.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public void finest(String msg, Object...args) {
 		if (isLoggable(FINEST))
@@ -174,7 +174,7 @@ public class JuneauLogger extends java.util.logging.Logger {
 	}
 
 	/**
-    * Logs an exception as {@link Level#SEVERE} level.
+	 * Logs an exception as {@link Level#SEVERE} level.
 	 *
 	 * @param t The Throwable object to log.
 	 */
@@ -184,7 +184,7 @@ public class JuneauLogger extends java.util.logging.Logger {
 	}
 
 	/**
-    * Logs an exception as {@link Level#WARNING} level.
+	 * Logs an exception as {@link Level#WARNING} level.
 	 *
 	 * @param t The Throwable object to log.
 	 */
@@ -194,11 +194,11 @@ public class JuneauLogger extends java.util.logging.Logger {
 	}
 
 	/**
-    * Logs a message with the specified {@link MessageFormat}-style arguments at {@link Level#SEVERE} level.
+	 * Logs a message with the specified {@link MessageFormat}-style arguments at {@link Level#SEVERE} level.
 	 *
 	 * @param t The Throwable object associated with the event that needs to be logged.
-    * @param msg The message to log.
-    * @param args The {@link MessageFormat}-style arguments.
+	 * @param msg The message to log.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public void severe(Throwable t, String msg, Object...args) {
 		if (isLoggable(SEVERE))
@@ -206,11 +206,11 @@ public class JuneauLogger extends java.util.logging.Logger {
 	}
 
 	/**
-    * Logs a message with the specified {@link MessageFormat}-style arguments at {@link Level#WARNING} level.
+	 * Logs a message with the specified {@link MessageFormat}-style arguments at {@link Level#WARNING} level.
 	 *
 	 * @param t The Throwable object associated with the event that needs to be logged.
-    * @param msg The message to log.
-    * @param args The {@link MessageFormat}-style arguments.
+	 * @param msg The message to log.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public void warning(Throwable t, String msg, Object...args) {
 		if (isLoggable(WARNING))
@@ -218,35 +218,35 @@ public class JuneauLogger extends java.util.logging.Logger {
 	}
 
 	/**
-    * Logs a message with the specified {@link MessageFormat}-style arguments at {@link Level#INFO} level.
+	 * Logs a message with the specified {@link MessageFormat}-style arguments at {@link Level#INFO} level.
 	 *
 	 * @param t The Throwable object associated with the event that needs to be logged.
-    * @param msg The message to log.
-    * @param args The {@link MessageFormat}-style arguments.
+	 * @param msg The message to log.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 */
 	public void info(Throwable t, String msg, Object...args) {
 		if (isLoggable(INFO))
 			log(INFO, getMessage(msg, args), t);
 	}
 
-   @Override /* Logger */
+	@Override /* Logger */
 	public void log(LogRecord record) {
-   	innerLogger.log(record);
-   }
+		innerLogger.log(record);
+	}
 
-   @Override /* Logger */
+	@Override /* Logger */
 	public boolean isLoggable(Level level) {
-   	return innerLogger.isLoggable(level);
-   }
+		return innerLogger.isLoggable(level);
+	}
 
 	/**
-    * Similar to {@link #log(Level, String, Object[])}, except arguments are converted to objects
-    * 	that are serialized using the {@link JsonSerializer#toStringObject(Object)} method.
-    * This allows arbitrary POJOs to be serialized as message parameters.
+	 * Similar to {@link #log(Level, String, Object[])}, except arguments are converted to objects
+	 * that are serialized using the {@link JsonSerializer#toStringObject(Object)} method.
+	 * This allows arbitrary POJOs to be serialized as message parameters.
 	 *
 	 * @param level The level of the given message.
-    * @param msg The message to log.
-    * @param args The POJO arguments.
+	 * @param msg The message to log.
+	 * @param args The POJO arguments.
 	 */
 	public void logObjects(Level level, String msg, Object...args) {
 		if (isLoggable(level)) {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/internal/StringUtils.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/internal/StringUtils.java b/juneau-core/src/main/java/org/apache/juneau/internal/StringUtils.java
index 8fd3928..0831df4 100644
--- a/juneau-core/src/main/java/org/apache/juneau/internal/StringUtils.java
+++ b/juneau-core/src/main/java/org/apache/juneau/internal/StringUtils.java
@@ -453,7 +453,7 @@ public final class StringUtils {
 	 * Splits a character-delimited string into a string array.
 	 * Does not split on escaped-delimiters (e.g. "\,");
 	 * Resulting tokens are trimmed of whitespace.
-	 * NOTE:  This behavior is different than the Jakarta equivalent.
+	 * <b>NOTE:</b>  This behavior is different than the Jakarta equivalent.
 	 * split("a,b,c",',') -> {"a","b","c"}
 	 * split("a, b ,c ",',') -> {"a","b","c"}
 	 * split("a,,c",',') -> {"a","","c"}
@@ -783,7 +783,7 @@ public final class StringUtils {
 	/**
 	 * Generated a random UUID with the specified number of characters.
 	 * Characters are composed of lower-case ASCII letters and numbers only.
-	 * This method conforms to the restrictions for hostnames as specified in <a href='https://tools.ietf.org/html/rfc952'>RFC 952</a>
+	 * This method conforms to the restrictions for hostnames as specified in <a class="doclink" href="https://tools.ietf.org/html/rfc952">RFC 952</a>
 	 * Since each character has 36 possible values, the square approximation formula for
 	 * 	the number of generated IDs that would produce a 50% chance of collision is:
 	 * <code>sqrt(36^N)</code>.
@@ -918,7 +918,7 @@ public final class StringUtils {
 	/**
 	 * Returns <jk>true</jk> if the specified path string is prefixed with the specified prefix.
 	 *
-	 * <h6 class='topic'>Example:</h6>
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	pathStartsWith(<js>"foo"</js>, <js>"foo"</js>);  <jc>// true</jc>
 	 * 	pathStartsWith(<js>"foo/bar"</js>, <js>"foo"</js>);  <jc>// true</jc>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/internal/ThrowableUtils.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/internal/ThrowableUtils.java b/juneau-core/src/main/java/org/apache/juneau/internal/ThrowableUtils.java
index 4f87f22..84d6f19 100644
--- a/juneau-core/src/main/java/org/apache/juneau/internal/ThrowableUtils.java
+++ b/juneau-core/src/main/java/org/apache/juneau/internal/ThrowableUtils.java
@@ -24,7 +24,7 @@ public class ThrowableUtils {
 	 *
 	 * @param o The object to check.
 	 * @param msg The message of the IllegalArgumentException.
-	 * @param args {@link MessageFormat}-style arguments in the message.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 * @throws IllegalArgumentException
 	 */
 	public static void assertNotNull(Object o, String msg, Object...args) throws IllegalArgumentException {
@@ -60,7 +60,7 @@ public class ThrowableUtils {
 	 * Shortcut for calling <code><jk>new</jk> IllegalArgumentException(MessageFormat.<jsm>format</jsm>(msg, args));</code>
 	 *
 	 * @param msg The message of the IllegalArgumentException.
-	 * @param args {@link MessageFormat}-style arguments in the message.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 * @throws IllegalArgumentException
 	 */
 	public static void illegalArg(String msg, Object...args) throws IllegalArgumentException {
@@ -72,7 +72,7 @@ public class ThrowableUtils {
 	 *
 	 * @param threadId The ID of the thread to compare against.
 	 * @param msg The message of the IllegalStateException.
-	 * @param args {@link IllegalStateException}-style arguments in the message.
+	 * @param args Optional {@link MessageFormat}-style arguments.
 	 * @throws IllegalStateException
 	 */
 	public static void assertSameThread(long threadId, String msg, Object...args) throws IllegalStateException {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/jso/JavaSerializedObjectParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/jso/JavaSerializedObjectParser.java b/juneau-core/src/main/java/org/apache/juneau/jso/JavaSerializedObjectParser.java
index 665d0ab..88cc42b 100644
--- a/juneau-core/src/main/java/org/apache/juneau/jso/JavaSerializedObjectParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/jso/JavaSerializedObjectParser.java
@@ -21,7 +21,7 @@ import org.apache.juneau.parser.*;
 /**
  * Parses POJOs from HTTP responses as Java {@link ObjectInputStream ObjectInputStreams}.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Consumes <code>Content-Type</code> types: <code>application/x-java-serialized-object</code>
  */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/jso/JavaSerializedObjectSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/jso/JavaSerializedObjectSerializer.java b/juneau-core/src/main/java/org/apache/juneau/jso/JavaSerializedObjectSerializer.java
index 02716b4..1e1e8e8 100644
--- a/juneau-core/src/main/java/org/apache/juneau/jso/JavaSerializedObjectSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/jso/JavaSerializedObjectSerializer.java
@@ -20,7 +20,7 @@ import org.apache.juneau.serializer.*;
 /**
  * Serializes POJOs to HTTP responses as Java {@link ObjectOutputStream ObjectOutputStreams}.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Accept</code> types: <code>application/x-java-serialized-object</code>
  * <p>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/json/JsonParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/json/JsonParser.java b/juneau-core/src/main/java/org/apache/juneau/json/JsonParser.java
index da204bc..0086a78 100644
--- a/juneau-core/src/main/java/org/apache/juneau/json/JsonParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/json/JsonParser.java
@@ -28,11 +28,11 @@ import org.apache.juneau.transform.*;
 /**
  * Parses any valid JSON text into a POJO model.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Content-Type</code> types: <code>application/json, text/json</code>
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	This parser uses a state machine, which makes it very fast and efficient.  It parses JSON in about 70% of the
  * 	time that it takes the built-in Java DOM parsers to parse equivalent XML.
@@ -50,7 +50,7 @@ import org.apache.juneau.transform.*;
  * 	This parser handles the following input, and automatically returns the corresponding Java class.
  * 	<ul class='spaced-list'>
  * 		<li> JSON objects (<js>"{...}"</js>) are converted to {@link ObjectMap ObjectMaps}.  <br>
- * 				Note:  If a <code><xa>_type</xa>=<xs>'xxx'</xs></code> attribute is specified on the object, then an attempt is made to convert the object
+ * 				<b>Note:</b>  If a <code><xa>_type</xa>=<xs>'xxx'</xs></code> attribute is specified on the object, then an attempt is made to convert the object
  * 				to an instance of the specified Java bean class.  See the classProperty setting on the {@link ContextFactory} for more information
  * 				about parsing beans from JSON.
  * 		<li> JSON arrays (<js>"[...]"</js>) are converted to {@link ObjectList ObjectLists}.
@@ -77,7 +77,7 @@ import org.apache.juneau.transform.*;
  * 	TIP:  If you know you're parsing a JSON object or array, it can be easier to parse it using the {@link ObjectMap#ObjectMap(CharSequence) ObjectMap(CharSequence)}
  * 		or {@link ObjectList#ObjectList(CharSequence) ObjectList(CharSequence)} constructors instead of using this class.  The end result should be the same.
  *
- * <h6 class='topic'>Configurable properties</h6>
+ * <h5 class='section'>Configurable properties:</h5>
  * <p>
  * 	This class has the following properties associated with it:
  * <ul>
@@ -786,7 +786,6 @@ public final class JsonParser extends ReaderParser {
 	@Override /* Parser */
 	protected <T> T doParse(ParserSession session, ClassMeta<T> type) throws Exception {
 		JsonParserSession s = (JsonParserSession)session;
-		type = s.normalizeClassMeta(type);
 		ParserReader r = s.getReader();
 		if (r == null)
 			return null;
@@ -799,7 +798,7 @@ public final class JsonParser extends ReaderParser {
 	protected <K,V> Map<K,V> doParseIntoMap(ParserSession session, Map<K,V> m, Type keyType, Type valueType) throws Exception {
 		JsonParserSession s = (JsonParserSession)session;
 		ParserReader r = s.getReader();
-		m = parseIntoMap2(s, r, m, s.getClassMeta(keyType), s.getClassMeta(valueType), null);
+		m = parseIntoMap2(s, r, m, (ClassMeta<K>)s.getClassMeta(keyType), (ClassMeta<V>)s.getClassMeta(valueType), null);
 		validateEnd(s, r);
 		return m;
 	}
@@ -808,7 +807,7 @@ public final class JsonParser extends ReaderParser {
 	protected <E> Collection<E> doParseIntoCollection(ParserSession session, Collection<E> c, Type elementType) throws Exception {
 		JsonParserSession s = (JsonParserSession)session;
 		ParserReader r = s.getReader();
-		c = parseIntoCollection2(s, r, c, s.getClassMeta(elementType), null);
+		c = parseIntoCollection2(s, r, c, (ClassMeta<E>)s.getClassMeta(elementType), null);
 		validateEnd(s, r);
 		return c;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/json/JsonParserContext.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/json/JsonParserContext.java b/juneau-core/src/main/java/org/apache/juneau/json/JsonParserContext.java
index f397af9..360a743 100644
--- a/juneau-core/src/main/java/org/apache/juneau/json/JsonParserContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/json/JsonParserContext.java
@@ -36,13 +36,13 @@ import org.apache.juneau.parser.*;
  *
  * <h6 class='topic' id='ConfigProperties'>Configurable properties on the JSON parser</h6>
  * <p>
- * 	None.
+ * None.
  *
- * <h6 class='topic'>Configurable properties inherited from parent classes</h6>
+ * <h5 class='section'>Inherited configurable properties:</h5>
  * <ul class='javahierarchy'>
- * 	<li class='c'><a class='doclink' href='../BeanContext.html#ConfigProperties'>BeanContext</a> - Properties associated with handling beans on serializers and parsers.
+ * 	<li class='c'><a class="doclink" href="../BeanContext.html#ConfigProperties">BeanContext</a> - Properties associated with handling beans on serializers and parsers.
  * 	<ul>
- * 		<li class='c'><a class='doclink' href='../parser/ParserContext.html#ConfigProperties'>ParserContext</a> - Configurable properties common to all parsers.
+ * 		<li class='c'><a class="doclink" href="../parser/ParserContext.html#ConfigProperties">ParserContext</a> - Configurable properties common to all parsers.
  * 	</ul>
  * </ul>
  */
@@ -63,6 +63,6 @@ public final class JsonParserContext extends ParserContext {
 	public ObjectMap asMap() {
 		return super.asMap()
 			.append("JsonParserContext", new ObjectMap()
-			);
+		);
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30dd3b93/juneau-core/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java b/juneau-core/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java
index 4b2b6d1..8826b29 100644
--- a/juneau-core/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java
@@ -25,13 +25,13 @@ import org.apache.juneau.transform.*;
 /**
  * Serializes POJO metadata to HTTP responses as JSON.
  *
- * <h6 class='topic'>Media types</h6>
+ * <h5 class='section'>Media types:</h5>
  * <p>
  * 	Handles <code>Accept</code> types: <code>application/json+schema, text/json+schema</code>
  * <p>
  * 	Produces <code>Content-Type</code> types: <code>application/json</code>
  *
- * <h6 class='topic'>Description</h6>
+ * <h5 class='section'>Description:</h5>
  * <p>
  * 	Produces the JSON-schema for the JSON produced by the {@link JsonSerializer} class with the same properties.
  */