Improved support for resolution of URIs.

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

Branch: refs/heads/master
Commit: c4952d2cf412c827c11ac001753d01ad00279635
Parents: d28634b
Author: JamesBognar <[email protected]>
Authored: Mon May 29 18:21:47 2017 -0400
Committer: JamesBognar <[email protected]>
Committed: Mon May 29 18:21:47 2017 -0400

----------------------------------------------------------------------
 .../org/apache/juneau/jena/RdfSerializer.java   |  17 +-
 .../juneau/jena/RdfSerializerBuilder.java       |  14 +-
 .../juneau/jena/RdfSerializerSession.java       |   4 +-
 .../java/org/apache/juneau/jena/package.html    |   6 +-
 .../java/org/apache/juneau/html/CommonTest.java | 191 ------
 .../java/org/apache/juneau/html/HtmlTest.java   | 156 ++---
 .../java/org/apache/juneau/jena/CommonTest.java | 144 ----
 .../java/org/apache/juneau/json/CommonTest.java | 130 ----
 .../org/apache/juneau/serializer/TestURI.java   |  92 +++
 .../juneau/serializer/UriResolutionTest.java    | 671 +++++++++++++++++++
 .../juneau/urlencoding/Common_UonTest.java      | 136 ----
 .../urlencoding/Common_UrlEncodingTest.java     | 126 ----
 .../utils/UriContextResolutionComboTest.java    | 145 ++--
 .../juneau/utils/UriContextUriComboTest.java    |   2 +-
 .../java/org/apache/juneau/xml/CommonTest.java  | 131 ----
 .../main/java/org/apache/juneau/UriContext.java | 155 +----
 .../java/org/apache/juneau/UriRelativity.java   |   4 +-
 .../java/org/apache/juneau/UriResolver.java     | 273 ++++++++
 .../java/org/apache/juneau/annotation/URI.java  |  10 +-
 .../apache/juneau/csv/CsvSerializerBuilder.java |  14 +-
 .../apache/juneau/html/HtmlDocSerializer.java   |  19 +-
 .../juneau/html/HtmlDocSerializerSession.java   |   2 +-
 .../org/apache/juneau/html/HtmlSerializer.java  |  10 +-
 .../juneau/html/HtmlSerializerBuilder.java      |  14 +-
 .../juneau/html/HtmlSerializerSession.java      |  48 +-
 .../java/org/apache/juneau/html/HtmlWriter.java |  17 +-
 .../apache/juneau/html/SimpleHtmlWriter.java    |   2 +-
 .../org/apache/juneau/internal/AsciiMap.java    |  82 +++
 .../apache/juneau/jso/JsoSerializerBuilder.java |  14 +-
 .../json/JsonSchemaSerializerBuilder.java       |  14 +-
 .../org/apache/juneau/json/JsonSerializer.java  |   2 +-
 .../juneau/json/JsonSerializerBuilder.java      |  14 +-
 .../juneau/json/JsonSerializerSession.java      |   2 +-
 .../java/org/apache/juneau/json/JsonWriter.java |  19 +-
 .../msgpack/MsgPackSerializerBuilder.java       |  14 +-
 .../plaintext/PlainTextSerializerBuilder.java   |  14 +-
 .../juneau/serializer/SerializerBuilder.java    | 136 ++--
 .../juneau/serializer/SerializerContext.java    | 147 ++--
 .../serializer/SerializerGroupBuilder.java      |  27 +-
 .../juneau/serializer/SerializerSession.java    | 119 ++--
 .../juneau/serializer/SerializerWriter.java     |  49 +-
 .../juneau/soap/SoapXmlSerializerBuilder.java   |  14 +-
 .../apache/juneau/uon/UonSerializerBuilder.java |  14 +-
 .../apache/juneau/uon/UonSerializerSession.java |   2 +-
 .../java/org/apache/juneau/uon/UonWriter.java   |  24 +-
 .../UrlEncodingSerializerBuilder.java           |  14 +-
 .../apache/juneau/xml/XmlSchemaSerializer.java  |   4 +-
 .../juneau/xml/XmlSchemaSerializerBuilder.java  |  14 +-
 .../org/apache/juneau/xml/XmlSerializer.java    |   2 +-
 .../apache/juneau/xml/XmlSerializerBuilder.java |  14 +-
 .../apache/juneau/xml/XmlSerializerSession.java |   2 +-
 .../java/org/apache/juneau/xml/XmlUtils.java    | 440 +++++++-----
 .../java/org/apache/juneau/xml/XmlWriter.java   |  54 +-
 juneau-core/src/main/javadoc/overview.html      | 123 +++-
 .../juneau/examples/addressbook/Person.java     |   2 +-
 .../juneau/examples/rest/AtomFeedResource.java  |   2 +-
 .../juneau/examples/rest/DirectoryResource.java |   2 +-
 .../examples/rest/DockerRegistryResource.java   |   2 +-
 .../juneau/examples/rest/FileSpaceResource.java |  15 +-
 .../examples/rest/HelloWorldResource.java       |   2 +-
 .../examples/rest/JsonSchemaResource.java       |   2 +-
 .../examples/rest/MethodExampleResource.java    |   4 +-
 .../juneau/examples/rest/PhotosResource.java    |   7 +-
 .../examples/rest/RequestEchoResource.java      |   2 +-
 .../examples/rest/SampleRemoteableServlet.java  |   2 +-
 .../juneau/examples/rest/SqlQueryResource.java  |   2 +-
 .../examples/rest/SystemPropertiesResource.java |  18 +-
 .../juneau/examples/rest/TempDirResource.java   |   2 +-
 .../examples/rest/TumblrParserResource.java     |   2 +-
 .../examples/rest/UrlEncodedFormResource.java   |   2 +-
 .../rest/addressbook/AddressBookResource.java   |  37 +-
 .../apache/juneau/microservice/Resource.java    |   6 +-
 .../juneau/microservice/ResourceGroup.java      |   2 +-
 .../juneau/microservice/ResourceJena.java       |   2 +-
 .../microservice/resources/ConfigResource.java  |   2 +-
 .../resources/DirectoryResource.java            |   2 +-
 .../juneau/rest/client/RestClientBuilder.java   |  27 +-
 .../java/org/apache/juneau/rest/CallMethod.java |   6 -
 .../java/org/apache/juneau/rest/RestConfig.java |  11 +-
 .../org/apache/juneau/rest/RestContext.java     |   2 +-
 .../org/apache/juneau/rest/RestRequest.java     |  13 +-
 .../juneau/rest/annotation/RestResource.java    |   4 +-
 .../java/org/apache/juneau/rest/package.html    |  68 +-
 83 files changed, 2258 insertions(+), 1899 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/c4952d2c/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 734f38a..05dc92e 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,7 +21,6 @@ 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.*;
@@ -330,21 +329,7 @@ public class RdfSerializer extends WriterSerializer {
                        s = uri2.toString();
                if (s == null)
                        return null;
-               if (s.indexOf("://") == -1) {
-                       String aUri = session.getAbsolutePathUriBase();
-                       String rUri = session.getRelativeUriBase();
-                       if (StringUtils.startsWith(s, '/')) {
-                               if (aUri != null)
-                                       return aUri + s;
-                       } else {
-                               if (rUri != null) {
-                                       if (rUri.equals("/"))
-                                               return '/' + s;
-                                       return rUri + '/' + s;
-                               }
-                       }
-               }
-               return s;
+               return session.getUriResolver().resolve(s);
        }
 
        private void serializeMap(RdfSerializerSession session, Map m, Resource 
r, ClassMeta<?> type) throws SerializeException {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/c4952d2c/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
 
b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
index da3b59a..91957a3 100644
--- 
a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
+++ 
b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
@@ -489,14 +489,20 @@ public class RdfSerializerBuilder extends 
SerializerBuilder {
        }
 
        @Override /* SerializerBuilder */
-       public RdfSerializerBuilder relativeUriBase(String value) {
-               super.relativeUriBase(value);
+       public RdfSerializerBuilder uriContext(UriContext value) {
+               super.uriContext(value);
                return this;
        }
 
        @Override /* SerializerBuilder */
-       public RdfSerializerBuilder absolutePathUriBase(String value) {
-               super.absolutePathUriBase(value);
+       public RdfSerializerBuilder uriResolution(UriResolution value) {
+               super.uriResolution(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public RdfSerializerBuilder uriRelativity(UriRelativity value) {
+               super.uriRelativity(value);
                return this;
        }
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/c4952d2c/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
----------------------------------------------------------------------
diff --git 
a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
 
b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
index 55060ef..79691fe 100644
--- 
a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
+++ 
b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
@@ -269,7 +269,7 @@ public final class RdfSerializerSession extends 
SerializerSession {
        }
 
        /**
-        * XML-encodes the specified string using the {@link 
XmlUtils#encodeInvalidCharsForText(Object)} method.
+        * XML-encodes the specified string using the {@link 
XmlUtils#escapeText(Object)} method.
         *
         * @param o The string being encoded.
         * @return The encoded string, or <jk>null</jk> if the input was 
<jk>null</jk>.
@@ -278,7 +278,7 @@ public final class RdfSerializerSession extends 
SerializerSession {
                if (o == null)
                        return null;
                String s = toString(o);
-               return XmlUtils.encodeInvalidCharsForText(s);
+               return XmlUtils.escapeText(s);
        }
 
        /**

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/c4952d2c/juneau-core-rdf/src/main/java/org/apache/juneau/jena/package.html
----------------------------------------------------------------------
diff --git a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/package.html 
b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/package.html
index 095dc7e..c3073ec 100644
--- a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/package.html
+++ b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/package.html
@@ -431,8 +431,10 @@
                <ja>@URI</ja> <jk>public</jk> String <jf>addressBookUri</jf>;
                </p>
                <p>
-                       Also take note of the {@link 
org.apache.juneau.serializer.SerializerContext#SERIALIZER_relativeUriBase} and 
{@link 
org.apache.juneau.serializer.SerializerContext#SERIALIZER_absolutePathUriBase}
-                               settings that can be specified on the 
serializer to resolve relative and context-root-relative URIs to fully-qualfied 
URIs.
+                       Also take note of the {@link 
org.apache.juneau.serializer.SerializerContext#SERIALIZER_uriResolution},
+                       {@link 
org.apache.juneau.serializer.SerializerContext#SERIALIZER_uriRelativity}, and 
+                       and {@link 
org.apache.juneau.serializer.SerializerContext#SERIALIZER_uriContext}
+                       settings that can be specified on the serializer to 
resolve relative and context-root-relative URIs to fully-qualified URIs.
                </p>
                <p>
                        This can be useful if you want to keep the URI 
authority and context root information out of the bean logic layer.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/c4952d2c/juneau-core-test/src/test/java/org/apache/juneau/html/CommonTest.java
----------------------------------------------------------------------
diff --git 
a/juneau-core-test/src/test/java/org/apache/juneau/html/CommonTest.java 
b/juneau-core-test/src/test/java/org/apache/juneau/html/CommonTest.java
index ab82065..e83900e 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/html/CommonTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/html/CommonTest.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.html;
 
 import static org.apache.juneau.TestUtils.*;
-import static org.apache.juneau.html.HtmlSerializerContext.*;
 import static org.junit.Assert.*;
 
 import java.net.*;
@@ -23,7 +22,6 @@ import java.util.*;
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.testbeans.*;
 import org.apache.juneau.utils.*;
 import org.junit.*;
 
@@ -343,195 +341,6 @@ public class CommonTest {
                public URL f2;
        }
 
-       
//====================================================================================================
-       // Test URIs with URI_CONTEXT and URI_AUTHORITY
-       
//====================================================================================================
-       @Test
-       public void testUris() throws Exception {
-               HtmlSerializerBuilder s = new 
HtmlSerializerBuilder().sq().uriAnchorText(PROPERTY_NAME).useWhitespace(false).addKeyValueTableHeaders(true);
-               TestURI t = new TestURI();
-               String r;
-               String expected;
-
-               s.relativeUriBase(null);
-               r = strip(s.build().serialize(t));
-               expected = ""
-                       +"\n[f0]=<a href='f0/x0'>f0</a>"
-                       +"\n[f1]=<a href='f1/x1'>f1</a>"
-                       +"\n[f2]=<a href='/f2/x2'>f2</a>"
-                       +"\n[f3]=<a href='http://www.apache.org/f3/x3'>f3</a>"
-                       +"\n[f4]=<a href='f4/x4'>f4</a>"
-                       +"\n[f5]=<a href='/f5/x5'>f5</a>"
-                       +"\n[f6]=<a href='http://www.apache.org/f6/x6'>f6</a>"
-                       +"\n[f7]=<a href='http://www.apache.org/f7/x7'>f7</a>"
-                       +"\n[f8]=<a href='f8/x8'>f8</a>"
-                       +"\n[f9]=<a href='f9/x9'>f9</a>"
-                       +"\n[fa]=<a 
href='http://www.apache.org/fa/xa#MY_LABEL'>fa</a>"
-                       +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar'>MY_LABEL</a>"
-                       +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL'>MY_LABEL</a>"
-                       +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar'>fd</a>"
-                       +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'>fe</a>"
-               ;
-               assertEquals(expected, r);
-
-               s.relativeUriBase("");  // Same as null.
-               r = strip(s.build().serialize(t));
-               expected = ""
-                       +"\n[f0]=<a href='f0/x0'>f0</a>"
-                       +"\n[f1]=<a href='f1/x1'>f1</a>"
-                       +"\n[f2]=<a href='/f2/x2'>f2</a>"
-                       +"\n[f3]=<a href='http://www.apache.org/f3/x3'>f3</a>"
-                       +"\n[f4]=<a href='f4/x4'>f4</a>"
-                       +"\n[f5]=<a href='/f5/x5'>f5</a>"
-                       +"\n[f6]=<a href='http://www.apache.org/f6/x6'>f6</a>"
-                       +"\n[f7]=<a href='http://www.apache.org/f7/x7'>f7</a>"
-                       +"\n[f8]=<a href='f8/x8'>f8</a>"
-                       +"\n[f9]=<a href='f9/x9'>f9</a>"
-                       +"\n[fa]=<a 
href='http://www.apache.org/fa/xa#MY_LABEL'>fa</a>"
-                       +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar'>MY_LABEL</a>"
-                       +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL'>MY_LABEL</a>"
-                       +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar'>fd</a>"
-                       +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'>fe</a>"
-               ;
-               assertEquals(expected, r);
-
-               s.relativeUriBase("/cr");
-               r = strip(s.build().serialize(t));
-               expected = ""
-                       +"\n[f0]=<a href='/cr/f0/x0'>f0</a>"
-                       +"\n[f1]=<a href='/cr/f1/x1'>f1</a>"
-                       +"\n[f2]=<a href='/f2/x2'>f2</a>"
-                       +"\n[f3]=<a href='http://www.apache.org/f3/x3'>f3</a>"
-                       +"\n[f4]=<a href='/cr/f4/x4'>f4</a>"
-                       +"\n[f5]=<a href='/f5/x5'>f5</a>"
-                       +"\n[f6]=<a href='http://www.apache.org/f6/x6'>f6</a>"
-                       +"\n[f7]=<a href='http://www.apache.org/f7/x7'>f7</a>"
-                       +"\n[f8]=<a href='/cr/f8/x8'>f8</a>"
-                       +"\n[f9]=<a href='/cr/f9/x9'>f9</a>"
-                       +"\n[fa]=<a 
href='http://www.apache.org/fa/xa#MY_LABEL'>fa</a>"
-                       +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar'>MY_LABEL</a>"
-                       +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL'>MY_LABEL</a>"
-                       +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar'>fd</a>"
-                       +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'>fe</a>"
-               ;
-               assertEquals(expected, r);
-
-               s.relativeUriBase("/cr/");  // Same as above
-               r = strip(s.build().serialize(t));
-               expected = ""
-                       +"\n[f0]=<a href='/cr/f0/x0'>f0</a>"
-                       +"\n[f1]=<a href='/cr/f1/x1'>f1</a>"
-                       +"\n[f2]=<a href='/f2/x2'>f2</a>"
-                       +"\n[f3]=<a href='http://www.apache.org/f3/x3'>f3</a>"
-                       +"\n[f4]=<a href='/cr/f4/x4'>f4</a>"
-                       +"\n[f5]=<a href='/f5/x5'>f5</a>"
-                       +"\n[f6]=<a href='http://www.apache.org/f6/x6'>f6</a>"
-                       +"\n[f7]=<a href='http://www.apache.org/f7/x7'>f7</a>"
-                       +"\n[f8]=<a href='/cr/f8/x8'>f8</a>"
-                       +"\n[f9]=<a href='/cr/f9/x9'>f9</a>"
-                       +"\n[fa]=<a 
href='http://www.apache.org/fa/xa#MY_LABEL'>fa</a>"
-                       +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar'>MY_LABEL</a>"
-                       +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL'>MY_LABEL</a>"
-                       +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar'>fd</a>"
-                       +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'>fe</a>"
-               ;
-               assertEquals(expected, r);
-
-               s.relativeUriBase("/");
-               r = strip(s.build().serialize(t));
-               expected = ""
-                       +"\n[f0]=<a href='/f0/x0'>f0</a>"
-                       +"\n[f1]=<a href='/f1/x1'>f1</a>"
-                       +"\n[f2]=<a href='/f2/x2'>f2</a>"
-                       +"\n[f3]=<a href='http://www.apache.org/f3/x3'>f3</a>"
-                       +"\n[f4]=<a href='/f4/x4'>f4</a>"
-                       +"\n[f5]=<a href='/f5/x5'>f5</a>"
-                       +"\n[f6]=<a href='http://www.apache.org/f6/x6'>f6</a>"
-                       +"\n[f7]=<a href='http://www.apache.org/f7/x7'>f7</a>"
-                       +"\n[f8]=<a href='/f8/x8'>f8</a>"
-                       +"\n[f9]=<a href='/f9/x9'>f9</a>"
-                       +"\n[fa]=<a 
href='http://www.apache.org/fa/xa#MY_LABEL'>fa</a>"
-                       +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar'>MY_LABEL</a>"
-                       +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL'>MY_LABEL</a>"
-                       +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar'>fd</a>"
-                       +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'>fe</a>"
-               ;
-               assertEquals(expected, r);
-
-               s.relativeUriBase(null);
-
-               s.absolutePathUriBase("http://foo";);
-               r = strip(s.build().serialize(t));
-               expected = ""
-                       +"\n[f0]=<a href='f0/x0'>f0</a>"
-                       +"\n[f1]=<a href='f1/x1'>f1</a>"
-                       +"\n[f2]=<a href='http://foo/f2/x2'>f2</a>"
-                       +"\n[f3]=<a href='http://www.apache.org/f3/x3'>f3</a>"
-                       +"\n[f4]=<a href='f4/x4'>f4</a>"
-                       +"\n[f5]=<a href='http://foo/f5/x5'>f5</a>"
-                       +"\n[f6]=<a href='http://www.apache.org/f6/x6'>f6</a>"
-                       +"\n[f7]=<a href='http://www.apache.org/f7/x7'>f7</a>"
-                       +"\n[f8]=<a href='f8/x8'>f8</a>"
-                       +"\n[f9]=<a href='f9/x9'>f9</a>"
-                       +"\n[fa]=<a 
href='http://www.apache.org/fa/xa#MY_LABEL'>fa</a>"
-                       +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar'>MY_LABEL</a>"
-                       +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL'>MY_LABEL</a>"
-                       +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar'>fd</a>"
-                       +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'>fe</a>"
-               ;
-               assertEquals(expected, r);
-
-               s.absolutePathUriBase("http://foo/";);
-               r = strip(s.build().serialize(t));
-               expected = ""
-                       +"\n[f0]=<a href='f0/x0'>f0</a>"
-                       +"\n[f1]=<a href='f1/x1'>f1</a>"
-                       +"\n[f2]=<a href='http://foo/f2/x2'>f2</a>"
-                       +"\n[f3]=<a href='http://www.apache.org/f3/x3'>f3</a>"
-                       +"\n[f4]=<a href='f4/x4'>f4</a>"
-                       +"\n[f5]=<a href='http://foo/f5/x5'>f5</a>"
-                       +"\n[f6]=<a href='http://www.apache.org/f6/x6'>f6</a>"
-                       +"\n[f7]=<a href='http://www.apache.org/f7/x7'>f7</a>"
-                       +"\n[f8]=<a href='f8/x8'>f8</a>"
-                       +"\n[f9]=<a href='f9/x9'>f9</a>"
-                       +"\n[fa]=<a 
href='http://www.apache.org/fa/xa#MY_LABEL'>fa</a>"
-                       +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar'>MY_LABEL</a>"
-                       +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL'>MY_LABEL</a>"
-                       +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar'>fd</a>"
-                       +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'>fe</a>"
-               ;
-               assertEquals(expected, r);
-
-               s.absolutePathUriBase("");  // Same as null.
-               r = strip(s.build().serialize(t));
-               expected = ""
-                       +"\n[f0]=<a href='f0/x0'>f0</a>"
-                       +"\n[f1]=<a href='f1/x1'>f1</a>"
-                       +"\n[f2]=<a href='/f2/x2'>f2</a>"
-                       +"\n[f3]=<a href='http://www.apache.org/f3/x3'>f3</a>"
-                       +"\n[f4]=<a href='f4/x4'>f4</a>"
-                       +"\n[f5]=<a href='/f5/x5'>f5</a>"
-                       +"\n[f6]=<a href='http://www.apache.org/f6/x6'>f6</a>"
-                       +"\n[f7]=<a href='http://www.apache.org/f7/x7'>f7</a>"
-                       +"\n[f8]=<a href='f8/x8'>f8</a>"
-                       +"\n[f9]=<a href='f9/x9'>f9</a>"
-                       +"\n[fa]=<a 
href='http://www.apache.org/fa/xa#MY_LABEL'>fa</a>"
-                       +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar'>MY_LABEL</a>"
-                       +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL'>MY_LABEL</a>"
-                       +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar'>fd</a>"
-                       +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'>fe</a>"
-               ;
-               assertEquals(expected, r);
-       }
-
-       private String strip(String html) {
-               return html
-                       .replace("<table><tr><th>key</th><th>value</th></tr>", 
"")
-                       .replace("</table>", "")
-                       .replace("<tr><td>", "\n[")
-                       .replace("</td><td>", "]=")
-                       .replace("</td></tr>", "");
-       }
 
        
//====================================================================================================
        // Recursion

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/c4952d2c/juneau-core-test/src/test/java/org/apache/juneau/html/HtmlTest.java
----------------------------------------------------------------------
diff --git 
a/juneau-core-test/src/test/java/org/apache/juneau/html/HtmlTest.java 
b/juneau-core-test/src/test/java/org/apache/juneau/html/HtmlTest.java
index 5a48716..9d76201 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/html/HtmlTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/html/HtmlTest.java
@@ -49,7 +49,7 @@ public class HtmlTest {
        
//====================================================================================================
        @Test
        public void testAnchorTextOptions() throws Exception {
-               HtmlSerializerBuilder s = new 
HtmlSerializerBuilder().sq().addKeyValueTableHeaders(true);
+               HtmlSerializerBuilder s = new 
HtmlSerializerBuilder().sq().addKeyValueTableHeaders(true).uriResolution(UriResolution.NONE);
                TestURI t = new TestURI();
                String r;
                String expected = null;
@@ -68,127 +68,105 @@ public class HtmlTest {
                        +"\n[f8]=<a href='f8/x8'>f8/x8</a>"
                        +"\n[f9]=<a href='f9/x9'>f9/x9</a>"
                        +"\n[fa]=<a 
href='http://www.apache.org/fa/xa#MY_LABEL'>http://www.apache.org/fa/xa#MY_LABEL</a>"
-                       +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar'>MY_LABEL</a>"
-                       +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL'>MY_LABEL</a>"
-                       +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar'>http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar</a>"
-                       +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'>http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL</a>";
-               assertEquals(expected, r);
-
-               s.absolutePathUriBase("http://myhost";);
-               s.relativeUriBase("/cr");
-               s.uriAnchorText(TO_STRING);
-               r = strip(s.build().serialize(t));
-               expected = ""
-                       +"\n[f0]=<a href='/cr/f0/x0'>f0/x0</a>"
-                       +"\n[f1]=<a href='/cr/f1/x1'>f1/x1</a>"
-                       +"\n[f2]=<a href='http://myhost/f2/x2'>/f2/x2</a>"
-                       +"\n[f3]=<a 
href='http://www.apache.org/f3/x3'>http://www.apache.org/f3/x3</a>"
-                       +"\n[f4]=<a href='/cr/f4/x4'>f4/x4</a>"
-                       +"\n[f5]=<a href='http://myhost/f5/x5'>/f5/x5</a>"
-                       +"\n[f6]=<a 
href='http://www.apache.org/f6/x6'>http://www.apache.org/f6/x6</a>"
-                       +"\n[f7]=<a 
href='http://www.apache.org/f7/x7'>http://www.apache.org/f7/x7</a>"
-                       +"\n[f8]=<a href='/cr/f8/x8'>f8/x8</a>"
-                       +"\n[f9]=<a href='/cr/f9/x9'>f9/x9</a>"
-                       +"\n[fa]=<a 
href='http://www.apache.org/fa/xa#MY_LABEL'>http://www.apache.org/fa/xa#MY_LABEL</a>"
-                       +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar'>MY_LABEL</a>"
-                       +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL'>MY_LABEL</a>"
-                       +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar'>http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar</a>"
-                       +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'>http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL</a>";
+                       +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&amp;foo=bar'>MY_LABEL</a>"
+                       +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&amp;label=MY_LABEL'>MY_LABEL</a>"
+                       +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&amp;foo=bar'>http://www.apache.org/fd/xd?label2=MY_LABEL&amp;foo=bar</a>"
+                       +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&amp;label2=MY_LABEL'>http://www.apache.org/fe/xe?foo=bar&amp;label2=MY_LABEL</a>";
                assertEquals(expected, r);
 
                s.uriAnchorText(URI);
                r = strip(s.build().serialize(t));
                expected = ""
-                       +"\n[f0]=<a href='/cr/f0/x0'>/cr/f0/x0</a>"
-                       +"\n[f1]=<a href='/cr/f1/x1'>/cr/f1/x1</a>"
-                       +"\n[f2]=<a 
href='http://myhost/f2/x2'>http://myhost/f2/x2</a>"
+                       +"\n[f0]=<a href='f0/x0'>f0/x0</a>"
+                       +"\n[f1]=<a href='f1/x1'>f1/x1</a>"
+                       +"\n[f2]=<a href='/f2/x2'>/f2/x2</a>"
                        +"\n[f3]=<a 
href='http://www.apache.org/f3/x3'>http://www.apache.org/f3/x3</a>"
-                       +"\n[f4]=<a href='/cr/f4/x4'>/cr/f4/x4</a>"
-                       +"\n[f5]=<a 
href='http://myhost/f5/x5'>http://myhost/f5/x5</a>"
+                       +"\n[f4]=<a href='f4/x4'>f4/x4</a>"
+                       +"\n[f5]=<a href='/f5/x5'>/f5/x5</a>"
                        +"\n[f6]=<a 
href='http://www.apache.org/f6/x6'>http://www.apache.org/f6/x6</a>"
                        +"\n[f7]=<a 
href='http://www.apache.org/f7/x7'>http://www.apache.org/f7/x7</a>"
-                       +"\n[f8]=<a href='/cr/f8/x8'>/cr/f8/x8</a>"
-                       +"\n[f9]=<a href='/cr/f9/x9'>/cr/f9/x9</a>"
+                       +"\n[f8]=<a href='f8/x8'>f8/x8</a>"
+                       +"\n[f9]=<a href='f9/x9'>f9/x9</a>"
                        +"\n[fa]=<a 
href='http://www.apache.org/fa/xa#MY_LABEL'>http://www.apache.org/fa/xa#MY_LABEL</a>"
-                       +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar'>MY_LABEL</a>"
-                       +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL'>MY_LABEL</a>"
-                       +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar'>http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar</a>"
-                       +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'>http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL</a>";
+                       +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&amp;foo=bar'>MY_LABEL</a>"
+                       +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&amp;label=MY_LABEL'>MY_LABEL</a>"
+                       +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&amp;foo=bar'>http://www.apache.org/fd/xd?label2=MY_LABEL&amp;foo=bar</a>"
+                       +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&amp;label2=MY_LABEL'>http://www.apache.org/fe/xe?foo=bar&amp;label2=MY_LABEL</a>";
                assertEquals(expected, r);
 
                s.uriAnchorText(LAST_TOKEN);
                r = strip(s.build().serialize(t));
                expected = ""
-                       +"\n[f0]=<a href='/cr/f0/x0'>x0</a>"
-                       +"\n[f1]=<a href='/cr/f1/x1'>x1</a>"
-                       +"\n[f2]=<a href='http://myhost/f2/x2'>x2</a>"
+                       +"\n[f0]=<a href='f0/x0'>x0</a>"
+                       +"\n[f1]=<a href='f1/x1'>x1</a>"
+                       +"\n[f2]=<a href='/f2/x2'>x2</a>"
                        +"\n[f3]=<a href='http://www.apache.org/f3/x3'>x3</a>"
-                       +"\n[f4]=<a href='/cr/f4/x4'>x4</a>"
-                       +"\n[f5]=<a href='http://myhost/f5/x5'>x5</a>"
+                       +"\n[f4]=<a href='f4/x4'>x4</a>"
+                       +"\n[f5]=<a href='/f5/x5'>x5</a>"
                        +"\n[f6]=<a href='http://www.apache.org/f6/x6'>x6</a>"
                        +"\n[f7]=<a href='http://www.apache.org/f7/x7'>x7</a>"
-                       +"\n[f8]=<a href='/cr/f8/x8'>x8</a>"
-                       +"\n[f9]=<a href='/cr/f9/x9'>x9</a>"
+                       +"\n[f8]=<a href='f8/x8'>x8</a>"
+                       +"\n[f9]=<a href='f9/x9'>x9</a>"
                        +"\n[fa]=<a 
href='http://www.apache.org/fa/xa#MY_LABEL'>xa</a>"
-                       +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar'>MY_LABEL</a>"
-                       +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL'>MY_LABEL</a>"
-                       +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar'>xd</a>"
-                       +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'>xe</a>";
+                       +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&amp;foo=bar'>MY_LABEL</a>"
+                       +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&amp;label=MY_LABEL'>MY_LABEL</a>"
+                       +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&amp;foo=bar'>xd</a>"
+                       +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&amp;label2=MY_LABEL'>xe</a>";
                assertEquals(expected, r);
 
                s.uriAnchorText(URI_ANCHOR);
                r = strip(s.build().serialize(t));
                expected = ""
-                       +"\n[f0]=<a href='/cr/f0/x0'>f0/x0</a>"
-                       +"\n[f1]=<a href='/cr/f1/x1'>f1/x1</a>"
-                       +"\n[f2]=<a href='http://myhost/f2/x2'>/f2/x2</a>"
+                       +"\n[f0]=<a href='f0/x0'>f0/x0</a>"
+                       +"\n[f1]=<a href='f1/x1'>f1/x1</a>"
+                       +"\n[f2]=<a href='/f2/x2'>/f2/x2</a>"
                        +"\n[f3]=<a 
href='http://www.apache.org/f3/x3'>http://www.apache.org/f3/x3</a>"
-                       +"\n[f4]=<a href='/cr/f4/x4'>f4/x4</a>"
-                       +"\n[f5]=<a href='http://myhost/f5/x5'>/f5/x5</a>"
+                       +"\n[f4]=<a href='f4/x4'>f4/x4</a>"
+                       +"\n[f5]=<a href='/f5/x5'>/f5/x5</a>"
                        +"\n[f6]=<a 
href='http://www.apache.org/f6/x6'>http://www.apache.org/f6/x6</a>"
                        +"\n[f7]=<a 
href='http://www.apache.org/f7/x7'>http://www.apache.org/f7/x7</a>"
-                       +"\n[f8]=<a href='/cr/f8/x8'>f8/x8</a>"
-                       +"\n[f9]=<a href='/cr/f9/x9'>f9/x9</a>"
+                       +"\n[f8]=<a href='f8/x8'>f8/x8</a>"
+                       +"\n[f9]=<a href='f9/x9'>f9/x9</a>"
                        +"\n[fa]=<a 
href='http://www.apache.org/fa/xa#MY_LABEL'>MY_LABEL</a>"
-                       +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar'>MY_LABEL</a>"
-                       +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL'>MY_LABEL</a>"
-                       +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar'>http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar</a>"
-                       +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'>http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL</a>";
+                       +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&amp;foo=bar'>MY_LABEL</a>"
+                       +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&amp;label=MY_LABEL'>MY_LABEL</a>"
+                       +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&amp;foo=bar'>http://www.apache.org/fd/xd?label2=MY_LABEL&amp;foo=bar</a>"
+                       +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&amp;label2=MY_LABEL'>http://www.apache.org/fe/xe?foo=bar&amp;label2=MY_LABEL</a>";
                assertEquals(expected, r);
 
                s.labelParameter("label2");
                r = strip(s.build().serialize(t));
                expected = ""
-                       +"\n[f0]=<a href='/cr/f0/x0'>f0/x0</a>"
-                       +"\n[f1]=<a href='/cr/f1/x1'>f1/x1</a>"
-                       +"\n[f2]=<a href='http://myhost/f2/x2'>/f2/x2</a>"
+                       +"\n[f0]=<a href='f0/x0'>f0/x0</a>"
+                       +"\n[f1]=<a href='f1/x1'>f1/x1</a>"
+                       +"\n[f2]=<a href='/f2/x2'>/f2/x2</a>"
                        +"\n[f3]=<a 
href='http://www.apache.org/f3/x3'>http://www.apache.org/f3/x3</a>"
-                       +"\n[f4]=<a href='/cr/f4/x4'>f4/x4</a>"
-                       +"\n[f5]=<a href='http://myhost/f5/x5'>/f5/x5</a>"
+                       +"\n[f4]=<a href='f4/x4'>f4/x4</a>"
+                       +"\n[f5]=<a href='/f5/x5'>/f5/x5</a>"
                        +"\n[f6]=<a 
href='http://www.apache.org/f6/x6'>http://www.apache.org/f6/x6</a>"
                        +"\n[f7]=<a 
href='http://www.apache.org/f7/x7'>http://www.apache.org/f7/x7</a>"
-                       +"\n[f8]=<a href='/cr/f8/x8'>f8/x8</a>"
-                       +"\n[f9]=<a href='/cr/f9/x9'>f9/x9</a>"
+                       +"\n[f8]=<a href='f8/x8'>f8/x8</a>"
+                       +"\n[f9]=<a href='f9/x9'>f9/x9</a>"
                        +"\n[fa]=<a 
href='http://www.apache.org/fa/xa#MY_LABEL'>MY_LABEL</a>"
-                       +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar'>http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar</a>"
-                       +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL'>http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL</a>"
-                       +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar'>MY_LABEL</a>"
-                       +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'>MY_LABEL</a>";
+                       +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&amp;foo=bar'>http://www.apache.org/fb/xb?label=MY_LABEL&amp;foo=bar</a>"
+                       +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&amp;label=MY_LABEL'>http://www.apache.org/fc/xc?foo=bar&amp;label=MY_LABEL</a>"
+                       +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&amp;foo=bar'>MY_LABEL</a>"
+                       +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&amp;label2=MY_LABEL'>MY_LABEL</a>";
                assertEquals(expected, r);
 
                s.detectLinksInStrings(false);
                r = strip(s.build().serialize(t));
                expected = ""
-                       +"\n[f0]=<a href='/cr/f0/x0'>f0/x0</a>"
-                       +"\n[f1]=<a href='/cr/f1/x1'>f1/x1</a>"
-                       +"\n[f2]=<a href='http://myhost/f2/x2'>/f2/x2</a>"
+                       +"\n[f0]=<a href='f0/x0'>f0/x0</a>"
+                       +"\n[f1]=<a href='f1/x1'>f1/x1</a>"
+                       +"\n[f2]=<a href='/f2/x2'>/f2/x2</a>"
                        +"\n[f3]=<a 
href='http://www.apache.org/f3/x3'>http://www.apache.org/f3/x3</a>"
-                       +"\n[f4]=<a href='/cr/f4/x4'>f4/x4</a>"
-                       +"\n[f5]=<a href='http://myhost/f5/x5'>/f5/x5</a>"
+                       +"\n[f4]=<a href='f4/x4'>f4/x4</a>"
+                       +"\n[f5]=<a href='/f5/x5'>/f5/x5</a>"
                        +"\n[f6]=<a 
href='http://www.apache.org/f6/x6'>http://www.apache.org/f6/x6</a>"
                        +"\n[f7]=<a 
href='http://www.apache.org/f7/x7'>http://www.apache.org/f7/x7</a>"
-                       +"\n[f8]=<a href='/cr/f8/x8'>f8/x8</a>"
-                       +"\n[f9]=<a href='/cr/f9/x9'>f9/x9</a>"
+                       +"\n[f8]=<a href='f8/x8'>f8/x8</a>"
+                       +"\n[f9]=<a href='f9/x9'>f9/x9</a>"
                        +"\n[fa]=http://www.apache.org/fa/xa#MY_LABEL";
                        
+"\n[fb]=http://www.apache.org/fb/xb?label=MY_LABEL&amp;foo=bar";
                        
+"\n[fc]=http://www.apache.org/fc/xc?foo=bar&amp;label=MY_LABEL";
@@ -200,21 +178,21 @@ public class HtmlTest {
                        s.lookForLabelParameters(false);
                        r = strip(s.build().serialize(t));
                        expected = ""
-                               +"\n[f0]=<a href='/cr/f0/x0'>f0/x0</a>"
-                               +"\n[f1]=<a href='/cr/f1/x1'>f1/x1</a>"
-                               +"\n[f2]=<a 
href='http://myhost/f2/x2'>/f2/x2</a>"
+                               +"\n[f0]=<a href='f0/x0'>f0/x0</a>"
+                               +"\n[f1]=<a href='f1/x1'>f1/x1</a>"
+                               +"\n[f2]=<a href='/f2/x2'>/f2/x2</a>"
                                +"\n[f3]=<a 
href='http://www.apache.org/f3/x3'>http://www.apache.org/f3/x3</a>"
-                               +"\n[f4]=<a href='/cr/f4/x4'>f4/x4</a>"
-                               +"\n[f5]=<a 
href='http://myhost/f5/x5'>/f5/x5</a>"
+                               +"\n[f4]=<a href='f4/x4'>f4/x4</a>"
+                               +"\n[f5]=<a href='/f5/x5'>/f5/x5</a>"
                                +"\n[f6]=<a 
href='http://www.apache.org/f6/x6'>http://www.apache.org/f6/x6</a>"
                                +"\n[f7]=<a 
href='http://www.apache.org/f7/x7'>http://www.apache.org/f7/x7</a>"
-                               +"\n[f8]=<a href='/cr/f8/x8'>f8/x8</a>"
-                               +"\n[f9]=<a href='/cr/f9/x9'>f9/x9</a>"
+                               +"\n[f8]=<a href='f8/x8'>f8/x8</a>"
+                               +"\n[f9]=<a href='f9/x9'>f9/x9</a>"
                                +"\n[fa]=<a 
href='http://www.apache.org/fa/xa#MY_LABEL'>MY_LABEL</a>"
-                               +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar'>http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar</a>"
-                               +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL'>http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL</a>"
-                               +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar'>http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar</a>"
-                               +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'>http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL</a>";
+                               +"\n[fb]=<a 
href='http://www.apache.org/fb/xb?label=MY_LABEL&amp;foo=bar'>http://www.apache.org/fb/xb?label=MY_LABEL&amp;foo=bar</a>"
+                               +"\n[fc]=<a 
href='http://www.apache.org/fc/xc?foo=bar&amp;label=MY_LABEL'>http://www.apache.org/fc/xc?foo=bar&amp;label=MY_LABEL</a>"
+                               +"\n[fd]=<a 
href='http://www.apache.org/fd/xd?label2=MY_LABEL&amp;foo=bar'>http://www.apache.org/fd/xd?label2=MY_LABEL&amp;foo=bar</a>"
+                               +"\n[fe]=<a 
href='http://www.apache.org/fe/xe?foo=bar&amp;label2=MY_LABEL'>http://www.apache.org/fe/xe?foo=bar&amp;label2=MY_LABEL</a>";
                        assertEquals(expected, r);
        }
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/c4952d2c/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonTest.java
----------------------------------------------------------------------
diff --git 
a/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonTest.java 
b/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonTest.java
index 7bde736..adbf317 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonTest.java
@@ -22,9 +22,7 @@ import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
-import org.apache.juneau.internal.*;
 import org.apache.juneau.jena.annotation.*;
-import org.apache.juneau.testbeans.*;
 import org.apache.juneau.utils.*;
 import org.junit.*;
 
@@ -276,148 +274,6 @@ public class CommonTest {
                public URL f2;
        }
 
-       
//====================================================================================================
-       // Test URIs with URI_CONTEXT and URI_AUTHORITY
-       
//====================================================================================================
-       @Test
-       public void testUris() throws Exception {
-               RdfSerializerBuilder s = getBasicSerializer();
-               TestURI t = new TestURI();
-               String r;
-               String expected = "";
-
-               s.relativeUriBase(null);
-               r = stripAndSort(s.build().serialize(t));
-               expected = ""
-                       +"</rdf:Description>>"
-                       +"\n<<rdf:Description rdf:about='f0/x0'>"
-                       +"\n<jp:f1 rdf:resource='f1/x1'/>"
-                       +"\n<jp:f2 rdf:resource='/f2/x2'/>"
-                       +"\n<jp:f3 rdf:resource='http://www.apache.org/f3/x3'/>"
-                       +"\n<jp:f4 rdf:resource='f4/x4'/>"
-                       +"\n<jp:f5 rdf:resource='/f5/x5'/>"
-                       +"\n<jp:f6 rdf:resource='http://www.apache.org/f6/x6'/>"
-                       +"\n<jp:f7 rdf:resource='http://www.apache.org/f7/x7'/>"
-                       +"\n<jp:f8 rdf:resource='f8/x8'/>"
-                       +"\n<jp:f9 rdf:resource='f9/x9'/>"
-                       +"\n<jp:fa>http://www.apache.org/fa/xa#MY_LABEL</jp:fa>"
-                       
+"\n<jp:fb>http://www.apache.org/fb/xb?label=MY_LABEL&amp;foo=bar</jp:fb>"
-                       
+"\n<jp:fc>http://www.apache.org/fc/xc?foo=bar&amp;label=MY_LABEL</jp:fc>"
-                       
+"\n<jp:fd>http://www.apache.org/fd/xd?label2=MY_LABEL&amp;foo=bar</jp:fd>"
-                       
+"\n<jp:fe>http://www.apache.org/fe/xe?foo=bar&amp;label2=MY_LABEL</jp:fe>"
-               ;
-               assertEquals(expected, r);
-
-               s.relativeUriBase("");  // Same as null.
-               r = stripAndSort(s.build().serialize(t));
-               assertEquals(expected, r);
-
-               s.relativeUriBase("/cr");
-               r = stripAndSort(s.build().serialize(t));
-               expected = ""
-                       +"</rdf:Description>>"
-                       +"\n<<rdf:Description rdf:about='/cr/f0/x0'>"
-                       +"\n<jp:f1 rdf:resource='/cr/f1/x1'/>"
-                       +"\n<jp:f2 rdf:resource='/f2/x2'/>"
-                       +"\n<jp:f3 rdf:resource='http://www.apache.org/f3/x3'/>"
-                       +"\n<jp:f4 rdf:resource='/cr/f4/x4'/>"
-                       +"\n<jp:f5 rdf:resource='/f5/x5'/>"
-                       +"\n<jp:f6 rdf:resource='http://www.apache.org/f6/x6'/>"
-                       +"\n<jp:f7 rdf:resource='http://www.apache.org/f7/x7'/>"
-                       +"\n<jp:f8 rdf:resource='/cr/f8/x8'/>"
-                       +"\n<jp:f9 rdf:resource='/cr/f9/x9'/>"
-                       +"\n<jp:fa>http://www.apache.org/fa/xa#MY_LABEL</jp:fa>"
-                       
+"\n<jp:fb>http://www.apache.org/fb/xb?label=MY_LABEL&amp;foo=bar</jp:fb>"
-                       
+"\n<jp:fc>http://www.apache.org/fc/xc?foo=bar&amp;label=MY_LABEL</jp:fc>"
-                       
+"\n<jp:fd>http://www.apache.org/fd/xd?label2=MY_LABEL&amp;foo=bar</jp:fd>"
-                       
+"\n<jp:fe>http://www.apache.org/fe/xe?foo=bar&amp;label2=MY_LABEL</jp:fe>"
-               ;
-               assertEquals(expected, r);
-
-               s.relativeUriBase("/cr/");  // Same as above
-               r = stripAndSort(s.build().serialize(t));
-               assertEquals(expected, r);
-
-               s.relativeUriBase("/");
-               r = stripAndSort(s.build().serialize(t));
-               expected = ""
-                       +"</rdf:Description>>"
-                       +"\n<<rdf:Description rdf:about='/f0/x0'>"
-                       +"\n<jp:f1 rdf:resource='/f1/x1'/>"
-                       +"\n<jp:f2 rdf:resource='/f2/x2'/>"
-                       +"\n<jp:f3 rdf:resource='http://www.apache.org/f3/x3'/>"
-                       +"\n<jp:f4 rdf:resource='/f4/x4'/>"
-                       +"\n<jp:f5 rdf:resource='/f5/x5'/>"
-                       +"\n<jp:f6 rdf:resource='http://www.apache.org/f6/x6'/>"
-                       +"\n<jp:f7 rdf:resource='http://www.apache.org/f7/x7'/>"
-                       +"\n<jp:f8 rdf:resource='/f8/x8'/>"
-                       +"\n<jp:f9 rdf:resource='/f9/x9'/>"
-                       +"\n<jp:fa>http://www.apache.org/fa/xa#MY_LABEL</jp:fa>"
-                       
+"\n<jp:fb>http://www.apache.org/fb/xb?label=MY_LABEL&amp;foo=bar</jp:fb>"
-                       
+"\n<jp:fc>http://www.apache.org/fc/xc?foo=bar&amp;label=MY_LABEL</jp:fc>"
-                       
+"\n<jp:fd>http://www.apache.org/fd/xd?label2=MY_LABEL&amp;foo=bar</jp:fd>"
-                       
+"\n<jp:fe>http://www.apache.org/fe/xe?foo=bar&amp;label2=MY_LABEL</jp:fe>"
-               ;
-               assertEquals(expected, r);
-
-               s.relativeUriBase(null);
-
-               s.absolutePathUriBase("http://foo";);
-               r = stripAndSort(s.build().serialize(t));
-               expected = ""
-                       +"</rdf:Description>>"
-                       +"\n<<rdf:Description rdf:about='f0/x0'>"
-                       +"\n<jp:f1 rdf:resource='f1/x1'/>"
-                       +"\n<jp:f2 rdf:resource='http://foo/f2/x2'/>"
-                       +"\n<jp:f3 rdf:resource='http://www.apache.org/f3/x3'/>"
-                       +"\n<jp:f4 rdf:resource='f4/x4'/>"
-                       +"\n<jp:f5 rdf:resource='http://foo/f5/x5'/>"
-                       +"\n<jp:f6 rdf:resource='http://www.apache.org/f6/x6'/>"
-                       +"\n<jp:f7 rdf:resource='http://www.apache.org/f7/x7'/>"
-                       +"\n<jp:f8 rdf:resource='f8/x8'/>"
-                       +"\n<jp:f9 rdf:resource='f9/x9'/>"
-                       +"\n<jp:fa>http://www.apache.org/fa/xa#MY_LABEL</jp:fa>"
-                       
+"\n<jp:fb>http://www.apache.org/fb/xb?label=MY_LABEL&amp;foo=bar</jp:fb>"
-                       
+"\n<jp:fc>http://www.apache.org/fc/xc?foo=bar&amp;label=MY_LABEL</jp:fc>"
-                       
+"\n<jp:fd>http://www.apache.org/fd/xd?label2=MY_LABEL&amp;foo=bar</jp:fd>"
-                       
+"\n<jp:fe>http://www.apache.org/fe/xe?foo=bar&amp;label2=MY_LABEL</jp:fe>"
-               ;
-               assertEquals(expected, r);
-
-               s.absolutePathUriBase("http://foo/";);
-               r = stripAndSort(s.build().serialize(t));
-               assertEquals(expected, r);
-
-               s.absolutePathUriBase("");  // Same as null.
-               r = stripAndSort(s.build().serialize(t));
-               expected = ""
-                       +"</rdf:Description>>"
-                       +"\n<<rdf:Description rdf:about='f0/x0'>"
-                       +"\n<jp:f1 rdf:resource='f1/x1'/>"
-                       +"\n<jp:f2 rdf:resource='/f2/x2'/>"
-                       +"\n<jp:f3 rdf:resource='http://www.apache.org/f3/x3'/>"
-                       +"\n<jp:f4 rdf:resource='f4/x4'/>"
-                       +"\n<jp:f5 rdf:resource='/f5/x5'/>"
-                       +"\n<jp:f6 rdf:resource='http://www.apache.org/f6/x6'/>"
-                       +"\n<jp:f7 rdf:resource='http://www.apache.org/f7/x7'/>"
-                       +"\n<jp:f8 rdf:resource='f8/x8'/>"
-                       +"\n<jp:f9 rdf:resource='f9/x9'/>"
-                       +"\n<jp:fa>http://www.apache.org/fa/xa#MY_LABEL</jp:fa>"
-                       
+"\n<jp:fb>http://www.apache.org/fb/xb?label=MY_LABEL&amp;foo=bar</jp:fb>"
-                       
+"\n<jp:fc>http://www.apache.org/fc/xc?foo=bar&amp;label=MY_LABEL</jp:fc>"
-                       
+"\n<jp:fd>http://www.apache.org/fd/xd?label2=MY_LABEL&amp;foo=bar</jp:fd>"
-                       
+"\n<jp:fe>http://www.apache.org/fe/xe?foo=bar&amp;label2=MY_LABEL</jp:fe>"
-               ;
-               assertEquals(expected, r);
-       }
-
-       private String stripAndSort(String s) {
-               s = strip(s);
-               Set<String> set = new TreeSet<String>();
-               for (String s2 : s.split("><"))
-                       set.add('<' + s2 + '>');
-               return StringUtils.join(set, "\n");
-       }
 
        
//====================================================================================================
        // Recursion

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/c4952d2c/juneau-core-test/src/test/java/org/apache/juneau/json/CommonTest.java
----------------------------------------------------------------------
diff --git 
a/juneau-core-test/src/test/java/org/apache/juneau/json/CommonTest.java 
b/juneau-core-test/src/test/java/org/apache/juneau/json/CommonTest.java
index ac09b1f..cd2cb22 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/json/CommonTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/json/CommonTest.java
@@ -21,7 +21,6 @@ import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
-import org.apache.juneau.testbeans.*;
 import org.apache.juneau.utils.*;
 import org.junit.*;
 
@@ -236,135 +235,6 @@ public class CommonTest {
                public URL f2;
        }
 
-       
//====================================================================================================
-       // Test URIs with URI_CONTEXT and URI_AUTHORITY
-       
//====================================================================================================
-       @Test
-       public void testUris() throws Exception {
-               JsonSerializerBuilder s = new JsonSerializerBuilder().simple();
-               TestURI t = new TestURI();
-               String r;
-               String expected = "";
-
-               s.relativeUriBase(null);
-               r = s.build().serialize(t);
-               expected = "{"
-                       +"f0:'f0/x0',"
-                       +"f1:'f1/x1',"
-                       +"f2:'/f2/x2',"
-                       +"f3:'http://www.apache.org/f3/x3',"
-                       +"f4:'f4/x4',"
-                       +"f5:'/f5/x5',"
-                       +"f6:'http://www.apache.org/f6/x6',"
-                       +"f7:'http://www.apache.org/f7/x7',"
-                       +"f8:'f8/x8',"
-                       +"f9:'f9/x9',"
-                       +"fa:'http://www.apache.org/fa/xa#MY_LABEL',"
-                       
+"fb:'http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar',"
-                       
+"fc:'http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL',"
-                       
+"fd:'http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar',"
-                       
+"fe:'http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'"
-                       +"}";
-               assertEquals(expected, r);
-
-               s.relativeUriBase("");  // Same as null.
-               r = s.build().serialize(t);
-               assertEquals(expected, r);
-
-               s.relativeUriBase("/cr");
-               r = s.build().serialize(t);
-               expected = "{"
-                       +"f0:'/cr/f0/x0',"
-                       +"f1:'/cr/f1/x1',"
-                       +"f2:'/f2/x2',"
-                       +"f3:'http://www.apache.org/f3/x3',"
-                       +"f4:'/cr/f4/x4',"
-                       +"f5:'/f5/x5',"
-                       +"f6:'http://www.apache.org/f6/x6',"
-                       +"f7:'http://www.apache.org/f7/x7',"
-                       +"f8:'/cr/f8/x8',"
-                       +"f9:'/cr/f9/x9',"
-                       +"fa:'http://www.apache.org/fa/xa#MY_LABEL',"
-                       
+"fb:'http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar',"
-                       
+"fc:'http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL',"
-                       
+"fd:'http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar',"
-                       
+"fe:'http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'"
-                       +"}";
-               assertEquals(expected, r);
-
-               s.relativeUriBase("/cr/");  // Same as above
-               r = s.build().serialize(t);
-               assertEquals(expected, r);
-
-               s.relativeUriBase("/");
-               r = s.build().serialize(t);
-               expected = "{"
-                       +"f0:'/f0/x0',"
-                       +"f1:'/f1/x1',"
-                       +"f2:'/f2/x2',"
-                       +"f3:'http://www.apache.org/f3/x3',"
-                       +"f4:'/f4/x4',"
-                       +"f5:'/f5/x5',"
-                       +"f6:'http://www.apache.org/f6/x6',"
-                       +"f7:'http://www.apache.org/f7/x7',"
-                       +"f8:'/f8/x8',"
-                       +"f9:'/f9/x9',"
-                       +"fa:'http://www.apache.org/fa/xa#MY_LABEL',"
-                       
+"fb:'http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar',"
-                       
+"fc:'http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL',"
-                       
+"fd:'http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar',"
-                       
+"fe:'http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'"
-                       +"}";
-               assertEquals(expected, r);
-
-               s.relativeUriBase(null);
-
-               s.absolutePathUriBase("http://foo";);
-               r = s.build().serialize(t);
-               expected = "{"
-                       +"f0:'f0/x0',"
-                       +"f1:'f1/x1',"
-                       +"f2:'http://foo/f2/x2',"
-                       +"f3:'http://www.apache.org/f3/x3',"
-                       +"f4:'f4/x4',"
-                       +"f5:'http://foo/f5/x5',"
-                       +"f6:'http://www.apache.org/f6/x6',"
-                       +"f7:'http://www.apache.org/f7/x7',"
-                       +"f8:'f8/x8',"
-                       +"f9:'f9/x9',"
-                       +"fa:'http://www.apache.org/fa/xa#MY_LABEL',"
-                       
+"fb:'http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar',"
-                       
+"fc:'http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL',"
-                       
+"fd:'http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar',"
-                       
+"fe:'http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'"
-                       +"}";
-               assertEquals(expected, r);
-
-               s.absolutePathUriBase("http://foo/";);
-               r = s.build().serialize(t);
-               assertEquals(expected, r);
-
-               s.absolutePathUriBase("");  // Same as null.
-               r = s.build().serialize(t);
-               expected = "{"
-                       +"f0:'f0/x0',"
-                       +"f1:'f1/x1',"
-                       +"f2:'/f2/x2',"
-                       +"f3:'http://www.apache.org/f3/x3',"
-                       +"f4:'f4/x4',"
-                       +"f5:'/f5/x5',"
-                       +"f6:'http://www.apache.org/f6/x6',"
-                       +"f7:'http://www.apache.org/f7/x7',"
-                       +"f8:'f8/x8',"
-                       +"f9:'f9/x9',"
-                       +"fa:'http://www.apache.org/fa/xa#MY_LABEL',"
-                       
+"fb:'http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar',"
-                       
+"fc:'http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL',"
-                       
+"fd:'http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar',"
-                       
+"fe:'http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'"
-                       +"}";
-               assertEquals(expected, r);
-       }
 
        
//====================================================================================================
        // Recursion

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/c4952d2c/juneau-core-test/src/test/java/org/apache/juneau/serializer/TestURI.java
----------------------------------------------------------------------
diff --git 
a/juneau-core-test/src/test/java/org/apache/juneau/serializer/TestURI.java 
b/juneau-core-test/src/test/java/org/apache/juneau/serializer/TestURI.java
new file mode 100755
index 0000000..eb48e99
--- /dev/null
+++ b/juneau-core-test/src/test/java/org/apache/juneau/serializer/TestURI.java
@@ -0,0 +1,92 @@
+// 
***************************************************************************************************************************
+// * 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.serializer;
+
+import java.net.URI;
+
+import org.apache.juneau.annotation.*;
+import org.apache.juneau.jena.annotation.*;
+import org.apache.juneau.xml.*;
+import org.apache.juneau.xml.annotation.*;
+
+@SuppressWarnings("javadoc")
+@Bean(sort=true)
+public class TestURI {
+       
+       // String annotated as a URI
+       @org.apache.juneau.annotation.URI
+       @Rdf(beanUri=true)
+       @Xml(format=XmlFormat.ATTR)
+       public String f0 = "f0/x0";
+
+       // URI properties
+       public URI 
+               f1a = URI.create("http://www.apache.org/f1a";),
+               f1b = URI.create("/f1b"),
+               f1c = URI.create("/f1c/x/y"),
+               f1d = URI.create("f1d"),
+               f1e = URI.create("f1e/x/y"),
+               f1f = URI.create(""),
+               f1g = URI.create("servlet:/f1g/x"),
+               f1h = URI.create("servlet:/f1h"),
+               f1i = URI.create("servlet:/"),
+               f1j = URI.create("servlet:/.."),
+               f1k = URI.create("context:/f1j/x"),
+               f1l = URI.create("context:/f1k"),
+               f1m = URI.create("context:/"),
+               f1n = URI.create("context:/.."),
+               fio = null;
+               
+       // Strings annotated with @URI properties
+       @org.apache.juneau.annotation.URI
+       public String
+               f2a = "http://www.apache.org/f2a";,
+               f2b = "/f2b",
+               f2c = "/f2c/x/y",
+               f2d = "f2d",
+               f2e = "f2e/x/y",
+               f2f = "",
+               f2g = "servlet:/f2g/x",
+               f2h = "servlet:/f2h",
+               f2i = "servlet:/",
+               f2j = "servlet:/..",
+               f2k = "context:/f2j/x",
+               f2l = "context:/f2k",
+               f2m = "context:/",
+               f2n = "context:/..",
+               f2o = null;
+
+       // Strings with labels
+       @org.apache.juneau.annotation.URI
+       public String
+               f3a = "http://www.apache.org/f3a/x?label=MY_LABEL&foo=bar";,
+               f3b = XmlUtils.urlEncode("<>&'\""),
+               f3c = "<>&'\"";  // Invalid URI, but should produce parsable 
output.
+       
+       // @URI on bean
+       public TestURIb f4 = new TestURIb();
+       
+       // @URI on bean property method.
+       @org.apache.juneau.annotation.URI
+       public String getF5() {
+               return "f5/x";
+       }
+
+       @org.apache.juneau.annotation.URI
+       public static class TestURIb {
+               @Override /* Object */
+               public String toString() {
+                       return "test/uri/b";
+               }
+       }
+}
\ No newline at end of file

Reply via email to