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/06/10 20:19:53 UTC

[1/4] incubator-juneau git commit: Add branding capability to HtmlDocSerializer and REST servlet.

Repository: incubator-juneau
Updated Branches:
  refs/heads/master e6998a7ea -> 6dccf6039


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-rest/src/main/java/org/apache/juneau/rest/RestConfig.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestConfig.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestConfig.java
index 234cabf..3845e2c 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestConfig.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestConfig.java
@@ -107,8 +107,8 @@ public class RestConfig implements ServletConfig {
 	Object favIcon;
 	List<Object> staticFiles;
 	RestContext parentContext;
-	String path, htmlTitle, htmlDescription, htmlLinks, htmlHeader, htmlNav, htmlAside, htmlFooter, htmlCss, htmlCssUrl,
-		htmlNoResultsMessage;
+	String path, htmlTitle, htmlDescription, htmlBranding, htmlLinks, htmlHeader, htmlNav, htmlAside, htmlFooter,
+		htmlCss, htmlCssUrl, htmlNoResultsMessage;
 	String clientVersionHeader = "X-Client-Version";
 
 	Object resourceResolver = RestResourceResolver.class;
@@ -221,6 +221,8 @@ public class RestConfig implements ServletConfig {
 					setHtmlTitle(hd.title());
 				if (! hd.description().isEmpty())
 					setHtmlDescription(hd.description());
+				if (! hd.branding().isEmpty())
+					setHtmlBranding(hd.branding());
 				if (! hd.header().isEmpty())
 					setHtmlHeader(hd.header());
 				if (! hd.links().isEmpty())
@@ -1132,6 +1134,27 @@ public class RestConfig implements ServletConfig {
 	}
 
 	/**
+	 * Sets the HTML page branding in the header section of the page generated by the default HTML doc template.
+	 * <p>
+	 * The format of this value is HTML.
+	 * <p>
+	 * This is arbitrary HTML that can be added to the header section to provide basic custom branding on the page.
+	 * <p>
+	 * This field can contain variables (e.g. <js>"$L{my.localized.variable}"</js>).
+	 * <p>
+	 * A value of <js>"NONE"</js> can be used to force no value.
+	 * <p>
+	 * This is the programmatic equivalent to the {@link HtmlDoc#branding() @HtmlDoc.branding()} annotation.
+	 *
+	 * @param value The HTML page branding.
+	 * @return This object (for method chaining).
+	 */
+	public RestConfig setHtmlBranding(String value) {
+		this.htmlBranding = value;
+		return this;
+	}
+
+	/**
 	 * Sets the HTML header section contents.
 	 * <p>
 	 * The format of this value is HTML.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java
index 7fc0a94..f14a271 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -304,6 +304,7 @@ public final class RestContext extends Context {
 		fullPath,
 		htmlTitle,
 		htmlDescription,
+		htmlBranding,
 		htmlHeader,
 		htmlLinks,
 		htmlNav,
@@ -417,6 +418,7 @@ public final class RestContext extends Context {
 
 			this.htmlTitle = b.htmlTitle;
 			this.htmlDescription = b.htmlDescription;
+			this.htmlBranding = b.htmlBranding;
 			this.htmlHeader = b.htmlHeader;
 			this.htmlLinks = b.htmlLinks;
 			this.htmlNav = b.htmlNav;
@@ -600,8 +602,8 @@ public final class RestContext extends Context {
 		UrlEncodingSerializer urlEncodingSerializer;
 		UrlEncodingParser urlEncodingParser;
 		EncoderGroup encoders;
-		String clientVersionHeader = "", defaultCharset, paramFormat, htmlTitle, htmlDescription, htmlHeader, htmlLinks,
-			htmlNav, htmlAside, htmlCss, htmlCssUrl, htmlFooter, htmlNoResultsMessage;
+		String clientVersionHeader = "", defaultCharset, paramFormat, htmlTitle, htmlDescription, htmlBranding,
+			htmlHeader, htmlLinks, htmlNav, htmlAside, htmlCss, htmlCssUrl, htmlFooter, htmlNoResultsMessage;
 		boolean htmlNoWrap;
 		HtmlDocTemplate htmlTemplate;
 
@@ -753,6 +755,7 @@ public final class RestContext extends Context {
 
 			htmlTitle = sc.htmlTitle;
 			htmlDescription = sc.htmlDescription;
+			htmlBranding = sc.htmlBranding;
 			htmlHeader = sc.htmlHeader;
 			htmlLinks = sc.htmlLinks;
 			htmlNav = sc.htmlNav;
@@ -1006,6 +1009,17 @@ public final class RestContext extends Context {
 	}
 
 	/**
+	 * The HTML page branding.
+	 * <p>
+	 * Defined by the {@link HtmlDoc#branding()} annotation or {@link RestConfig#setHtmlBranding(String)} method.
+	 *
+	 * @return The HTML page description.
+	 */
+	public String getHtmlBranding() {
+		return htmlBranding;
+	}
+
+	/**
 	 * The HTML page header contents.
 	 * <p>
 	 * Defined by the {@link HtmlDoc#header()} annotation or {@link RestConfig#setHtmlHeader(String)} method.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-rest/src/main/java/org/apache/juneau/rest/RestParamDefaults.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestParamDefaults.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestParamDefaults.java
index d75e613..dafc17e 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestParamDefaults.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestParamDefaults.java
@@ -108,6 +108,8 @@ class RestParamDefaults {
 			RequestPathMatchObject.class,
 			RequestBodyObject.class,
 			ConfigFileObject.class,
+			UriContextObject.class,
+			UriResolverObject.class,
 		};
 
 		for (Class<?> c : r) {
@@ -938,6 +940,30 @@ class RestParamDefaults {
 		}
 	}
 
+	static final class UriContextObject extends RestParam {
+
+		protected UriContextObject() {
+			super(OTHER, null, UriContext.class);
+		}
+
+		@Override /* RestParam */
+		public Object resolve(RestRequest req, RestResponse res) throws Exception {
+			return req.getUriContext();
+		}
+	}
+
+	static final class UriResolverObject extends RestParam {
+
+		protected UriResolverObject() {
+			super(OTHER, null, UriResolver.class);
+		}
+
+		@Override /* RestParam */
+		public Object resolve(RestRequest req, RestResponse res) throws Exception {
+			return req.getUriResolver();
+		}
+	}
+
 	private static boolean isCollection(Type t) {
 		return BeanContext.DEFAULT.getClassMeta(t).isCollectionOrArray();
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/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 74fa22c..58d3d81 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
@@ -479,6 +479,15 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	}
 
 	/**
+	 * Shortcut for calling {@link #getUriResolver()} using {@link UriResolution#ROOT_RELATIVE} and {@link UriRelativity#RESOURCE}
+	 *
+	 * @return The URI resolver for this request.
+	 */
+	public UriResolver getUriResolver() {
+		return new UriResolver(UriResolution.ROOT_RELATIVE, UriRelativity.RESOURCE, getUriContext());
+	}
+
+	/**
 	 * Same as {@link HttpServletRequest#getPathInfo()} except returns the path undecoded.
 	 *
 	 * @return The undecoded portion of the URL after the resource URL path pattern match.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/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 e14771a..94ec328 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
@@ -516,6 +516,27 @@ public final class RestResponse extends HttpServletResponseWrapper {
 	}
 
 	/**
+	 * Sets the HTML page branding in the header section of the page generated by the default HTML doc template.
+	 * <p>
+	 * The format of this value is HTML.
+	 * <p>
+	 * This is arbitrary HTML that can be added to the header section to provide basic custom branding on the page.
+	 * <p>
+	 * This field can contain variables (e.g. <js>"$L{my.localized.variable}"</js>).
+	 * <p>
+	 * A value of <js>"NONE"</js> can be used to force no value.
+	 * <p>
+	 * This is the programmatic equivalent to the {@link HtmlDoc#branding() @HtmlDoc.branding()} annotation.
+	 *
+	 * @param value The HTML page branding.
+	 * 	Object will be converted to a string using {@link Object#toString()}.
+	 * @return This object (for method chaining).
+	 */
+	public RestResponse setHtmlBranding(Object value) {
+		return setProperty(HtmlDocSerializerContext.HTMLDOC_branding, value);
+	}
+
+	/**
 	 * Sets the HTML header section contents.
 	 * <p>
 	 * The format of this value is HTML.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletDefault.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletDefault.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletDefault.java
index 050ad0e..c2c0d29 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletDefault.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletDefault.java
@@ -183,7 +183,10 @@ import org.apache.juneau.xml.*;
 		@Property(name=REST_allowMethodParam, value="OPTIONS"),
 	},
 	stylesheet="styles/juneau.css",
-	favicon="juneau.png",
+	htmldoc=@HtmlDoc(
+		branding="<img src='$U{servlet:/htdocs/juneau.png}' style='position:absolute;top:5;right:5;background-color:transparent;height:30px'>"
+	),
+	favicon="htdocs/juneau.png",
 	staticFiles="{htdocs:'htdocs'}"
 )
 public abstract class RestServletDefault extends RestServlet {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java
index 80ddf10..ed84224 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java
@@ -72,7 +72,7 @@ import org.apache.juneau.rest.*;
 public @interface HtmlDoc {
 
 	/**
-	 * Sets the HTML page title.
+	 * Sets the HTML page title in the header section of the page generated by the default HTML doc template.
 	 * <p>
 	 * The format of this value is plain text.
 	 * <p>
@@ -105,7 +105,7 @@ public @interface HtmlDoc {
 	String title() default "";
 
 	/**
-	 * Sets the HTML page description.
+	 * Sets the HTML page subtitle in the header section of the page generated by the default HTML doc template.
 	 * <p>
 	 * The format of this value is plain text.
 	 * <p>
@@ -140,6 +140,21 @@ public @interface HtmlDoc {
 	String description() default "";
 
 	/**
+	 * Sets the HTML page branding in the header section of the page generated by the default HTML doc template.
+	 * <p>
+	 * The format of this value is HTML.
+	 * <p>
+	 * This is arbitrary HTML that can be added to the header section to provide basic custom branding on the page.
+	 * <p>
+	 * This field can contain variables (e.g. <js>"$L{my.localized.variable}"</js>).
+	 * <p>
+	 * A value of <js>"NONE"</js> can be used to force no value.
+	 * <p>
+	 * The programmatic equivalent to this annotation are the {@link RestConfig#setHtmlBranding(String)}/{@link RestResponse#setHtmlBranding(Object)} methods.
+	 */
+	String branding() default "";
+
+	/**
 	 * Sets the HTML header section contents.
 	 * <p>
 	 * The format of this value is HTML.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-rest/src/main/java/org/apache/juneau/rest/vars/UrlVar.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/vars/UrlVar.java b/juneau-rest/src/main/java/org/apache/juneau/rest/vars/UrlVar.java
index 8e0ddc8..065978b 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/vars/UrlVar.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/vars/UrlVar.java
@@ -54,6 +54,6 @@ public class UrlVar extends SimpleVar {
 	@Override /* Parameter */
 	public String resolve(VarResolverSession session, String key) {
 		RestRequest req = session.getSessionObject(RestRequest.class, SESSION_req);
-		return req.getUriResolver(UriResolution.ROOT_RELATIVE, UriRelativity.RESOURCE).resolve(key);
+		return req.getUriResolver().resolve(key);
 	}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-rest/src/main/java/org/apache/juneau/rest/widget/ContentTypeLinksWidget.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/ContentTypeLinksWidget.java b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/ContentTypeLinksWidget.java
index 23aabb5..67dee3f 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/ContentTypeLinksWidget.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/ContentTypeLinksWidget.java
@@ -36,7 +36,7 @@ public class ContentTypeLinksWidget extends Widget {
 
 	@Override /* Widget */
 	public String resolve(RestRequest req) throws Exception {
-		UriResolver uriResolver = req.getUriResolver(UriResolution.ROOT_RELATIVE, UriRelativity.RESOURCE);
+		UriResolver uriResolver = req.getUriResolver();
 		P p = p();
 		List<MediaType> l = new ArrayList<MediaType>(req.getSerializerGroup().getSupportedMediaTypes());
 		Collections.sort(l);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-rest/src/main/java/org/apache/juneau/rest/widget/PoweredByApacheWidget.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/PoweredByApacheWidget.java b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/PoweredByApacheWidget.java
new file mode 100644
index 0000000..205dae3
--- /dev/null
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/PoweredByApacheWidget.java
@@ -0,0 +1,35 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.rest.widget;
+
+import org.apache.juneau.rest.*;
+
+/**
+ * Widget that places a powered-by-Apache message on the page.
+ * <p>
+ * The variable it resolves is <js>"$W{poweredByApache}"</js>.
+ */
+public class PoweredByApacheWidget extends Widget {
+
+	@Override /* Widget */
+	public String getName() {
+		return "poweredByApache";
+	}
+
+	@Override /* Widget */
+	public String resolve(RestRequest req) throws Exception {
+		return "<a href='http://apache.org'><img style='float:right;padding-right:20px;height:32px' src='"+req.getUriResolver().resolve("servlet:/htdocs/asf.png")+"'>";
+	}
+}
+
+

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-rest/src/main/java/org/apache/juneau/rest/widget/PoweredByJuneauWidget.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/PoweredByJuneauWidget.java b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/PoweredByJuneauWidget.java
index 4878f26..4ae2898 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/PoweredByJuneauWidget.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/PoweredByJuneauWidget.java
@@ -28,7 +28,7 @@ public class PoweredByJuneauWidget extends Widget {
 
 	@Override /* Widget */
 	public String resolve(RestRequest req) throws Exception {
-		return "<a href='http://juneau.apache.org'><img style='float:right;padding-right:20px;' src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALoAAAA8CAYAAADR56A0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsTAAALEwEAmpwYAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAAtf0lEQVR4Ae19CWBVxdn2nDnn3C0JhCVAQoCELUAEFFDrHurSWvfa8NW27opL2BW1VuW6UDeUHXGpS93+j1hbterXVsvl629Ra8SAYQ1JgLATyHZzl7PM97xz7wk3GwQl/l/97+jNzJl5Z3vnmXfeeWfOgbGkS3IgyYEkB5IcSHIgyYEkB5IcSHIgyYEkB5IcSHLg+8IB4S/QqC+h53PPalo+ZHPjoiF76p8ecgXFiRVMJT/p/v05IBhT
 6Of0JDHsxP1v8JsbeDwb88Wz4/UJt5QYweVDL3Hp7F2NM2YbCjPCjDVG2A96z97yGYFdmcSs41lvsqzvjgMEaIBHOL75PrvYFmy362JW8t21ovM1SanbefKjUwqAXAHIG5bnnq2p4l0Fkz1sCENYwvJ6VE8kKmaglKsC6w9LgaOXmqT438YBAnnwTZYV9bEZBjWOs19CbFVZ77E/h0Lsww8YWzcpLsgSpXzi5Pgu+3RcJTqpK4o/YIZeyB3ELF7q1pXuYVNEIdBN22Iel+C8KSRKu91RfiJ10pEG32WHk3V9cw4441X7OhuMVdrPVTbG7WZjSbSHo4xpUEg5BpvrrCYSZvOCUfaOKlhoaz3bOeEWJudDYu1OeYlxXRU+bkAXfsYVP7P96GeRf1hJ74HsxJBhWUwo+xTOegHVmg6gY7Zv+qKu/wkTMSGw7ilgEvqbdP8uHCjzM9egIeyVFB/7OYHbwAjT2oxxjI0lgK5ypmAiWBj9ehvjC+D/Ael/t8NsbyjCtrp9bFyTwT7PuIrt+q76ffyAXgidu5hZe+8e/kqqxq8xe5rClW5vF7bic6ksw7SZ4cZcb6hnn3ebteXU76qDyXq+FQcIH6J2GesRFSxf0KrsZZdCchdZNhIAaAK4VEKJMgZ4WSGEm5DgB/B1SHoVPwA/qGlsL7IOhuRfH42yt6t3s0eGTWORb9XKTmQ+Ljq6o7LsmpZ3awpTr2kIW4wf4PvR71qNK4MaIsIWpoJlTWXhoL2B2rUSag5J9Q7aKBkcT0sMd0CejO4KDtBSWwwBZlpsTrqP/SJiMxUbzp4RSHK5DhOwAWRyjt8cjkl4CX6TQI8ESPoUYbPBKM/2etgoTIQePbqz5UjaSfm60sWb+c2rEIWFKunl228ceYId4UvrGwWzoopthpT1wZ3qqIZdnEX2ciVazxUjBP4Yyt+otoKEKv1+v9MOJR521JkWIJ86dao7gTahhGSwKzgA5osz85mbAZyhMMsIN
 rIe4RATFuSvBRFlQeu2AHrHt/FsI176lBansaNMQZxiIF+4CRs2g/HGIGEB2LdZz65oe+syv5VEl5uJ4mJpIhQGf8nNFW4Z0FEU9gV3sUyPqugRy7YUjSkujWmNhr3f5Yu+H2tEACuYXPRETU1N6pQpM3/FuYgCyC9Mnz49D2viXk3TjKBhDHlm4cK1U6fO+CnoOWg/hV8tBFZGhUy4SdeVHMjys6adj7AixctywO3RALXUyWFliWksJKJIspNIcn4UTIhzpL2kiYs0TnszwVIwGXpR+yWWpEdPx985kvQblVwyebycKOWT8u9LY9qExibBwmHlIGbvPtXgeU1NwrYiimpGuOnDGREmw2s9/FW1MVUHcgIdIwm9ePHielXlXwO7a6khQqhZ0OcuDxv2FVDtMikOoB5gc7UO4K+JP5OXdF3MAT+MDP3vYztqG9mDAhKafs0S25HoJNXjP0hvktTNNETbQupDqgvQgE4gzcvDMaB3cTfYN5boKwsKtAnPBYwtl4zNZ1H7wYOGJTwuqCeWWIVdyg+gyzEb0xaz2VY15jpQa4e5oiyMdUhKcxksKysjOcBs2xYWp1yOU6oVm1jG3RQD+S1UYQP3zIsflKCk60oOkISl8smSRr4VYmuwzdoC0TvMEszGuMbkN0n2BOlNtI60dyS9I+1b+9DdOTa12TJPF//5xkAvCASkymJHxDKYVbiJdS1k2hsAS1cKVzMRthQVu09VRNM11VUbtRZkvbB+G21CSad3+lVcXCwZ6XLxDU1N7pgaJIyv9+zZUwcaKysrq7ektdkqcLS3YWgeJ2/S7zoOALtS6JTdzlItL8uGyDlQW8sKU73sMaihP4yGmS4gdhzwtgB3XE8glaU5XU6b+DOajXgFVhuGjemAruvF4ZLj1R+O6Ezoi/E44i8pMdaOGze5R7rybKNiGjAfwUzOXua6faWqKWkC0llRmYlDIz3K7B31XB059tW1wQ5s59QOyVhSZfAj0U
 5xxCe7HX28mT5GVxhnbXutL6ZImHNj5bdH4cStgGGAwpMwwZy4zvjxtvIAK6B2sQIWoL50WCcSVWpVZ+sRrBDtKibLhRQKVAfVifrUApZBdR3RFbPixLqojZTH8VvnVb64hHm9A9n5IJig62yYprFzDINN2edmf+1jsbmwi3cDw3+KQtJkKVQYlYYf+U6YwE8uUUdvDsMS49GZAon+2vr17OaCl1kEWY/al1iJx/73mCW6HwsTgfyL4eN7G7V87iHwPrWbquME9FOAvJ9X1dKCEcvkqsJ1TdGp/1jqJo8tXhskdUdRDkvzhOY6jGcE8hVkyYltcgWUeGg8io14TmpOfAWQDMEf4im82IY4obw2Qap7YqDduiVtvKzYitJcbptiWkT4wYs5BQVciZWLvIEW6QJ1Mqx8rQcQz8c0kZR4/5z+Oj7qa14ZW1R85Adkl87xW1MLrT/rAX3xYazHo7FXYobJBEyDT/WLsJV41GBZOQ2z2CWBjM5IcDuiBs8UTx79HPA7cU4eSjGpI4xl9erHvPBxE6rrnGzLsRTvAKZkyCmLUxV1SiM3DFe6pWGWP6do9rWqqnigrtiQ5hxW13rB+EN575c+1YEkb1O1M4hfDR4xXBXCM7py01onLpHYiSvLyE+N+qwxmA1YQixbZ7okM3DirAhN4YoVivRM3UCTEwnSTINOI/th11zW0FH5kagixm0vW+/EHaZqGSIp6wCQVoKRuXn5QuHZAIKiCXvHhspNZY7EpnQnTOV+NXj4BK6oobFbN3zdstS2T7R6ug4EJ2B3UnNixcbNfsAIP3v9oJGZQrWGoCfY2pGL9TsWjv2N8QD6I3jw1rW/WEdCBCbabEXRx0Bp2L5o0aI29VP7KPdX17LTcSHvRTwNR5yNFZsD7HTEb0NwwSoIR5TxX7OkxnNzOFGiy1KR5uRBVpSPU0a2ob6JnTfiia49JT0mib4CgzsxUGyW5J46BvrElHphWSk42Y80sFV6N2u
 gT+geSHNYSRUsSiyCWy7rYFv/wdbzxndXlJK6o4MnJqFpMvFte/5mMyXry6FDs5Ty8v3Ii63t4aWbMVJXii2RZoz0MvUTFRVCSyL2x50u0cyx3649GKxbmzvivjGVG5cQnxPb4YTXDhzdw7KMT3HqF92Yl5ejbNrU4KQ5JTr+SoaViRWbZfn5Ljtk3YtJPK0bV3tQuhxIzPGRuSMOlDI2/4+VGx8jkDsCYn1+vq42WR/BtLQJ5Kd0VIc/DmheV5euq/o/DWb/CfRX/HLoUN1fXh4xuPhlT64/GYKS50alKKeNs9F3H5C5xxIHCv3+/n7Gotzmgy1NAOhqOjK0AToVAh6JNSYb6uJsGC0ZkN4cUp1BeDH5bKM6YjjREpgRklKdMlJs/OfENUtzoksAPyzRDMtdHx5l3ZFrV0e8QNq3dscE9ELoiVQj+vkQpDlrxJXEJlhLWJivxTXcm0i02ELTiOscsrOXRz+jlkefH/JRSR0NdHyJ77jRBQUqlnqz97Z9P8XgDVTBqaCpX48MTzCoCEhr1lEBclmOZamWD7BrsK1XFVv5HVjZQyjCImUbTIetVgEAxZQBumsxwJ4LsN+BJBoK2ZdAvE7Bo1encjWVIpui9lXwnkOdsj0INzsC+USoDKW5eXl2k/WXDE0btM80/1ZnWW9gtCsUgZ0KFyNgbL4uW9PnXpGbV1hoaOfmBwIHqZCQxyNcTUFaXTqldqTQ4QJEKJrcgh7qHBYPlCfs2SHG1yi2lQrLlOQP9Z0SyVbdaAhNV0X9KL/fZH4/ljRlP6jKsO+R7aEyEh0YI/kC3fkzHBI9h0pzMAzZXo1l40T0T5g74yCFR0N9IXu6EtvVoHUO4FFYM5iJy/g5z83heDxlwTxMR6PJhCxPzOF3ies00GNSLGB+nnPaOS5FXAZgGbCu6E22GUBrB6UI1QvgwwIlqExawd0HIqZpc/4YtXx/4OibJgfItrDvhsK2CqDZBubcCc4/SZMEPgkJ
 ORAON6Cc2LQRwMB/BRCvcuJb+a8CmL/P0lyz1gwe+XelYsP7cQlrTUS5RIuC7wwK+4+QznR9/k5EPde6TlQM7ATMNTkjcpD+Jar17THNH51YufGveE50ATwsXzs47/reqv7iQWZ8vCM7+/QB1dWhfXV1PBtoOR6OLHxo91/GVKxfd9TyAHJyC5Yt2HDnnXdunzdvXpOM6ODPhDfZRiTdSslf/JRl1nOWC3lSq5tYRjHIcpaBUTT9aFDak9rNcURHNHAO6MkHr+nCFzSrmOXlQT865G85vrFc3/5vpzm+isWkKUyo92qYxhG0J2RjLgplDW6y3BSKCxNMc1q91DTsZGota+7J5Z9XxEBV3EIitW466bHIZ63LzRuTrqrjDlrmZQDWpj6qfs26nLxLWdWmdwIMEhZAS8xr4JRJHtUJJYXiK3NyPFVVOSYrwEMAv5wqbWJVVbjBxYqqo8YvUMBdiH1/FVYHTF5VSufBo87N4HxAjR29EjPV3ZO7/vH1kLwzTti66ROnzvgkkxITaH8tnau+OtM6/cRtG1cLrFYlDQ3K+JLBMr1kfAWvKCmxx1Rseqk0d0QvwPG3+3n3XBzorh9pmkqDAsgcgyNiFNwmD0VgASEVhG0ZOtRdXY4tQgE9tXQFEDLOfoJSAHIcwB/VyeKJasLbbDe83V9eyDLCXpYGkCq4s4ItSRzARBn/EaAlqBN90JGT8U6Y8qL5LjAHvM2WBH75t0v+dAroznL9z0GnnQ514oIGyzJTVJLmFh3H98WSnxa0SZrLhQwaBAvVWuYHCrPnU6sJVEdrfWFBAYRlgAZ06iHLCnUTkb/mAqBQNyrBoVnI/05BfLK1Lgv1YtrRrGMsJyfHzK3CZAjQE1wVw0qAjeOm4oZ1uSM+BlPPLu07JmXsXpg6CyBzAhBGwp6+37J3j6nc/C/Kgjpx+sqnIfgJPZNzAI+V4VKoJGfsNIzHxgDkBDBIfpz3kYu/XFNChiY59EzzqYt4r
 fXSmJ1l8kS3plcvy3WwMziLlXi0v4pNt0sYW1Nebk5i5VZzv4+cMcayI9OI349hKf36ZmRpXshzUxtfq9hht2lAqySIolr4dAuDNESoINI54CcSyQH4rcP07PxoZQCzBlDmOSjVT4EucJ0C+v64rRYnQDN06OZhBfd4sMSjuavR5v+IkNUbfSVRjpCFvofAgnCDSJMAOFoHkAdWx4AJ0HQLWcqNmOMLcyurpLkJuuTC7qq2YG3O8BFK1eaNiRaM9vhBkrV1PNmRyWEmUKJH0y1Yz1iQ6iwdOjTbbSuXhG12tySSf5RnIHPvQ3umDCsP7Kc6nUkGYXbzflzQEJq5lEiHlpeTvt3GEStkv8rKaOtSg7DcTHtxRwLtkGmUqWT8eE2kpYkAPSS4Pvv3cz/ymlEdN4UswgyKaOtwxV+OYUZOjr4yJwdkh10BgsWBgHAsPodT2i8rIZ09O57pfXpmLXFr7PRItOduN7dOx7YC+wWfC4YIdAZyDT3h+EGgwQxDbUTP0IJm8NMkoOeY9I6noRZqZaylMNShVJv1T6y7K8JHBTpZWiZBLft77sQ8HNNfUYfNp0fR3E3CKsOge1O4lgU9HWobzkEhVl2KosJCEMTgPD6xMhCm/InLZnudcDaEYVO9LlXlSliIZQ5d0NRehYlwAbhVhLipGawALAo4yUf1CWwgkiBBG0dh4uzMry472DxhLP1WQqpuiN85hUFWveBlyn1NlnYz4n6bn5+vKgAdrQQ2i07ENY1/ji0vr3bA6+Rr7aPiZkAjTbYhvhkl+UcTgMXNnhRs15VVle0fkTuCMseg0YpKsxS5UpB6xqqqWqXGHikvtaXdxFaRRLt46FBXZnf9fiGsq5tMW8V+eHgwCustt1FOHMzYhtHeF9f4ZMMwRvApDXEO+KHAU6Np30xSnx5iE4Pi5CNuj8SAXlnAPBjW+MrYqlHH4fGoQM8owLXyAGoS/AafqmtBG4e/CvdAUViJnp8blaYNEl
 aC1DYeFWIHbNqPTKgoWedMkiO1Uw4CJCvRwGpwR6NtfTymctMWxHNMAH46rBVrB494GXy65f/m5d175qZAgx9pRyozMQ2ynJNE+3pQ3sTeqjpyn20soPRCCPj4vqAIL8m8nr9zYw3tJQqgZimVG7atHTzyQwzOdJD+dlRZmZTaPM3u5xM8BZtWufmj9kHdwlB17IgxlBobZsa6YzPaxLQQokZis/oYbHeu9nKTuQh8pA241wORiMlPq3wLR4YP3A+6Y21uXiUsgB5c84bJJ+bIKoOFNgUHkP9SKjet8IMP+B2xrdRGau9bmWnXQ/f/TZOBdRvjSiAGQoFfB8QkqSkMyY4TJSnB4+CmnkpgoyHQd+JpcnjlRMBKgDjKi3wQA9RIrBB9N3dnGbmM7Yg3/7h7RwS67DhAuCL7NC/u3E8KIgIHY55G296FA48mt8JGhoQJlRxiGB3EWUIUEn0A3oTOIkqAqRMuZg9flzvyfABxYI1lTqFM5bAXh6qrKWgKmy/P0Ph1LGr+HM/PzwHAaEmmRJ24DIc9qQRCawlJIMcBzZmQRx/stUxY4sxHiZ4GdF3uqCt7qEo6LqRJNSS7ulpFvSqDnRr9WZah6u+RTg6gvEt5jKhwqzDxoMYGev4mbn84zFP0VOJTFmA0A3IC++NYe5zyiO/0P6ESARO0EHWxPYhDQ74FoGArDp5IfIL/oI47JFG+NMyU3yNqxShZlJPavk+5nx0/vHfE8t0bgzi0JnRXghKKdAzQMZA7KkuM/aTKEOBj80imwT4Zk/IoNJ5GGMGqIHsmJw92czR5dMX0uhSrLzj8/wbogbiVo7uefp7GeE5EmNE07nIFRXQlVIAJ0FJoMCDIYUSMrdIuSB7Y51yvEytjmjGFOnaO/owBn7nPMjePrdz4HlEPA9icXGOr1n8G68Un4BNJ2OdJt6YNMqkwNje1Bhuma4XNBs0NSCeThgQ/mkSj4uvDtUyAPIhxOH9M5dZ9dNCTD1X
 EZtYdhyzlE9pUUl2JdY6u2PhnlLcF40wbYQl0bht1YdxkQuEZRC9XOhno/J/u3btbVpOVhlfTPsdh0mmF+fk+tg9o5niNOMG50yO8MTU17D0UzsQqtw2JbYSSC5Ie5o+fjKnauIrUqoPe+hZSPweZaPPLKjt9rwY50uoMS/9PVah32nRUhLMSgBlgJzATkEka06whP6ajU7O5VGGcyUBgJsGHaSYnSuxZliF1eaKjpsZouKa4okY0k7FDVFSXuDbMS6yleRMqtCtpW40lRq237SgXagV2nIWNWHawZEIHJ1kgTJzCkV393R9UrILq4Qf2/C0Yn1g2hcFV0nms0kF5uQDlhQhDTRn5AeSUh6YP0aBaTHqB/S8b7FN55tpBI04jYGYPrYbkBSfBPewNiLgGNBuQhW43StFCw4O4CGzdq02X/cKEzZsPOCAnM6au8FOgau2GCoE6FQ/GE13ElCPRKOQlo164nDOsdMjIE+i4fnP15j0jcvNI6pyCHytggSP2j2jIxScltUn2CT4Bx/SjndhwNuK5rdsbi8KJbYOi0hvIkskt6NA3LAe40Q1HVqQWic5DB3q7k9zavwVXJZ458eL9qmp+Dib0xXsCgyzo45wAD3MDMYYAK39gc0yy0zMBn7pH4LVwbIgn/GfBKNQ8KUjwyDJitHKiQHnB+LmFcGFDekj2E/1y+NS6ed/4uUOgE2NpE7kyvzC1sTF6bhCg9nCXGrbNVVgVc6Rkt6ImRgwHLDH9PAKM4IRoEbWmmMXumR+xZXEdV+H8hm5AdL1trQYvwB9BOqx0UPzREOKg8jnYdBlQfRsSpAQmAhUnoynoRdiynsVq8JTM1MEf0sn3lWXISYDtxK14n5UB6P/C+q9SnTSKNDNwLkAyjOhW+xR+UYOwb0J4BqlBpUz5Yy9Vm7YmZ9iJStWWrxzTawdVxgcutgchmvhmlNY/aLFyRPmD8Oe0Glxnb+F1hbSIBRWiVTrlJWer8o4+I1s+
 9gvtTryO8sZKaPFXQnWRpVSrIuUQ1IthhmVvsZjWC1cjeuIFSTnbCOwEcMgFCCKAPP5MTSSQq7jwBDXzK0sxKnFX4AKd8xSyVNAnISzS+yEZ1fgKALWG1iU1bJlS3W3RmuP40CHQi+N3SWqDYoKL69mmbZqGIGsQ/4wp+q9CgB5dOIecR3NImpNd3fjg/O0rP+6kNJcmRXlfpMm6FSBfh5PNi4/Ut7W5Iz/CFYurP8/Jv2tYedkeoqUDIxJ2mGz0QoY8OEk0+QEwSkZBgbIKm0bsGbAWB0RZdn7PiGJOxtWz/0adl1G+jhxs6rhUJiYjz0NkrYEZbXmU82mQpHOR56L9KA+soJUpNoHiBdHMpCCBrHTwiCvdhlg9YsemXWRebIVG4QcNfi0cnlEECiUkIYNTXgsiPMCcLemYPBSKh1sTdf6ZmMkm17A/5ffyTAUwdcOIPut2a1OjltUTI041SslNVzykdKcNqpTsJKzpAgh20Kb5dtjUA0z1pGFCQLG1h0NW/TcUNEwY938I5JFoIuaAGxzrkmFEJNApqvPN7TyllCrtkWcweomfkMHPwquf2ERoWshWygF01cVdA8K0KknNTIPWpepQY/C6qDab8nRSmstNmN0kLu+n6b0xyRdS3kqcbJLkRW/lj8IrEUdpELWL+2o6dBPzGvmMP82b0TiD6rp3B5gJ0LEfSeGJ0On9eA4UFMg6Ld36xSDNpWJU5epDhz4d1QmQLxygubzIcyXVOXrblg2Nlv3YQJf7JziAuoPKp7roliFZbehHYcQRaERp7shrhmiutwxdmUz5u9XVyTZQGj1/G0cFOHb0qpx/6STVqe72fqBFlZ1yynO73gvVB8U1jaZ1TkTxrIxaHl/EdLGI6WEIQ1h7EHbLH4UpLmzowlJSlEjUszoSdb3BuO8RZvv8QqT8JGL63q9vSLsvGPEtCZmuF5ui+irLTkGLcMiqdOMmXrS07NSC4jPPXP7q6af4qZVShQTFZ
 NjzXxk7tr/z3KketEPUrkSPMaUAEiqAOcxPJRMigd3gBsSXcjIsMIgn26iCbaCwuqluXm+FZl+0/YP1z4LRk0qKpTmunfqaox6Mm+VgXCraZdqGoUTfosRXqqqifgCnmRABUVUln6O9Uj/YfTC4ByLlNgDzKQIZSXRoGqCSq25ithZh6hNtYuORRTtNo8anmn+mZ6wA0WGtgOfUaSjGW9Wmshj5SWV6nuix+fs1THon99dc8wDkHmMrN9zX2tpDdKWDR87ow9X5FdHoeq9mPk1xYQ8ss7ADQk6jyM456jzxOpGabLmk/GCDfIDi6RS5Izu6k0/yoFU/nbQEX7br/oo3tlDcA0NvvFoILQPbMzAQphc4qZc36+uQ6JDkKocNzuBBw448rDLtNGiD3aJ4KdTN1f1CmJnQMQujll62uz71Nt2zp1em4p2Kr0Wkm5axC6qp6tE8P8Ew9sZblyf/5xnn6pMU5QFUZRV4T7/Zq6q3Lsg+5Ro8f0X1w9GAd5p/lKE9oEs1lTG/KMx+2tugbBjugsocsk2888m3oYZfkb4OQQupKdQeqluvtZqWX1L1wXw/NqC3lPiPCnLnLvfXucPH9lS1sw9Y5nMTKirkDUeSvtSwRIc6BUnKCYGAATXg2YGaa449eMRlrGLj25pqai6YokntS8zTOhyIW5DWwIzZX9NG7DLNuWRloXITJkBztoQ66YrvC5maPrU0d9RZYyvX/4OIRg/K/PG6bXvfyNa03wD0N4MZLwN3a+MFjIY8/2WWqmXvtoyVbpc9adjm8npKoxUHVwCowXqc9ohe0LYVL7qGl+9bjBVUB7obRLv1KbgLtBno80EVazEZZMF0Xo34EA7EFJwVYOTi43vEamXJ+IOTUO9AjWuGYRs4OcKmkVQNUldkTVjTIZNoO4PQXsMyX6rwVn6UG8r7MU47sclW3j2g1D3g01m9z9T5jK8/jG+x2W6U/ZtCqMewuklNbt74gqUVDSw8zue628
 P5jRec/OPe57kb54Ya3deHoqz/8OujLy179twFt+//+JWjtrwdghbMi6eLxwbf3f2eisfrTk/bnl5rpmb1QKeEFVxtCt4/lWuesMBipOAlOUj1Q2bo/su2vfMI5Z2DyeGPF3IkL+CoRYJfW0eKj1CfIXq6fNRRPjrIoTTw+OUdRvReDPL1eHzbwAvUdWgHVgZpfRiP4/T2yoCFRObnQlwHaQ7FMXYS6pTbXp79cVs9NrzL9zNjKrhwLej+IVUTTDqEJ5H+jUn2azdT7vJiW0WCGuDEwLPVu8zoLBx+YZsQs7xMZLFJjLbXQrHvlC3eG9JswyWaABppVZFiFuWhkxFcfMMEYLcAGDHbZGtFVO54MUpY7HwaPv8JyxQaQ1SttgmIaetEAfOrpqhvaIqYt2PhDHNVfQiqbD22xrmQ7ui2SCNG4t46i0SNRx+q+P3CmdmF3miKFy+6mwvKQ9vmvlwVkOMSK56W3tjKGxsk+b4w4hBbEqCVicL3Lz/pwjehks226rr/3TXAqBj2w4Pbh12874Q0s/+zb20/L+1nb3y0FBxoLovyH83JSloTPTnkzj6Gxn/hsi0cCSr/1QdW3pTo/rkYxMt9XM8P2RFs9a1AGq+f9bl+kqubEaqfUblwE9IhLY6sQiTWRW/JWFy1R1d+7cz0xOQOw5uGD+8dtm2PPIaHRF5bXd1Pc7trYRtv31QXLwnMVUqzh2fZHjs6Di9zdFhBOwmlQ4b0saKaNg4bSkpGWQQY4rYcs7Kc/H5QozJhTbC4oVXTxtUphmhBJyca4hTQ9tVchpkHc6dD05FPedHmTLw5FaIy8SwlMr1ZZXaPpHPLY9icTAOOS3EC8IOQvl7olyExZus4mF+P/sphQmYKcqzS9J9s+/QBd/xI1YQbGkw/tOIBSPj+Fiy8OsYQpwvVRrT+dN+Qin3GjtzMuVsH7WTxfK3KPOKj0z8QKUtGX3Gp0JWfXPfXQI/U7gcLt3x2woF/TB2q4Lb
 Qr4u+fPf5BNojlkmJbYDuL/Br/oDfnJt3zw3Y/D0OGYWNItvT06xf5MZxuIHTdCxWb9Qo6WtgV73RxcyDs7YsuOWoNR2BILHBhXhflEhXrFiBY7PYpMErYPJ9Udw5oe/AOIBhRIt3SFtIJ6IlGtq8wFFRBAIFtDyR1o8JUpaRIRLLdOpOjKMC4KggKkfW6bSN2v3hhRe6Pg+dahHPKN1xlEYXtv58ySUWtYfaRWkUdmjI76hOop8zZw51QtZLtIjT/HPmxM7cKeK7cYkYkW0pyrpntq5rj5vCsF0Q8zDN2hYPXYd7XjjHUEfP3zHvJTStmWffpJnEPxQgHs+7NO3cxxqKPZ7wBXV7fFtWzen1Qc8+yqWKyR+65as3X0HZxNcWPO1UfSSVHcJH8u7ZtDj/EfHbvLtee3j4PW/MGzlHPDz87kOP5N0dXDTifvHksDvkZo7o/Sw2kE7eY/YBzNZ5aLA7E+fQHI2e0v1gDDHRyUN+fEefGEXhljQxhjbTtFfXF+Mn607ZiekOmCmzE08vfTcXFg847XBoEukTaVukY8I6dTo0tO/wx9tLL5o78fBb9CkhvtNB6NXem7MfefvWgXPFbQMfFrdmz1l5e/bsH9/c/94Tiwb8+sOpA2ZfByxonS7wyITKCvyDEa/NvvCMBwZc98K8c69a+ugpV/3wydE/f2zRib/a+fgJhecfOfvh1DYNItXDP97v85f4m2DKx6tUfJ6pqF/CajojjI97QMKkQ8rvabDCryiKS5rn0HkVnWshWQ9X0XFo+vQ7ToZ2naNz8fF8RZFL/ZQpMwoAvQxscAIYUKlezJgx4zQcgebiasQGxK2ZOnXWSZjEo1ByxOt1/aW2ttZKSUnJQlo5Pm03YcmS+V8gTyaAQ5J072233dbD5UoZjvBnyKOUQbpPyxzwIyTjPVHlM/SpnFo5derMcyBG+qLuyoULF/6LaPEDjmRAoL3no709bUOUUF0E4L59s85jmuZtqlc/
 nvDiEw0zZ870TrOsbKRvmTJlSpZte+1ly57cU1Q0M1/4tBrE75ky5Y4R+MjkRoT5wYN1F2Dpgk3U3oR2fEVlIt5C+8dFo/ouoi8qKuqFC6OwjQo3Ph3yNeLW3jZz5mDNNA/48ZUz9EedkjXwPNixfbBwfDwRcaDRimprT520YMHqW++8sw/uZPFlTz5JZw/NfaJ+ddI5E0RoWeNn41bfRRqujwkRXRptiNzv8vTOc7nM57GkjTMNc8liNqfF6tbJOtojE7F/TODDT/z5N449tD0lT7eiuPShZkY1+xWFpdz/yMgbUhsiZsmhHmW7n4u9AN9eOVLst00Is26/GfEA3rbhZ9ZawSq87ezRVM8AOhdTOU7nFb0fPg/XDbklELFz7vTSgQGQkqyoaNZw/CMYV+NO2NagyyUnCb6v+DNUgJd9xAZYnK6+4Ya70qhx0HrPxgHNFrwfSrt1fHREK8e4DcTGqOmJJ55oMNPTVbxoewFeAKZPMMy8ffbsfjBWnGXbrlSi13XvOBxR/Bx1kz1eZGTkZNiKyMOb7e/jdxnejO8Wl6bnWFzssCzd0Z0RHVtpALzusAqOx86uFMfjdVRuv379rwZu8AUbc2dqqnEDxQWDHEqyei6FOXedqGlWPoVRz1lqxHiY+o+N3ESK27WroSfyn4QvDX+q2fyMounTTyX1iurEBLyS69YZRJeRkXEI9yBwZZ71jzS4KylOM+0zbV3vR+G+mdnX4ISRjCE7cKZ3fXyymDh8vKdo2qxzNcvqy0MGhINUldqsJBTfjiNw4yf7L8azydqlmQun4yvgc0zhNUKW+vym6gOz36h77JClaXeaImVwxFYWBHWxpp2yvnVUTY1dLCy3it1ikcH0BsP0ro2aGjRp7fV0t+/D7LqxMBZI50zKFnW22+kIgGcpyo/daurlOP38G75dMYFMDFAOD4aE8aml2FOsTZ5r7t34aA0kOZUhpV6Lkjt4wEDLSbF06dObcc5ejMP3s
 b5IpAeRg6U5SxY+XUyfYYDBYLs3LUJSG/G2C/ddxkFa+eiZwI3Y9TjyKaXnF/EMC9eOzIN1l4P2TR61zsJVAXPx4ie3Tp48GVJOjAMeS2tqaq8gel3HlSrG3LbNx0OCN+CrYMEHH3wQAhVXUi3WX1XxeXu4GChjfKMPnqKONFhVx+FePq0UOANkPZcsWfDhMkh/YLMJH0cdiGM1WBno9RusOdyGtaRZf6wClz45eLD2Ntx7raP0bt1gpmFi69KlT22zbe2PquAnUfy0abMuhsCsgIQeQtKYeIaJUobLRutfxKpBNOBPBLdxItRGwDF9yYIFH9JKBp429O07aCCBHTPtDyhjELdEATpXQ/lo/0F+By4RJILMf4T1n2Uvu3Bw/7Hva1xdgA/jvtFohS/asiulaDWbL69qNBrGww1R4+KXd957x//Z4Zeb9Q7K/8bRi/e8tD8UdT0AU+MjTYZ3Y9hyPxwxPFbQ0j/DbeRRhnD9bDKb3KHJtg3QZ8J2bkat8fhg4tPoUBEOh0qhwmzEl6BPwgnWiIc2zj1tzobfLgXAbQI5+cfSekdCzpo1awCYiPkjUnGl+TQqA4O0adq0mddOmTEDkoxnQ0TJAwLcTTxoWeHXn3lmfoUcQNBiuU8D3qTEpryqKkj9uGDpwoV/xgnSqdiNSkB4PClnA8CYo6IaE4nUF6z4eHETVxdtBV/rwC2C+CbVhZ0fAM6rTVWVJ7EEMLSXiqd/vgF7cXv7koXz3zAMg1QDgFmpRnsnAZjnYmLpUHe2L1u2rBGb9RTZB1sZa5piB+VHe3tjLXofq1Ad6i6gOJRNZ13DMUHG4IMShfh0wT8oHm40zN9YvXhQj5hnUwQuFaVRnylMDsCF2inoM9rQesQepx1Qu7xLlsyrzM3N9WGKuRcvXvAi2nMOssh3S51vXcpC2v6JTwKhXJy1+D/MrDOfvzxr8RKos89z7h0Mf+72netueG/PXatK2C0k+8gpf9x3T2nxvt
 mrY49d93d+9fyDT21/pqTedv3TtLwVUebNDJuuD3CldJ0pug3oMdiLG5DtC902QO9eXR95suz+/3ri6/s34Oporya3eB1qyqthRat5tPze/RLcBX7S7ZVjBTmxgMQm+Y2NjXsgEb24PlWKwXiT4hYvng9bL/8a3x7BXdbwC/jKrpRYQhjvEICIBqCUE8s21I9CoZAEEcU3NTUB6NrjFMYp3tJQg/tTCkPt2bBo0YKnF8+f/xHMA8v37dvngSpQZxjqK0sWLnwXatJKgMWFXxhS9K/InaFERTfKS85pbzAYbBDCjfbh8wDPPScHedGi+Suw0uwEDe/do/tzlEZO4+IVnM33wpn4h8uWzacJiK/Lhj+KRGqCWLFe49x+iuKeeuqpGkzuv0PNGoB/FeK9pfPnl91+++2pmLQvLVr09Af4LYUk/4JoPapaoSn2SgqTg3r1sWF0q6Yw8Q9HrTsxcdSePdOfpzifzxfC1dm/UNg2tSmos5TCDv8onOguznhi2BX9F1x8ab/5F12WtfhN7AeuwLngLvj4mEPT1U2N+374h51F95Uw2fcWkh/l0HNiXGLRxz2Mj+nsCZr8o1BUWx8Wnn11wr40YvHle+26fYnGlCNW7BDOzH906KwTHvY7xP58gCGmpnRlh1qUDfC1mYjx9rSgc9pIfmIeZ/WgeKgwbZY10CZuxjssk/InuCPRUVqL9MQ2JJRBwRZ0FJHY9ljbpH7cmrZ1HW3KSawzscz26qTCf9Tt6Z5XZC1+52f9l/4T/tsXZS74UUGGv3m1JJq4a1OXk/Bd+7f28+fclPXg+Tf1md73G7XNH5PWbEb+o1dNG/2YvNnnxB3vzpAa4qgiTtk0MPG4ZqYmDpxDF49rpqF4Z1DjvkxLzNte2Mnj5Ke6E+Oc+shPzO/Et9cHpJHdvkU5iXkTy3fyJ8Yl0iaEceOiGfhOW5r775RDdTttc/LG/eZ4J93xT4O6Wpi1cOD4LL/vjN4xA0Asjeo
 7XKdD/z3xYx2bcsLj/uknzJWzxR+T5N+T/iW70QkOdDgpOpH3uyT5du2cMubJ3NvGzLuXWpwE+Xc5bsm6uooD7erAdcKcEBRmGVVaVjjq282armp5stwkB46BA4mbseZsO82a4bbBX6GI4mL6gnLSJTnwPeNAfv7t/U7Iu+k38W4lpfn3bHz/f+1OG9XFNqLj8KWtLTGG0MlY0iU58O/PgTZAxqufJ2mm8mWsayuO6dTz358dyR58XznQBui4H7G7bOvv5GkeTLJJ/fz7OvLJfiU5kORAkgNJDiQ5kORAkgNJDiQ5kORAkgNJDiQ5kORA13LgfwDH2sLXsLj6ewAAAABJRU5ErkJggg=='></a>";
+		return "<a href='http://apache.org'><img style='float:right;padding-right:20px;height:32px' src='"+req.getUriResolver().resolve("servlet:/htdocs/juneau.png")+"'>";
 	}
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-rest/src/main/resources/org/apache/juneau/rest/htdocs/asf.png
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/resources/org/apache/juneau/rest/htdocs/asf.png b/juneau-rest/src/main/resources/org/apache/juneau/rest/htdocs/asf.png
new file mode 100644
index 0000000..ce28113
Binary files /dev/null and b/juneau-rest/src/main/resources/org/apache/juneau/rest/htdocs/asf.png differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-rest/src/main/resources/org/apache/juneau/rest/htdocs/juneau.png
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/resources/org/apache/juneau/rest/htdocs/juneau.png b/juneau-rest/src/main/resources/org/apache/juneau/rest/htdocs/juneau.png
new file mode 100644
index 0000000..42a1656
Binary files /dev/null and b/juneau-rest/src/main/resources/org/apache/juneau/rest/htdocs/juneau.png differ


[2/4] incubator-juneau git commit: Add branding capability to HtmlDocSerializer and REST servlet.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/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 c8af40e..fd0f8b9 100644
--- a/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMeta.java
+++ b/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMeta.java
@@ -521,7 +521,7 @@ public class BeanPropertyMeta {
 
 					Map valueMap = (Map)value;
 					Map propMap = (Map)r;
-						ClassMeta<?> valueType = rawTypeMeta.getValueType();
+					ClassMeta<?> valueType = rawTypeMeta.getValueType();
 
 					// If the property type is abstract, then we either need to reuse the existing
 					// map (if it's not null), or try to assign the value directly.
@@ -546,7 +546,6 @@ public class BeanPropertyMeta {
 					} else {
 						if (propMap == null) {
 							propMap = newInstance(Map.class, propertyClass);
-							invokeSetter(bean, pName, propMap);
 						} else {
 							propMap.clear();
 						}
@@ -560,6 +559,8 @@ public class BeanPropertyMeta {
 							v = session.convertToType(v, valueType);
 						propMap.put(k, v);
 					}
+					if (setter != null || field != null)
+						invokeSetter(bean, pName, propMap);
 
 				} else if (isCollection) {
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/atom/AtomBuilder.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/atom/AtomBuilder.java b/juneau-core/src/main/java/org/apache/juneau/dto/atom/AtomBuilder.java
index d1bccc3..512f64b 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/atom/AtomBuilder.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/atom/AtomBuilder.java
@@ -15,6 +15,8 @@ package org.apache.juneau.dto.atom;
 import java.net.*;
 import java.util.*;
 
+import org.apache.juneau.*;
+
 /**
  * Various useful static methods for creating ATOM elements.
  * <p>
@@ -130,22 +132,17 @@ public class AtomBuilder {
 	}
 
 	/**
-	 * Creates an {@link Icon} element with the specified {@link Icon#uri(URI)} attribute.
-	 *
-	 * @param uri The {@link Icon#uri(URI)} attribute.
-	 * @return The new element.
-	 */
-	public static final Icon icon(String uri) {
-		return new Icon(uri);
-	}
-
-	/**
-	 * Creates an {@link Icon} element with the specified {@link Icon#uri(URI)} attribute.
+	 * Creates an {@link Icon} element with the specified {@link Icon#uri(Object)} attribute.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
-	 * @param uri The {@link Icon#uri(URI)} attribute.
+	 * @param uri The {@link Icon#uri(Object)} attribute.
 	 * @return The new element.
 	 */
-	public static final Icon icon(URI uri) {
+	public static final Icon icon(Object uri) {
 		return new Icon(uri);
 	}
 
@@ -172,22 +169,17 @@ public class AtomBuilder {
 	}
 
 	/**
-	 * Creates a {@link Logo} element with the specified {@link Logo#uri(URI)} attribute.
-	 *
-	 * @param uri The {@link Logo#uri(URI)} attribute.
-	 * @return The new element.
-	 */
-	public static final Logo logo(String uri) {
-		return new Logo(uri);
-	}
-
-	/**
-	 * Creates a {@link Logo} element with the specified {@link Logo#uri(URI)} attribute.
+	 * Creates a {@link Logo} element with the specified {@link Logo#uri(Object)} attribute.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
-	 * @param uri The {@link Logo#uri(URI)} attribute.
+	 * @param uri The {@link Logo#uri(Object)} attribute.
 	 * @return The new element.
 	 */
-	public static final Logo logo(URI uri) {
+	public static final Logo logo(Object uri) {
 		return new Logo(uri);
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/atom/Category.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Category.java b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Category.java
index 58a77f2..4fd9b3c 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Category.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Category.java
@@ -12,10 +12,13 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
+import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
+import java.net.*;
 import java.net.URI;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.xml.annotation.*;
 
@@ -99,13 +102,18 @@ public class Category extends Common {
 
 	/**
 	 * Sets the category scheme.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
 	 * @param scheme The category scheme.
 	 * @return This object (for method chaining).
 	 */
 	@BeanProperty("scheme")
-	public Category scheme(URI scheme) {
-		this.scheme = scheme;
+	public Category scheme(Object scheme) {
+		this.scheme = toURI(scheme);
 		return this;
 	}
 
@@ -137,7 +145,7 @@ public class Category extends Common {
 	//--------------------------------------------------------------------------------
 
 	@Override /* Common */
-	public Category base(URI base) {
+	public Category base(Object base) {
 		super.base(base);
 		return this;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/atom/Common.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Common.java b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Common.java
index b9eea2b..08b510b 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Common.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Common.java
@@ -12,11 +12,13 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
-import static org.apache.juneau.dto.atom.Utils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
+import java.net.*;
 import java.net.URI;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.xml.annotation.*;
 
@@ -63,23 +65,17 @@ public abstract class Common {
 
 	/**
 	 * Sets the URI base of this object.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
 	 * @param base The URI base of this object.
 	 * @return This object (for method chaining).
 	 */
 	@BeanProperty("base")
-	public Common base(URI base) {
-		this.base = base;
-		return this;
-	}
-
-	/**
-	 * Sets the URI base of this object.
-	 *
-	 * @param base The URI base of this object.
-	 * @return This object (for method chaining).
-	 */
-	public Common base(String base) {
+	public Common base(Object base) {
 		this.base = toURI(base);
 		return this;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/atom/Content.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Content.java b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Content.java
index 4801b03..c8cd0f2 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Content.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Content.java
@@ -12,10 +12,13 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
+import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
+import java.net.*;
 import java.net.URI;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.xml.annotation.*;
 
@@ -108,13 +111,18 @@ public class Content extends Text {
 
 	/**
 	 * Sets the source URI.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
 	 * @param src The source URI.
 	 * @return This object (for method chaining).
 	 */
 	@BeanProperty("src")
-	public Content src(URI src) {
-		this.src = src;
+	public Content src(Object src) {
+		this.src = toURI(src);
 		return this;
 	}
 
@@ -136,17 +144,10 @@ public class Content extends Text {
 	}
 
 	@Override /* Common */
-	public Content base(URI base) {
+	public Content base(Object base) {
 		super.base(base);
 		return this;
 	}
-
-	@Override /* Common */
-	public Content base(String base) {
-		super.base(base);
-		return this;
-	}
-
 	@Override /* Common */
 	public Content lang(String lang) {
 		super.lang(lang);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/atom/Entry.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Entry.java b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Entry.java
index 211fa99..251a3d6 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Entry.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Entry.java
@@ -14,7 +14,6 @@ package org.apache.juneau.dto.atom;
 
 import static org.apache.juneau.dto.atom.Utils.*;
 
-import java.net.URI;
 import java.util.*;
 
 import org.apache.juneau.annotation.*;
@@ -273,7 +272,7 @@ public class Entry extends CommonEntry {
 	}
 
 	@Override /* Common */
-	public Entry base(URI base) {
+	public Entry base(Object base) {
 		super.base(base);
 		return this;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/atom/Feed.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Feed.java b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Feed.java
index 9c8614e..0adc465 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Feed.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Feed.java
@@ -14,7 +14,6 @@ package org.apache.juneau.dto.atom;
 
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
-import java.net.URI;
 import java.util.*;
 
 import org.apache.juneau.annotation.*;
@@ -286,7 +285,7 @@ public class Feed extends CommonEntry {
 	}
 
 	@Override /* Common */
-	public Feed base(URI base) {
+	public Feed base(Object base) {
 		super.base(base);
 		return this;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/atom/Generator.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Generator.java b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Generator.java
index be879f3..0d16ff6 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Generator.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Generator.java
@@ -12,11 +12,13 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
-import static org.apache.juneau.dto.atom.Utils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
+import java.net.*;
 import java.net.URI;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.xml.annotation.*;
 
@@ -80,24 +82,17 @@ public class Generator extends Common {
 
 	/**
 	 * Sets the URI of this generator statement.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
 	 * @param uri The URI of this generator statement.
 	 * @return This object (for method chaining).
 	 */
 	@BeanProperty("uri")
-	public Generator uri(URI uri) {
-		this.uri = uri;
-		return this;
-	}
-
-	/**
-	 * Sets the URI of this generator statement.
-	 *
-	 * @param uri The URI of this generator statement.
-	 * @return This object (for method chaining).
-	 */
-	@BeanProperty("uri")
-	public Generator uri(String uri) {
+	public Generator uri(Object uri) {
 		this.uri = toURI(uri);
 		return this;
 	}
@@ -152,7 +147,7 @@ public class Generator extends Common {
 	//--------------------------------------------------------------------------------
 
 	@Override /* Common */
-	public Generator base(URI base) {
+	public Generator base(Object base) {
 		super.base(base);
 		return this;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/atom/Icon.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Icon.java b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Icon.java
index a537163..37f0f03 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Icon.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Icon.java
@@ -12,11 +12,13 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
-import static org.apache.juneau.dto.atom.Utils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
+import java.net.*;
 import java.net.URI;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.xml.annotation.*;
 
@@ -49,19 +51,15 @@ public class Icon extends Common {
 
 	/**
 	 * Normal constructor.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
 	 * @param uri The URI of the icon.
 	 */
-	public Icon(URI uri) {
-		uri(uri);
-	}
-
-	/**
-	 * Normal constructor.
-	 *
-	 * @param uri The URI of the icon.
-	 */
-	public Icon(String uri) {
+	public Icon(Object uri) {
 		uri(uri);
 	}
 
@@ -85,24 +83,17 @@ public class Icon extends Common {
 
 	/**
 	 * Sets the URI of this icon.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
 	 * @param uri The URI of this icon.
 	 * @return This object (for method chaining).
 	 */
 	@BeanProperty("uri")
-	public Icon uri(URI uri) {
-		this.uri = uri;
-		return this;
-	}
-
-	/**
-	 * Sets the URI of this icon.
-	 *
-	 * @param uri The URI of this icon.
-	 * @return This object (for method chaining).
-	 */
-	@BeanProperty("uri")
-	public Icon uri(String uri) {
+	public Icon uri(Object uri) {
 		this.uri = toURI(uri);
 		return this;
 	}
@@ -113,7 +104,7 @@ public class Icon extends Common {
 	//--------------------------------------------------------------------------------
 
 	@Override /* Common */
-	public Icon base(URI base) {
+	public Icon base(Object base) {
 		super.base(base);
 		return this;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/atom/Id.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Id.java b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Id.java
index 5cf4f30..ca64b85 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Id.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Id.java
@@ -14,8 +14,6 @@ package org.apache.juneau.dto.atom;
 
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
-import java.net.URI;
-
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.xml.annotation.*;
 
@@ -90,7 +88,7 @@ public class Id extends Common {
 	//--------------------------------------------------------------------------------
 
 	@Override /* Common */
-	public Id base(URI base) {
+	public Id base(Object base) {
 		super.base(base);
 		return this;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/atom/Link.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Link.java b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Link.java
index df93a9c..6d80912 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Link.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Link.java
@@ -14,8 +14,6 @@ package org.apache.juneau.dto.atom;
 
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
-import java.net.URI;
-
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.xml.annotation.*;
 
@@ -223,7 +221,7 @@ public class Link extends Common {
 	//--------------------------------------------------------------------------------
 
 	@Override /* Common */
-	public Link base(URI base) {
+	public Link base(Object base) {
 		super.base(base);
 		return this;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/atom/Logo.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Logo.java b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Logo.java
index fe61a62..8f648cc 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Logo.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Logo.java
@@ -12,11 +12,13 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
-import static org.apache.juneau.dto.atom.Utils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
+import java.net.*;
 import java.net.URI;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.xml.annotation.*;
 
@@ -49,19 +51,15 @@ public class Logo extends Common {
 
 	/**
 	 * Normal constructor.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
 	 * @param uri The URI of the logo.
 	 */
-	public Logo(URI uri) {
-		uri(uri);
-	}
-
-	/**
-	 * Normal constructor.
-	 *
-	 * @param uri The URI of the logo.
-	 */
-	public Logo(String uri) {
+	public Logo(Object uri) {
 		uri(uri);
 	}
 
@@ -85,24 +83,17 @@ public class Logo extends Common {
 
 	/**
 	 * Sets the URI of the logo.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
 	 * @param uri The URI of the logo.
 	 * @return This object (for method chaining).
 	 */
 	@BeanProperty("uri")
-	public Logo uri(URI uri) {
-		this.uri = uri;
-		return this;
-	}
-
-	/**
-	 * Sets the URI of the logo.
-	 *
-	 * @param uri The URI of the logo.
-	 * @return This object (for method chaining).
-	 */
-	@BeanProperty("uri")
-	public Logo uri(String uri) {
+	public Logo uri(Object uri) {
 		this.uri = toURI(uri);
 		return this;
 	}
@@ -113,7 +104,7 @@ public class Logo extends Common {
 	//--------------------------------------------------------------------------------
 
 	@Override /* Common */
-	public Logo base(URI base) {
+	public Logo base(Object base) {
 		super.base(base);
 		return this;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/atom/Person.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Person.java b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Person.java
index 34d28e3..aa5c336 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Person.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Person.java
@@ -12,10 +12,13 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
-import static org.apache.juneau.dto.atom.Utils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 
+import java.net.*;
 import java.net.URI;
 
+import org.apache.juneau.*;
+
 import org.apache.juneau.annotation.*;
 
 /**
@@ -97,24 +100,17 @@ public class Person extends Common {
 
 	/**
 	 * Sets the URI of the person.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
 	 * @param uri The URI of the person.
 	 * @return This object (for method chaining).
 	 */
 	@BeanProperty("uri")
-	public Person uri(URI uri) {
-		this.uri = uri;
-		return this;
-	}
-
-	/**
-	 * Sets the URI of the person.
-	 *
-	 * @param uri The URI of the person.
-	 * @return This object (for method chaining).
-	 */
-	@BeanProperty("uri")
-	public Person uri(String uri) {
+	public Person uri(Object uri) {
 		this.uri = toURI(uri);
 		return this;
 	}
@@ -146,7 +142,7 @@ public class Person extends Common {
 	//--------------------------------------------------------------------------------
 
 	@Override /* Common */
-	public Person base(URI base) {
+	public Person base(Object base) {
 		super.base(base);
 		return this;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/atom/Source.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Source.java b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Source.java
index 187f0b0..901be93 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Source.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Source.java
@@ -12,7 +12,6 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
-import java.net.URI;
 import java.util.*;
 
 import org.apache.juneau.annotation.*;
@@ -231,7 +230,7 @@ public class Source extends CommonEntry {
 	}
 
 	@Override /* Common */
-	public Source base(URI base) {
+	public Source base(Object base) {
 		super.base(base);
 		return this;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/atom/Text.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Text.java b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Text.java
index 40957e0..d38c823 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Text.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Text.java
@@ -14,8 +14,6 @@ package org.apache.juneau.dto.atom;
 
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
-import java.net.URI;
-
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.xml.annotation.*;
 
@@ -133,13 +131,7 @@ public class Text extends Common {
 	//--------------------------------------------------------------------------------
 
 	@Override /* Common */
-	public Text base(URI base) {
-		super.base(base);
-		return this;
-	}
-
-	@Override /* Common */
-	public Text base(String base) {
+	public Text base(Object base) {
 		super.base(base);
 		return this;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/atom/Utils.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Utils.java b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Utils.java
index 80f80a6..6bedd91 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/atom/Utils.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/atom/Utils.java
@@ -12,7 +12,6 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
-import java.net.*;
 import java.util.*;
 
 import javax.xml.bind.*;
@@ -32,20 +31,6 @@ import javax.xml.bind.*;
 class Utils {
 
 	/**
-	 * Converts a string to a URI without a {@link URISyntaxException}
-	 *
-	 * @param uri The URI string to convert.
-	 * @return A new URI object.
-	 */
-	static final URI toURI(String uri) {
-		try {
-			return new URI(uri);
-		} catch (URISyntaxException e) {
-			throw new RuntimeException(e);
-		}
-	}
-
-	/**
 	 * Converts an ISO8601 date-time string to a {@link Calendar}.
 	 *
 	 * @param lexicalXSDDateTime The ISO8601 date-time string.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/html5/A.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/html5/A.java b/juneau-core/src/main/java/org/apache/juneau/dto/html5/A.java
index 795f256..07a4a00 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/html5/A.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/html5/A.java
@@ -14,7 +14,9 @@ package org.apache.juneau.dto.html5;
 
 
 import java.net.*;
+import java.net.URI;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 
 /**
@@ -46,12 +48,18 @@ public class A extends HtmlElementMixed {
 	/**
 	 * <a class="doclink" href="https://www.w3.org/TR/html5/links.html#attr-hyperlink-href">href</a> attribute.
 	 * Address of the hyperlink.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
 	 * @param href The new value for this attribute.
 	 * Typically a {@link URL} or {@link String}.
 	 * @return This object (for method chaining).
 	 */
 	public final A href(Object href) {
-		attr("href", href);
+		attrUri("href", href);
 		return this;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/html5/Area.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Area.java b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Area.java
index 2ab1eef..ad6f335 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Area.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Area.java
@@ -13,7 +13,9 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
+import java.net.URI;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 
 /**
@@ -68,12 +70,18 @@ public class Area extends HtmlElementVoid {
 	/**
 	 * <a class="doclink" href="https://www.w3.org/TR/html5/links.html#attr-hyperlink-href">href</a> attribute.
 	 * Address of the hyperlink.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
 	 * @param href The new value for this attribute.
 	 * Typically a {@link URL} or {@link String}.
 	 * @return This object (for method chaining).
 	 */
 	public final Area href(Object href) {
-		attr("href", href);
+		attrUri("href", href);
 		return this;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/html5/Audio.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Audio.java b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Audio.java
index 3caa1b7..b5fef05 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Audio.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Audio.java
@@ -13,7 +13,9 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
+import java.net.URI;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 
 /**
@@ -115,12 +117,18 @@ public class Audio extends HtmlElementContainer {
 	/**
 	 * <a class="doclink" href="https://www.w3.org/TR/html5/embedded-content-0.html#attr-media-src">src</a> attribute.
 	 * Address of the resource.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
 	 * @param src The new value for this attribute.
 	 * Typically a {@link URL} or {@link String}.
 	 * @return This object (for method chaining).
 	 */
 	public final Audio src(Object src) {
-		attr("src", src);
+		attrUri("src", src);
 		return this;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/html5/Base.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Base.java b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Base.java
index 2dc1314..1618c86 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Base.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Base.java
@@ -13,7 +13,9 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
+import java.net.URI;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 
 /**
@@ -34,12 +36,18 @@ public class Base extends HtmlElementVoid {
 	/**
 	 * <a class="doclink" href="https://www.w3.org/TR/html5/document-metadata.html#attr-base-href">href</a> attribute.
 	 * Document base URL.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
 	 * @param href The new value for this attribute.
 	 * Typically a {@link URL} or {@link String}.
 	 * @return This object (for method chaining).
 	 */
 	public final Base href(Object href) {
-		attr("href", href);
+		attrUri("href", href);
 		return this;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/html5/Button.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Button.java b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Button.java
index b122243..11fa930 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Button.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Button.java
@@ -12,6 +12,10 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.html5;
 
+import java.net.*;
+import java.net.URI;
+
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 
 /**
@@ -67,11 +71,17 @@ public class Button extends HtmlElementMixed {
 	/**
 	 * <a class="doclink" href="https://www.w3.org/TR/html5/forms.html#attr-fs-formaction">formaction</a> attribute.
 	 * URL to use for form submission.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
 	 * @param formaction The new value for this attribute.
 	 * @return This object (for method chaining).
 	 */
 	public final Button formaction(String formaction) {
-		attr("formaction", formaction);
+		attrUri("formaction", formaction);
 		return this;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/html5/Embed.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Embed.java b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Embed.java
index 18a1e26..1e1e6fa 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Embed.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Embed.java
@@ -13,7 +13,9 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
+import java.net.URI;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 
 /**
@@ -46,12 +48,18 @@ public class Embed extends HtmlElementVoid {
 	/**
 	 * <a class="doclink" href="https://www.w3.org/TR/html5/embedded-content-0.html#attr-embed-src">src</a> attribute.
 	 * Address of the resource.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
 	 * @param src The new value for this attribute.
 	 * Typically a {@link URL} or {@link String}.
 	 * @return This object (for method chaining).
 	 */
 	public final Embed src(Object src) {
-		attr("src", src);
+		attrUri("src", src);
 		return this;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/html5/Form.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Form.java b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Form.java
index dddd0e9..e8b517a 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Form.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Form.java
@@ -12,6 +12,10 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.html5;
 
+import java.net.*;
+import java.net.URI;
+
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 
 /**
@@ -43,11 +47,17 @@ public class Form extends HtmlElementMixed {
 	/**
 	 * <a class="doclink" href="https://www.w3.org/TR/html5/forms.html#attr-fs-action">action</a> attribute.
 	 * URL to use for form submission.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
 	 * @param action The new value for this attribute.
 	 * @return This object (for method chaining).
 	 */
 	public final Form action(String action) {
-		attr("action", action);
+		attrUri("action", action);
 		return this;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/html5/HtmlElement.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/html5/HtmlElement.java b/juneau-core/src/main/java/org/apache/juneau/dto/html5/HtmlElement.java
index 8c21a03..831db27 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/html5/HtmlElement.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/html5/HtmlElement.java
@@ -14,11 +14,16 @@ package org.apache.juneau.dto.html5;
 
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
+import java.net.*;
+import java.net.URI;
 import java.util.*;
+import java.util.Map.*;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.html.*;
-import org.apache.juneau.utils.*;
+import org.apache.juneau.internal.*;
+import org.apache.juneau.utils.ObjectUtils;
 import org.apache.juneau.xml.annotation.*;
 
 /**
@@ -56,6 +61,11 @@ public abstract class HtmlElement {
 	 */
 	@BeanProperty("a")
 	public HtmlElement setAttrs(LinkedHashMap<String,Object> attrs) {
+		for (Entry<String,Object> e : attrs.entrySet()) {
+			String key = e.getKey();
+			if ("url".equals(key) || "href".equals(key) || key.endsWith("action"))
+				e.setValue(StringUtils.toURI(e.getValue()));
+		}
 		this.attrs = attrs;
 		return this;
 	}
@@ -70,11 +80,35 @@ public abstract class HtmlElement {
 	public HtmlElement attr(String key, Object val) {
 		if (this.attrs == null)
 			this.attrs = new LinkedHashMap<String,Object>();
+		if ("url".equals(key) || "href".equals(key) || key.endsWith("action"))
+			val = StringUtils.toURI(val);
 		this.attrs.put(key, val);
 		return this;
 	}
 
 	/**
+	 * Adds an arbitrary URI attribute to this element.
+	 * <p>
+	 * Same as {@link #attr(String, Object)}, except if the value is
+	 * a string that appears to be a URI (e.g. <js>"servlet:/xxx"</js>).
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
+	 * @param key The attribute name.
+	 * @param val The attribute value.
+	 * @return This object (for method chaining).
+	 */
+	public HtmlElement attrUri(String key, Object val) {
+		if (this.attrs == null)
+			this.attrs = new LinkedHashMap<String,Object>();
+		this.attrs.put(key, StringUtils.toURI(val));
+		return this;
+	}
+
+	/**
 	 * Returns the attribute with the specified name.
 	 *
 	 * @param key The attribute name.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/html5/Iframe.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Iframe.java b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Iframe.java
index 0ebf8d3..70757a4 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Iframe.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Iframe.java
@@ -13,7 +13,9 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
+import java.net.URI;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 
 /**
@@ -68,12 +70,18 @@ public class Iframe extends HtmlElementMixed {
 	/**
 	 * <a class="doclink" href="https://www.w3.org/TR/html5/embedded-content-0.html#attr-iframe-src">src</a> attribute.
 	 * Address of the resource.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
 	 * @param src The new value for this attribute.
 	 * Typically a {@link URL} or {@link String}.
 	 * @return This object (for method chaining).
 	 */
 	public final Iframe src(Object src) {
-		attr("src", src);
+		attrUri("src", src);
 		return this;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/html5/Img.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Img.java b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Img.java
index b9a8a8c..ab8ea60 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Img.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Img.java
@@ -13,7 +13,9 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
+import java.net.URI;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 
 /**
@@ -79,12 +81,18 @@ public class Img extends HtmlElementVoid {
 	/**
 	 * <a class="doclink" href="https://www.w3.org/TR/html5/embedded-content-0.html#attr-img-src">src</a> attribute.
 	 * Address of the resource.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
 	 * @param src The new value for this attribute.
 	 * Typically a {@link URL} or {@link String}.
 	 * @return This object (for method chaining).
 	 */
 	public final Img src(Object src) {
-		attr("src", src);
+		attrUri("src", src);
 		return this;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/html5/Link.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Link.java b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Link.java
index 2d1f223..c06c501 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Link.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Link.java
@@ -13,7 +13,9 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
+import java.net.URI;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 
 /**
@@ -45,12 +47,18 @@ public class Link extends HtmlElementVoid {
 	/**
 	 * <a class="doclink" href="https://www.w3.org/TR/html5/document-metadata.html#attr-link-href">href</a> attribute.
 	 * Address of the hyperlink.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
 	 * @param href The new value for this attribute.
 	 * Typically a {@link URL} or {@link String}.
 	 * @return This object (for method chaining).
 	 */
 	public final Link href(Object href) {
-		attr("href", href);
+		attrUri("href", href);
 		return this;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/html5/Script.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Script.java b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Script.java
index aa51cd0..872545b 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Script.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Script.java
@@ -13,7 +13,9 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
+import java.net.URI;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 
 /**
@@ -80,12 +82,18 @@ public class Script extends HtmlElementRawText {
 	/**
 	 * <a class="doclink" href="https://www.w3.org/TR/html5/scripting-1.html#attr-script-src">src</a> attribute.
 	 * Address of the resource.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
 	 * @param src The new value for this attribute.
 	 * Typically a {@link URL} or {@link String}.
 	 * @return This object (for method chaining).
 	 */
 	public final Script src(Object src) {
-		attr("src", src);
+		attrUri("src", src);
 		return this;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/html5/Source.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Source.java b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Source.java
index 9286729..c820690 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Source.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Source.java
@@ -13,7 +13,9 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
+import java.net.URI;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 
 /**
@@ -34,12 +36,18 @@ public class Source extends HtmlElementVoid {
 	/**
 	 * <a class="doclink" href="https://www.w3.org/TR/html5/embedded-content-0.html#attr-source-src">src</a> attribute.
 	 * Address of the resource.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
 	 * @param src The new value for this attribute.
 	 * Typically a {@link URL} or {@link String}.
 	 * @return This object (for method chaining).
 	 */
 	public final Source src(Object src) {
-		attr("src", src);
+		attrUri("src", src);
 		return this;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/html5/Track.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Track.java b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Track.java
index 3ae27f7..09c7d57 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Track.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Track.java
@@ -13,7 +13,9 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
+import java.net.URI;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 
 /**
@@ -67,12 +69,18 @@ public class Track extends HtmlElementVoid {
 	/**
 	 * <a class="doclink" href="https://www.w3.org/TR/html5/embedded-content-0.html#attr-track-src">src</a> attribute.
 	 * Address of the resource.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
 	 * @param src The new value for this attribute.
 	 * Typically a {@link URL} or {@link String}.
 	 * @return This object (for method chaining).
 	 */
 	public final Track src(Object src) {
-		attr("src", src);
+		attrUri("src", src);
 		return this;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/html5/Video.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Video.java b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Video.java
index 6616884..7e4c6a2 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/html5/Video.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/html5/Video.java
@@ -13,7 +13,9 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
+import java.net.URI;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 
 /**
@@ -138,12 +140,18 @@ public class Video extends HtmlElementContainer {
 	/**
 	 * <a class="doclink" href="https://www.w3.org/TR/html5/embedded-content-0.html#attr-media-src">src</a> attribute.
 	 * Address of the resource.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
 	 * @param src The new value for this attribute.
 	 * Typically a {@link URL} or {@link String}.
 	 * @return This object (for method chaining).
 	 */
 	public final Video src(Object src) {
-		attr("src", src);
+		attrUri("src", src);
 		return this;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/Schema.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/Schema.java b/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/Schema.java
index d92bec3..550a0b2 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/Schema.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/Schema.java
@@ -12,6 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.jsonschema;
 
+import static org.apache.juneau.internal.StringUtils.*;
+
+import java.net.*;
 import java.net.URI;
 import java.util.*;
 
@@ -126,27 +129,21 @@ public class Schema {
 
 	/**
 	 * Bean property setter:  <property>id</property>.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
 	 * @param id The new value for the <property>id</property> property on this bean.
 	 * @return This object (for method chaining).
 	 */
-	public Schema setId(URI id) {
-		this.id = id;
+	public Schema setId(Object id) {
+		this.id = toURI(id);
 		return this;
 	}
 
 	/**
-	 * Bean property setter:  <property>id</property>.
-	 *
-	 * @param id The new value for the <property>id</property> property on this bean.
-	 * The parameter must be a valid URI.  It can be <jk>null</jk>.
-	 * @return This object (for method chaining).
-	 */
-	public Schema setId(String id) {
-		return setId(id == null ? null : URI.create(id));
-	}
-
-	/**
 	 * Bean property getter:  <property>$schema</property>.
 	 *
 	 * @return The value of the <property>$schema</property> property on this bean, or <jk>null</jk> if it is not set.
@@ -158,28 +155,22 @@ public class Schema {
 
 	/**
 	 * Bean property setter:  <property>$schema</property>.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
 	 * @param schemaVersion The new value for the <property>schemaVersion</property> property on this bean.
 	 * @return This object (for method chaining).
 	 */
 	@BeanProperty("$schema")
-	public Schema setSchemaVersionUri(URI schemaVersion) {
-		this.schemaVersion = schemaVersion;
+	public Schema setSchemaVersionUri(Object schemaVersion) {
+		this.schemaVersion = toURI(schemaVersion);
 		return this;
 	}
 
 	/**
-	 * Bean property setter:  <property>schemaVersion</property>.
-	 *
-	 * @param schemaVersion The new value for the <property>schemaVersion</property> property on this bean.
-	 * The parameter must be a valid URI.  It can be <jk>null</jk>.
-	 * @return This object (for method chaining).
-	 */
-	public Schema setSchemaVersionUri(String schemaVersion) {
-		return setSchemaVersionUri(schemaVersion == null ? null : URI.create(schemaVersion));
-	}
-
-	/**
 	 * Bean property getter:  <property>title</property>.
 	 *
 	 * @return The value of the <property>title</property> property, or <jk>null</jk> if it is not set.
@@ -1287,13 +1278,18 @@ public class Schema {
 
 	/**
 	 * Bean property setter:  <property>$ref</property>.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
 	 * @param ref The new value for the <property>$ref</property> property on this bean.
 	 * @return This object (for method chaining).
 	 */
 	@BeanProperty("$ref")
-	public Schema setRef(URI ref) {
-		this.ref = ref;
+	public Schema setRef(Object ref) {
+		this.ref = toURI(ref);
 		return this;
 	}
 
@@ -1364,19 +1360,6 @@ public class Schema {
 		if (not != null)
 			not.setMaster(master);
 	}
-
-
-	/**
-	 * Bean property setter:  <property>$ref</property>.
-	 *
-	 * @param ref The new value for the <property>$ref</property> property on this bean.
-	 * The parameter must be a valid URI.  It can be <jk>null</jk>.
-	 * @return This object (for method chaining).
-	 */
-	public Schema setRef(String ref) {
-		return setRef(ref == null ? null : URI.create(ref));
-	}
-
 	/**
 	 * If this schema is a reference to another schema (i.e. has its <property>$ref</property> property set),
 	 * 	this method will retrieve the referenced schema from the schema map registered with this schema.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/SchemaMap.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/SchemaMap.java b/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/SchemaMap.java
index 2b12e0a..98a06f5 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/SchemaMap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/SchemaMap.java
@@ -12,10 +12,12 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.jsonschema;
 
+import static org.apache.juneau.internal.StringUtils.*;
 import java.io.*;
 import java.net.*;
 import java.util.concurrent.*;
 
+import org.apache.juneau.*;
 import org.apache.juneau.json.*;
 
 /**
@@ -40,30 +42,30 @@ public abstract class SchemaMap extends ConcurrentHashMap<URI,Schema> {
 
 	private static final long serialVersionUID = 1L;
 
-	@Override /* Map */
-	public Schema get(Object uri) {
-		if (uri == null)
-			return null;
-		return get(URI.create(uri.toString()));
-	}
-
 	/**
 	 * Return the {@link Schema} object at the specified URI.
 	 * If this schema object has not been loaded yet, calls {@link #load(URI)}.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
 	 * @param uri The URI of the schema to retrieve.
 	 * @return The Schema, or <jk>null</jk> if schema was not located and could not be loaded.
 	 */
-	public Schema get(URI uri) {
-		Schema s = super.get(uri);
+	@Override /* Map */
+	public Schema get(Object uri) {
+		URI u = toURI(uri);
+		Schema s = super.get(u);
 		if (s != null)
 			return s;
 		synchronized(this) {
-			s = load(uri);
+			s = load(u);
 			if (s != null) {
 				// Note:  Can't use add(Schema...) since the ID property may not be set.
 				s.setSchemaMap(this);
-				put(uri, s);
+				put(u, s);
 			}
 			return s;
 		}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/SchemaRef.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/SchemaRef.java b/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/SchemaRef.java
index 7b59186..ef1a8e1 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/SchemaRef.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/SchemaRef.java
@@ -14,6 +14,8 @@ package org.apache.juneau.dto.jsonschema;
 
 import java.net.*;
 
+import org.apache.juneau.*;
+
 /**
  * Convenience class for representing a schema reference such as <js>"{'$ref':'/url/to/ref'}"</js>.
  * <p>
@@ -36,10 +38,15 @@ public class SchemaRef extends Schema {
 
 	/**
 	 * Constructor.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
 	 * @param uri The URI of the target reference.  Can be <jk>null</jk>.
 	 */
-	public SchemaRef(String uri) {
-		this.setRef(uri == null ? null : URI.create(uri));
+	public SchemaRef(Object uri) {
+		this.setRef(uri);
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/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 6b55535..54102a8 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
@@ -12,6 +12,12 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
+import static org.apache.juneau.internal.StringUtils.*;
+
+import java.net.*;
+import java.net.URI;
+
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 
 /**
@@ -40,7 +46,7 @@ import org.apache.juneau.annotation.*;
 public class Contact extends SwaggerElement {
 
 	private String name;
-	private String url;
+	private URI url;
 	private String email;
 
 	/**
@@ -84,31 +90,34 @@ public class Contact extends SwaggerElement {
 	 *
 	 * @return The value of the <property>url</property> property on this bean, or <jk>null</jk> if it is not set.
 	 */
-	public String getUrl() {
+	public URI getUrl() {
 		return url;
 	}
 
 	/**
 	 * Bean property setter:  <property>url</property>.
 	 * <p>
-	 * The URL pointing to the contact information. MUST be in the format of a URL.
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
 	 * @param url The new value for the <property>url</property> property on this bean.
 	 * @return This object (for method chaining).
 	 */
-	public Contact setUrl(String url) {
-		this.url = url;
+	public Contact setUrl(Object url) {
+		this.url = toURI(url);
 		return this;
 	}
 
 	/**
-	 * Synonym for {@link #setUrl(String)}.
+	 * Synonym for {@link #setUrl(Object)}.
 	 *
 	 * @param url The new value for the <property>url</property> property on this bean.
 	 * @return This object (for method chaining).
 	 */
-	public Contact url(String url) {
-		return setName(url);
+	public Contact url(Object url) {
+		return setUrl(url);
 	}
 
 	/**

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/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 3882f43..2679755 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
@@ -12,6 +12,12 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
+import static org.apache.juneau.internal.StringUtils.*;
+
+import java.net.*;
+import java.net.URI;
+
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 
 /**
@@ -39,7 +45,7 @@ import org.apache.juneau.annotation.*;
 public class ExternalDocumentation extends SwaggerElement {
 
 	private String description;
-	private String url;
+	private URI url;
 
 	/**
 	 * Bean property getter:  <property>description</property>.
@@ -78,34 +84,42 @@ public class ExternalDocumentation extends SwaggerElement {
 	/**
 	 * Bean property getter:  <property>url</property>.
 	 * <p>
-	 * Required. The URL for the target documentation. Value MUST be in the format of a URL.
+	 * Required. The URL for the target documentation.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
 	 * @return The value of the <property>url</property> property on this bean, or <jk>null</jk> if it is not set.
 	 */
-	public String getUrl() {
+	public URI getUrl() {
 		return url;
 	}
 
 	/**
 	 * Bean property setter:  <property>url</property>.
 	 * <p>
-	 * Required. The URL for the target documentation. Value MUST be in the format of a URL.
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
 	 * @param url The new value for the <property>url</property> property on this bean.
 	 * @return This object (for method chaining).
 	 */
-	public ExternalDocumentation setUrl(String url) {
-		this.url = url;
+	public ExternalDocumentation setUrl(Object url) {
+		this.url = toURI(url);
 		return this;
 	}
 
 	/**
-	 * Synonym for {@link #setUrl(String)}.
+	 * Synonym for {@link #setUrl(Object)}.
 	 *
 	 * @param url The new value for the <property>url</property> property on this bean.
 	 * @return This object (for method chaining).
 	 */
-	public ExternalDocumentation url(String url) {
+	public ExternalDocumentation url(Object url) {
 		return setUrl(url);
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/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 3c720d7..13cef34 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
@@ -12,6 +12,12 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
+import static org.apache.juneau.internal.StringUtils.*;
+
+import java.net.*;
+import java.net.URI;
+
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 
 /**
@@ -39,7 +45,7 @@ import org.apache.juneau.annotation.*;
 public class License extends SwaggerElement {
 
 	private String name;
-	private String url;
+	private URI url;
 
 	/**
 	 * Bean property getter:  <property>name</property>.
@@ -78,34 +84,42 @@ public class License extends SwaggerElement {
 	/**
 	 * Bean property getter:  <property>url</property>.
 	 * <p>
-	 * A URL to the license used for the API. MUST be in the format of a URL.
+	 * A URL to the license used for the API.
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
 	 * @return The value of the <property>url</property> property on this bean, or <jk>null</jk> if it is not set.
 	 */
-	public String getUrl() {
+	public URI getUrl() {
 		return url;
 	}
 
 	/**
 	 * Bean property setter:  <property>url</property>.
 	 * <p>
-	 * A URL to the license used for the API. MUST be in the format of a URL.
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
 	 * @param url The new value for the <property>url</property> property on this bean.
 	 * @return This object (for method chaining).
 	 */
-	public License setUrl(String url) {
-		this.url = url;
+	public License setUrl(Object url) {
+		this.url = toURI(url);
 		return this;
 	}
 
 	/**
-	 * Synonym for {@link #setUrl(String)}.
+	 * Synonym for {@link #setUrl(Object)}.
 	 *
 	 * @param url The new value for the <property>url</property> property on this bean.
 	 * @return This object (for method chaining).
 	 */
-	public License url(String url) {
+	public License url(Object url) {
 		return setUrl(url);
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/dto/swagger/SwaggerBuilder.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/SwaggerBuilder.java b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/SwaggerBuilder.java
index f49263d..aa71038 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/swagger/SwaggerBuilder.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/swagger/SwaggerBuilder.java
@@ -12,6 +12,10 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
+import java.net.*;
+
+import org.apache.juneau.*;
+
 /**
  * Various useful static methods for creating Swagger elements.
  *
@@ -44,13 +48,16 @@ public class SwaggerBuilder {
 	}
 
 	/**
-	 * Creates an {@link Contact} element with the specified {@link Contact#name(String)}, {@link Contact#url(String)}, and {@link Contact#email(String)}, attributes.
+	 * Creates an {@link Contact} element with the specified {@link Contact#name(String)}, {@link Contact#url(Object)}, and {@link Contact#email(String)}, attributes.
 	 * @param name The {@link Contact#name(String)} attribute.
-	 * @param url The {@link Contact#url(String)} attribute.
+	 * @param url The {@link Contact#url(Object)} attribute.
+	 * 	The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * 	<br>Strings must be valid URIs.
+	 * 	<br>URIs defined by {@link UriResolver} can be used for values.
 	 * @param email The {@link Contact#email(String)} attribute.
 	 * @return The new element.
 	 */
-	public static final Contact contact(String name, String url, String email) {
+	public static final Contact contact(String name, Object url, String email) {
 		return contact().name(name).url(url).email(email);
 	}
 
@@ -63,21 +70,27 @@ public class SwaggerBuilder {
 	}
 
 	/**
-	 * Creates an {@link ExternalDocumentation} element with the specified {@link ExternalDocumentation#url(String)} attribute.
-	 * @param url The {@link ExternalDocumentation#url(String)} attribute.
+	 * Creates an {@link ExternalDocumentation} element with the specified {@link ExternalDocumentation#url(Object)} attribute.
+	 * @param url The {@link ExternalDocumentation#url(Object)} attribute.
+	 * 	The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * 	<br>Strings must be valid URIs.
+	 * 	<br>URIs defined by {@link UriResolver} can be used for values.
 	 * @return The new element.
 	 */
-	public static final ExternalDocumentation externalDocumentation(String url) {
+	public static final ExternalDocumentation externalDocumentation(Object url) {
 		return externalDocumentation().url(url);
 	}
 
 	/**
-	 * Creates an {@link ExternalDocumentation} element with the specified {@link ExternalDocumentation#url(String)} and {@link ExternalDocumentation#description(String)} attributes.
-	 * @param url The {@link ExternalDocumentation#url(String)} attribute.
+	 * Creates an {@link ExternalDocumentation} element with the specified {@link ExternalDocumentation#url(Object)} and {@link ExternalDocumentation#description(String)} attributes.
+	 * @param url The {@link ExternalDocumentation#url(Object)} attribute.
+	 * 	The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * 	<br>Strings must be valid URIs.
+	 * 	<br>URIs defined by {@link UriResolver} can be used for values.
 	 * @param description The {@link ExternalDocumentation#description(String)} attribute.
 	 * @return The new element.
 	 */
-	public static final ExternalDocumentation externalDocumentation(String url, String description) {
+	public static final ExternalDocumentation externalDocumentation(Object url, String description) {
 		return externalDocumentation().url(url).description(description);
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/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 b8f5ddf..ebea8a3 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
@@ -75,6 +75,8 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 	 * 	<li><b>Session-overridable:</b> <jk>true</jk>
 	 * </ul>
 	 * <p>
+	 * Specifies the text for the title that shows up in the header section of the page generated by the basic template.
+	 * <p>
 	 *
 	 * <h5 class='section'>Example:</h5>
 	 * <p>
@@ -132,6 +134,8 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 	 * 	<li><b>Session-overridable:</b> <jk>true</jk>
 	 * </ul>
 	 * <p>
+	 * Specifies the text for the subtitle that shows up in the header section of the page generated by the basic template.
+	 * <p>
 	 *
 	 * <h5 class='section'>Example:</h5>
 	 * <p>
@@ -180,6 +184,23 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 	public static final String HTMLDOC_description = "HtmlSerializer.description";
 
 	/**
+	 * <b>Configuration property:</b>  Page branding.
+	 * <p>
+	 * <ul>
+	 * 	<li><b>Name:</b> <js>"HtmlSerializer.branding"</js>
+	 * 	<li><b>Data type:</b> <code>String</code>
+	 * 	<li><b>Default:</b> <jk>null</jk>
+	 * 	<li><b>Session-overridable:</b> <jk>true</jk>
+	 * </ul>
+	 * <p>
+	 * Specifies arbitrary HTML for the header that can be used for adding custom branding to the page generated by the
+	 * 	basic template.
+	 * <p>
+	 * A value of <js>"NONE"</js> can be used to represent no value to differentiate it from an empty string.
+	 */
+	public static final String HTMLDOC_branding = "HtmlSerializer.branding";
+
+	/**
 	 * <b>Configuration property:</b>  Header section contents.
 	 * <p>
 	 * <ul>
@@ -476,7 +497,7 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 
 	final String[] css;
 	final Map<String,String> links;
-	final String title, description, header, nav, aside, footer, cssUrl, noResultsMessage;
+	final String title, description, branding, header, nav, aside, footer, cssUrl, noResultsMessage;
 	final boolean nowrap;
 	final HtmlDocTemplate template;
 
@@ -492,6 +513,7 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 		css = ps.getProperty(HTMLDOC_css, String[].class, new String[0]);
 		title = ps.getProperty(HTMLDOC_title, String.class, null);
 		description = ps.getProperty(HTMLDOC_description, String.class, null);
+		branding = ps.getProperty(HTMLDOC_branding, String.class, null);
 		header = ps.getProperty(HTMLDOC_header, String.class, null);
 		nav = ps.getProperty(HTMLDOC_nav, String.class, null);
 		aside = ps.getProperty(HTMLDOC_aside, String.class, null);
@@ -510,6 +532,7 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext {
 				.append("cssImports", css)
 				.append("title", title)
 				.append("text", description)
+				.append("branding", branding)
 				.append("header", header)
 				.append("nav", nav)
 				.append("links", links)

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
index 5cb8d91..15fff6b 100644
--- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
+++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
@@ -33,7 +33,7 @@ import org.apache.juneau.serializer.*;
  */
 public final class HtmlDocSerializerSession extends HtmlSerializerSession {
 
-	private final String title, description, header, nav, aside, footer, cssUrl, noResultsMessage;
+	private final String title, description, branding, header, nav, aside, footer, cssUrl, noResultsMessage;
 	private final String[] css;
 	private final Map<String,String> links;
 	private final boolean nowrap;
@@ -62,6 +62,7 @@ public final class HtmlDocSerializerSession extends HtmlSerializerSession {
 		if (op == null || op.isEmpty()) {
 			title = ctx.title;
 			description = ctx.description;
+			branding = ctx.branding;
 			header = ctx.header;
 			nav = ctx.nav;
 			aside = ctx.aside;
@@ -75,6 +76,7 @@ public final class HtmlDocSerializerSession extends HtmlSerializerSession {
 		} else {
 			title = op.getString(HTMLDOC_title, ctx.title);
 			description = op.getString(HTMLDOC_description, ctx.description);
+			branding = op.getString(HTMLDOC_branding, ctx.branding);
 			header = op.getString(HTMLDOC_header, ctx.nav);
 			nav = op.getString(HTMLDOC_nav, ctx.nav);
 			aside = op.getString(HTMLDOC_aside, ctx.aside);
@@ -134,6 +136,15 @@ public final class HtmlDocSerializerSession extends HtmlSerializerSession {
 	}
 
 	/**
+	 * Returns the {@link HtmlDocSerializerContext#HTMLDOC_branding} setting value in this context.
+	 * @return The {@link HtmlDocSerializerContext#HTMLDOC_branding} setting value in this context.
+	 * 	<jk>null</jk> if not specified.  Never an empty string.
+	 */
+	public final String getBranding() {
+		return branding;
+	}
+
+	/**
 	 * Returns the {@link HtmlDocSerializerContext#HTMLDOC_header} setting value in this context.
 	 * @return The {@link HtmlDocSerializerContext#HTMLDOC_header} setting value in this context.
 	 * 	<jk>null</jk> if not specified.  Never an empty string.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java
index 6553fdb..05f9705 100644
--- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java
+++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java
@@ -94,10 +94,13 @@ public class HtmlDocTemplateBasic implements HtmlDocTemplate {
 		} else {
 			String title = session.getTitle();
 			String description = session.getDescription();
+			String branding = session.getBranding();
 			if (exists(title))
 				w.oTag(1, "h3").attr("class", "title").append('>').text(title).eTag("h3").nl();
 			if (exists(description))
 				w.oTag(1, "h5").attr("class", "description").append('>').text(description).eTag("h5").nl();
+			if (exists(branding))
+				w.append(branding).nl();
 		}
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/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 c4bf1db..61bacb0 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
@@ -1395,6 +1395,56 @@ public final class StringUtils {
 	}
 
 	/**
+	 * Efficiently determines whether a URL is of the pattern "xxx:/xxx".
+	 * <p>
+	 * The pattern matched is: <code>[a-z]{2,}\:\/.*</code>
+	 * <p>
+	 * Note that this excludes filesystem paths such as <js>"C:/temp"</js>.
+	 *
+	 * @param s The string to test.
+	 * @return <jk>true</jk> if it's an absolute path.
+	 */
+	public static boolean isUri(String s) {
+
+		if (isEmpty(s))
+			return false;
+
+		// Use a state machine for maximum performance.
+
+		int S1 = 1;  // Looking for protocol char 1
+		int S2 = 2;  // Found protocol char 1, looking for protocol char 2
+		int S3 = 3;  // Found protocol char 2, looking for :
+		int S4 = 4;  // Found :, looking for /
+
+
+		int state = S1;
+		for (int i = 0; i < s.length(); i++) {
+			char c = s.charAt(i);
+			if (state == S1) {
+				if (c >= 'a' && c <= 'z')
+					state = S2;
+				else
+					return false;
+			} else if (state == S2) {
+				if (c >= 'a' && c <= 'z')
+					state = S3;
+				else
+					return false;
+			} else if (state == S3) {
+				if (c == ':')
+					state = S4;
+				else if (c < 'a' || c > 'z')
+					return false;
+			} else if (state == S4) {
+				if (c == '/')
+					return true;
+				return false;
+			}
+		}
+		return false;
+	}
+
+	/**
 	 * Given an absolute URI, returns just the authority portion (e.g. <js>"http://hostname:port"</js>)
 	 *
 	 * @param s The URI string.
@@ -1446,4 +1496,20 @@ public final class StringUtils {
 		}
 		return s;
 	}
+
+	/**
+	 * Converts the specified object to a URI.
+	 *
+	 * @param o The object to convert to a URI.
+	 * @return A new URI, or the same object if the object was already a URI, or
+	 */
+	public static URI toURI(Object o) {
+		if (o == null || o instanceof URI)
+			return (URI)o;
+		try {
+			return new URI(o.toString());
+		} catch (URISyntaxException e) {
+			throw new RuntimeException(e);
+		}
+	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/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 1381972..ac65ab2 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
@@ -238,7 +238,7 @@ public class SerializerContext extends BeanContext {
 	 * <ul>
 	 * 	<li><b>Name:</b> <js>"Serializer.uriResolution"</js>
 	 * 	<li><b>Data type:</b> {@link UriResolution}
-	 * 	<li><b>Default:</b> {@link UriResolution#ROOT_RELATIVE}
+	 * 	<li><b>Default:</b> {@link UriResolution#NONE}
 	 * 	<li><b>Session-overridable:</b> <jk>true</jk>
 	 * </ul>
 	 * <p>
@@ -392,7 +392,7 @@ public class SerializerContext extends BeanContext {
 		abridged = ps.getProperty(SERIALIZER_abridged, boolean.class, false);
 		quoteChar = ps.getProperty(SERIALIZER_quoteChar, String.class, "\"").charAt(0);
 		uriContext = ps.getProperty(SERIALIZER_uriContext, UriContext.class, UriContext.DEFAULT);
-		uriResolution = ps.getProperty(SERIALIZER_uriResolution, UriResolution.class, UriResolution.ROOT_RELATIVE);
+		uriResolution = ps.getProperty(SERIALIZER_uriResolution, UriResolution.class, UriResolution.NONE);
 		uriRelativity = ps.getProperty(SERIALIZER_uriRelativity, UriRelativity.class, UriRelativity.RESOURCE);
 		listener = ps.getProperty(SERIALIZER_listener, Class.class, null);
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/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 9f7d54f..9d4a49e 100644
--- a/juneau-core/src/main/javadoc/overview.html
+++ b/juneau-core/src/main/javadoc/overview.html
@@ -6294,6 +6294,7 @@
 						<ul>
 							<li>{@link org.apache.juneau.html.HtmlDocSerializerContext#HTMLDOC_title}
 							<li>{@link org.apache.juneau.html.HtmlDocSerializerContext#HTMLDOC_description}
+							<li>{@link org.apache.juneau.html.HtmlDocSerializerContext#HTMLDOC_branding}
 							<li>{@link org.apache.juneau.html.HtmlDocSerializerContext#HTMLDOC_header}
 							<li>{@link org.apache.juneau.html.HtmlDocSerializerContext#HTMLDOC_nav}
 							<li>{@link org.apache.juneau.html.HtmlDocSerializerContext#HTMLDOC_aside}
@@ -6456,6 +6457,7 @@
 				<ul>
 					<li>{@link org.apache.juneau.rest.RestConfig#setHtmlTitle(String) setHtmlTitle(String)}
 					<li>{@link org.apache.juneau.rest.RestConfig#setHtmlDescription(String) setHtmlDescription(String)}
+					<li>{@link org.apache.juneau.rest.RestConfig#setHtmlBranding(String) setHtmlBranding(String)}
 					<li>{@link org.apache.juneau.rest.RestConfig#setHtmlHeader(String) setHtmlHeader(String)}
 					<li>{@link org.apache.juneau.rest.RestConfig#setHtmlLinks(String) setHtmlLinks(String)}
 					<li>{@link org.apache.juneau.rest.RestConfig#setHtmlNav(String) setHtmlNav(String)}
@@ -6473,6 +6475,7 @@
 				<ul>
 					<li>{@link org.apache.juneau.rest.RestResponse#setHtmlTitle(Object) setHtmlTitle(Object)}
 					<li>{@link org.apache.juneau.rest.RestResponse#setHtmlDescription(Object) setHtmlDescription(Object)}
+					<li>{@link org.apache.juneau.rest.RestResponse#setHtmlBranding(Object) setHtmlBranding(Object)}
 					<li>{@link org.apache.juneau.rest.RestResponse#setHtmlHeader(Object) setHtmlHeader(Object)}
 					<li>{@link org.apache.juneau.rest.RestResponse#setHtmlLinks(Object) setHtmlLinks(Object)}
 					<li>{@link org.apache.juneau.rest.RestResponse#setHtmlNav(Object) setHtmlNav(Object)}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
----------------------------------------------------------------------
diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
index 2637411..3f572e6 100644
--- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
+++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
@@ -36,10 +36,11 @@ import org.apache.juneau.rest.widget.*;
 			+ "	<p>All content on pages in the UI are serialized POJOs.  In this case, it's a serialized array of beans with 2 properties.</p>"
 			+ "	<p>Other features (such as this aside) are added through annotations.</p>"
 			+ "</div>",
-		footer="$W{poweredByJuneau}"
+		footer="$W{poweredByApache}"
 	),
 	widgets={
 		PoweredByJuneauWidget.class,
+		PoweredByApacheWidget.class,
 		ContentTypeLinksWidget.class
 	},
 	children={

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-rest/src/main/java/org/apache/juneau/rest/CallMethod.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/CallMethod.java b/juneau-rest/src/main/java/org/apache/juneau/rest/CallMethod.java
index 69d6814..f6753e5 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/CallMethod.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/CallMethod.java
@@ -66,8 +66,8 @@ class CallMethod implements Comparable<CallMethod>  {
 	private final org.apache.juneau.rest.annotation.Parameter[] parameters;
 	private final Response[] responses;
 	private final RestContext context;
-	private final String htmlTitle, htmlDescription, htmlHeader, htmlLinks, htmlNav, htmlAside, htmlFooter, htmlCss,
-		htmlCssUrl, htmlNoResultsMessage;
+	private final String htmlTitle, htmlDescription, htmlBranding, htmlHeader, htmlLinks, htmlNav, htmlAside,
+		htmlFooter, htmlCss, htmlCssUrl, htmlNoResultsMessage;
 	private final boolean htmlNoWrap;
 	private final HtmlDocTemplate htmlTemplate;
 	private final Map<String,Widget> widgets;
@@ -103,6 +103,7 @@ class CallMethod implements Comparable<CallMethod>  {
 		this.responses = b.responses;
 		this.htmlTitle = b.htmlTitle;
 		this.htmlDescription = b.htmlDescription;
+		this.htmlBranding = b.htmlBranding;
 		this.htmlHeader = b.htmlHeader;
 		this.htmlLinks = b.htmlLinks;
 		this.htmlNav = b.htmlNav;
@@ -118,7 +119,7 @@ class CallMethod implements Comparable<CallMethod>  {
 
 	private static class Builder  {
 		private String httpMethod, defaultCharset, description, tags, summary, externalDocs, htmlTitle, htmlDescription,
-			htmlLinks, htmlNav, htmlAside, htmlFooter, htmlCssUrl, htmlCss, htmlHeader, htmlNoResultsMessage;
+			htmlBranding, htmlLinks, htmlNav, htmlAside, htmlFooter, htmlCssUrl, htmlCss, htmlHeader, htmlNoResultsMessage;
 		private boolean htmlNoWrap;
 		private HtmlDocTemplate htmlTemplate;
 		private UrlPathPattern pathPattern;
@@ -173,6 +174,7 @@ class CallMethod implements Comparable<CallMethod>  {
 				HtmlDoc hd = m.htmldoc();
 				htmlTitle = hd.title().isEmpty() ? context.getHtmlTitle() : hd.title();
 				htmlDescription = hd.description().isEmpty() ? context.getHtmlDescription() : hd.description();
+				htmlBranding = hd.branding().isEmpty() ? context.getHtmlBranding() : hd.branding();
 				htmlHeader = hd.header().isEmpty() ? context.getHtmlHeader() : hd.header();
 				htmlLinks = hd.links().isEmpty() ? context.getHtmlLinks() : hd.links();
 				htmlNav = hd.nav().isEmpty() ? context.getHtmlNav() : hd.nav();
@@ -875,6 +877,8 @@ class CallMethod implements Comparable<CallMethod>  {
 					}
 					if (k.equals(HTMLDOC_header))
 						return htmlHeader == null ? null : req.resolveVars(htmlHeader);
+					if (k.equals(HTMLDOC_branding))
+						return htmlBranding == null ? null : req.resolveVars(htmlBranding);
 					if (k.equals(HTMLDOC_links))
 						return htmlLinks == null ? null : req.resolveVars(htmlLinks);
 					if (k.equals(HTMLDOC_nav))


[3/4] incubator-juneau git commit: Add branding capability to HtmlDocSerializer and REST servlet.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core-test/src/test/java/org/apache/juneau/serializer/UriResolutionTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/serializer/UriResolutionTest.java b/juneau-core-test/src/test/java/org/apache/juneau/serializer/UriResolutionTest.java
index e27e43c..ab30ef5 100644
--- a/juneau-core-test/src/test/java/org/apache/juneau/serializer/UriResolutionTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/serializer/UriResolutionTest.java
@@ -101,7 +101,7 @@ public class UriResolutionTest {
 					"(f0=http://foo.com:123/context/resource/f0/x0,f1a=http://www.apache.org/f1a,f1b=http://foo.com:123/f1b,f1c=http://foo.com:123/f1c/x/y,f1d=http://foo.com:123/context/resource/f1d,f1e=http://foo.com:123/context/resource/f1e/x/y,f1f=http://foo.com:123/context/resource,f1g=http://foo.com:123/context/resource/f1g/x,f1h=http://foo.com:123/context/resource/f1h,f1i=http://foo.com:123/context/resource,f1j=http://foo.com:123/context,f1k=http://foo.com:123/context/f1j/x,f1l=http://foo.com:123/context/f1k,f1m=http://foo.com:123/context,f1n=http://foo.com:123,f2a=http://www.apache.org/f2a,f2b=http://foo.com:123/f2b,f2c=http://foo.com:123/f2c/x/y,f2d=http://foo.com:123/context/resource/f2d,f2e=http://foo.com:123/context/resource/f2e/x/y,f2f=http://foo.com:123/context/resource,f2g=http://foo.com:123/context/resource/f2g/x,f2h=http://foo.com:123/context/resource/f2h,f2i=http://foo.com:123/context/resource,f2j=http://foo.com:123/context,f2k=http://foo.com:123/context/f2j/x,f2l=http://foo.com:1
 23/context/f2k,f2m=http://foo.com:123/context,f2n=http://foo.com:123,f3a='http://www.apache.org/f3a/x?label=MY_LABEL&foo=bar',f3b=http://foo.com:123/context/resource/%3C%3E%26%27%22,f3c=http://foo.com:123/context/resource/<>&~'\",f4=http://foo.com:123/context/resource/test/uri/b,f5=http://foo.com:123/context/resource/f5/x)",
 					"f0=http://foo.com:123/context/resource/f0/x0&f1a=http://www.apache.org/f1a&f1b=http://foo.com:123/f1b&f1c=http://foo.com:123/f1c/x/y&f1d=http://foo.com:123/context/resource/f1d&f1e=http://foo.com:123/context/resource/f1e/x/y&f1f=http://foo.com:123/context/resource&f1g=http://foo.com:123/context/resource/f1g/x&f1h=http://foo.com:123/context/resource/f1h&f1i=http://foo.com:123/context/resource&f1j=http://foo.com:123/context&f1k=http://foo.com:123/context/f1j/x&f1l=http://foo.com:123/context/f1k&f1m=http://foo.com:123/context&f1n=http://foo.com:123&f2a=http://www.apache.org/f2a&f2b=http://foo.com:123/f2b&f2c=http://foo.com:123/f2c/x/y&f2d=http://foo.com:123/context/resource/f2d&f2e=http://foo.com:123/context/resource/f2e/x/y&f2f=http://foo.com:123/context/resource&f2g=http://foo.com:123/context/resource/f2g/x&f2h=http://foo.com:123/context/resource/f2h&f2i=http://foo.com:123/context/resource&f2j=http://foo.com:123/context&f2k=http://foo.com:123/context/f2j/x&f2l=http://foo.com:12
 3/context/f2k&f2m=http://foo.com:123/context&f2n=http://foo.com:123&f3a='http://www.apache.org/f3a/x?label=MY_LABEL%26foo=bar'&f3b=http://foo.com:123/context/resource/%253C%253E%2526%2527%2522&f3c=http://foo.com:123/context/resource/%3C%3E%26~'%22&f4=http://foo.com:123/context/resource/test/uri/b&f5=http://foo.com:123/context/resource/f5/x",
 					"DE0022A26630D929687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F7265736F757263652F66302F7830A3663161B9687474703A2F2F7777772E6170616368652E6F72672F663161A3663162B6687474703A2F2F666F6F2E636F6D3A3132332F663162A3663163BA687474703A2F2F666F6F2E636F6D3A3132332F6631632F782F79A3663164D927687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F7265736F757263652F663164A3663165D92B687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F7265736F757263652F6631652F782F79A3663166D923687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F7265736F75726365A3663167D929687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F7265736F757263652F6631672F78A3663168D927687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F7265736F757263652F663168A3663169D923687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F7265736F75726365A366316ABA687474703A2F2F666F6F2E636F6D3A3132332F636F6E74657874A366316BD920687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F66316A2F78A366316CBE687474703A2F2F666F6F2E636F6D3A313
 2332F636F6E746578742F66316BA366316DBA687474703A2F2F666F6F2E636F6D3A3132332F636F6E74657874A366316EB2687474703A2F2F666F6F2E636F6D3A313233A3663261B9687474703A2F2F7777772E6170616368652E6F72672F663261A3663262B6687474703A2F2F666F6F2E636F6D3A3132332F663262A3663263BA687474703A2F2F666F6F2E636F6D3A3132332F6632632F782F79A3663264D927687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F7265736F757263652F663264A3663265D92B687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F7265736F757263652F6632652F782F79A3663266D923687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F7265736F75726365A3663267D929687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F7265736F757263652F6632672F78A3663268D927687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F7265736F757263652F663268A3663269D923687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F7265736F75726365A366326ABA687474703A2F2F666F6F2E636F6D3A3132332F636F6E74657874A366326BD920687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F66326A2F78A366326CBE68
 7474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F66326BA366326DBA687474703A2F2F666F6F2E636F6D3A3132332F636F6E74657874A366326EB2687474703A2F2F666F6F2E636F6D3A313233A3663361D932687474703A2F2F7777772E6170616368652E6F72672F6633612F783F6C6162656C3D4D595F4C4142454C26666F6F3D626172A3663362D933687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F7265736F757263652F253343253345253236253237253232A3663363D929687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F7265736F757263652F3C3E262722A26634D92E687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F7265736F757263652F746573742F7572692F62A26635D928687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F7265736F757263652F66352F78",
-					"<rdf:RDF>\n<rdf:Description rdf:about='http://foo.com:123/context/resource/f0/x0'>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f1n rdf:resource='http://foo.com:123'/>\n<jp:f2j rdf:resource='http://foo.com:123/context'/>\n<jp:f1g rdf:resource='http://foo.com:123/context/resource/f1g/x'/>\n<jp:f2m rdf:resource='http://foo.com:123/context'/>\n<jp:f2i rdf:resource='http://foo.com:123/context/resource'/>\n<jp:f5 rdf:resource='http://foo.com:123/context/resource/f5/x'/>\n<jp:f1k rdf:resource='http://foo.com:123/context/f1j/x'/>\n<jp:f2f rdf:resource='http://foo.com:123/context/resource'/>\n<jp:f4 rdf:resource='http://foo.com:123/context/resource/test/uri/b'/>\n<jp:f1b rdf:resource='http://foo.com:123/f1b'/>\n<jp:f1f rdf:resource='http://foo.com:123/context/resource'/>\n<jp:f1c rdf:resource='http://foo.com:123/f1c/x/y'/>\n<jp:f2n rdf:resource='http://foo.com:123'/>\n<jp:f1l rdf:resource='http://foo.com:123/context/f1k'/>\n<jp:f2d rdf:resource
 ='http://foo.com:123/context/resource/f2d'/>\n<jp:f1e rdf:resource='http://foo.com:123/context/resource/f1e/x/y'/>\n<jp:f1j rdf:resource='http://foo.com:123/context'/>\n<jp:f2k rdf:resource='http://foo.com:123/context/f2j/x'/>\n<jp:f2e rdf:resource='http://foo.com:123/context/resource/f2e/x/y'/>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f2b rdf:resource='http://foo.com:123/f2b'/>\n<jp:f2h rdf:resource='http://foo.com:123/context/resource/f2h'/>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f1h rdf:resource='http://foo.com:123/context/resource/f1h'/>\n<jp:f1i rdf:resource='http://foo.com:123/context/resource'/>\n<jp:f2g rdf:resource='http://foo.com:123/context/resource/f2g/x'/>\n<jp:f1d rdf:resource='http://foo.com:123/context/resource/f1d'/>\n<jp:f3c rdf:resource='http://foo.com:123/context/resource/&lt;&gt;&amp;&apos;&quot;'/>\n<jp:f2l rdf:resource='http://foo.com:123/context/f2k'/>\n<jp:f2c rdf:resource='http://foo.com:123/f2c/x/y'/>\n<jp:f3b rdf:resource
 ='http://foo.com:123/context/resource/%3C%3E%26%27%22'/>\n<jp:f1m rdf:resource='http://foo.com:123/context'/>\n</rdf:Description>\n</rdf:RDF>\n"
+					"<rdf:RDF>\n<rdf:Description rdf:about='http://foo.com:123/context/resource/f0/x0'>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f1g rdf:resource='http://foo.com:123/context/resource/f1g/x'/>\n<jp:f2m rdf:resource='http://foo.com:123/context'/>\n<jp:f2i rdf:resource='http://foo.com:123/context/resource'/>\n<jp:f5 rdf:resource='http://foo.com:123/context/resource/f5/x'/>\n<jp:f1k rdf:resource='http://foo.com:123/context/f1j/x'/>\n<jp:f2f rdf:resource='http://foo.com:123/context/resource'/>\n<jp:f4 rdf:resource='http://foo.com:123/context/resource/test/uri/b'/>\n<jp:f1f rdf:resource='http://foo.com:123/context/resource'/>\n<jp:f1b rdf:resource='http://foo.com:123/f1b'/>\n<jp:f1c rdf:resource='http://foo.com:123/f1c/x/y'/>\n<jp:f1l rdf:resource='http://foo.com:123/context/f1k'/>\n<jp:f2d rdf:resource='http://foo.com:123/context/resource/f2d'/>\n<jp:f1e rdf:resource='http://foo.com:123/context/resource/f1e/x/y'/>\n<jp:f2k rdf:resource='http:
 //foo.com:123/context/f2j/x'/>\n<jp:f2e rdf:resource='http://foo.com:123/context/resource/f2e/x/y'/>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f2j rdf:resource='http://foo.com:123/context'/>\n<jp:f2n rdf:resource='http://foo.com:123'/>\n<jp:f2b rdf:resource='http://foo.com:123/f2b'/>\n<jp:f2h rdf:resource='http://foo.com:123/context/resource/f2h'/>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f1h rdf:resource='http://foo.com:123/context/resource/f1h'/>\n<jp:f1i rdf:resource='http://foo.com:123/context/resource'/>\n<jp:f1j rdf:resource='http://foo.com:123/context'/>\n<jp:f2g rdf:resource='http://foo.com:123/context/resource/f2g/x'/>\n<jp:f1n rdf:resource='http://foo.com:123'/>\n<jp:f1d rdf:resource='http://foo.com:123/context/resource/f1d'/>\n<jp:f3c rdf:resource='http://foo.com:123/context/resource/&lt;&gt;&amp;&apos;&quot;'/>\n<jp:f2l rdf:resource='http://foo.com:123/context/f2k'/>\n<jp:f2c rdf:resource='http://foo.com:123/f2c/x/y'/>\n<jp:f3b rdf:resource
 ='http://foo.com:123/context/resource/%3C%3E%26%27%22'/>\n<jp:f1m rdf:resource='http://foo.com:123/context'/>\n</rdf:Description>\n</rdf:RDF>\n"
 				)
 			},
 			{	/* 1 */
@@ -116,7 +116,7 @@ public class UriResolutionTest {
 					"(f0=/context/resource/f0/x0,f1a=http://www.apache.org/f1a,f1b=/f1b,f1c=/f1c/x/y,f1d=/context/resource/f1d,f1e=/context/resource/f1e/x/y,f1f=/context/resource,f1g=/context/resource/f1g/x,f1h=/context/resource/f1h,f1i=/context/resource,f1j=/context,f1k=/context/f1j/x,f1l=/context/f1k,f1m=/context,f1n=/,f2a=http://www.apache.org/f2a,f2b=/f2b,f2c=/f2c/x/y,f2d=/context/resource/f2d,f2e=/context/resource/f2e/x/y,f2f=/context/resource,f2g=/context/resource/f2g/x,f2h=/context/resource/f2h,f2i=/context/resource,f2j=/context,f2k=/context/f2j/x,f2l=/context/f2k,f2m=/context,f2n=/,f3a='http://www.apache.org/f3a/x?label=MY_LABEL&foo=bar',f3b=/context/resource/%3C%3E%26%27%22,f3c=/context/resource/<>&~'\",f4=/context/resource/test/uri/b,f5=/context/resource/f5/x)",
 					"f0=/context/resource/f0/x0&f1a=http://www.apache.org/f1a&f1b=/f1b&f1c=/f1c/x/y&f1d=/context/resource/f1d&f1e=/context/resource/f1e/x/y&f1f=/context/resource&f1g=/context/resource/f1g/x&f1h=/context/resource/f1h&f1i=/context/resource&f1j=/context&f1k=/context/f1j/x&f1l=/context/f1k&f1m=/context&f1n=/&f2a=http://www.apache.org/f2a&f2b=/f2b&f2c=/f2c/x/y&f2d=/context/resource/f2d&f2e=/context/resource/f2e/x/y&f2f=/context/resource&f2g=/context/resource/f2g/x&f2h=/context/resource/f2h&f2i=/context/resource&f2j=/context&f2k=/context/f2j/x&f2l=/context/f2k&f2m=/context&f2n=/&f3a='http://www.apache.org/f3a/x?label=MY_LABEL%26foo=bar'&f3b=/context/resource/%253C%253E%2526%2527%2522&f3c=/context/resource/%3C%3E%26~'%22&f4=/context/resource/test/uri/b&f5=/context/resource/f5/x",
 					"DE0022A26630B72F636F6E746578742F7265736F757263652F66302F7830A3663161B9687474703A2F2F7777772E6170616368652E6F72672F663161A3663162A42F663162A3663163A82F6631632F782F79A3663164B52F636F6E746578742F7265736F757263652F663164A3663165B92F636F6E746578742F7265736F757263652F6631652F782F79A3663166B12F636F6E746578742F7265736F75726365A3663167B72F636F6E746578742F7265736F757263652F6631672F78A3663168B52F636F6E746578742F7265736F757263652F663168A3663169B12F636F6E746578742F7265736F75726365A366316AA82F636F6E74657874A366316BAE2F636F6E746578742F66316A2F78A366316CAC2F636F6E746578742F66316BA366316DA82F636F6E74657874A366316EA12FA3663261B9687474703A2F2F7777772E6170616368652E6F72672F663261A3663262A42F663262A3663263A82F6632632F782F79A3663264B52F636F6E746578742F7265736F757263652F663264A3663265B92F636F6E746578742F7265736F757263652F6632652F782F79A3663266B12F636F6E746578742F7265736F75726365A3663267B72F636F6E746578742F7265736F757263652F6632672F78A3663268B52F636F6E746578742F7265736F757263652F663268A3663269B12F636
 F6E746578742F7265736F75726365A366326AA82F636F6E74657874A366326BAE2F636F6E746578742F66326A2F78A366326CAC2F636F6E746578742F66326BA366326DA82F636F6E74657874A366326EA12FA3663361D932687474703A2F2F7777772E6170616368652E6F72672F6633612F783F6C6162656C3D4D595F4C4142454C26666F6F3D626172A3663362D9212F636F6E746578742F7265736F757263652F253343253345253236253237253232A3663363B72F636F6E746578742F7265736F757263652F3C3E262722A26634BC2F636F6E746578742F7265736F757263652F746573742F7572692F62A26635B62F636F6E746578742F7265736F757263652F66352F78",
-					"<rdf:RDF>\n<rdf:Description rdf:about='/context/resource/f0/x0'>\n<jp:f2h rdf:resource='/context/resource/f2h'/>\n<jp:f2f rdf:resource='/context/resource'/>\n<jp:f1c rdf:resource='/f1c/x/y'/>\n<jp:f1h rdf:resource='/context/resource/f1h'/>\n<jp:f1n rdf:resource='/'/>\n<jp:f5 rdf:resource='/context/resource/f5/x'/>\n<jp:f1e rdf:resource='/context/resource/f1e/x/y'/>\n<jp:f3c rdf:resource='/context/resource/&lt;&gt;&amp;&apos;&quot;'/>\n<jp:f2k rdf:resource='/context/f2j/x'/>\n<jp:f2m rdf:resource='/context'/>\n<jp:f2i rdf:resource='/context/resource'/>\n<jp:f1d rdf:resource='/context/resource/f1d'/>\n<jp:f4 rdf:resource='/context/resource/test/uri/b'/>\n<jp:f1j rdf:resource='/context'/>\n<jp:f1k rdf:resource='/context/f1j/x'/>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f2c rdf:resource='/f2c/x/y'/>\n<jp:f2e rdf:resource='/context/resource/f2e/x/y'/>\n<jp:f2n rdf:resource='/'/>\n<jp:f2j rdf:resource='/context'/>\n<jp:f3b rdf:resource='/
 context/resource/%3C%3E%26%27%22'/>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f2b rdf:resource='/f2b'/>\n<jp:f1i rdf:resource='/context/resource'/>\n<jp:f1g rdf:resource='/context/resource/f1g/x'/>\n<jp:f1b rdf:resource='/f1b'/>\n<jp:f1m rdf:resource='/context'/>\n<jp:f2d rdf:resource='/context/resource/f2d'/>\n<jp:f2g rdf:resource='/context/resource/f2g/x'/>\n<jp:f1l rdf:resource='/context/f1k'/>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f1f rdf:resource='/context/resource'/>\n<jp:f2l rdf:resource='/context/f2k'/>\n</rdf:Description>\n</rdf:RDF>\n"
+					"<rdf:RDF>\n<rdf:Description rdf:about='/context/resource/f0/x0'>\n<jp:f2h>/context/resource/f2h</jp:f2h>\n<jp:f2f>/context/resource</jp:f2f>\n<jp:f1c>/f1c/x/y</jp:f1c>\n<jp:f1h>/context/resource/f1h</jp:f1h>\n<jp:f5>/context/resource/f5/x</jp:f5>\n<jp:f1e>/context/resource/f1e/x/y</jp:f1e>\n<jp:f3c>/context/resource/&lt;&gt;&amp;''</jp:f3c>\n<jp:f2k>/context/f2j/x</jp:f2k>\n<jp:f1j>/context</jp:f1j>\n<jp:f2m>/context</jp:f2m>\n<jp:f2i>/context/resource</jp:f2i>\n<jp:f1d>/context/resource/f1d</jp:f1d>\n<jp:f4>/context/resource/test/uri/b</jp:f4>\n<jp:f1n>/</jp:f1n>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f1k>/context/f1j/x</jp:f1k>\n<jp:f2c>/f2c/x/y</jp:f2c>\n<jp:f2e>/context/resource/f2e/x/y</jp:f2e>\n<jp:f3b>/context/resource/%3C%3E%26%27%22</jp:f3b>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f2b>/f2b</jp:f2b>\n<jp:f1i>/context/resource</jp:f1i>\n<jp:f1g>/context/resource/f1g/x</jp:f1g>\n<jp:f1b>/f1b</jp:f1b>\n<jp:f1
 m>/context</jp:f1m>\n<jp:f2d>/context/resource/f2d</jp:f2d>\n<jp:f2g>/context/resource/f2g/x</jp:f2g>\n<jp:f2n>/</jp:f2n>\n<jp:f2j>/context</jp:f2j>\n<jp:f1l>/context/f1k</jp:f1l>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f1f>/context/resource</jp:f1f>\n<jp:f2l>/context/f2k</jp:f2l>\n</rdf:Description>\n</rdf:RDF>\n"
 				)
 			},
 			{	/* 2 */
@@ -131,7 +131,7 @@ public class UriResolutionTest {
 					"(f0=f0/x0,f1a=http://www.apache.org/f1a,f1b=/f1b,f1c=/f1c/x/y,f1d=f1d,f1e=f1e/x/y,f1f='',f1g=/context/resource/f1g/x,f1h=/context/resource/f1h,f1i=/context/resource,f1j=/context,f1k=/context/f1j/x,f1l=/context/f1k,f1m=/context,f1n=/,f2a=http://www.apache.org/f2a,f2b=/f2b,f2c=/f2c/x/y,f2d=f2d,f2e=f2e/x/y,f2f='',f2g=/context/resource/f2g/x,f2h=/context/resource/f2h,f2i=/context/resource,f2j=/context,f2k=/context/f2j/x,f2l=/context/f2k,f2m=/context,f2n=/,f3a='http://www.apache.org/f3a/x?label=MY_LABEL&foo=bar',f3b=%3C%3E%26%27%22,f3c=<>&~'\",f4=test/uri/b,f5=f5/x)",
 					"f0=f0/x0&f1a=http://www.apache.org/f1a&f1b=/f1b&f1c=/f1c/x/y&f1d=f1d&f1e=f1e/x/y&f1f=''&f1g=/context/resource/f1g/x&f1h=/context/resource/f1h&f1i=/context/resource&f1j=/context&f1k=/context/f1j/x&f1l=/context/f1k&f1m=/context&f1n=/&f2a=http://www.apache.org/f2a&f2b=/f2b&f2c=/f2c/x/y&f2d=f2d&f2e=f2e/x/y&f2f=''&f2g=/context/resource/f2g/x&f2h=/context/resource/f2h&f2i=/context/resource&f2j=/context&f2k=/context/f2j/x&f2l=/context/f2k&f2m=/context&f2n=/&f3a='http://www.apache.org/f3a/x?label=MY_LABEL%26foo=bar'&f3b=%253C%253E%2526%2527%2522&f3c=%3C%3E%26~'%22&f4=test/uri/b&f5=f5/x",
 					"DE0022A26630A566302F7830A3663161B9687474703A2F2F7777772E6170616368652E6F72672F663161A3663162A42F663162A3663163A82F6631632F782F79A3663164A3663164A3663165A76631652F782F79A3663166A0A3663167B72F636F6E746578742F7265736F757263652F6631672F78A3663168B52F636F6E746578742F7265736F757263652F663168A3663169B12F636F6E746578742F7265736F75726365A366316AA82F636F6E74657874A366316BAE2F636F6E746578742F66316A2F78A366316CAC2F636F6E746578742F66316BA366316DA82F636F6E74657874A366316EA12FA3663261B9687474703A2F2F7777772E6170616368652E6F72672F663261A3663262A42F663262A3663263A82F6632632F782F79A3663264A3663264A3663265A76632652F782F79A3663266A0A3663267B72F636F6E746578742F7265736F757263652F6632672F78A3663268B52F636F6E746578742F7265736F757263652F663268A3663269B12F636F6E746578742F7265736F75726365A366326AA82F636F6E74657874A366326BAE2F636F6E746578742F66326A2F78A366326CAC2F636F6E746578742F66326BA366326DA82F636F6E74657874A366326EA12FA3663361D932687474703A2F2F7777772E6170616368652E6F72672F6633612F783F6C6162656C3D4D5
 95F4C4142454C26666F6F3D626172A3663362AF253343253345253236253237253232A3663363A53C3E262722A26634AA746573742F7572692F62A26635A466352F78",
-					"<rdf:RDF>\n<rdf:Description rdf:about='f0/x0'>\n<jp:f2l rdf:resource='/context/f2k'/>\n<jp:f1j rdf:resource='/context'/>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f2g rdf:resource='/context/resource/f2g/x'/>\n<jp:f2f rdf:resource=''/>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f3b rdf:resource='%3C%3E%26%27%22'/>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f2c rdf:resource='/f2c/x/y'/>\n<jp:f2j rdf:resource='/context'/>\n<jp:f5 rdf:resource='f5/x'/>\n<jp:f2k rdf:resource='/context/f2j/x'/>\n<jp:f1e rdf:resource='f1e/x/y'/>\n<jp:f2i rdf:resource='/context/resource'/>\n<jp:f2m rdf:resource='/context'/>\n<jp:f1m rdf:resource='/context'/>\n<jp:f2d rdf:resource='f2d'/>\n<jp:f1l rdf:resource='/context/f1k'/>\n<jp:f3c rdf:resource='&lt;&gt;&amp;&apos;&quot;'/>\n<jp:f1n rdf:resource='/'/>\n<jp:f1b rdf:resource='/f1b'/>\n<jp:f1k rdf:resource='/context/f1j/x'/>\n<jp:f1h rdf:resource='/context/resource/f1h'/>\n<jp:f2b
  rdf:resource='/f2b'/>\n<jp:f2h rdf:resource='/context/resource/f2h'/>\n<jp:f1d rdf:resource='f1d'/>\n<jp:f1i rdf:resource='/context/resource'/>\n<jp:f2e rdf:resource='f2e/x/y'/>\n<jp:f1c rdf:resource='/f1c/x/y'/>\n<jp:f1f rdf:resource=''/>\n<jp:f1g rdf:resource='/context/resource/f1g/x'/>\n<jp:f4 rdf:resource='test/uri/b'/>\n<jp:f2n rdf:resource='/'/>\n</rdf:Description>\n</rdf:RDF>\n"
+					"<rdf:RDF>\n<rdf:Description rdf:about='f0/x0'>\n<jp:f2l>/context/f2k</jp:f2l>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f2g>/context/resource/f2g/x</jp:f2g>\n<jp:f2f></jp:f2f>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f3b>%3C%3E%26%27%22</jp:f3b>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f2c>/f2c/x/y</jp:f2c>\n<jp:f5>f5/x</jp:f5>\n<jp:f2k>/context/f2j/x</jp:f2k>\n<jp:f1e>f1e/x/y</jp:f1e>\n<jp:f2i>/context/resource</jp:f2i>\n<jp:f2n>/</jp:f2n>\n<jp:f2m>/context</jp:f2m>\n<jp:f1m>/context</jp:f1m>\n<jp:f2d>f2d</jp:f2d>\n<jp:f1l>/context/f1k</jp:f1l>\n<jp:f3c>&lt;&gt;&amp;''</jp:f3c>\n<jp:f1n>/</jp:f1n>\n<jp:f1b>/f1b</jp:f1b>\n<jp:f1k>/context/f1j/x</jp:f1k>\n<jp:f1h>/context/resource/f1h</jp:f1h>\n<jp:f2b>/f2b</jp:f2b>\n<jp:f2h>/context/resource/f2h</jp:f2h>\n<jp:f1d>f1d</jp:f1d>\n<jp:f1i>/context/resource</jp:f1i>\n<jp:f2e>f2e/x/y</jp:f2e>\n<jp:f2j>/context</jp:f2j>\n<jp:f1c>/f1c/x/y</jp:f1c>\n<jp:f1j>/co
 ntext</jp:f1j>\n<jp:f1f></jp:f1f>\n<jp:f1g>/context/resource/f1g/x</jp:f1g>\n<jp:f4>test/uri/b</jp:f4>\n</rdf:Description>\n</rdf:RDF>\n"
 				)
 			},
 			{	/* 3 */
@@ -146,7 +146,7 @@ public class UriResolutionTest {
 					"(f0=http://foo.com:123/c1/c2/r1/r2/f0/x0,f1a=http://www.apache.org/f1a,f1b=http://foo.com:123/f1b,f1c=http://foo.com:123/f1c/x/y,f1d=http://foo.com:123/c1/c2/r1/r2/f1d,f1e=http://foo.com:123/c1/c2/r1/r2/f1e/x/y,f1f=http://foo.com:123/c1/c2/r1/r2,f1g=http://foo.com:123/c1/c2/r1/r2/f1g/x,f1h=http://foo.com:123/c1/c2/r1/r2/f1h,f1i=http://foo.com:123/c1/c2/r1/r2,f1j=http://foo.com:123/c1/c2/r1,f1k=http://foo.com:123/c1/c2/f1j/x,f1l=http://foo.com:123/c1/c2/f1k,f1m=http://foo.com:123/c1/c2,f1n=http://foo.com:123/c1,f2a=http://www.apache.org/f2a,f2b=http://foo.com:123/f2b,f2c=http://foo.com:123/f2c/x/y,f2d=http://foo.com:123/c1/c2/r1/r2/f2d,f2e=http://foo.com:123/c1/c2/r1/r2/f2e/x/y,f2f=http://foo.com:123/c1/c2/r1/r2,f2g=http://foo.com:123/c1/c2/r1/r2/f2g/x,f2h=http://foo.com:123/c1/c2/r1/r2/f2h,f2i=http://foo.com:123/c1/c2/r1/r2,f2j=http://foo.com:123/c1/c2/r1,f2k=http://foo.com:123/c1/c2/f2j/x,f2l=http://foo.com:123/c1/c2/f2k,f2m=http://foo.com:123/c1/c2,f2n=http://foo.com:123/c1,
 f3a='http://www.apache.org/f3a/x?label=MY_LABEL&foo=bar',f3b=http://foo.com:123/c1/c2/r1/r2/%3C%3E%26%27%22,f3c=http://foo.com:123/c1/c2/r1/r2/<>&~'\",f4=http://foo.com:123/c1/c2/r1/r2/test/uri/b,f5=http://foo.com:123/c1/c2/r1/r2/f5/x)",
 					"f0=http://foo.com:123/c1/c2/r1/r2/f0/x0&f1a=http://www.apache.org/f1a&f1b=http://foo.com:123/f1b&f1c=http://foo.com:123/f1c/x/y&f1d=http://foo.com:123/c1/c2/r1/r2/f1d&f1e=http://foo.com:123/c1/c2/r1/r2/f1e/x/y&f1f=http://foo.com:123/c1/c2/r1/r2&f1g=http://foo.com:123/c1/c2/r1/r2/f1g/x&f1h=http://foo.com:123/c1/c2/r1/r2/f1h&f1i=http://foo.com:123/c1/c2/r1/r2&f1j=http://foo.com:123/c1/c2/r1&f1k=http://foo.com:123/c1/c2/f1j/x&f1l=http://foo.com:123/c1/c2/f1k&f1m=http://foo.com:123/c1/c2&f1n=http://foo.com:123/c1&f2a=http://www.apache.org/f2a&f2b=http://foo.com:123/f2b&f2c=http://foo.com:123/f2c/x/y&f2d=http://foo.com:123/c1/c2/r1/r2/f2d&f2e=http://foo.com:123/c1/c2/r1/r2/f2e/x/y&f2f=http://foo.com:123/c1/c2/r1/r2&f2g=http://foo.com:123/c1/c2/r1/r2/f2g/x&f2h=http://foo.com:123/c1/c2/r1/r2/f2h&f2i=http://foo.com:123/c1/c2/r1/r2&f2j=http://foo.com:123/c1/c2/r1&f2k=http://foo.com:123/c1/c2/f2j/x&f2l=http://foo.com:123/c1/c2/f2k&f2m=http://foo.com:123/c1/c2&f2n=http://foo.com:123/c1&f
 3a='http://www.apache.org/f3a/x?label=MY_LABEL%26foo=bar'&f3b=http://foo.com:123/c1/c2/r1/r2/%253C%253E%2526%2527%2522&f3c=http://foo.com:123/c1/c2/r1/r2/%3C%3E%26~'%22&f4=http://foo.com:123/c1/c2/r1/r2/test/uri/b&f5=http://foo.com:123/c1/c2/r1/r2/f5/x",
 					"DE0022A26630D924687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F72312F72322F66302F7830A3663161B9687474703A2F2F7777772E6170616368652E6F72672F663161A3663162B6687474703A2F2F666F6F2E636F6D3A3132332F663162A3663163BA687474703A2F2F666F6F2E636F6D3A3132332F6631632F782F79A3663164D922687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F72312F72322F663164A3663165D926687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F72312F72322F6631652F782F79A3663166BE687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F72312F7232A3663167D924687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F72312F72322F6631672F78A3663168D922687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F72312F72322F663168A3663169BE687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F72312F7232A366316ABB687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F7231A366316BBE687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F66316A2F78A366316CBC687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F66316BA366316DB8687474703A2F2F666F6F2E636F6D3A3132332F63312F6
 332A366316EB5687474703A2F2F666F6F2E636F6D3A3132332F6331A3663261B9687474703A2F2F7777772E6170616368652E6F72672F663261A3663262B6687474703A2F2F666F6F2E636F6D3A3132332F663262A3663263BA687474703A2F2F666F6F2E636F6D3A3132332F6632632F782F79A3663264D922687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F72312F72322F663264A3663265D926687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F72312F72322F6632652F782F79A3663266BE687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F72312F7232A3663267D924687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F72312F72322F6632672F78A3663268D922687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F72312F72322F663268A3663269BE687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F72312F7232A366326ABB687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F7231A366326BBE687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F66326A2F78A366326CBC687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F66326BA366326DB8687474703A2F2F666F6F2E636F6D3A3132332F63312F6332A366326EB5687474703A2F2F666F6F2E636F
 6D3A3132332F6331A3663361D932687474703A2F2F7777772E6170616368652E6F72672F6633612F783F6C6162656C3D4D595F4C4142454C26666F6F3D626172A3663362D92E687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F72312F72322F253343253345253236253237253232A3663363D924687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F72312F72322F3C3E262722A26634D929687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F72312F72322F746573742F7572692F62A26635D923687474703A2F2F666F6F2E636F6D3A3132332F63312F63322F72312F72322F66352F78",
-					"<rdf:RDF>\n<rdf:Description rdf:about='http://foo.com:123/c1/c2/r1/r2/f0/x0'>\n<jp:f2m rdf:resource='http://foo.com:123/c1/c2'/>\n<jp:f2e rdf:resource='http://foo.com:123/c1/c2/r1/r2/f2e/x/y'/>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f1c rdf:resource='http://foo.com:123/f1c/x/y'/>\n<jp:f1f rdf:resource='http://foo.com:123/c1/c2/r1/r2'/>\n<jp:f1k rdf:resource='http://foo.com:123/c1/c2/f1j/x'/>\n<jp:f1l rdf:resource='http://foo.com:123/c1/c2/f1k'/>\n<jp:f1n rdf:resource='http://foo.com:123/c1'/>\n<jp:f3b rdf:resource='http://foo.com:123/c1/c2/r1/r2/%3C%3E%26%27%22'/>\n<jp:f1e rdf:resource='http://foo.com:123/c1/c2/r1/r2/f1e/x/y'/>\n<jp:f2k rdf:resource='http://foo.com:123/c1/c2/f2j/x'/>\n<jp:f2c rdf:resource='http://foo.com:123/f2c/x/y'/>\n<jp:f1j rdf:resource='http://foo.com:123/c1/c2/r1'/>\n<jp:f2n rdf:resource='http://foo.com:123/c1'/>\n<jp:f1i rdf:resource='http://foo.com:123/c1/c2/r1/r2'/>\n<jp:f1a rdf:resource='http://www.apach
 e.org/f1a'/>\n<jp:f1b rdf:resource='http://foo.com:123/f1b'/>\n<jp:f1g rdf:resource='http://foo.com:123/c1/c2/r1/r2/f1g/x'/>\n<jp:f2i rdf:resource='http://foo.com:123/c1/c2/r1/r2'/>\n<jp:f1h rdf:resource='http://foo.com:123/c1/c2/r1/r2/f1h'/>\n<jp:f2j rdf:resource='http://foo.com:123/c1/c2/r1'/>\n<jp:f2f rdf:resource='http://foo.com:123/c1/c2/r1/r2'/>\n<jp:f1d rdf:resource='http://foo.com:123/c1/c2/r1/r2/f1d'/>\n<jp:f2d rdf:resource='http://foo.com:123/c1/c2/r1/r2/f2d'/>\n<jp:f4 rdf:resource='http://foo.com:123/c1/c2/r1/r2/test/uri/b'/>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f5 rdf:resource='http://foo.com:123/c1/c2/r1/r2/f5/x'/>\n<jp:f2h rdf:resource='http://foo.com:123/c1/c2/r1/r2/f2h'/>\n<jp:f2l rdf:resource='http://foo.com:123/c1/c2/f2k'/>\n<jp:f3c rdf:resource='http://foo.com:123/c1/c2/r1/r2/&lt;&gt;&amp;&apos;&quot;'/>\n<jp:f2b rdf:resource='http://foo.com:123/f2b'/>\n<jp:f2g rdf:resource='http://foo.com:123/c1/c2/r1/r2/f2g/x'/>\n<jp:f1m rdf:resource='http://
 foo.com:123/c1/c2'/>\n</rdf:Description>\n</rdf:RDF>\n"
+					"<rdf:RDF>\n<rdf:Description rdf:about='http://foo.com:123/c1/c2/r1/r2/f0/x0'>\n<jp:f2m rdf:resource='http://foo.com:123/c1/c2'/>\n<jp:f1n rdf:resource='http://foo.com:123/c1'/>\n<jp:f2e rdf:resource='http://foo.com:123/c1/c2/r1/r2/f2e/x/y'/>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f1j rdf:resource='http://foo.com:123/c1/c2/r1'/>\n<jp:f1c rdf:resource='http://foo.com:123/f1c/x/y'/>\n<jp:f1f rdf:resource='http://foo.com:123/c1/c2/r1/r2'/>\n<jp:f1l rdf:resource='http://foo.com:123/c1/c2/f1k'/>\n<jp:f1k rdf:resource='http://foo.com:123/c1/c2/f1j/x'/>\n<jp:f3b rdf:resource='http://foo.com:123/c1/c2/r1/r2/%3C%3E%26%27%22'/>\n<jp:f1e rdf:resource='http://foo.com:123/c1/c2/r1/r2/f1e/x/y'/>\n<jp:f2n rdf:resource='http://foo.com:123/c1'/>\n<jp:f2k rdf:resource='http://foo.com:123/c1/c2/f2j/x'/>\n<jp:f2c rdf:resource='http://foo.com:123/f2c/x/y'/>\n<jp:f1i rdf:resource='http://foo.com:123/c1/c2/r1/r2'/>\n<jp:f1a rdf:resource='http://www.apach
 e.org/f1a'/>\n<jp:f1b rdf:resource='http://foo.com:123/f1b'/>\n<jp:f1g rdf:resource='http://foo.com:123/c1/c2/r1/r2/f1g/x'/>\n<jp:f2i rdf:resource='http://foo.com:123/c1/c2/r1/r2'/>\n<jp:f1h rdf:resource='http://foo.com:123/c1/c2/r1/r2/f1h'/>\n<jp:f2f rdf:resource='http://foo.com:123/c1/c2/r1/r2'/>\n<jp:f1d rdf:resource='http://foo.com:123/c1/c2/r1/r2/f1d'/>\n<jp:f2d rdf:resource='http://foo.com:123/c1/c2/r1/r2/f2d'/>\n<jp:f4 rdf:resource='http://foo.com:123/c1/c2/r1/r2/test/uri/b'/>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f5 rdf:resource='http://foo.com:123/c1/c2/r1/r2/f5/x'/>\n<jp:f2h rdf:resource='http://foo.com:123/c1/c2/r1/r2/f2h'/>\n<jp:f2l rdf:resource='http://foo.com:123/c1/c2/f2k'/>\n<jp:f3c rdf:resource='http://foo.com:123/c1/c2/r1/r2/&lt;&gt;&amp;&apos;&quot;'/>\n<jp:f2b rdf:resource='http://foo.com:123/f2b'/>\n<jp:f2g rdf:resource='http://foo.com:123/c1/c2/r1/r2/f2g/x'/>\n<jp:f1m rdf:resource='http://foo.com:123/c1/c2'/>\n<jp:f2j rdf:resource='http://foo
 .com:123/c1/c2/r1'/>\n</rdf:Description>\n</rdf:RDF>\n"
 				)
 			},
 			{	/* 4 */
@@ -161,7 +161,7 @@ public class UriResolutionTest {
 					"(f0=/c1/c2/r1/r2/f0/x0,f1a=http://www.apache.org/f1a,f1b=/f1b,f1c=/f1c/x/y,f1d=/c1/c2/r1/r2/f1d,f1e=/c1/c2/r1/r2/f1e/x/y,f1f=/c1/c2/r1/r2,f1g=/c1/c2/r1/r2/f1g/x,f1h=/c1/c2/r1/r2/f1h,f1i=/c1/c2/r1/r2,f1j=/c1/c2/r1,f1k=/c1/c2/f1j/x,f1l=/c1/c2/f1k,f1m=/c1/c2,f1n=/c1,f2a=http://www.apache.org/f2a,f2b=/f2b,f2c=/f2c/x/y,f2d=/c1/c2/r1/r2/f2d,f2e=/c1/c2/r1/r2/f2e/x/y,f2f=/c1/c2/r1/r2,f2g=/c1/c2/r1/r2/f2g/x,f2h=/c1/c2/r1/r2/f2h,f2i=/c1/c2/r1/r2,f2j=/c1/c2/r1,f2k=/c1/c2/f2j/x,f2l=/c1/c2/f2k,f2m=/c1/c2,f2n=/c1,f3a='http://www.apache.org/f3a/x?label=MY_LABEL&foo=bar',f3b=/c1/c2/r1/r2/%3C%3E%26%27%22,f3c=/c1/c2/r1/r2/<>&~'\",f4=/c1/c2/r1/r2/test/uri/b,f5=/c1/c2/r1/r2/f5/x)",
 					"f0=/c1/c2/r1/r2/f0/x0&f1a=http://www.apache.org/f1a&f1b=/f1b&f1c=/f1c/x/y&f1d=/c1/c2/r1/r2/f1d&f1e=/c1/c2/r1/r2/f1e/x/y&f1f=/c1/c2/r1/r2&f1g=/c1/c2/r1/r2/f1g/x&f1h=/c1/c2/r1/r2/f1h&f1i=/c1/c2/r1/r2&f1j=/c1/c2/r1&f1k=/c1/c2/f1j/x&f1l=/c1/c2/f1k&f1m=/c1/c2&f1n=/c1&f2a=http://www.apache.org/f2a&f2b=/f2b&f2c=/f2c/x/y&f2d=/c1/c2/r1/r2/f2d&f2e=/c1/c2/r1/r2/f2e/x/y&f2f=/c1/c2/r1/r2&f2g=/c1/c2/r1/r2/f2g/x&f2h=/c1/c2/r1/r2/f2h&f2i=/c1/c2/r1/r2&f2j=/c1/c2/r1&f2k=/c1/c2/f2j/x&f2l=/c1/c2/f2k&f2m=/c1/c2&f2n=/c1&f3a='http://www.apache.org/f3a/x?label=MY_LABEL%26foo=bar'&f3b=/c1/c2/r1/r2/%253C%253E%2526%2527%2522&f3c=/c1/c2/r1/r2/%3C%3E%26~'%22&f4=/c1/c2/r1/r2/test/uri/b&f5=/c1/c2/r1/r2/f5/x",
 					"DE0022A26630B22F63312F63322F72312F72322F66302F7830A3663161B9687474703A2F2F7777772E6170616368652E6F72672F663161A3663162A42F663162A3663163A82F6631632F782F79A3663164B02F63312F63322F72312F72322F663164A3663165B42F63312F63322F72312F72322F6631652F782F79A3663166AC2F63312F63322F72312F7232A3663167B22F63312F63322F72312F72322F6631672F78A3663168B02F63312F63322F72312F72322F663168A3663169AC2F63312F63322F72312F7232A366316AA92F63312F63322F7231A366316BAC2F63312F63322F66316A2F78A366316CAA2F63312F63322F66316BA366316DA62F63312F6332A366316EA32F6331A3663261B9687474703A2F2F7777772E6170616368652E6F72672F663261A3663262A42F663262A3663263A82F6632632F782F79A3663264B02F63312F63322F72312F72322F663264A3663265B42F63312F63322F72312F72322F6632652F782F79A3663266AC2F63312F63322F72312F7232A3663267B22F63312F63322F72312F72322F6632672F78A3663268B02F63312F63322F72312F72322F663268A3663269AC2F63312F63322F72312F7232A366326AA92F63312F63322F7231A366326BAC2F63312F63322F66326A2F78A366326CAA2F63312F63322F66326BA366326DA62F633
 12F6332A366326EA32F6331A3663361D932687474703A2F2F7777772E6170616368652E6F72672F6633612F783F6C6162656C3D4D595F4C4142454C26666F6F3D626172A3663362BC2F63312F63322F72312F72322F253343253345253236253237253232A3663363B22F63312F63322F72312F72322F3C3E262722A26634B72F63312F63322F72312F72322F746573742F7572692F62A26635B12F63312F63322F72312F72322F66352F78",
-					"<rdf:RDF>\n<rdf:Description rdf:about='/c1/c2/r1/r2/f0/x0'>\n<jp:f2b rdf:resource='/f2b'/>\n<jp:f2l rdf:resource='/c1/c2/f2k'/>\n<jp:f2m rdf:resource='/c1/c2'/>\n<jp:f2n rdf:resource='/c1'/>\n<jp:f1i rdf:resource='/c1/c2/r1/r2'/>\n<jp:f2h rdf:resource='/c1/c2/r1/r2/f2h'/>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f1e rdf:resource='/c1/c2/r1/r2/f1e/x/y'/>\n<jp:f1c rdf:resource='/f1c/x/y'/>\n<jp:f1l rdf:resource='/c1/c2/f1k'/>\n<jp:f2d rdf:resource='/c1/c2/r1/r2/f2d'/>\n<jp:f2c rdf:resource='/f2c/x/y'/>\n<jp:f2j rdf:resource='/c1/c2/r1'/>\n<jp:f3c rdf:resource='/c1/c2/r1/r2/&lt;&gt;&amp;&apos;&quot;'/>\n<jp:f1d rdf:resource='/c1/c2/r1/r2/f1d'/>\n<jp:f1j rdf:resource='/c1/c2/r1'/>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f1f rdf:resource='/c1/c2/r1/r2'/>\n<jp:f2g rdf:resource='/c1/c2/r1/r2/f2g/x'/>\n<jp:f5 rdf:resource='/c1/c2/r1/r2/f5/x'/>\n<jp:f3b rdf:resource='/c1/c2/r1/r2/%3C%3E%26%27%22'/>\n<jp:f1b rdf:resource='/f1b'/>\n<jp:f2i rdf:resource='/
 c1/c2/r1/r2'/>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f1h rdf:resource='/c1/c2/r1/r2/f1h'/>\n<jp:f4 rdf:resource='/c1/c2/r1/r2/test/uri/b'/>\n<jp:f2f rdf:resource='/c1/c2/r1/r2'/>\n<jp:f2k rdf:resource='/c1/c2/f2j/x'/>\n<jp:f1m rdf:resource='/c1/c2'/>\n<jp:f2e rdf:resource='/c1/c2/r1/r2/f2e/x/y'/>\n<jp:f1n rdf:resource='/c1'/>\n<jp:f1g rdf:resource='/c1/c2/r1/r2/f1g/x'/>\n<jp:f1k rdf:resource='/c1/c2/f1j/x'/>\n</rdf:Description>\n</rdf:RDF>\n"
+					"<rdf:RDF>\n<rdf:Description rdf:about='/c1/c2/r1/r2/f0/x0'>\n<jp:f2j>/c1/c2/r1</jp:f2j>\n<jp:f2l>/c1/c2/f2k</jp:f2l>\n<jp:f2m>/c1/c2</jp:f2m>\n<jp:f1i>/c1/c2/r1/r2</jp:f1i>\n<jp:f2h>/c1/c2/r1/r2/f2h</jp:f2h>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f1e>/c1/c2/r1/r2/f1e/x/y</jp:f1e>\n<jp:f1c>/f1c/x/y</jp:f1c>\n<jp:f2d>/c1/c2/r1/r2/f2d</jp:f2d>\n<jp:f2c>/f2c/x/y</jp:f2c>\n<jp:f1l>/c1/c2/f1k</jp:f1l>\n<jp:f3c>/c1/c2/r1/r2/&lt;&gt;&amp;''</jp:f3c>\n<jp:f1d>/c1/c2/r1/r2/f1d</jp:f1d>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f1f>/c1/c2/r1/r2</jp:f1f>\n<jp:f2g>/c1/c2/r1/r2/f2g/x</jp:f2g>\n<jp:f5>/c1/c2/r1/r2/f5/x</jp:f5>\n<jp:f3b>/c1/c2/r1/r2/%3C%3E%26%27%22</jp:f3b>\n<jp:f1b>/f1b</jp:f1b>\n<jp:f2i>/c1/c2/r1/r2</jp:f2i>\n<jp:f1n>/c1</jp:f1n>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f1h>/c1/c2/r1/r2/f1h</jp:f1h>\n<jp:f4>/c1/c2/r1/r2/test/uri/b</jp:f4>\n<jp:f1j>/c1/c2/r1</jp:f1j>\n<jp:f2f>/c1/c2/r1/r2</jp:f2f>\
 n<jp:f2n>/c1</jp:f2n>\n<jp:f2k>/c1/c2/f2j/x</jp:f2k>\n<jp:f1m>/c1/c2</jp:f1m>\n<jp:f2e>/c1/c2/r1/r2/f2e/x/y</jp:f2e>\n<jp:f1g>/c1/c2/r1/r2/f1g/x</jp:f1g>\n<jp:f1k>/c1/c2/f1j/x</jp:f1k>\n<jp:f2b>/f2b</jp:f2b>\n</rdf:Description>\n</rdf:RDF>\n"
 				)
 			},
 			{	/* 5 */
@@ -176,7 +176,7 @@ public class UriResolutionTest {
 					"(f0=f0/x0,f1a=http://www.apache.org/f1a,f1b=/f1b,f1c=/f1c/x/y,f1d=f1d,f1e=f1e/x/y,f1f='',f1g=/c1/c2/r1/r2/f1g/x,f1h=/c1/c2/r1/r2/f1h,f1i=/c1/c2/r1/r2,f1j=/c1/c2/r1,f1k=/c1/c2/f1j/x,f1l=/c1/c2/f1k,f1m=/c1/c2,f1n=/c1,f2a=http://www.apache.org/f2a,f2b=/f2b,f2c=/f2c/x/y,f2d=f2d,f2e=f2e/x/y,f2f='',f2g=/c1/c2/r1/r2/f2g/x,f2h=/c1/c2/r1/r2/f2h,f2i=/c1/c2/r1/r2,f2j=/c1/c2/r1,f2k=/c1/c2/f2j/x,f2l=/c1/c2/f2k,f2m=/c1/c2,f2n=/c1,f3a='http://www.apache.org/f3a/x?label=MY_LABEL&foo=bar',f3b=%3C%3E%26%27%22,f3c=<>&~'\",f4=test/uri/b,f5=f5/x)",
 					"f0=f0/x0&f1a=http://www.apache.org/f1a&f1b=/f1b&f1c=/f1c/x/y&f1d=f1d&f1e=f1e/x/y&f1f=''&f1g=/c1/c2/r1/r2/f1g/x&f1h=/c1/c2/r1/r2/f1h&f1i=/c1/c2/r1/r2&f1j=/c1/c2/r1&f1k=/c1/c2/f1j/x&f1l=/c1/c2/f1k&f1m=/c1/c2&f1n=/c1&f2a=http://www.apache.org/f2a&f2b=/f2b&f2c=/f2c/x/y&f2d=f2d&f2e=f2e/x/y&f2f=''&f2g=/c1/c2/r1/r2/f2g/x&f2h=/c1/c2/r1/r2/f2h&f2i=/c1/c2/r1/r2&f2j=/c1/c2/r1&f2k=/c1/c2/f2j/x&f2l=/c1/c2/f2k&f2m=/c1/c2&f2n=/c1&f3a='http://www.apache.org/f3a/x?label=MY_LABEL%26foo=bar'&f3b=%253C%253E%2526%2527%2522&f3c=%3C%3E%26~'%22&f4=test/uri/b&f5=f5/x",
 					"DE0022A26630A566302F7830A3663161B9687474703A2F2F7777772E6170616368652E6F72672F663161A3663162A42F663162A3663163A82F6631632F782F79A3663164A3663164A3663165A76631652F782F79A3663166A0A3663167B22F63312F63322F72312F72322F6631672F78A3663168B02F63312F63322F72312F72322F663168A3663169AC2F63312F63322F72312F7232A366316AA92F63312F63322F7231A366316BAC2F63312F63322F66316A2F78A366316CAA2F63312F63322F66316BA366316DA62F63312F6332A366316EA32F6331A3663261B9687474703A2F2F7777772E6170616368652E6F72672F663261A3663262A42F663262A3663263A82F6632632F782F79A3663264A3663264A3663265A76632652F782F79A3663266A0A3663267B22F63312F63322F72312F72322F6632672F78A3663268B02F63312F63322F72312F72322F663268A3663269AC2F63312F63322F72312F7232A366326AA92F63312F63322F7231A366326BAC2F63312F63322F66326A2F78A366326CAA2F63312F63322F66326BA366326DA62F63312F6332A366326EA32F6331A3663361D932687474703A2F2F7777772E6170616368652E6F72672F6633612F783F6C6162656C3D4D595F4C4142454C26666F6F3D626172A3663362AF253343253345253236253237253232A36
 63363A53C3E262722A26634AA746573742F7572692F62A26635A466352F78",
-					"<rdf:RDF>\n<rdf:Description rdf:about='f0/x0'>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f2l rdf:resource='/c1/c2/f2k'/>\n<jp:f2f rdf:resource=''/>\n<jp:f1m rdf:resource='/c1/c2'/>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f3b rdf:resource='%3C%3E%26%27%22'/>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f2h rdf:resource='/c1/c2/r1/r2/f2h'/>\n<jp:f2c rdf:resource='/f2c/x/y'/>\n<jp:f2i rdf:resource='/c1/c2/r1/r2'/>\n<jp:f2g rdf:resource='/c1/c2/r1/r2/f2g/x'/>\n<jp:f5 rdf:resource='f5/x'/>\n<jp:f2k rdf:resource='/c1/c2/f2j/x'/>\n<jp:f1i rdf:resource='/c1/c2/r1/r2'/>\n<jp:f1e rdf:resource='f1e/x/y'/>\n<jp:f1j rdf:resource='/c1/c2/r1'/>\n<jp:f1l rdf:resource='/c1/c2/f1k'/>\n<jp:f2d rdf:resource='f2d'/>\n<jp:f2j rdf:resource='/c1/c2/r1'/>\n<jp:f1k rdf:resource='/c1/c2/f1j/x'/>\n<jp:f3c rdf:resource='&lt;&gt;&amp;&apos;&quot;'/>\n<jp:f2m rdf:resource='/c1/c2'/>\n<jp:f1n rdf:resource='/c1'/>\n<jp:f1b rdf:resource='
 /f1b'/>\n<jp:f2b rdf:resource='/f2b'/>\n<jp:f1h rdf:resource='/c1/c2/r1/r2/f1h'/>\n<jp:f1d rdf:resource='f1d'/>\n<jp:f2e rdf:resource='f2e/x/y'/>\n<jp:f1c rdf:resource='/f1c/x/y'/>\n<jp:f1f rdf:resource=''/>\n<jp:f2n rdf:resource='/c1'/>\n<jp:f1g rdf:resource='/c1/c2/r1/r2/f1g/x'/>\n<jp:f4 rdf:resource='test/uri/b'/>\n</rdf:Description>\n</rdf:RDF>\n"
+					"<rdf:RDF>\n<rdf:Description rdf:about='f0/x0'>\n<jp:f2n>/c1</jp:f2n>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f2l>/c1/c2/f2k</jp:f2l>\n<jp:f2f></jp:f2f>\n<jp:f1m>/c1/c2</jp:f1m>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f3b>%3C%3E%26%27%22</jp:f3b>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f2h>/c1/c2/r1/r2/f2h</jp:f2h>\n<jp:f2c>/f2c/x/y</jp:f2c>\n<jp:f2i>/c1/c2/r1/r2</jp:f2i>\n<jp:f2g>/c1/c2/r1/r2/f2g/x</jp:f2g>\n<jp:f5>f5/x</jp:f5>\n<jp:f2k>/c1/c2/f2j/x</jp:f2k>\n<jp:f1i>/c1/c2/r1/r2</jp:f1i>\n<jp:f1e>f1e/x/y</jp:f1e>\n<jp:f1l>/c1/c2/f1k</jp:f1l>\n<jp:f2d>f2d</jp:f2d>\n<jp:f1k>/c1/c2/f1j/x</jp:f1k>\n<jp:f3c>&lt;&gt;&amp;''</jp:f3c>\n<jp:f2m>/c1/c2</jp:f2m>\n<jp:f2j>/c1/c2/r1</jp:f2j>\n<jp:f1b>/f1b</jp:f1b>\n<jp:f2b>/f2b</jp:f2b>\n<jp:f1h>/c1/c2/r1/r2/f1h</jp:f1h>\n<jp:f1d>f1d</jp:f1d>\n<jp:f2e>f2e/x/y</jp:f2e>\n<jp:f1c>/f1c/x/y</jp:f1c>\n<jp:f1n>/c1</jp:f1n>\n<jp:f1f></jp:f1f>\n<jp:f1g>/c1/c2/r1/r2/f1g
 /x</jp:f1g>\n<jp:f4>test/uri/b</jp:f4>\n<jp:f1j>/c1/c2/r1</jp:f1j>\n</rdf:Description>\n</rdf:RDF>\n"
 				)
 			},
 			{	/* 6 */
@@ -191,7 +191,7 @@ public class UriResolutionTest {
 					"(f0=/context/resource/f0/x0,f1a=http://www.apache.org/f1a,f1b=/f1b,f1c=/f1c/x/y,f1d=/context/resource/f1d,f1e=/context/resource/f1e/x/y,f1f=/context/resource,f1g=/context/resource/f1g/x,f1h=/context/resource/f1h,f1i=/context/resource,f1j=/context,f1k=/context/f1j/x,f1l=/context/f1k,f1m=/context,f1n=/,f2a=http://www.apache.org/f2a,f2b=/f2b,f2c=/f2c/x/y,f2d=/context/resource/f2d,f2e=/context/resource/f2e/x/y,f2f=/context/resource,f2g=/context/resource/f2g/x,f2h=/context/resource/f2h,f2i=/context/resource,f2j=/context,f2k=/context/f2j/x,f2l=/context/f2k,f2m=/context,f2n=/,f3a='http://www.apache.org/f3a/x?label=MY_LABEL&foo=bar',f3b=/context/resource/%3C%3E%26%27%22,f3c=/context/resource/<>&~'\",f4=/context/resource/test/uri/b,f5=/context/resource/f5/x)",
 					"f0=/context/resource/f0/x0&f1a=http://www.apache.org/f1a&f1b=/f1b&f1c=/f1c/x/y&f1d=/context/resource/f1d&f1e=/context/resource/f1e/x/y&f1f=/context/resource&f1g=/context/resource/f1g/x&f1h=/context/resource/f1h&f1i=/context/resource&f1j=/context&f1k=/context/f1j/x&f1l=/context/f1k&f1m=/context&f1n=/&f2a=http://www.apache.org/f2a&f2b=/f2b&f2c=/f2c/x/y&f2d=/context/resource/f2d&f2e=/context/resource/f2e/x/y&f2f=/context/resource&f2g=/context/resource/f2g/x&f2h=/context/resource/f2h&f2i=/context/resource&f2j=/context&f2k=/context/f2j/x&f2l=/context/f2k&f2m=/context&f2n=/&f3a='http://www.apache.org/f3a/x?label=MY_LABEL%26foo=bar'&f3b=/context/resource/%253C%253E%2526%2527%2522&f3c=/context/resource/%3C%3E%26~'%22&f4=/context/resource/test/uri/b&f5=/context/resource/f5/x",
 					"DE0022A26630B72F636F6E746578742F7265736F757263652F66302F7830A3663161B9687474703A2F2F7777772E6170616368652E6F72672F663161A3663162A42F663162A3663163A82F6631632F782F79A3663164B52F636F6E746578742F7265736F757263652F663164A3663165B92F636F6E746578742F7265736F757263652F6631652F782F79A3663166B12F636F6E746578742F7265736F75726365A3663167B72F636F6E746578742F7265736F757263652F6631672F78A3663168B52F636F6E746578742F7265736F757263652F663168A3663169B12F636F6E746578742F7265736F75726365A366316AA82F636F6E74657874A366316BAE2F636F6E746578742F66316A2F78A366316CAC2F636F6E746578742F66316BA366316DA82F636F6E74657874A366316EA12FA3663261B9687474703A2F2F7777772E6170616368652E6F72672F663261A3663262A42F663262A3663263A82F6632632F782F79A3663264B52F636F6E746578742F7265736F757263652F663264A3663265B92F636F6E746578742F7265736F757263652F6632652F782F79A3663266B12F636F6E746578742F7265736F75726365A3663267B72F636F6E746578742F7265736F757263652F6632672F78A3663268B52F636F6E746578742F7265736F757263652F663268A3663269B12F636
 F6E746578742F7265736F75726365A366326AA82F636F6E74657874A366326BAE2F636F6E746578742F66326A2F78A366326CAC2F636F6E746578742F66326BA366326DA82F636F6E74657874A366326EA12FA3663361D932687474703A2F2F7777772E6170616368652E6F72672F6633612F783F6C6162656C3D4D595F4C4142454C26666F6F3D626172A3663362D9212F636F6E746578742F7265736F757263652F253343253345253236253237253232A3663363B72F636F6E746578742F7265736F757263652F3C3E262722A26634BC2F636F6E746578742F7265736F757263652F746573742F7572692F62A26635B62F636F6E746578742F7265736F757263652F66352F78",
-					"<rdf:RDF>\n<rdf:Description rdf:about='/context/resource/f0/x0'>\n<jp:f2h rdf:resource='/context/resource/f2h'/>\n<jp:f2f rdf:resource='/context/resource'/>\n<jp:f1c rdf:resource='/f1c/x/y'/>\n<jp:f1h rdf:resource='/context/resource/f1h'/>\n<jp:f1n rdf:resource='/'/>\n<jp:f5 rdf:resource='/context/resource/f5/x'/>\n<jp:f1e rdf:resource='/context/resource/f1e/x/y'/>\n<jp:f3c rdf:resource='/context/resource/&lt;&gt;&amp;&apos;&quot;'/>\n<jp:f2k rdf:resource='/context/f2j/x'/>\n<jp:f2m rdf:resource='/context'/>\n<jp:f2i rdf:resource='/context/resource'/>\n<jp:f1d rdf:resource='/context/resource/f1d'/>\n<jp:f4 rdf:resource='/context/resource/test/uri/b'/>\n<jp:f1j rdf:resource='/context'/>\n<jp:f1k rdf:resource='/context/f1j/x'/>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f2c rdf:resource='/f2c/x/y'/>\n<jp:f2e rdf:resource='/context/resource/f2e/x/y'/>\n<jp:f2n rdf:resource='/'/>\n<jp:f2j rdf:resource='/context'/>\n<jp:f3b rdf:resource='/
 context/resource/%3C%3E%26%27%22'/>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f2b rdf:resource='/f2b'/>\n<jp:f1i rdf:resource='/context/resource'/>\n<jp:f1g rdf:resource='/context/resource/f1g/x'/>\n<jp:f1b rdf:resource='/f1b'/>\n<jp:f1m rdf:resource='/context'/>\n<jp:f2d rdf:resource='/context/resource/f2d'/>\n<jp:f2g rdf:resource='/context/resource/f2g/x'/>\n<jp:f1l rdf:resource='/context/f1k'/>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f1f rdf:resource='/context/resource'/>\n<jp:f2l rdf:resource='/context/f2k'/>\n</rdf:Description>\n</rdf:RDF>\n"
+					"<rdf:RDF>\n<rdf:Description rdf:about='/context/resource/f0/x0'>\n<jp:f2h>/context/resource/f2h</jp:f2h>\n<jp:f2f>/context/resource</jp:f2f>\n<jp:f1c>/f1c/x/y</jp:f1c>\n<jp:f1h>/context/resource/f1h</jp:f1h>\n<jp:f5>/context/resource/f5/x</jp:f5>\n<jp:f1e>/context/resource/f1e/x/y</jp:f1e>\n<jp:f3c>/context/resource/&lt;&gt;&amp;''</jp:f3c>\n<jp:f2k>/context/f2j/x</jp:f2k>\n<jp:f1j>/context</jp:f1j>\n<jp:f2m>/context</jp:f2m>\n<jp:f2i>/context/resource</jp:f2i>\n<jp:f1d>/context/resource/f1d</jp:f1d>\n<jp:f4>/context/resource/test/uri/b</jp:f4>\n<jp:f1n>/</jp:f1n>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f1k>/context/f1j/x</jp:f1k>\n<jp:f2c>/f2c/x/y</jp:f2c>\n<jp:f2e>/context/resource/f2e/x/y</jp:f2e>\n<jp:f3b>/context/resource/%3C%3E%26%27%22</jp:f3b>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f2b>/f2b</jp:f2b>\n<jp:f1i>/context/resource</jp:f1i>\n<jp:f1g>/context/resource/f1g/x</jp:f1g>\n<jp:f1b>/f1b</jp:f1b>\n<jp:f1
 m>/context</jp:f1m>\n<jp:f2d>/context/resource/f2d</jp:f2d>\n<jp:f2g>/context/resource/f2g/x</jp:f2g>\n<jp:f2n>/</jp:f2n>\n<jp:f2j>/context</jp:f2j>\n<jp:f1l>/context/f1k</jp:f1l>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f1f>/context/resource</jp:f1f>\n<jp:f2l>/context/f2k</jp:f2l>\n</rdf:Description>\n</rdf:RDF>\n"
 				)
 			},
 			{	/* 7 */
@@ -206,7 +206,7 @@ public class UriResolutionTest {
 					"(f0=/context/resource/f0/x0,f1a=http://www.apache.org/f1a,f1b=/f1b,f1c=/f1c/x/y,f1d=/context/resource/f1d,f1e=/context/resource/f1e/x/y,f1f=/context/resource,f1g=/context/resource/f1g/x,f1h=/context/resource/f1h,f1i=/context/resource,f1j=/context,f1k=/context/f1j/x,f1l=/context/f1k,f1m=/context,f1n=/,f2a=http://www.apache.org/f2a,f2b=/f2b,f2c=/f2c/x/y,f2d=/context/resource/f2d,f2e=/context/resource/f2e/x/y,f2f=/context/resource,f2g=/context/resource/f2g/x,f2h=/context/resource/f2h,f2i=/context/resource,f2j=/context,f2k=/context/f2j/x,f2l=/context/f2k,f2m=/context,f2n=/,f3a='http://www.apache.org/f3a/x?label=MY_LABEL&foo=bar',f3b=/context/resource/%3C%3E%26%27%22,f3c=/context/resource/<>&~'\",f4=/context/resource/test/uri/b,f5=/context/resource/f5/x)",
 					"f0=/context/resource/f0/x0&f1a=http://www.apache.org/f1a&f1b=/f1b&f1c=/f1c/x/y&f1d=/context/resource/f1d&f1e=/context/resource/f1e/x/y&f1f=/context/resource&f1g=/context/resource/f1g/x&f1h=/context/resource/f1h&f1i=/context/resource&f1j=/context&f1k=/context/f1j/x&f1l=/context/f1k&f1m=/context&f1n=/&f2a=http://www.apache.org/f2a&f2b=/f2b&f2c=/f2c/x/y&f2d=/context/resource/f2d&f2e=/context/resource/f2e/x/y&f2f=/context/resource&f2g=/context/resource/f2g/x&f2h=/context/resource/f2h&f2i=/context/resource&f2j=/context&f2k=/context/f2j/x&f2l=/context/f2k&f2m=/context&f2n=/&f3a='http://www.apache.org/f3a/x?label=MY_LABEL%26foo=bar'&f3b=/context/resource/%253C%253E%2526%2527%2522&f3c=/context/resource/%3C%3E%26~'%22&f4=/context/resource/test/uri/b&f5=/context/resource/f5/x",
 					"DE0022A26630B72F636F6E746578742F7265736F757263652F66302F7830A3663161B9687474703A2F2F7777772E6170616368652E6F72672F663161A3663162A42F663162A3663163A82F6631632F782F79A3663164B52F636F6E746578742F7265736F757263652F663164A3663165B92F636F6E746578742F7265736F757263652F6631652F782F79A3663166B12F636F6E746578742F7265736F75726365A3663167B72F636F6E746578742F7265736F757263652F6631672F78A3663168B52F636F6E746578742F7265736F757263652F663168A3663169B12F636F6E746578742F7265736F75726365A366316AA82F636F6E74657874A366316BAE2F636F6E746578742F66316A2F78A366316CAC2F636F6E746578742F66316BA366316DA82F636F6E74657874A366316EA12FA3663261B9687474703A2F2F7777772E6170616368652E6F72672F663261A3663262A42F663262A3663263A82F6632632F782F79A3663264B52F636F6E746578742F7265736F757263652F663264A3663265B92F636F6E746578742F7265736F757263652F6632652F782F79A3663266B12F636F6E746578742F7265736F75726365A3663267B72F636F6E746578742F7265736F757263652F6632672F78A3663268B52F636F6E746578742F7265736F757263652F663268A3663269B12F636
 F6E746578742F7265736F75726365A366326AA82F636F6E74657874A366326BAE2F636F6E746578742F66326A2F78A366326CAC2F636F6E746578742F66326BA366326DA82F636F6E74657874A366326EA12FA3663361D932687474703A2F2F7777772E6170616368652E6F72672F6633612F783F6C6162656C3D4D595F4C4142454C26666F6F3D626172A3663362D9212F636F6E746578742F7265736F757263652F253343253345253236253237253232A3663363B72F636F6E746578742F7265736F757263652F3C3E262722A26634BC2F636F6E746578742F7265736F757263652F746573742F7572692F62A26635B62F636F6E746578742F7265736F757263652F66352F78",
-					"<rdf:RDF>\n<rdf:Description rdf:about='/context/resource/f0/x0'>\n<jp:f2h rdf:resource='/context/resource/f2h'/>\n<jp:f2f rdf:resource='/context/resource'/>\n<jp:f1c rdf:resource='/f1c/x/y'/>\n<jp:f1h rdf:resource='/context/resource/f1h'/>\n<jp:f1n rdf:resource='/'/>\n<jp:f5 rdf:resource='/context/resource/f5/x'/>\n<jp:f1e rdf:resource='/context/resource/f1e/x/y'/>\n<jp:f3c rdf:resource='/context/resource/&lt;&gt;&amp;&apos;&quot;'/>\n<jp:f2k rdf:resource='/context/f2j/x'/>\n<jp:f2m rdf:resource='/context'/>\n<jp:f2i rdf:resource='/context/resource'/>\n<jp:f1d rdf:resource='/context/resource/f1d'/>\n<jp:f4 rdf:resource='/context/resource/test/uri/b'/>\n<jp:f1j rdf:resource='/context'/>\n<jp:f1k rdf:resource='/context/f1j/x'/>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f2c rdf:resource='/f2c/x/y'/>\n<jp:f2e rdf:resource='/context/resource/f2e/x/y'/>\n<jp:f2n rdf:resource='/'/>\n<jp:f2j rdf:resource='/context'/>\n<jp:f3b rdf:resource='/
 context/resource/%3C%3E%26%27%22'/>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f2b rdf:resource='/f2b'/>\n<jp:f1i rdf:resource='/context/resource'/>\n<jp:f1g rdf:resource='/context/resource/f1g/x'/>\n<jp:f1b rdf:resource='/f1b'/>\n<jp:f1m rdf:resource='/context'/>\n<jp:f2d rdf:resource='/context/resource/f2d'/>\n<jp:f2g rdf:resource='/context/resource/f2g/x'/>\n<jp:f1l rdf:resource='/context/f1k'/>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f1f rdf:resource='/context/resource'/>\n<jp:f2l rdf:resource='/context/f2k'/>\n</rdf:Description>\n</rdf:RDF>\n"
+					"<rdf:RDF>\n<rdf:Description rdf:about='/context/resource/f0/x0'>\n<jp:f2h>/context/resource/f2h</jp:f2h>\n<jp:f2f>/context/resource</jp:f2f>\n<jp:f1c>/f1c/x/y</jp:f1c>\n<jp:f1h>/context/resource/f1h</jp:f1h>\n<jp:f5>/context/resource/f5/x</jp:f5>\n<jp:f1e>/context/resource/f1e/x/y</jp:f1e>\n<jp:f3c>/context/resource/&lt;&gt;&amp;''</jp:f3c>\n<jp:f2k>/context/f2j/x</jp:f2k>\n<jp:f1j>/context</jp:f1j>\n<jp:f2m>/context</jp:f2m>\n<jp:f2i>/context/resource</jp:f2i>\n<jp:f1d>/context/resource/f1d</jp:f1d>\n<jp:f4>/context/resource/test/uri/b</jp:f4>\n<jp:f1n>/</jp:f1n>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f1k>/context/f1j/x</jp:f1k>\n<jp:f2c>/f2c/x/y</jp:f2c>\n<jp:f2e>/context/resource/f2e/x/y</jp:f2e>\n<jp:f3b>/context/resource/%3C%3E%26%27%22</jp:f3b>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f2b>/f2b</jp:f2b>\n<jp:f1i>/context/resource</jp:f1i>\n<jp:f1g>/context/resource/f1g/x</jp:f1g>\n<jp:f1b>/f1b</jp:f1b>\n<jp:f1
 m>/context</jp:f1m>\n<jp:f2d>/context/resource/f2d</jp:f2d>\n<jp:f2g>/context/resource/f2g/x</jp:f2g>\n<jp:f2n>/</jp:f2n>\n<jp:f2j>/context</jp:f2j>\n<jp:f1l>/context/f1k</jp:f1l>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f1f>/context/resource</jp:f1f>\n<jp:f2l>/context/f2k</jp:f2l>\n</rdf:Description>\n</rdf:RDF>\n"
 				)
 			},
 			{	/* 8 */
@@ -221,7 +221,7 @@ public class UriResolutionTest {
 					"(f0=f0/x0,f1a=http://www.apache.org/f1a,f1b=/f1b,f1c=/f1c/x/y,f1d=f1d,f1e=f1e/x/y,f1f='',f1g=/context/resource/f1g/x,f1h=/context/resource/f1h,f1i=/context/resource,f1j=/context,f1k=/context/f1j/x,f1l=/context/f1k,f1m=/context,f1n=/,f2a=http://www.apache.org/f2a,f2b=/f2b,f2c=/f2c/x/y,f2d=f2d,f2e=f2e/x/y,f2f='',f2g=/context/resource/f2g/x,f2h=/context/resource/f2h,f2i=/context/resource,f2j=/context,f2k=/context/f2j/x,f2l=/context/f2k,f2m=/context,f2n=/,f3a='http://www.apache.org/f3a/x?label=MY_LABEL&foo=bar',f3b=%3C%3E%26%27%22,f3c=<>&~'\",f4=test/uri/b,f5=f5/x)",
 					"f0=f0/x0&f1a=http://www.apache.org/f1a&f1b=/f1b&f1c=/f1c/x/y&f1d=f1d&f1e=f1e/x/y&f1f=''&f1g=/context/resource/f1g/x&f1h=/context/resource/f1h&f1i=/context/resource&f1j=/context&f1k=/context/f1j/x&f1l=/context/f1k&f1m=/context&f1n=/&f2a=http://www.apache.org/f2a&f2b=/f2b&f2c=/f2c/x/y&f2d=f2d&f2e=f2e/x/y&f2f=''&f2g=/context/resource/f2g/x&f2h=/context/resource/f2h&f2i=/context/resource&f2j=/context&f2k=/context/f2j/x&f2l=/context/f2k&f2m=/context&f2n=/&f3a='http://www.apache.org/f3a/x?label=MY_LABEL%26foo=bar'&f3b=%253C%253E%2526%2527%2522&f3c=%3C%3E%26~'%22&f4=test/uri/b&f5=f5/x",
 					"DE0022A26630A566302F7830A3663161B9687474703A2F2F7777772E6170616368652E6F72672F663161A3663162A42F663162A3663163A82F6631632F782F79A3663164A3663164A3663165A76631652F782F79A3663166A0A3663167B72F636F6E746578742F7265736F757263652F6631672F78A3663168B52F636F6E746578742F7265736F757263652F663168A3663169B12F636F6E746578742F7265736F75726365A366316AA82F636F6E74657874A366316BAE2F636F6E746578742F66316A2F78A366316CAC2F636F6E746578742F66316BA366316DA82F636F6E74657874A366316EA12FA3663261B9687474703A2F2F7777772E6170616368652E6F72672F663261A3663262A42F663262A3663263A82F6632632F782F79A3663264A3663264A3663265A76632652F782F79A3663266A0A3663267B72F636F6E746578742F7265736F757263652F6632672F78A3663268B52F636F6E746578742F7265736F757263652F663268A3663269B12F636F6E746578742F7265736F75726365A366326AA82F636F6E74657874A366326BAE2F636F6E746578742F66326A2F78A366326CAC2F636F6E746578742F66326BA366326DA82F636F6E74657874A366326EA12FA3663361D932687474703A2F2F7777772E6170616368652E6F72672F6633612F783F6C6162656C3D4D5
 95F4C4142454C26666F6F3D626172A3663362AF253343253345253236253237253232A3663363A53C3E262722A26634AA746573742F7572692F62A26635A466352F78",
-					"<rdf:RDF>\n<rdf:Description rdf:about='f0/x0'>\n<jp:f2l rdf:resource='/context/f2k'/>\n<jp:f1j rdf:resource='/context'/>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f2g rdf:resource='/context/resource/f2g/x'/>\n<jp:f2f rdf:resource=''/>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f3b rdf:resource='%3C%3E%26%27%22'/>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f2c rdf:resource='/f2c/x/y'/>\n<jp:f2j rdf:resource='/context'/>\n<jp:f5 rdf:resource='f5/x'/>\n<jp:f2k rdf:resource='/context/f2j/x'/>\n<jp:f1e rdf:resource='f1e/x/y'/>\n<jp:f2i rdf:resource='/context/resource'/>\n<jp:f2m rdf:resource='/context'/>\n<jp:f1m rdf:resource='/context'/>\n<jp:f2d rdf:resource='f2d'/>\n<jp:f1l rdf:resource='/context/f1k'/>\n<jp:f3c rdf:resource='&lt;&gt;&amp;&apos;&quot;'/>\n<jp:f1n rdf:resource='/'/>\n<jp:f1b rdf:resource='/f1b'/>\n<jp:f1k rdf:resource='/context/f1j/x'/>\n<jp:f1h rdf:resource='/context/resource/f1h'/>\n<jp:f2b
  rdf:resource='/f2b'/>\n<jp:f2h rdf:resource='/context/resource/f2h'/>\n<jp:f1d rdf:resource='f1d'/>\n<jp:f1i rdf:resource='/context/resource'/>\n<jp:f2e rdf:resource='f2e/x/y'/>\n<jp:f1c rdf:resource='/f1c/x/y'/>\n<jp:f1f rdf:resource=''/>\n<jp:f1g rdf:resource='/context/resource/f1g/x'/>\n<jp:f4 rdf:resource='test/uri/b'/>\n<jp:f2n rdf:resource='/'/>\n</rdf:Description>\n</rdf:RDF>\n"
+					"<rdf:RDF>\n<rdf:Description rdf:about='f0/x0'>\n<jp:f2l>/context/f2k</jp:f2l>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f2g>/context/resource/f2g/x</jp:f2g>\n<jp:f2f></jp:f2f>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f3b>%3C%3E%26%27%22</jp:f3b>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f2c>/f2c/x/y</jp:f2c>\n<jp:f5>f5/x</jp:f5>\n<jp:f2k>/context/f2j/x</jp:f2k>\n<jp:f1e>f1e/x/y</jp:f1e>\n<jp:f2i>/context/resource</jp:f2i>\n<jp:f2n>/</jp:f2n>\n<jp:f2m>/context</jp:f2m>\n<jp:f1m>/context</jp:f1m>\n<jp:f2d>f2d</jp:f2d>\n<jp:f1l>/context/f1k</jp:f1l>\n<jp:f3c>&lt;&gt;&amp;''</jp:f3c>\n<jp:f1n>/</jp:f1n>\n<jp:f1b>/f1b</jp:f1b>\n<jp:f1k>/context/f1j/x</jp:f1k>\n<jp:f1h>/context/resource/f1h</jp:f1h>\n<jp:f2b>/f2b</jp:f2b>\n<jp:f2h>/context/resource/f2h</jp:f2h>\n<jp:f1d>f1d</jp:f1d>\n<jp:f1i>/context/resource</jp:f1i>\n<jp:f2e>f2e/x/y</jp:f2e>\n<jp:f2j>/context</jp:f2j>\n<jp:f1c>/f1c/x/y</jp:f1c>\n<jp:f1j>/co
 ntext</jp:f1j>\n<jp:f1f></jp:f1f>\n<jp:f1g>/context/resource/f1g/x</jp:f1g>\n<jp:f4>test/uri/b</jp:f4>\n</rdf:Description>\n</rdf:RDF>\n"
 				)
 			},
 			{	/* 9 */
@@ -236,7 +236,7 @@ public class UriResolutionTest {
 					"(f0=http://foo.com:123/resource/f0/x0,f1a=http://www.apache.org/f1a,f1b=http://foo.com:123/f1b,f1c=http://foo.com:123/f1c/x/y,f1d=http://foo.com:123/resource/f1d,f1e=http://foo.com:123/resource/f1e/x/y,f1f=http://foo.com:123/resource,f1g=http://foo.com:123/resource/f1g/x,f1h=http://foo.com:123/resource/f1h,f1i=http://foo.com:123/resource,f1j=http://foo.com:123,f1k=http://foo.com:123/f1j/x,f1l=http://foo.com:123/f1k,f1m=http://foo.com:123,f1n=http://foo.com:123/..,f2a=http://www.apache.org/f2a,f2b=http://foo.com:123/f2b,f2c=http://foo.com:123/f2c/x/y,f2d=http://foo.com:123/resource/f2d,f2e=http://foo.com:123/resource/f2e/x/y,f2f=http://foo.com:123/resource,f2g=http://foo.com:123/resource/f2g/x,f2h=http://foo.com:123/resource/f2h,f2i=http://foo.com:123/resource,f2j=http://foo.com:123,f2k=http://foo.com:123/f2j/x,f2l=http://foo.com:123/f2k,f2m=http://foo.com:123,f2n=http://foo.com:123/..,f3a='http://www.apache.org/f3a/x?label=MY_LABEL&foo=bar',f3b=http://foo.com:123/resource/%3C%
 3E%26%27%22,f3c=http://foo.com:123/resource/<>&~'\",f4=http://foo.com:123/resource/test/uri/b,f5=http://foo.com:123/resource/f5/x)",
 					"f0=http://foo.com:123/resource/f0/x0&f1a=http://www.apache.org/f1a&f1b=http://foo.com:123/f1b&f1c=http://foo.com:123/f1c/x/y&f1d=http://foo.com:123/resource/f1d&f1e=http://foo.com:123/resource/f1e/x/y&f1f=http://foo.com:123/resource&f1g=http://foo.com:123/resource/f1g/x&f1h=http://foo.com:123/resource/f1h&f1i=http://foo.com:123/resource&f1j=http://foo.com:123&f1k=http://foo.com:123/f1j/x&f1l=http://foo.com:123/f1k&f1m=http://foo.com:123&f1n=http://foo.com:123/..&f2a=http://www.apache.org/f2a&f2b=http://foo.com:123/f2b&f2c=http://foo.com:123/f2c/x/y&f2d=http://foo.com:123/resource/f2d&f2e=http://foo.com:123/resource/f2e/x/y&f2f=http://foo.com:123/resource&f2g=http://foo.com:123/resource/f2g/x&f2h=http://foo.com:123/resource/f2h&f2i=http://foo.com:123/resource&f2j=http://foo.com:123&f2k=http://foo.com:123/f2j/x&f2l=http://foo.com:123/f2k&f2m=http://foo.com:123&f2n=http://foo.com:123/..&f3a='http://www.apache.org/f3a/x?label=MY_LABEL%26foo=bar'&f3b=http://foo.com:123/resource/%25
 3C%253E%2526%2527%2522&f3c=http://foo.com:123/resource/%3C%3E%26~'%22&f4=http://foo.com:123/resource/test/uri/b&f5=http://foo.com:123/resource/f5/x",
 					"DE0022A26630D921687474703A2F2F666F6F2E636F6D3A3132332F7265736F757263652F66302F7830A3663161B9687474703A2F2F7777772E6170616368652E6F72672F663161A3663162B6687474703A2F2F666F6F2E636F6D3A3132332F663162A3663163BA687474703A2F2F666F6F2E636F6D3A3132332F6631632F782F79A3663164BF687474703A2F2F666F6F2E636F6D3A3132332F7265736F757263652F663164A3663165D923687474703A2F2F666F6F2E636F6D3A3132332F7265736F757263652F6631652F782F79A3663166BB687474703A2F2F666F6F2E636F6D3A3132332F7265736F75726365A3663167D921687474703A2F2F666F6F2E636F6D3A3132332F7265736F757263652F6631672F78A3663168BF687474703A2F2F666F6F2E636F6D3A3132332F7265736F757263652F663168A3663169BB687474703A2F2F666F6F2E636F6D3A3132332F7265736F75726365A366316AB2687474703A2F2F666F6F2E636F6D3A313233A366316BB8687474703A2F2F666F6F2E636F6D3A3132332F66316A2F78A366316CB6687474703A2F2F666F6F2E636F6D3A3132332F66316BA366316DB2687474703A2F2F666F6F2E636F6D3A313233A366316EB5687474703A2F2F666F6F2E636F6D3A3132332F2E2EA3663261B9687474703A2F2F7777772E6170616368652
 E6F72672F663261A3663262B6687474703A2F2F666F6F2E636F6D3A3132332F663262A3663263BA687474703A2F2F666F6F2E636F6D3A3132332F6632632F782F79A3663264BF687474703A2F2F666F6F2E636F6D3A3132332F7265736F757263652F663264A3663265D923687474703A2F2F666F6F2E636F6D3A3132332F7265736F757263652F6632652F782F79A3663266BB687474703A2F2F666F6F2E636F6D3A3132332F7265736F75726365A3663267D921687474703A2F2F666F6F2E636F6D3A3132332F7265736F757263652F6632672F78A3663268BF687474703A2F2F666F6F2E636F6D3A3132332F7265736F757263652F663268A3663269BB687474703A2F2F666F6F2E636F6D3A3132332F7265736F75726365A366326AB2687474703A2F2F666F6F2E636F6D3A313233A366326BB8687474703A2F2F666F6F2E636F6D3A3132332F66326A2F78A366326CB6687474703A2F2F666F6F2E636F6D3A3132332F66326BA366326DB2687474703A2F2F666F6F2E636F6D3A313233A366326EB5687474703A2F2F666F6F2E636F6D3A3132332F2E2EA3663361D932687474703A2F2F7777772E6170616368652E6F72672F6633612F783F6C6162656C3D4D595F4C4142454C26666F6F3D626172A3663362D92B687474703A2F2F666F6F2E636F6D3A3132332F7265736F75726365
 2F253343253345253236253237253232A3663363D921687474703A2F2F666F6F2E636F6D3A3132332F7265736F757263652F3C3E262722A26634D926687474703A2F2F666F6F2E636F6D3A3132332F7265736F757263652F746573742F7572692F62A26635D920687474703A2F2F666F6F2E636F6D3A3132332F7265736F757263652F66352F78",
-					"<rdf:RDF>\n<rdf:Description rdf:about='http://foo.com:123/resource/f0/x0'>\n<jp:f2i rdf:resource='http://foo.com:123/resource'/>\n<jp:f2h rdf:resource='http://foo.com:123/resource/f2h'/>\n<jp:f1g rdf:resource='http://foo.com:123/resource/f1g/x'/>\n<jp:f1n rdf:resource='http://foo.com:123/..'/>\n<jp:f2b rdf:resource='http://foo.com:123/f2b'/>\n<jp:f1f rdf:resource='http://foo.com:123/resource'/>\n<jp:f2j rdf:resource='http://foo.com:123'/>\n<jp:f2d rdf:resource='http://foo.com:123/resource/f2d'/>\n<jp:f1l rdf:resource='http://foo.com:123/f1k'/>\n<jp:f3b rdf:resource='http://foo.com:123/resource/%3C%3E%26%27%22'/>\n<jp:f4 rdf:resource='http://foo.com:123/resource/test/uri/b'/>\n<jp:f2l rdf:resource='http://foo.com:123/f2k'/>\n<jp:f1d rdf:resource='http://foo.com:123/resource/f1d'/>\n<jp:f1e rdf:resource='http://foo.com:123/resource/f1e/x/y'/>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f1k rdf:resource='http://foo.com:123/f1j/x'/>\n<jp:f
 2m rdf:resource='http://foo.com:123'/>\n<jp:f1i rdf:resource='http://foo.com:123/resource'/>\n<jp:f5 rdf:resource='http://foo.com:123/resource/f5/x'/>\n<jp:f2f rdf:resource='http://foo.com:123/resource'/>\n<jp:f2n rdf:resource='http://foo.com:123/..'/>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f1h rdf:resource='http://foo.com:123/resource/f1h'/>\n<jp:f1m rdf:resource='http://foo.com:123'/>\n<jp:f2c rdf:resource='http://foo.com:123/f2c/x/y'/>\n<jp:f2g rdf:resource='http://foo.com:123/resource/f2g/x'/>\n<jp:f2k rdf:resource='http://foo.com:123/f2j/x'/>\n<jp:f1b rdf:resource='http://foo.com:123/f1b'/>\n<jp:f1c rdf:resource='http://foo.com:123/f1c/x/y'/>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f3c rdf:resource='http://foo.com:123/resource/&lt;&gt;&amp;&apos;&quot;'/>\n<jp:f1j rdf:resource='http://foo.com:123'/>\n<jp:f2e rdf:resource='http://foo.com:123/resource/f2e/x/y'/>\n</rdf:Description>\n</rdf:RDF>\n"
+					"<rdf:RDF>\n<rdf:Description rdf:about='http://foo.com:123/resource/f0/x0'>\n<jp:f2i rdf:resource='http://foo.com:123/resource'/>\n<jp:f2j rdf:resource='http://foo.com:123'/>\n<jp:f2h rdf:resource='http://foo.com:123/resource/f2h'/>\n<jp:f1g rdf:resource='http://foo.com:123/resource/f1g/x'/>\n<jp:f1n rdf:resource='http://foo.com:123/..'/>\n<jp:f2b rdf:resource='http://foo.com:123/f2b'/>\n<jp:f1f rdf:resource='http://foo.com:123/resource'/>\n<jp:f2d rdf:resource='http://foo.com:123/resource/f2d'/>\n<jp:f1l rdf:resource='http://foo.com:123/f1k'/>\n<jp:f3b rdf:resource='http://foo.com:123/resource/%3C%3E%26%27%22'/>\n<jp:f4 rdf:resource='http://foo.com:123/resource/test/uri/b'/>\n<jp:f2l rdf:resource='http://foo.com:123/f2k'/>\n<jp:f1d rdf:resource='http://foo.com:123/resource/f1d'/>\n<jp:f1e rdf:resource='http://foo.com:123/resource/f1e/x/y'/>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f1j rdf:resource='http://foo.com:123'/>\n<jp:f1k rdf
 :resource='http://foo.com:123/f1j/x'/>\n<jp:f2m rdf:resource='http://foo.com:123'/>\n<jp:f1i rdf:resource='http://foo.com:123/resource'/>\n<jp:f5 rdf:resource='http://foo.com:123/resource/f5/x'/>\n<jp:f2f rdf:resource='http://foo.com:123/resource'/>\n<jp:f2n rdf:resource='http://foo.com:123/..'/>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f1h rdf:resource='http://foo.com:123/resource/f1h'/>\n<jp:f1m rdf:resource='http://foo.com:123'/>\n<jp:f2c rdf:resource='http://foo.com:123/f2c/x/y'/>\n<jp:f2g rdf:resource='http://foo.com:123/resource/f2g/x'/>\n<jp:f2k rdf:resource='http://foo.com:123/f2j/x'/>\n<jp:f1b rdf:resource='http://foo.com:123/f1b'/>\n<jp:f1c rdf:resource='http://foo.com:123/f1c/x/y'/>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f3c rdf:resource='http://foo.com:123/resource/&lt;&gt;&amp;&apos;&quot;'/>\n<jp:f2e rdf:resource='http://foo.com:123/resource/f2e/x/y'/>\n</rdf:Description>\n</rdf:RDF>\n"
 				)
 			},
 			{	/* 10 */
@@ -251,7 +251,7 @@ public class UriResolutionTest {
 					"(f0=/resource/f0/x0,f1a=http://www.apache.org/f1a,f1b=/f1b,f1c=/f1c/x/y,f1d=/resource/f1d,f1e=/resource/f1e/x/y,f1f=/resource,f1g=/resource/f1g/x,f1h=/resource/f1h,f1i=/resource,f1j=/,f1k=/f1j/x,f1l=/f1k,f1m=/,f1n=/..,f2a=http://www.apache.org/f2a,f2b=/f2b,f2c=/f2c/x/y,f2d=/resource/f2d,f2e=/resource/f2e/x/y,f2f=/resource,f2g=/resource/f2g/x,f2h=/resource/f2h,f2i=/resource,f2j=/,f2k=/f2j/x,f2l=/f2k,f2m=/,f2n=/..,f3a='http://www.apache.org/f3a/x?label=MY_LABEL&foo=bar',f3b=/resource/%3C%3E%26%27%22,f3c=/resource/<>&~'\",f4=/resource/test/uri/b,f5=/resource/f5/x)",
 					"f0=/resource/f0/x0&f1a=http://www.apache.org/f1a&f1b=/f1b&f1c=/f1c/x/y&f1d=/resource/f1d&f1e=/resource/f1e/x/y&f1f=/resource&f1g=/resource/f1g/x&f1h=/resource/f1h&f1i=/resource&f1j=/&f1k=/f1j/x&f1l=/f1k&f1m=/&f1n=/..&f2a=http://www.apache.org/f2a&f2b=/f2b&f2c=/f2c/x/y&f2d=/resource/f2d&f2e=/resource/f2e/x/y&f2f=/resource&f2g=/resource/f2g/x&f2h=/resource/f2h&f2i=/resource&f2j=/&f2k=/f2j/x&f2l=/f2k&f2m=/&f2n=/..&f3a='http://www.apache.org/f3a/x?label=MY_LABEL%26foo=bar'&f3b=/resource/%253C%253E%2526%2527%2522&f3c=/resource/%3C%3E%26~'%22&f4=/resource/test/uri/b&f5=/resource/f5/x",
 					"DE0022A26630AF2F7265736F757263652F66302F7830A3663161B9687474703A2F2F7777772E6170616368652E6F72672F663161A3663162A42F663162A3663163A82F6631632F782F79A3663164AD2F7265736F757263652F663164A3663165B12F7265736F757263652F6631652F782F79A3663166A92F7265736F75726365A3663167AF2F7265736F757263652F6631672F78A3663168AD2F7265736F757263652F663168A3663169A92F7265736F75726365A366316AA12FA366316BA62F66316A2F78A366316CA42F66316BA366316DA12FA366316EA32F2E2EA3663261B9687474703A2F2F7777772E6170616368652E6F72672F663261A3663262A42F663262A3663263A82F6632632F782F79A3663264AD2F7265736F757263652F663264A3663265B12F7265736F757263652F6632652F782F79A3663266A92F7265736F75726365A3663267AF2F7265736F757263652F6632672F78A3663268AD2F7265736F757263652F663268A3663269A92F7265736F75726365A366326AA12FA366326BA62F66326A2F78A366326CA42F66326BA366326DA12FA366326EA32F2E2EA3663361D932687474703A2F2F7777772E6170616368652E6F72672F6633612F783F6C6162656C3D4D595F4C4142454C26666F6F3D626172A3663362B92F7265736F757263652F2533432533452
 53236253237253232A3663363AF2F7265736F757263652F3C3E262722A26634B42F7265736F757263652F746573742F7572692F62A26635AE2F7265736F757263652F66352F78",
-					"<rdf:RDF>\n<rdf:Description rdf:about='/resource/f0/x0'>\n<jp:f2b rdf:resource='/f2b'/>\n<jp:f2j rdf:resource='/'/>\n<jp:f2e rdf:resource='/resource/f2e/x/y'/>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f2n rdf:resource='/..'/>\n<jp:f2c rdf:resource='/f2c/x/y'/>\n<jp:f3c rdf:resource='/resource/&lt;&gt;&amp;&apos;&quot;'/>\n<jp:f2h rdf:resource='/resource/f2h'/>\n<jp:f1i rdf:resource='/resource'/>\n<jp:f1n rdf:resource='/..'/>\n<jp:f1c rdf:resource='/f1c/x/y'/>\n<jp:f1e rdf:resource='/resource/f1e/x/y'/>\n<jp:f5 rdf:resource='/resource/f5/x'/>\n<jp:f2l rdf:resource='/f2k'/>\n<jp:f2d rdf:resource='/resource/f2d'/>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f3b rdf:resource='/resource/%3C%3E%26%27%22'/>\n<jp:f1d rdf:resource='/resource/f1d'/>\n<jp:f2m rdf:resource='/'/>\n<jp:f1f rdf:resource='/resource'/>\n<jp:f1b rdf:resource='/f1b'/>\n<jp:f4 rdf:resource='/resource/test/uri/b'/>\n<jp:f2i rdf:resource='/resource'/>\n<jp:f
 1h rdf:resource='/resource/f1h'/>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f1k rdf:resource='/f1j/x'/>\n<jp:f1l rdf:resource='/f1k'/>\n<jp:f2g rdf:resource='/resource/f2g/x'/>\n<jp:f2k rdf:resource='/f2j/x'/>\n<jp:f1j rdf:resource='/'/>\n<jp:f2f rdf:resource='/resource'/>\n<jp:f1g rdf:resource='/resource/f1g/x'/>\n<jp:f1m rdf:resource='/'/>\n</rdf:Description>\n</rdf:RDF>\n"
+					"<rdf:RDF>\n<rdf:Description rdf:about='/resource/f0/x0'>\n<jp:f2b>/f2b</jp:f2b>\n<jp:f2e>/resource/f2e/x/y</jp:f2e>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f2n>/..</jp:f2n>\n<jp:f2c>/f2c/x/y</jp:f2c>\n<jp:f3c>/resource/&lt;&gt;&amp;''</jp:f3c>\n<jp:f2h>/resource/f2h</jp:f2h>\n<jp:f1i>/resource</jp:f1i>\n<jp:f1n>/..</jp:f1n>\n<jp:f1c>/f1c/x/y</jp:f1c>\n<jp:f1e>/resource/f1e/x/y</jp:f1e>\n<jp:f5>/resource/f5/x</jp:f5>\n<jp:f2l>/f2k</jp:f2l>\n<jp:f2d>/resource/f2d</jp:f2d>\n<jp:f2j>/</jp:f2j>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f3b>/resource/%3C%3E%26%27%22</jp:f3b>\n<jp:f1j>/</jp:f1j>\n<jp:f1d>/resource/f1d</jp:f1d>\n<jp:f2m>/</jp:f2m>\n<jp:f1f>/resource</jp:f1f>\n<jp:f1b>/f1b</jp:f1b>\n<jp:f4>/resource/test/uri/b</jp:f4>\n<jp:f2i>/resource</jp:f2i>\n<jp:f1h>/resource/f1h</jp:f1h>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f1k>/f1j/x</jp:f1k>\n<jp:f1l>/f1k</jp:f1l>\n<jp:f2g>/resource/f2g/x</jp:f2g>\
 n<jp:f2k>/f2j/x</jp:f2k>\n<jp:f2f>/resource</jp:f2f>\n<jp:f1g>/resource/f1g/x</jp:f1g>\n<jp:f1m>/</jp:f1m>\n</rdf:Description>\n</rdf:RDF>\n"
 				)
 			},
 			{	/* 11 */
@@ -266,7 +266,7 @@ public class UriResolutionTest {
 					"(f0=f0/x0,f1a=http://www.apache.org/f1a,f1b=/f1b,f1c=/f1c/x/y,f1d=f1d,f1e=f1e/x/y,f1f='',f1g=/resource/f1g/x,f1h=/resource/f1h,f1i=/resource,f1j=/,f1k=/f1j/x,f1l=/f1k,f1m=/,f1n=/..,f2a=http://www.apache.org/f2a,f2b=/f2b,f2c=/f2c/x/y,f2d=f2d,f2e=f2e/x/y,f2f='',f2g=/resource/f2g/x,f2h=/resource/f2h,f2i=/resource,f2j=/,f2k=/f2j/x,f2l=/f2k,f2m=/,f2n=/..,f3a='http://www.apache.org/f3a/x?label=MY_LABEL&foo=bar',f3b=%3C%3E%26%27%22,f3c=<>&~'\",f4=test/uri/b,f5=f5/x)",
 					"f0=f0/x0&f1a=http://www.apache.org/f1a&f1b=/f1b&f1c=/f1c/x/y&f1d=f1d&f1e=f1e/x/y&f1f=''&f1g=/resource/f1g/x&f1h=/resource/f1h&f1i=/resource&f1j=/&f1k=/f1j/x&f1l=/f1k&f1m=/&f1n=/..&f2a=http://www.apache.org/f2a&f2b=/f2b&f2c=/f2c/x/y&f2d=f2d&f2e=f2e/x/y&f2f=''&f2g=/resource/f2g/x&f2h=/resource/f2h&f2i=/resource&f2j=/&f2k=/f2j/x&f2l=/f2k&f2m=/&f2n=/..&f3a='http://www.apache.org/f3a/x?label=MY_LABEL%26foo=bar'&f3b=%253C%253E%2526%2527%2522&f3c=%3C%3E%26~'%22&f4=test/uri/b&f5=f5/x",
 					"DE0022A26630A566302F7830A3663161B9687474703A2F2F7777772E6170616368652E6F72672F663161A3663162A42F663162A3663163A82F6631632F782F79A3663164A3663164A3663165A76631652F782F79A3663166A0A3663167AF2F7265736F757263652F6631672F78A3663168AD2F7265736F757263652F663168A3663169A92F7265736F75726365A366316AA12FA366316BA62F66316A2F78A366316CA42F66316BA366316DA12FA366316EA32F2E2EA3663261B9687474703A2F2F7777772E6170616368652E6F72672F663261A3663262A42F663262A3663263A82F6632632F782F79A3663264A3663264A3663265A76632652F782F79A3663266A0A3663267AF2F7265736F757263652F6632672F78A3663268AD2F7265736F757263652F663268A3663269A92F7265736F75726365A366326AA12FA366326BA62F66326A2F78A366326CA42F66326BA366326DA12FA366326EA32F2E2EA3663361D932687474703A2F2F7777772E6170616368652E6F72672F6633612F783F6C6162656C3D4D595F4C4142454C26666F6F3D626172A3663362AF253343253345253236253237253232A3663363A53C3E262722A26634AA746573742F7572692F62A26635A466352F78",
-					"<rdf:RDF>\n<rdf:Description rdf:about='f0/x0'>\n<jp:f1n rdf:resource='/..'/>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f2h rdf:resource='/resource/f2h'/>\n<jp:f2n rdf:resource='/..'/>\n<jp:f1h rdf:resource='/resource/f1h'/>\n<jp:f1i rdf:resource='/resource'/>\n<jp:f1g rdf:resource='/resource/f1g/x'/>\n<jp:f2f rdf:resource=''/>\n<jp:f2k rdf:resource='/f2j/x'/>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f3b rdf:resource='%3C%3E%26%27%22'/>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f2c rdf:resource='/f2c/x/y'/>\n<jp:f2i rdf:resource='/resource'/>\n<jp:f5 rdf:resource='f5/x'/>\n<jp:f1m rdf:resource='/'/>\n<jp:f2l rdf:resource='/f2k'/>\n<jp:f2g rdf:resource='/resource/f2g/x'/>\n<jp:f1k rdf:resource='/f1j/x'/>\n<jp:f1e rdf:resource='f1e/x/y'/>\n<jp:f2d rdf:resource='f2d'/>\n<jp:f3c rdf:resource='&lt;&gt;&amp;&apos;&quot;'/>\n<jp:f2j rdf:resource='/'/>\n<jp:f1b rdf:resource='/f1b'/>\n<jp:f1l rdf:resource='/f1k'/
 >\n<jp:f2b rdf:resource='/f2b'/>\n<jp:f1d rdf:resource='f1d'/>\n<jp:f2e rdf:resource='f2e/x/y'/>\n<jp:f1c rdf:resource='/f1c/x/y'/>\n<jp:f1f rdf:resource=''/>\n<jp:f4 rdf:resource='test/uri/b'/>\n<jp:f1j rdf:resource='/'/>\n<jp:f2m rdf:resource='/'/>\n</rdf:Description>\n</rdf:RDF>\n"
+					"<rdf:RDF>\n<rdf:Description rdf:about='f0/x0'>\n<jp:f1n>/..</jp:f1n>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f2h>/resource/f2h</jp:f2h>\n<jp:f2n>/..</jp:f2n>\n<jp:f1h>/resource/f1h</jp:f1h>\n<jp:f1i>/resource</jp:f1i>\n<jp:f1g>/resource/f1g/x</jp:f1g>\n<jp:f2f></jp:f2f>\n<jp:f2k>/f2j/x</jp:f2k>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f3b>%3C%3E%26%27%22</jp:f3b>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f2c>/f2c/x/y</jp:f2c>\n<jp:f2i>/resource</jp:f2i>\n<jp:f5>f5/x</jp:f5>\n<jp:f1m>/</jp:f1m>\n<jp:f2l>/f2k</jp:f2l>\n<jp:f2g>/resource/f2g/x</jp:f2g>\n<jp:f1k>/f1j/x</jp:f1k>\n<jp:f1e>f1e/x/y</jp:f1e>\n<jp:f2j>/</jp:f2j>\n<jp:f2d>f2d</jp:f2d>\n<jp:f3c>&lt;&gt;&amp;''</jp:f3c>\n<jp:f1b>/f1b</jp:f1b>\n<jp:f1l>/f1k</jp:f1l>\n<jp:f2b>/f2b</jp:f2b>\n<jp:f1d>f1d</jp:f1d>\n<jp:f1j>/</jp:f1j>\n<jp:f2e>f2e/x/y</jp:f2e>\n<jp:f1c>/f1c/x/y</jp:f1c>\n<jp:f1f></jp:f1f>\n<jp:f4>test/uri/b</jp:f4>\n<jp:f2m>/</jp:f2m>\n
 </rdf:Description>\n</rdf:RDF>\n"
 				)
 			},
 			{	/* 12 */
@@ -281,7 +281,7 @@ public class UriResolutionTest {
 					"(f0=http://foo.com:123/context/f0/x0,f1a=http://www.apache.org/f1a,f1b=http://foo.com:123/f1b,f1c=http://foo.com:123/f1c/x/y,f1d=http://foo.com:123/context/f1d,f1e=http://foo.com:123/context/f1e/x/y,f1f=http://foo.com:123/context,f1g=http://foo.com:123/context/f1g/x,f1h=http://foo.com:123/context/f1h,f1i=http://foo.com:123/context,f1j=http://foo.com:123,f1k=http://foo.com:123/context/f1j/x,f1l=http://foo.com:123/context/f1k,f1m=http://foo.com:123/context,f1n=http://foo.com:123,f2a=http://www.apache.org/f2a,f2b=http://foo.com:123/f2b,f2c=http://foo.com:123/f2c/x/y,f2d=http://foo.com:123/context/f2d,f2e=http://foo.com:123/context/f2e/x/y,f2f=http://foo.com:123/context,f2g=http://foo.com:123/context/f2g/x,f2h=http://foo.com:123/context/f2h,f2i=http://foo.com:123/context,f2j=http://foo.com:123,f2k=http://foo.com:123/context/f2j/x,f2l=http://foo.com:123/context/f2k,f2m=http://foo.com:123/context,f2n=http://foo.com:123,f3a='http://www.apache.org/f3a/x?label=MY_LABEL&foo=bar',f3b=htt
 p://foo.com:123/context/%3C%3E%26%27%22,f3c=http://foo.com:123/context/<>&~'\",f4=http://foo.com:123/context/test/uri/b,f5=http://foo.com:123/context/f5/x)",
 					"f0=http://foo.com:123/context/f0/x0&f1a=http://www.apache.org/f1a&f1b=http://foo.com:123/f1b&f1c=http://foo.com:123/f1c/x/y&f1d=http://foo.com:123/context/f1d&f1e=http://foo.com:123/context/f1e/x/y&f1f=http://foo.com:123/context&f1g=http://foo.com:123/context/f1g/x&f1h=http://foo.com:123/context/f1h&f1i=http://foo.com:123/context&f1j=http://foo.com:123&f1k=http://foo.com:123/context/f1j/x&f1l=http://foo.com:123/context/f1k&f1m=http://foo.com:123/context&f1n=http://foo.com:123&f2a=http://www.apache.org/f2a&f2b=http://foo.com:123/f2b&f2c=http://foo.com:123/f2c/x/y&f2d=http://foo.com:123/context/f2d&f2e=http://foo.com:123/context/f2e/x/y&f2f=http://foo.com:123/context&f2g=http://foo.com:123/context/f2g/x&f2h=http://foo.com:123/context/f2h&f2i=http://foo.com:123/context&f2j=http://foo.com:123&f2k=http://foo.com:123/context/f2j/x&f2l=http://foo.com:123/context/f2k&f2m=http://foo.com:123/context&f2n=http://foo.com:123&f3a='http://www.apache.org/f3a/x?label=MY_LABEL%26foo=bar'&f3b=ht
 tp://foo.com:123/context/%253C%253E%2526%2527%2522&f3c=http://foo.com:123/context/%3C%3E%26~'%22&f4=http://foo.com:123/context/test/uri/b&f5=http://foo.com:123/context/f5/x",
 					"DE0022A26630D920687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F66302F7830A3663161B9687474703A2F2F7777772E6170616368652E6F72672F663161A3663162B6687474703A2F2F666F6F2E636F6D3A3132332F663162A3663163BA687474703A2F2F666F6F2E636F6D3A3132332F6631632F782F79A3663164BE687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F663164A3663165D922687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F6631652F782F79A3663166BA687474703A2F2F666F6F2E636F6D3A3132332F636F6E74657874A3663167D920687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F6631672F78A3663168BE687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F663168A3663169BA687474703A2F2F666F6F2E636F6D3A3132332F636F6E74657874A366316AB2687474703A2F2F666F6F2E636F6D3A313233A366316BD920687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F66316A2F78A366316CBE687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F66316BA366316DBA687474703A2F2F666F6F2E636F6D3A3132332F636F6E74657874A366316EB2687474703A2F2F666F6F2E636F6D3A313233A3663261B968747
 4703A2F2F7777772E6170616368652E6F72672F663261A3663262B6687474703A2F2F666F6F2E636F6D3A3132332F663262A3663263BA687474703A2F2F666F6F2E636F6D3A3132332F6632632F782F79A3663264BE687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F663264A3663265D922687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F6632652F782F79A3663266BA687474703A2F2F666F6F2E636F6D3A3132332F636F6E74657874A3663267D920687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F6632672F78A3663268BE687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F663268A3663269BA687474703A2F2F666F6F2E636F6D3A3132332F636F6E74657874A366326AB2687474703A2F2F666F6F2E636F6D3A313233A366326BD920687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F66326A2F78A366326CBE687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F66326BA366326DBA687474703A2F2F666F6F2E636F6D3A3132332F636F6E74657874A366326EB2687474703A2F2F666F6F2E636F6D3A313233A3663361D932687474703A2F2F7777772E6170616368652E6F72672F6633612F783F6C6162656C3D4D595F4C4142454C26666F6F3D626172A366
 3362D92A687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F253343253345253236253237253232A3663363D920687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F3C3E262722A26634D925687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F746573742F7572692F62A26635BF687474703A2F2F666F6F2E636F6D3A3132332F636F6E746578742F66352F78",
-					"<rdf:RDF>\n<rdf:Description rdf:about='http://foo.com:123/context/f0/x0'>\n<jp:f1f rdf:resource='http://foo.com:123/context'/>\n<jp:f1n rdf:resource='http://foo.com:123'/>\n<jp:f2j rdf:resource='http://foo.com:123'/>\n<jp:f2c rdf:resource='http://foo.com:123/f2c/x/y'/>\n<jp:f3b rdf:resource='http://foo.com:123/context/%3C%3E%26%27%22'/>\n<jp:f2d rdf:resource='http://foo.com:123/context/f2d'/>\n<jp:f2l rdf:resource='http://foo.com:123/context/f2k'/>\n<jp:f1b rdf:resource='http://foo.com:123/f1b'/>\n<jp:f1c rdf:resource='http://foo.com:123/f1c/x/y'/>\n<jp:f1k rdf:resource='http://foo.com:123/context/f1j/x'/>\n<jp:f2k rdf:resource='http://foo.com:123/context/f2j/x'/>\n<jp:f1g rdf:resource='http://foo.com:123/context/f1g/x'/>\n<jp:f2h rdf:resource='http://foo.com:123/context/f2h'/>\n<jp:f1i rdf:resource='http://foo.com:123/context'/>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f2m rdf:resource='http://foo.com:123/context'/>\n<jp:f1a rdf:re
 source='http://www.apache.org/f1a'/>\n<jp:f1j rdf:resource='http://foo.com:123'/>\n<jp:f2n rdf:resource='http://foo.com:123'/>\n<jp:f1d rdf:resource='http://foo.com:123/context/f1d'/>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f2i rdf:resource='http://foo.com:123/context'/>\n<jp:f1h rdf:resource='http://foo.com:123/context/f1h'/>\n<jp:f4 rdf:resource='http://foo.com:123/context/test/uri/b'/>\n<jp:f1e rdf:resource='http://foo.com:123/context/f1e/x/y'/>\n<jp:f3c rdf:resource='http://foo.com:123/context/&lt;&gt;&amp;&apos;&quot;'/>\n<jp:f2b rdf:resource='http://foo.com:123/f2b'/>\n<jp:f2g rdf:resource='http://foo.com:123/context/f2g/x'/>\n<jp:f1l rdf:resource='http://foo.com:123/context/f1k'/>\n<jp:f1m rdf:resource='http://foo.com:123/context'/>\n<jp:f2f rdf:resource='http://foo.com:123/context'/>\n<jp:f5 rdf:resource='http://foo.com:123/context/f5/x'/>\n<jp:f2e rdf:resource='http://foo.com:123/context/f2e/x/y'/>\n</rdf:Description>\n</rdf:RDF>\n"
+					"<rdf:RDF>\n<rdf:Description rdf:about='http://foo.com:123/context/f0/x0'>\n<jp:f1f rdf:resource='http://foo.com:123/context'/>\n<jp:f2c rdf:resource='http://foo.com:123/f2c/x/y'/>\n<jp:f3b rdf:resource='http://foo.com:123/context/%3C%3E%26%27%22'/>\n<jp:f2d rdf:resource='http://foo.com:123/context/f2d'/>\n<jp:f2l rdf:resource='http://foo.com:123/context/f2k'/>\n<jp:f1b rdf:resource='http://foo.com:123/f1b'/>\n<jp:f1c rdf:resource='http://foo.com:123/f1c/x/y'/>\n<jp:f1j rdf:resource='http://foo.com:123'/>\n<jp:f1k rdf:resource='http://foo.com:123/context/f1j/x'/>\n<jp:f2n rdf:resource='http://foo.com:123'/>\n<jp:f2k rdf:resource='http://foo.com:123/context/f2j/x'/>\n<jp:f1g rdf:resource='http://foo.com:123/context/f1g/x'/>\n<jp:f2h rdf:resource='http://foo.com:123/context/f2h'/>\n<jp:f1i rdf:resource='http://foo.com:123/context'/>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f2m rdf:resource='http://foo.com:123/context'/>\n<jp:f1a rdf:re
 source='http://www.apache.org/f1a'/>\n<jp:f1d rdf:resource='http://foo.com:123/context/f1d'/>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f2j rdf:resource='http://foo.com:123'/>\n<jp:f2i rdf:resource='http://foo.com:123/context'/>\n<jp:f1h rdf:resource='http://foo.com:123/context/f1h'/>\n<jp:f1n rdf:resource='http://foo.com:123'/>\n<jp:f4 rdf:resource='http://foo.com:123/context/test/uri/b'/>\n<jp:f1e rdf:resource='http://foo.com:123/context/f1e/x/y'/>\n<jp:f3c rdf:resource='http://foo.com:123/context/&lt;&gt;&amp;&apos;&quot;'/>\n<jp:f2b rdf:resource='http://foo.com:123/f2b'/>\n<jp:f2g rdf:resource='http://foo.com:123/context/f2g/x'/>\n<jp:f1l rdf:resource='http://foo.com:123/context/f1k'/>\n<jp:f1m rdf:resource='http://foo.com:123/context'/>\n<jp:f2f rdf:resource='http://foo.com:123/context'/>\n<jp:f5 rdf:resource='http://foo.com:123/context/f5/x'/>\n<jp:f2e rdf:resource='http://foo.com:123/context/f2e/x/y'/>\n</rdf:Description>\n</rdf:RDF>\n"
 				)
 			},
 			{	/* 13 */
@@ -296,7 +296,7 @@ public class UriResolutionTest {
 					"(f0=/context/f0/x0,f1a=http://www.apache.org/f1a,f1b=/f1b,f1c=/f1c/x/y,f1d=/context/f1d,f1e=/context/f1e/x/y,f1f=/context,f1g=/context/f1g/x,f1h=/context/f1h,f1i=/context,f1j=/,f1k=/context/f1j/x,f1l=/context/f1k,f1m=/context,f1n=/,f2a=http://www.apache.org/f2a,f2b=/f2b,f2c=/f2c/x/y,f2d=/context/f2d,f2e=/context/f2e/x/y,f2f=/context,f2g=/context/f2g/x,f2h=/context/f2h,f2i=/context,f2j=/,f2k=/context/f2j/x,f2l=/context/f2k,f2m=/context,f2n=/,f3a='http://www.apache.org/f3a/x?label=MY_LABEL&foo=bar',f3b=/context/%3C%3E%26%27%22,f3c=/context/<>&~'\",f4=/context/test/uri/b,f5=/context/f5/x)",
 					"f0=/context/f0/x0&f1a=http://www.apache.org/f1a&f1b=/f1b&f1c=/f1c/x/y&f1d=/context/f1d&f1e=/context/f1e/x/y&f1f=/context&f1g=/context/f1g/x&f1h=/context/f1h&f1i=/context&f1j=/&f1k=/context/f1j/x&f1l=/context/f1k&f1m=/context&f1n=/&f2a=http://www.apache.org/f2a&f2b=/f2b&f2c=/f2c/x/y&f2d=/context/f2d&f2e=/context/f2e/x/y&f2f=/context&f2g=/context/f2g/x&f2h=/context/f2h&f2i=/context&f2j=/&f2k=/context/f2j/x&f2l=/context/f2k&f2m=/context&f2n=/&f3a='http://www.apache.org/f3a/x?label=MY_LABEL%26foo=bar'&f3b=/context/%253C%253E%2526%2527%2522&f3c=/context/%3C%3E%26~'%22&f4=/context/test/uri/b&f5=/context/f5/x",
 					"DE0022A26630AE2F636F6E746578742F66302F7830A3663161B9687474703A2F2F7777772E6170616368652E6F72672F663161A3663162A42F663162A3663163A82F6631632F782F79A3663164AC2F636F6E746578742F663164A3663165B02F636F6E746578742F6631652F782F79A3663166A82F636F6E74657874A3663167AE2F636F6E746578742F6631672F78A3663168AC2F636F6E746578742F663168A3663169A82F636F6E74657874A366316AA12FA366316BAE2F636F6E746578742F66316A2F78A366316CAC2F636F6E746578742F66316BA366316DA82F636F6E74657874A366316EA12FA3663261B9687474703A2F2F7777772E6170616368652E6F72672F663261A3663262A42F663262A3663263A82F6632632F782F79A3663264AC2F636F6E746578742F663264A3663265B02F636F6E746578742F6632652F782F79A3663266A82F636F6E74657874A3663267AE2F636F6E746578742F6632672F78A3663268AC2F636F6E746578742F663268A3663269A82F636F6E74657874A366326AA12FA366326BAE2F636F6E746578742F66326A2F78A366326CAC2F636F6E746578742F66326BA366326DA82F636F6E74657874A366326EA12FA3663361D932687474703A2F2F7777772E6170616368652E6F72672F6633612F783F6C6162656C3D4D595F4C4142454C2
 6666F6F3D626172A3663362B82F636F6E746578742F253343253345253236253237253232A3663363AE2F636F6E746578742F3C3E262722A26634B32F636F6E746578742F746573742F7572692F62A26635AD2F636F6E746578742F66352F78",
-					"<rdf:RDF>\n<rdf:Description rdf:about='/context/f0/x0'>\n<jp:f2k rdf:resource='/context/f2j/x'/>\n<jp:f1f rdf:resource='/context'/>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f1e rdf:resource='/context/f1e/x/y'/>\n<jp:f2i rdf:resource='/context'/>\n<jp:f3b rdf:resource='/context/%3C%3E%26%27%22'/>\n<jp:f2b rdf:resource='/f2b'/>\n<jp:f1h rdf:resource='/context/f1h'/>\n<jp:f1l rdf:resource='/context/f1k'/>\n<jp:f1c rdf:resource='/f1c/x/y'/>\n<jp:f1i rdf:resource='/context'/>\n<jp:f2l rdf:resource='/context/f2k'/>\n<jp:f2g rdf:resource='/context/f2g/x'/>\n<jp:f3c rdf:resource='/context/&lt;&gt;&amp;&apos;&quot;'/>\n<jp:f1k rdf:resource='/context/f1j/x'/>\n<jp:f2f rdf:resource='/context'/>\n<jp:f1b rdf:resource='/f1b'/>\n<jp:f1m rdf:resource='/context'/>\n<jp:f1d rdf:resource='/context/f1d'/>\n<jp:f2c rdf:resource='/f2c/x/y'/>\n<jp:f2m rdf:resource='/context'/>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f1j rdf:resource='/'/>\n<jp:f4 rdf:resource='/cont
 ext/test/uri/b'/>\n<jp:f2n rdf:resource='/'/>\n<jp:f1n rdf:resource='/'/>\n<jp:f2j rdf:resource='/'/>\n<jp:f1g rdf:resource='/context/f1g/x'/>\n<jp:f5 rdf:resource='/context/f5/x'/>\n<jp:f2d rdf:resource='/context/f2d'/>\n<jp:f3a rdf:resource='http://www.apache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f2e rdf:resource='/context/f2e/x/y'/>\n<jp:f2h rdf:resource='/context/f2h'/>\n</rdf:Description>\n</rdf:RDF>\n"
+					"<rdf:RDF>\n<rdf:Description rdf:about='/context/f0/x0'>\n<jp:f2k>/context/f2j/x</jp:f2k>\n<jp:f1f>/context</jp:f1f>\n<jp:f2a rdf:resource='http://www.apache.org/f2a'/>\n<jp:f1e>/context/f1e/x/y</jp:f1e>\n<jp:f2i>/context</jp:f2i>\n<jp:f1j>/</jp:f1j>\n<jp:f3b>/context/%3C%3E%26%27%22</jp:f3b>\n<jp:f2b>/f2b</jp:f2b>\n<jp:f1h>/context/f1h</jp:f1h>\n<jp:f1l>/context/f1k</jp:f1l>\n<jp:f1c>/f1c/x/y</jp:f1c>\n<jp:f1i>/context</jp:f1i>\n<jp:f2j>/</jp:f2j>\n<jp:f2l>/context/f2k</jp:f2l>\n<jp:f2g>/context/f2g/x</jp:f2g>\n<jp:f3c>/context/&lt;&gt;&amp;''</jp:f3c>\n<jp:f1k>/context/f1j/x</jp:f1k>\n<jp:f2f>/context</jp:f2f>\n<jp:f1b>/f1b</jp:f1b>\n<jp:f1m>/context</jp:f1m>\n<jp:f1d>/context/f1d</jp:f1d>\n<jp:f2c>/f2c/x/y</jp:f2c>\n<jp:f2m>/context</jp:f2m>\n<jp:f1a rdf:resource='http://www.apache.org/f1a'/>\n<jp:f1n>/</jp:f1n>\n<jp:f4>/context/test/uri/b</jp:f4>\n<jp:f1g>/context/f1g/x</jp:f1g>\n<jp:f5>/context/f5/x</jp:f5>\n<jp:f2d>/context/f2d</jp:f2d>\n<jp:f3a rdf:resource='http://www.a
 pache.org/f3a/x?label=MY_LABEL&amp;foo=bar'/>\n<jp:f2e>/context/f2e/x/y</jp:f2e>\n<jp:f2n>/</jp:f2n>\n<jp:f2h>/context/f2h</jp:f2h>\n</rdf:Description>\n</rdf:RDF>\n"
 				)
 			},
 			{	/* 14 */
@@ -311,7 +311,7 @@ public class UriResolutionTest {
 					"(f0=f0/x0,f1a=http://www.apache.org/f1a,f1b=/f1b,f1c=/f1c/x/y,f1d=f1d,f1e=f1e/x/y,f1f='',f1g=/context/f1g/x,f1h=/context/f1h,f1i=/context,f1j=/,f1k=/context/f1j/x,f1l=/context/f1k,f1

<TRUNCATED>


[4/4] incubator-juneau git commit: Add branding capability to HtmlDocSerializer and REST servlet.

Posted by ja...@apache.org.
Add branding capability to HtmlDocSerializer and REST servlet.

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

Branch: refs/heads/master
Commit: 6dccf6039cda11f64037ff8b752366d737c2d5f5
Parents: e6998a7
Author: JamesBognar <ja...@apache.org>
Authored: Sat Jun 10 16:19:48 2017 -0400
Committer: JamesBognar <ja...@apache.org>
Committed: Sat Jun 10 16:19:48 2017 -0400

----------------------------------------------------------------------
 .../java/org/apache/juneau/jena/RdfParser.java  |   2 +-
 .../org/apache/juneau/jena/RdfSerializer.java   |   8 ++-
 .../apache/juneau/dto/html5/Html5ComboTest.java |  30 ++++-----
 .../dto/html5/Html5TemplateComboTest.java       |  44 ++++++-------
 .../juneau/serializer/UriResolutionTest.java    |  58 ++++++++--------
 .../org/apache/juneau/BeanPropertyMeta.java     |   5 +-
 .../org/apache/juneau/dto/atom/AtomBuilder.java |  44 +++++--------
 .../org/apache/juneau/dto/atom/Category.java    |  14 +++-
 .../java/org/apache/juneau/dto/atom/Common.java |  22 +++----
 .../org/apache/juneau/dto/atom/Content.java     |  21 +++---
 .../java/org/apache/juneau/dto/atom/Entry.java  |   3 +-
 .../java/org/apache/juneau/dto/atom/Feed.java   |   3 +-
 .../org/apache/juneau/dto/atom/Generator.java   |  25 +++----
 .../java/org/apache/juneau/dto/atom/Icon.java   |  41 +++++-------
 .../java/org/apache/juneau/dto/atom/Id.java     |   4 +-
 .../java/org/apache/juneau/dto/atom/Link.java   |   4 +-
 .../java/org/apache/juneau/dto/atom/Logo.java   |  41 +++++-------
 .../java/org/apache/juneau/dto/atom/Person.java |  26 ++++----
 .../java/org/apache/juneau/dto/atom/Source.java |   3 +-
 .../java/org/apache/juneau/dto/atom/Text.java   |  10 +--
 .../java/org/apache/juneau/dto/atom/Utils.java  |  15 -----
 .../java/org/apache/juneau/dto/html5/A.java     |  10 ++-
 .../java/org/apache/juneau/dto/html5/Area.java  |  10 ++-
 .../java/org/apache/juneau/dto/html5/Audio.java |  10 ++-
 .../java/org/apache/juneau/dto/html5/Base.java  |  10 ++-
 .../org/apache/juneau/dto/html5/Button.java     |  12 +++-
 .../java/org/apache/juneau/dto/html5/Embed.java |  10 ++-
 .../java/org/apache/juneau/dto/html5/Form.java  |  12 +++-
 .../apache/juneau/dto/html5/HtmlElement.java    |  36 +++++++++-
 .../org/apache/juneau/dto/html5/Iframe.java     |  10 ++-
 .../java/org/apache/juneau/dto/html5/Img.java   |  10 ++-
 .../java/org/apache/juneau/dto/html5/Link.java  |  10 ++-
 .../org/apache/juneau/dto/html5/Script.java     |  10 ++-
 .../org/apache/juneau/dto/html5/Source.java     |  10 ++-
 .../java/org/apache/juneau/dto/html5/Track.java |  10 ++-
 .../java/org/apache/juneau/dto/html5/Video.java |  10 ++-
 .../apache/juneau/dto/jsonschema/Schema.java    |  65 +++++++-----------
 .../apache/juneau/dto/jsonschema/SchemaMap.java |  24 +++----
 .../apache/juneau/dto/jsonschema/SchemaRef.java |  11 +++-
 .../org/apache/juneau/dto/swagger/Contact.java  |  25 ++++---
 .../dto/swagger/ExternalDocumentation.java      |  30 ++++++---
 .../org/apache/juneau/dto/swagger/License.java  |  30 ++++++---
 .../juneau/dto/swagger/SwaggerBuilder.java      |  31 ++++++---
 .../juneau/html/HtmlDocSerializerContext.java   |  25 ++++++-
 .../juneau/html/HtmlDocSerializerSession.java   |  13 +++-
 .../juneau/html/HtmlDocTemplateBasic.java       |   3 +
 .../org/apache/juneau/internal/StringUtils.java |  66 +++++++++++++++++++
 .../juneau/serializer/SerializerContext.java    |   4 +-
 juneau-core/src/main/javadoc/overview.html      |   3 +
 .../juneau/examples/rest/RootResources.java     |   3 +-
 .../java/org/apache/juneau/rest/CallMethod.java |  10 ++-
 .../java/org/apache/juneau/rest/RestConfig.java |  27 +++++++-
 .../org/apache/juneau/rest/RestContext.java     |  18 ++++-
 .../apache/juneau/rest/RestParamDefaults.java   |  26 ++++++++
 .../org/apache/juneau/rest/RestRequest.java     |   9 +++
 .../org/apache/juneau/rest/RestResponse.java    |  21 ++++++
 .../apache/juneau/rest/RestServletDefault.java  |   5 +-
 .../apache/juneau/rest/annotation/HtmlDoc.java  |  19 +++++-
 .../org/apache/juneau/rest/vars/UrlVar.java     |   2 +-
 .../rest/widget/ContentTypeLinksWidget.java     |   2 +-
 .../rest/widget/PoweredByApacheWidget.java      |  35 ++++++++++
 .../rest/widget/PoweredByJuneauWidget.java      |   2 +-
 .../org/apache/juneau/rest/htdocs/asf.png       | Bin 0 -> 8875 bytes
 .../org/apache/juneau/rest/htdocs/juneau.png    | Bin 0 -> 6274 bytes
 64 files changed, 754 insertions(+), 358 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/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 ed9fc34..25e5c0a 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
@@ -273,7 +273,7 @@ public class RdfParser extends ReaderParser {
 		PojoSwap<T,Object> transform = (PojoSwap<T,Object>)eType.getPojoSwap();
 		ClassMeta<?> sType = eType.getSerializedClassMeta();
 		session.setCurrentClass(sType);
-
+		
 		if (! sType.canCreateNewInstance(outer)) {
 			if (n.isResource()) {
 				Statement st = n.asResource().getProperty(session.getTypeProperty());

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/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 7ac3cde..733d343 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
@@ -21,6 +21,7 @@ import java.util.*;
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.http.*;
+import org.apache.juneau.internal.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.transform.*;
 import org.apache.juneau.xml.*;
@@ -261,7 +262,12 @@ public class RdfSerializer extends WriterSerializer {
 			}
 
 		} else if (sType.isUri() || isURI) {
-			n = m.createResource(getUri(session, o, null));
+			// Note that RDF URIs must be absolute to be valid!
+			String uri = getUri(session, o, null);
+			if (StringUtils.isAbsoluteUri(uri))
+				n = m.createResource(uri);
+			else
+				n = m.createLiteral(session.encodeTextInvalidChars(uri));
 
 		} else if (sType.isCharSequence() || sType.isChar()) {
 			n = m.createLiteral(session.encodeTextInvalidChars(o));

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5ComboTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5ComboTest.java b/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5ComboTest.java
index 37fa197..62e3c15 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5ComboTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5ComboTest.java
@@ -56,9 +56,9 @@ public class Html5ComboTest extends ComboTest {
 					/* UrlEncR */	"_type=a\n&a=(\n\thref=http://foo\n)\n&c=@(\n\tbar\n)",
 					/* MsgPack */	"83A55F74797065A161A16181A468726566AA687474703A2F2F666F6FA16391A3626172",
 					/* MsgPackT */	"83A174A161A16181A468726566AA687474703A2F2F666F6FA16391A3626172",
-					/* RdfXml */	"<rdf:RDF>\n<rdf:Description>\n<jp:_type>a</jp:_type>\n<jp:a rdf:parseType='Resource'>\n<jp:href>http://foo</jp:href>\n</jp:a>\n<jp:c>\n<rdf:Seq>\n<rdf:li>bar</rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:Description>\n</rdf:RDF>\n",
-					/* RdfXmlT */	"<rdf:RDF>\n<rdf:Description>\n<jp:t>a</jp:t>\n<jp:a rdf:parseType='Resource'>\n<jp:href>http://foo</jp:href>\n</jp:a>\n<jp:c>\n<rdf:Seq>\n<rdf:li>bar</rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:Description>\n</rdf:RDF>\n",
-					/* RdfXmlR */	"<rdf:RDF>\n  <rdf:Description>\n    <jp:_type>a</jp:_type>\n    <jp:a rdf:parseType='Resource'>\n      <jp:href>http://foo</jp:href>\n    </jp:a>\n    <jp:c>\n      <rdf:Seq>\n        <rdf:li>bar</rdf:li>\n      </rdf:Seq>\n    </jp:c>\n  </rdf:Description>\n</rdf:RDF>\n"
+					/* RdfXml */	"<rdf:RDF>\n<rdf:Description>\n<jp:_type>a</jp:_type>\n<jp:a rdf:parseType='Resource'>\n<jp:href rdf:resource='http://foo'/>\n</jp:a>\n<jp:c>\n<rdf:Seq>\n<rdf:li>bar</rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:Description>\n</rdf:RDF>\n",
+					/* RdfXmlT */	"<rdf:RDF>\n<rdf:Description>\n<jp:t>a</jp:t>\n<jp:a rdf:parseType='Resource'>\n<jp:href rdf:resource='http://foo'/>\n</jp:a>\n<jp:c>\n<rdf:Seq>\n<rdf:li>bar</rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:Description>\n</rdf:RDF>\n",
+					/* RdfXmlR */	"<rdf:RDF>\n  <rdf:Description>\n    <jp:_type>a</jp:_type>\n    <jp:a rdf:parseType='Resource'>\n      <jp:href rdf:resource='http://foo'/>\n    </jp:a>\n    <jp:c>\n      <rdf:Seq>\n        <rdf:li>bar</rdf:li>\n      </rdf:Seq>\n    </jp:c>\n  </rdf:Description>\n</rdf:RDF>\n"
 				)
 				{
 					public void verify(A o) {
@@ -89,9 +89,9 @@ public class Html5ComboTest extends ComboTest {
 					/* UrlEncR */	"_type=a\n&a=(\n\thref=http://foo\n)\n&c=@(\n\tbar,\n\t(\n\t\t_type=b,\n\t\tc=@(\n\t\t\tbbb\n\t\t)\n\t),\n\tbaz\n)",
 					/* MsgPack */	"83A55F74797065A161A16181A468726566AA687474703A2F2F666F6FA16393A362617282A55F74797065A162A16391A3626262A362617A",
 					/* MsgPackT */	"83A174A161A16181A468726566AA687474703A2F2F666F6FA16393A362617282A174A162A16391A3626262A362617A",
-					/* RdfXml */	"<rdf:RDF>\n<rdf:Description>\n<jp:_type>a</jp:_type>\n<jp:a rdf:parseType='Resource'>\n<jp:href>http://foo</jp:href>\n</jp:a>\n<jp:c>\n<rdf:Seq>\n<rdf:li>bar</rdf:li>\n<rdf:li rdf:parseType='Resource'>\n<jp:_type>b</jp:_type>\n<jp:c>\n<rdf:Seq>\n<rdf:li>bbb</rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:li>\n<rdf:li>baz</rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:Description>\n</rdf:RDF>\n",
-					/* RdfXmlT */	"<rdf:RDF>\n<rdf:Description>\n<jp:t>a</jp:t>\n<jp:a rdf:parseType='Resource'>\n<jp:href>http://foo</jp:href>\n</jp:a>\n<jp:c>\n<rdf:Seq>\n<rdf:li>bar</rdf:li>\n<rdf:li rdf:parseType='Resource'>\n<jp:t>b</jp:t>\n<jp:c>\n<rdf:Seq>\n<rdf:li>bbb</rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:li>\n<rdf:li>baz</rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:Description>\n</rdf:RDF>\n",
-					/* RdfXmlR */	"<rdf:RDF>\n  <rdf:Description>\n    <jp:_type>a</jp:_type>\n    <jp:a rdf:parseType='Resource'>\n      <jp:href>http://foo</jp:href>\n    </jp:a>\n    <jp:c>\n      <rdf:Seq>\n        <rdf:li>bar</rdf:li>\n        <rdf:li rdf:parseType='Resource'>\n          <jp:_type>b</jp:_type>\n          <jp:c>\n            <rdf:Seq>\n              <rdf:li>bbb</rdf:li>\n            </rdf:Seq>\n          </jp:c>\n        </rdf:li>\n        <rdf:li>baz</rdf:li>\n      </rdf:Seq>\n    </jp:c>\n  </rdf:Description>\n</rdf:RDF>\n"
+					/* RdfXml */	"<rdf:RDF>\n<rdf:Description>\n<jp:_type>a</jp:_type>\n<jp:a rdf:parseType='Resource'>\n<jp:href rdf:resource='http://foo'/>\n</jp:a>\n<jp:c>\n<rdf:Seq>\n<rdf:li>bar</rdf:li>\n<rdf:li rdf:parseType='Resource'>\n<jp:_type>b</jp:_type>\n<jp:c>\n<rdf:Seq>\n<rdf:li>bbb</rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:li>\n<rdf:li>baz</rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:Description>\n</rdf:RDF>\n",
+					/* RdfXmlT */	"<rdf:RDF>\n<rdf:Description>\n<jp:t>a</jp:t>\n<jp:a rdf:parseType='Resource'>\n<jp:href rdf:resource='http://foo'/>\n</jp:a>\n<jp:c>\n<rdf:Seq>\n<rdf:li>bar</rdf:li>\n<rdf:li rdf:parseType='Resource'>\n<jp:t>b</jp:t>\n<jp:c>\n<rdf:Seq>\n<rdf:li>bbb</rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:li>\n<rdf:li>baz</rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:Description>\n</rdf:RDF>\n",
+					/* RdfXmlR */	"<rdf:RDF>\n  <rdf:Description>\n    <jp:_type>a</jp:_type>\n    <jp:a rdf:parseType='Resource'>\n      <jp:href rdf:resource='http://foo'/>\n    </jp:a>\n    <jp:c>\n      <rdf:Seq>\n        <rdf:li>bar</rdf:li>\n        <rdf:li rdf:parseType='Resource'>\n          <jp:_type>b</jp:_type>\n          <jp:c>\n            <rdf:Seq>\n              <rdf:li>bbb</rdf:li>\n            </rdf:Seq>\n          </jp:c>\n        </rdf:li>\n        <rdf:li>baz</rdf:li>\n      </rdf:Seq>\n    </jp:c>\n  </rdf:Description>\n</rdf:RDF>\n"
 				)
 				{
 					public void verify(A o) {
@@ -122,9 +122,9 @@ public class Html5ComboTest extends ComboTest {
 					/* UrlEncR */	"_type=a\n&a=(\n\thref=http://foo\n)\n&c=@(\n\t''\n)",
 					/* MsgPack */	"83A55F74797065A161A16181A468726566AA687474703A2F2F666F6FA16391A0",
 					/* MsgPackT */	"83A174A161A16181A468726566AA687474703A2F2F666F6FA16391A0",
-					/* RdfXml */	"<rdf:RDF>\n<rdf:Description>\n<jp:_type>a</jp:_type>\n<jp:a rdf:parseType='Resource'>\n<jp:href>http://foo</jp:href>\n</jp:a>\n<jp:c>\n<rdf:Seq>\n<rdf:li></rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:Description>\n</rdf:RDF>\n",
-					/* RdfXmlT */	"<rdf:RDF>\n<rdf:Description>\n<jp:t>a</jp:t>\n<jp:a rdf:parseType='Resource'>\n<jp:href>http://foo</jp:href>\n</jp:a>\n<jp:c>\n<rdf:Seq>\n<rdf:li></rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:Description>\n</rdf:RDF>\n",
-					/* RdfXmlR */	"<rdf:RDF>\n  <rdf:Description>\n    <jp:_type>a</jp:_type>\n    <jp:a rdf:parseType='Resource'>\n      <jp:href>http://foo</jp:href>\n    </jp:a>\n    <jp:c>\n      <rdf:Seq>\n        <rdf:li></rdf:li>\n      </rdf:Seq>\n    </jp:c>\n  </rdf:Description>\n</rdf:RDF>\n"
+					/* RdfXml */	"<rdf:RDF>\n<rdf:Description>\n<jp:_type>a</jp:_type>\n<jp:a rdf:parseType='Resource'>\n<jp:href rdf:resource='http://foo'/>\n</jp:a>\n<jp:c>\n<rdf:Seq>\n<rdf:li></rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:Description>\n</rdf:RDF>\n",
+					/* RdfXmlT */	"<rdf:RDF>\n<rdf:Description>\n<jp:t>a</jp:t>\n<jp:a rdf:parseType='Resource'>\n<jp:href rdf:resource='http://foo'/>\n</jp:a>\n<jp:c>\n<rdf:Seq>\n<rdf:li></rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:Description>\n</rdf:RDF>\n",
+					/* RdfXmlR */	"<rdf:RDF>\n  <rdf:Description>\n    <jp:_type>a</jp:_type>\n    <jp:a rdf:parseType='Resource'>\n      <jp:href rdf:resource='http://foo'/>\n    </jp:a>\n    <jp:c>\n      <rdf:Seq>\n        <rdf:li></rdf:li>\n      </rdf:Seq>\n    </jp:c>\n  </rdf:Description>\n</rdf:RDF>\n"
 				)
 				{
 					public void verify(A o) {
@@ -155,9 +155,9 @@ public class Html5ComboTest extends ComboTest {
 					/* UrlEncR */	"_type=a\n&a=(\n\thref=http://foo\n)\n&c=@(\n\t'+'\n)",
 					/* MsgPack */	"83A55F74797065A161A16181A468726566AA687474703A2F2F666F6FA16391A120",
 					/* MsgPackT */	"83A174A161A16181A468726566AA687474703A2F2F666F6FA16391A120",
-					/* RdfXml */	"<rdf:RDF>\n<rdf:Description>\n<jp:_type>a</jp:_type>\n<jp:a rdf:parseType='Resource'>\n<jp:href>http://foo</jp:href>\n</jp:a>\n<jp:c>\n<rdf:Seq>\n<rdf:li>_x0020_</rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:Description>\n</rdf:RDF>\n",
-					/* RdfXmlT */	"<rdf:RDF>\n<rdf:Description>\n<jp:t>a</jp:t>\n<jp:a rdf:parseType='Resource'>\n<jp:href>http://foo</jp:href>\n</jp:a>\n<jp:c>\n<rdf:Seq>\n<rdf:li>_x0020_</rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:Description>\n</rdf:RDF>\n",
-					/* RdfXmlR */	"<rdf:RDF>\n  <rdf:Description>\n    <jp:_type>a</jp:_type>\n    <jp:a rdf:parseType='Resource'>\n      <jp:href>http://foo</jp:href>\n    </jp:a>\n    <jp:c>\n      <rdf:Seq>\n        <rdf:li>_x0020_</rdf:li>\n      </rdf:Seq>\n    </jp:c>\n  </rdf:Description>\n</rdf:RDF>\n"
+					/* RdfXml */	"<rdf:RDF>\n<rdf:Description>\n<jp:_type>a</jp:_type>\n<jp:a rdf:parseType='Resource'>\n<jp:href rdf:resource='http://foo'/>\n</jp:a>\n<jp:c>\n<rdf:Seq>\n<rdf:li>_x0020_</rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:Description>\n</rdf:RDF>\n",
+					/* RdfXmlT */	"<rdf:RDF>\n<rdf:Description>\n<jp:t>a</jp:t>\n<jp:a rdf:parseType='Resource'>\n<jp:href rdf:resource='http://foo'/>\n</jp:a>\n<jp:c>\n<rdf:Seq>\n<rdf:li>_x0020_</rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:Description>\n</rdf:RDF>\n",
+					/* RdfXmlR */	"<rdf:RDF>\n  <rdf:Description>\n    <jp:_type>a</jp:_type>\n    <jp:a rdf:parseType='Resource'>\n      <jp:href rdf:resource='http://foo'/>\n    </jp:a>\n    <jp:c>\n      <rdf:Seq>\n        <rdf:li>_x0020_</rdf:li>\n      </rdf:Seq>\n    </jp:c>\n  </rdf:Description>\n</rdf:RDF>\n"
 				)
 				{
 					public void verify(A o) {
@@ -188,9 +188,9 @@ public class Html5ComboTest extends ComboTest {
 					/* UrlEncR */	"_type=a\n&a=(\n\thref=http://foo\n)",
 					/* MsgPack */	"82A55F74797065A161A16181A468726566AA687474703A2F2F666F6F",
 					/* MsgPackT */	"82A174A161A16181A468726566AA687474703A2F2F666F6F",
-					/* RdfXml */	"<rdf:RDF>\n<rdf:Description>\n<jp:_type>a</jp:_type>\n<jp:a rdf:parseType='Resource'>\n<jp:href>http://foo</jp:href>\n</jp:a>\n</rdf:Description>\n</rdf:RDF>\n",
-					/* RdfXmlT */	"<rdf:RDF>\n<rdf:Description>\n<jp:t>a</jp:t>\n<jp:a rdf:parseType='Resource'>\n<jp:href>http://foo</jp:href>\n</jp:a>\n</rdf:Description>\n</rdf:RDF>\n",
-					/* RdfXmlR */	"<rdf:RDF>\n  <rdf:Description>\n    <jp:_type>a</jp:_type>\n    <jp:a rdf:parseType='Resource'>\n      <jp:href>http://foo</jp:href>\n    </jp:a>\n  </rdf:Description>\n</rdf:RDF>\n"
+					/* RdfXml */	"<rdf:RDF>\n<rdf:Description>\n<jp:_type>a</jp:_type>\n<jp:a rdf:parseType='Resource'>\n<jp:href rdf:resource='http://foo'/>\n</jp:a>\n</rdf:Description>\n</rdf:RDF>\n",
+					/* RdfXmlT */	"<rdf:RDF>\n<rdf:Description>\n<jp:t>a</jp:t>\n<jp:a rdf:parseType='Resource'>\n<jp:href rdf:resource='http://foo'/>\n</jp:a>\n</rdf:Description>\n</rdf:RDF>\n",
+					/* RdfXmlR */	"<rdf:RDF>\n  <rdf:Description>\n    <jp:_type>a</jp:_type>\n    <jp:a rdf:parseType='Resource'>\n      <jp:href rdf:resource='http://foo'/>\n    </jp:a>\n  </rdf:Description>\n</rdf:RDF>\n"
 				)
 				{
 					public void verify(A o) {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6dccf603/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5TemplateComboTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5TemplateComboTest.java b/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5TemplateComboTest.java
index 4a39c33..65e4dcb 100644
--- a/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5TemplateComboTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5TemplateComboTest.java
@@ -37,28 +37,28 @@ public class Html5TemplateComboTest extends ComboTest {
 				new ComboInput<FormTemplate>(
 					"FormTemplate-1",
 					FormTemplate.class,
-					new FormTemplate("myaction", 123, true),
-					/* Json */		"{a:{action:'myaction'},c:[{_type:'input',a:{type:'text',name:'v1',value:123}},{_type:'input',a:{type:'text',name:'v2',value:true}}]}",
-					/* JsonT */		"{a:{action:'myaction'},c:[{t:'input',a:{type:'text',name:'v1',value:123}},{t:'input',a:{type:'text',name:'v2',value:true}}]}",
-					/* JsonR */		"{\n\ta: {\n\t\taction: 'myaction'\n\t},\n\tc: [\n\t\t{\n\t\t\t_type: 'input',\n\t\t\ta: {\n\t\t\t\ttype: 'text',\n\t\t\t\tname: 'v1',\n\t\t\t\tvalue: 123\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t_type: 'input',\n\t\t\ta: {\n\t\t\t\ttype: 'text',\n\t\t\t\tname: 'v2',\n\t\t\t\tvalue: true\n\t\t\t}\n\t\t}\n\t]\n}",
-					/* Xml */		"<form action='myaction'><input type='text' name='v1' value='123'/><input type='text' name='v2' value='true'/></form>",
-					/* XmlT */		"<form action='myaction'><input type='text' name='v1' value='123'/><input type='text' name='v2' value='true'/></form>",
-					/* XmlR */		"<form action='myaction'><input type='text' name='v1' value='123'/><input type='text' name='v2' value='true'/></form>\n",
-					/* XmlNs */		"<form action='myaction'><input type='text' name='v1' value='123'/><input type='text' name='v2' value='true'/></form>",
-					/* Html */		"<form action='myaction'><input type='text' name='v1' value='123'/><input type='text' name='v2' value='true'/></form>",
-					/* HtmlT */		"<form action='myaction'><input type='text' name='v1' value='123'/><input type='text' name='v2' value='true'/></form>",
-					/* HtmlR */		"<form action='myaction'><input type='text' name='v1' value='123'/><input type='text' name='v2' value='true'/></form>\n",
-					/* Uon */		"(a=(action=myaction),c=@((_type=input,a=(type=text,name=v1,value=123)),(_type=input,a=(type=text,name=v2,value=true))))",
-					/* UonT */		"(a=(action=myaction),c=@((t=input,a=(type=text,name=v1,value=123)),(t=input,a=(type=text,name=v2,value=true))))",
-					/* UonR */		"(\n\ta=(\n\t\taction=myaction\n\t),\n\tc=@(\n\t\t(\n\t\t\t_type=input,\n\t\t\ta=(\n\t\t\t\ttype=text,\n\t\t\t\tname=v1,\n\t\t\t\tvalue=123\n\t\t\t)\n\t\t),\n\t\t(\n\t\t\t_type=input,\n\t\t\ta=(\n\t\t\t\ttype=text,\n\t\t\t\tname=v2,\n\t\t\t\tvalue=true\n\t\t\t)\n\t\t)\n\t)\n)",
-					/* UrlEnc */	"a=(action=myaction)&c=@((_type=input,a=(type=text,name=v1,value=123)),(_type=input,a=(type=text,name=v2,value=true)))",
-					/* UrlEncT */	"a=(action=myaction)&c=@((t=input,a=(type=text,name=v1,value=123)),(t=input,a=(type=text,name=v2,value=true)))",
-					/* UrlEncR */	"a=(\n\taction=myaction\n)\n&c=@(\n\t(\n\t\t_type=input,\n\t\ta=(\n\t\t\ttype=text,\n\t\t\tname=v1,\n\t\t\tvalue=123\n\t\t)\n\t),\n\t(\n\t\t_type=input,\n\t\ta=(\n\t\t\ttype=text,\n\t\t\tname=v2,\n\t\t\tvalue=true\n\t\t)\n\t)\n)",
-					/* MsgPack */	"82A16181A6616374696F6EA86D79616374696F6EA1639282A55F74797065A5696E707574A16183A474797065A474657874A46E616D65A27631A576616C75657B82A55F74797065A5696E707574A16183A474797065A474657874A46E616D65A27632A576616C7565C3",
-					/* MsgPackT */	"82A16181A6616374696F6EA86D79616374696F6EA1639282A174A5696E707574A16183A474797065A474657874A46E616D65A27631A576616C75657B82A174A5696E707574A16183A474797065A474657874A46E616D65A27632A576616C7565C3",
-					/* RdfXml */	"<rdf:RDF>\n<rdf:Description>\n<jp:a rdf:parseType='Resource'>\n<jp:action>myaction</jp:action>\n</jp:a>\n<jp:c>\n<rdf:Seq>\n<rdf:li rdf:parseType='Resource'>\n<jp:_type>input</jp:_type>\n<jp:a rdf:parseType='Resource'>\n<jp:type>text</jp:type>\n<jp:name>v1</jp:name>\n<jp:value>123</jp:value>\n</jp:a>\n</rdf:li>\n<rdf:li rdf:parseType='Resource'>\n<jp:_type>input</jp:_type>\n<jp:a rdf:parseType='Resource'>\n<jp:type>text</jp:type>\n<jp:name>v2</jp:name>\n<jp:value>true</jp:value>\n</jp:a>\n</rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:Description>\n</rdf:RDF>\n",
-					/* RdfXmlT */	"<rdf:RDF>\n<rdf:Description>\n<jp:a rdf:parseType='Resource'>\n<jp:action>myaction</jp:action>\n</jp:a>\n<jp:c>\n<rdf:Seq>\n<rdf:li rdf:parseType='Resource'>\n<jp:t>input</jp:t>\n<jp:a rdf:parseType='Resource'>\n<jp:type>text</jp:type>\n<jp:name>v1</jp:name>\n<jp:value>123</jp:value>\n</jp:a>\n</rdf:li>\n<rdf:li rdf:parseType='Resource'>\n<jp:t>input</jp:t>\n<jp:a rdf:parseType='Resource'>\n<jp:type>text</jp:type>\n<jp:name>v2</jp:name>\n<jp:value>true</jp:value>\n</jp:a>\n</rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:Description>\n</rdf:RDF>\n",
-					/* RdfXmlR */	"<rdf:RDF>\n  <rdf:Description>\n    <jp:a rdf:parseType='Resource'>\n      <jp:action>myaction</jp:action>\n    </jp:a>\n    <jp:c>\n      <rdf:Seq>\n        <rdf:li rdf:parseType='Resource'>\n          <jp:_type>input</jp:_type>\n          <jp:a rdf:parseType='Resource'>\n            <jp:type>text</jp:type>\n            <jp:name>v1</jp:name>\n            <jp:value>123</jp:value>\n          </jp:a>\n        </rdf:li>\n        <rdf:li rdf:parseType='Resource'>\n          <jp:_type>input</jp:_type>\n          <jp:a rdf:parseType='Resource'>\n            <jp:type>text</jp:type>\n            <jp:name>v2</jp:name>\n            <jp:value>true</jp:value>\n          </jp:a>\n        </rdf:li>\n      </rdf:Seq>\n    </jp:c>\n  </rdf:Description>\n</rdf:RDF>\n"
+					new FormTemplate("http://myaction", 123, true),
+					/* Json */		"{a:{action:'http://myaction'},c:[{_type:'input',a:{type:'text',name:'v1',value:123}},{_type:'input',a:{type:'text',name:'v2',value:true}}]}",
+					/* JsonT */		"{a:{action:'http://myaction'},c:[{t:'input',a:{type:'text',name:'v1',value:123}},{t:'input',a:{type:'text',name:'v2',value:true}}]}",
+					/* JsonR */		"{\n\ta: {\n\t\taction: 'http://myaction'\n\t},\n\tc: [\n\t\t{\n\t\t\t_type: 'input',\n\t\t\ta: {\n\t\t\t\ttype: 'text',\n\t\t\t\tname: 'v1',\n\t\t\t\tvalue: 123\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t_type: 'input',\n\t\t\ta: {\n\t\t\t\ttype: 'text',\n\t\t\t\tname: 'v2',\n\t\t\t\tvalue: true\n\t\t\t}\n\t\t}\n\t]\n}",
+					/* Xml */		"<form action='http://myaction'><input type='text' name='v1' value='123'/><input type='text' name='v2' value='true'/></form>",
+					/* XmlT */		"<form action='http://myaction'><input type='text' name='v1' value='123'/><input type='text' name='v2' value='true'/></form>",
+					/* XmlR */		"<form action='http://myaction'><input type='text' name='v1' value='123'/><input type='text' name='v2' value='true'/></form>\n",
+					/* XmlNs */		"<form action='http://myaction'><input type='text' name='v1' value='123'/><input type='text' name='v2' value='true'/></form>",
+					/* Html */		"<form action='http://myaction'><input type='text' name='v1' value='123'/><input type='text' name='v2' value='true'/></form>",
+					/* HtmlT */		"<form action='http://myaction'><input type='text' name='v1' value='123'/><input type='text' name='v2' value='true'/></form>",
+					/* HtmlR */		"<form action='http://myaction'><input type='text' name='v1' value='123'/><input type='text' name='v2' value='true'/></form>\n",
+					/* Uon */		"(a=(action=http://myaction),c=@((_type=input,a=(type=text,name=v1,value=123)),(_type=input,a=(type=text,name=v2,value=true))))",
+					/* UonT */		"(a=(action=http://myaction),c=@((t=input,a=(type=text,name=v1,value=123)),(t=input,a=(type=text,name=v2,value=true))))",
+					/* UonR */		"(\n\ta=(\n\t\taction=http://myaction\n\t),\n\tc=@(\n\t\t(\n\t\t\t_type=input,\n\t\t\ta=(\n\t\t\t\ttype=text,\n\t\t\t\tname=v1,\n\t\t\t\tvalue=123\n\t\t\t)\n\t\t),\n\t\t(\n\t\t\t_type=input,\n\t\t\ta=(\n\t\t\t\ttype=text,\n\t\t\t\tname=v2,\n\t\t\t\tvalue=true\n\t\t\t)\n\t\t)\n\t)\n)",
+					/* UrlEnc */	"a=(action=http://myaction)&c=@((_type=input,a=(type=text,name=v1,value=123)),(_type=input,a=(type=text,name=v2,value=true)))",
+					/* UrlEncT */	"a=(action=http://myaction)&c=@((t=input,a=(type=text,name=v1,value=123)),(t=input,a=(type=text,name=v2,value=true)))",
+					/* UrlEncR */	"a=(\n\taction=http://myaction\n)\n&c=@(\n\t(\n\t\t_type=input,\n\t\ta=(\n\t\t\ttype=text,\n\t\t\tname=v1,\n\t\t\tvalue=123\n\t\t)\n\t),\n\t(\n\t\t_type=input,\n\t\ta=(\n\t\t\ttype=text,\n\t\t\tname=v2,\n\t\t\tvalue=true\n\t\t)\n\t)\n)",
+					/* MsgPack */	"82A16181A6616374696F6EAF687474703A2F2F6D79616374696F6EA1639282A55F74797065A5696E707574A16183A474797065A474657874A46E616D65A27631A576616C75657B82A55F74797065A5696E707574A16183A474797065A474657874A46E616D65A27632A576616C7565C3",
+					/* MsgPackT */	"82A16181A6616374696F6EAF687474703A2F2F6D79616374696F6EA1639282A174A5696E707574A16183A474797065A474657874A46E616D65A27631A576616C75657B82A174A5696E707574A16183A474797065A474657874A46E616D65A27632A576616C7565C3",
+					/* RdfXml */	"<rdf:RDF>\n<rdf:Description>\n<jp:a rdf:parseType='Resource'>\n<jp:action rdf:resource='http://myaction'/>\n</jp:a>\n<jp:c>\n<rdf:Seq>\n<rdf:li rdf:parseType='Resource'>\n<jp:_type>input</jp:_type>\n<jp:a rdf:parseType='Resource'>\n<jp:type>text</jp:type>\n<jp:name>v1</jp:name>\n<jp:value>123</jp:value>\n</jp:a>\n</rdf:li>\n<rdf:li rdf:parseType='Resource'>\n<jp:_type>input</jp:_type>\n<jp:a rdf:parseType='Resource'>\n<jp:type>text</jp:type>\n<jp:name>v2</jp:name>\n<jp:value>true</jp:value>\n</jp:a>\n</rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:Description>\n</rdf:RDF>\n",
+					/* RdfXmlT */	"<rdf:RDF>\n<rdf:Description>\n<jp:a rdf:parseType='Resource'>\n<jp:action rdf:resource='http://myaction'/>\n</jp:a>\n<jp:c>\n<rdf:Seq>\n<rdf:li rdf:parseType='Resource'>\n<jp:t>input</jp:t>\n<jp:a rdf:parseType='Resource'>\n<jp:type>text</jp:type>\n<jp:name>v1</jp:name>\n<jp:value>123</jp:value>\n</jp:a>\n</rdf:li>\n<rdf:li rdf:parseType='Resource'>\n<jp:t>input</jp:t>\n<jp:a rdf:parseType='Resource'>\n<jp:type>text</jp:type>\n<jp:name>v2</jp:name>\n<jp:value>true</jp:value>\n</jp:a>\n</rdf:li>\n</rdf:Seq>\n</jp:c>\n</rdf:Description>\n</rdf:RDF>\n",
+					/* RdfXmlR */	"<rdf:RDF>\n  <rdf:Description>\n    <jp:a rdf:parseType='Resource'>\n      <jp:action rdf:resource='http://myaction'/>\n    </jp:a>\n    <jp:c>\n      <rdf:Seq>\n        <rdf:li rdf:parseType='Resource'>\n          <jp:_type>input</jp:_type>\n          <jp:a rdf:parseType='Resource'>\n            <jp:type>text</jp:type>\n            <jp:name>v1</jp:name>\n            <jp:value>123</jp:value>\n          </jp:a>\n        </rdf:li>\n        <rdf:li rdf:parseType='Resource'>\n          <jp:_type>input</jp:_type>\n          <jp:a rdf:parseType='Resource'>\n            <jp:type>text</jp:type>\n            <jp:name>v2</jp:name>\n            <jp:value>true</jp:value>\n          </jp:a>\n        </rdf:li>\n      </rdf:Seq>\n    </jp:c>\n  </rdf:Description>\n</rdf:RDF>\n"
 				)
 				{
 					public void verify(FormTemplate o) {