PartList/HeaderList API improvements.
diff --git a/juneau-core/juneau-common/src/main/java/org/apache/juneau/internal/IOUtils.java b/juneau-core/juneau-common/src/main/java/org/apache/juneau/internal/IOUtils.java
index 3110b01..09537ea 100644
--- a/juneau-core/juneau-common/src/main/java/org/apache/juneau/internal/IOUtils.java
+++ b/juneau-core/juneau-common/src/main/java/org/apache/juneau/internal/IOUtils.java
@@ -410,6 +410,35 @@
 	//-----------------------------------------------------------------------------------------------------------------

 

 	/**

+	 * Pipes the specified object to the specified output stream.

+	 *

+	 * @param in

+	 * 	The input byte array.

+	 * 	<br>Can be <jk>null</jk> or any of the following types:

+	 * 	<ul>

+	 * 		<li>{@link Reader}

+	 * 		<li>{@link InputStream}

+	 * 		<li>{@link File}

+	 * 		<li>byte array.

+	 * 	</ul>

+	 * @return The input converted to a string.

+	 * @throws IOException If thrown from output stream.

+	 */

+	public static String read(Object in) throws IOException {

+		if (in == null)

+			return null;

+		if (in instanceof Reader)

+			return read((Reader)in);

+		if (in instanceof InputStream)

+			return read((InputStream)in);

+		if (in instanceof File)

+			return read((File)in);

+		if (in instanceof byte[])

+			return read((byte[])in);

+		throw new RuntimeException("Invalid type passed to read:  " + in.getClass().getName());

+	}

+

+	/**

 	 * Reads the specified byte array containing UTF-8 into a string.

 	 *

 	 * @param in

diff --git a/juneau-doc/docs/Topics/12.juneau-rest-client.html b/juneau-doc/docs/Topics/12.juneau-rest-client.html
index cbb2457..4086d4c 100644
--- a/juneau-doc/docs/Topics/12.juneau-rest-client.html
+++ b/juneau-doc/docs/Topics/12.juneau-rest-client.html
@@ -114,13 +114,13 @@
 	</p>
 	<p>
 		Clients are typically created with a root URI so that relative URIs can be used when making requests.
-		This is done using the {@link oajrc.RestClient.Builder#rootUri(Object)} method.
+		This is done using the {@link oajrc.RestClient.Builder#rootUrl(Object)} method.
 	</p>
 	
 	<h5 class='figure'>Example:</h5>
 	<p class='bjava'>
 		|	<jc>// Create a client where all URIs are relative to localhost.</jc>
-		|	RestClient <jv>client</jv> = RestClient.<jsm>create</jsm>().json().rootUri(<js>"http://localhost:10000"</js>).build();
+		|	RestClient <jv>client</jv> = RestClient.<jsm>create</jsm>().json().rootUrl(<js>"http://localhost:10000"</js>).build();
 		|
 		|	<jc>// Use relative paths.</jc>
 		|	String <jv>content</jv> = <jv>client</jv>.get(<js>"/subpath"</js>).run().getContent().asString();
diff --git a/juneau-doc/src/main/javadoc/overview.html b/juneau-doc/src/main/javadoc/overview.html
index a8457ad..a282d8d 100644
--- a/juneau-doc/src/main/javadoc/overview.html
+++ b/juneau-doc/src/main/javadoc/overview.html
@@ -15818,7 +15818,7 @@
 			<ul class='javatreec'>
 				<li class='jc'>{@link org.apache.juneau.http.entity.ByteArrayEntity}
 				<li class='jc'>{@link org.apache.juneau.http.entity.FileEntity}
-				<li class='jc'>{@link org.apache.juneau.http.entity.InputStreamEntity}
+				<li class='jc'>{@link org.apache.juneau.http.entity.StreamEntity}
 				<li class='jc'>{@link org.apache.juneau.http.entity.ReaderEntity}
 				<li class='jc'>{@link org.apache.juneau.http.entity.SerializedEntity}
 				<li class='jc'>{@link org.apache.juneau.http.entity.StringEntity}
@@ -15884,7 +15884,7 @@
 				<ul class='javatreec'>
 					<li class='jc'>{@link org.apache.juneau.http.resource.ByteArrayResource}
 					<li class='jc'>{@link org.apache.juneau.http.resource.FileResource}
-					<li class='jc'>{@link org.apache.juneau.http.resource.InputStreamResource}
+					<li class='jc'>{@link org.apache.juneau.http.resource.StreamResource}
 					<li class='jc'>{@link org.apache.juneau.http.resource.ReaderResource}
 					<li class='jc'>{@link org.apache.juneau.http.resource.StringResource}
 				</ul>
diff --git a/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/SamplesMicroservice.java b/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/SamplesMicroservice.java
index 6e7ebb2..a5c8169 100644
--- a/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/SamplesMicroservice.java
+++ b/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/SamplesMicroservice.java
@@ -83,7 +83,7 @@
 	 */
 	public static RestClient.Builder client() {
 		try {
-			return RestClient.create().rootUri(microserviceURI);
+			return RestClient.create().rootUrl(microserviceURI);
 		} catch (Exception e) {
 			throw new RuntimeException(e);
 		}
diff --git a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/TestMicroservice.java b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/TestMicroservice.java
index 640b02d2..7d70096 100644
--- a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/TestMicroservice.java
+++ b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/TestMicroservice.java
@@ -104,7 +104,7 @@
 			final StatusLine[] currentResponse = new StatusLine[1];
 			RestClient.Builder rc = RestClient.create()
 				.json()
-				.rootUri(microserviceURI)
+				.rootUrl(microserviceURI)
 				.noTrace();
 			rc.retryHandler(
 					new HttpRequestRetryHandler() {
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
index 1740c83..1cf51cc 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
@@ -170,12 +170,12 @@
  *

  * <p>

  * Clients are typically created with a root URI so that relative URIs can be used when making requests.

- * This is done using the {@link Builder#rootUri(Object)} method.

+ * This is done using the {@link Builder#rootUrl(Object)} method.

  *

  * <h5 class='figure'>Example:</h5>

  * <p class='bjava'>

  * 	<jc>// Create a client where all URIs are relative to localhost.</jc>

- * 	RestClient <jv>client</jv> = RestClient.<jsm>create</jsm>().json().rootUri(<js>"http://localhost:5000"</js>).build();

+ * 	RestClient <jv>client</jv> = RestClient.<jsm>create</jsm>().json().rootUrl(<js>"http://localhost:5000"</js>).build();

  *

  * 	<jc>// Use relative paths.</jc>

  * 	String <jv>body</jv> = <jv>client</jv>.get(<js>"/subpath"</js>).run().getContent().asString();

@@ -1011,7 +1011,7 @@
  *

  * 		<jd>/** Optionally override to customize requests when they're created (e.g. add headers to each request). </jd>

  * 		<ja>@Override</ja>

- * 		<jk>protected void</jk> request(RestOperation) {...}

+ * 		<jk>protected</jk> RestRequest request(RestOperation) {...}

  *

  * 		<jd>/** Optionally override to implement your own call handling. </jd>

  * 		<ja>@Override</ja>

@@ -1090,7 +1090,7 @@
 

 		private boolean pooled;

 

-		String rootUri;

+		String rootUrl;

 		boolean skipEmptyHeaderData, skipEmptyFormData, skipEmptyQueryData, executorServiceShutdownOnClose, ignoreErrors, keepHttpClientOpen, detectLeaks,

 			logToConsole;

 		Logger logger;

@@ -3860,7 +3860,7 @@
 		 * 	<jc>// Create a client that uses UON format by default for HTTP parts.</jc>

 		 * 	RestClient <jv>client</jv> = RestClient

 		 * 		.<jsm>create</jsm>()

-		 * 		.rootUri(<js>"http://localhost:10000/foo"</js>)

+		 * 		.rootUrl(<js>"http://localhost:10000/foo"</js>)

 		 * 		.build();

 		 *

 		 * 	Bar <jv>bar</jv> = <jv>client</jv>

@@ -3876,16 +3876,16 @@
 		 * @return This object.

 		 */

 		@FluentSetter

-		public Builder rootUri(Object value) {

+		public Builder rootUrl(Object value) {

 			String s = stringify(value);

 			if (! isEmpty(s))

 				s = s.replaceAll("\\/$", "");

 			if (isEmpty(s))

-				rootUri = null;

+				rootUrl = null;

 			else if (s.indexOf("://") == -1)

-				throw new BasicRuntimeException("Invalid rootUri value: ''{0}''.  Must be a valid absolute URL.", value);

+				throw new BasicRuntimeException("Invalid rootUrl value: ''{0}''.  Must be a valid absolute URL.", value);

 			else

-				rootUri = s;

+				rootUrl = s;

 			return this;

 		}

 

@@ -3899,7 +3899,7 @@
 		 * @return The root URI defined for this client.

 		 */

 		public String getRootUri() {

-			return rootUri;

+			return rootUrl;

 		}

 

 		/**

@@ -6325,7 +6325,7 @@
 	final HttpPartSerializer partSerializer;

 	final HttpPartParser partParser;

 	private final RestCallHandler callHandler;

-	private final String rootUri;

+	private final String rootUrl;

 	private volatile boolean isClosed = false;

 	private final StackTraceElement[] creationStack;

 	private final Logger logger;

@@ -6375,7 +6375,7 @@
 		skipEmptyHeaderData = builder.skipEmptyHeaderData;

 		skipEmptyQueryData = builder.skipEmptyQueryData;

 		skipEmptyFormData = builder.skipEmptyFormData;

-		rootUri = builder.rootUri;

+		rootUrl = builder.rootUrl;

 		errorCodes = builder.errorCodes;

 		connectionManager = builder.connectionManager;

 		console = builder.console != null ? builder.console : System.err;

@@ -7184,7 +7184,7 @@
 			throw new RestCallException(null, null, "RestClient.close() has already been called.  This client cannot be reused.  Closed location stack trace can be displayed by setting the system property 'org.apache.juneau.rest.client2.RestClient.trackCreation' to true.");

 		}

 

-		RestRequest req = createRequest(toURI(op.getUri(), rootUri), op.getMethod(), op.hasContent());

+		RestRequest req = createRequest(toURI(op.getUri(), rootUrl), op.getMethod(), op.hasContent());

 

 		onCallInit(req);

 

@@ -7233,7 +7233,7 @@
 	 * The URI to the REST interface is based on the following values:

 	 * <ul>

 	 * 	<li>The {@link Remote#path() @Remote(path)} annotation on the interface (<c>remote-path</c>).

-	 * 	<li>The {@link Builder#rootUri(Object) rootUri} on the client (<c>root-url</c>).

+	 * 	<li>The {@link Builder#rootUrl(Object) rootUrl} on the client (<c>root-url</c>).

 	 * 	<li>The fully-qualified class name of the interface (<c>class-name</c>).

 	 * </ul>

 	 *

@@ -7269,14 +7269,14 @@
 	 * 	<jc>// Resolves to "http://hostname/resturi/myinterface2"</jc>

 	 * 	MyInterface2 <jv>interface2</jv> = RestClient

 	 * 		.<jsm>create</jsm>()

-	 * 		.rootUri(<js>"http://hostname/resturi"</js>)

+	 * 		.rootUrl(<js>"http://hostname/resturi"</js>)

 	 * 		.build()

 	 * 		.getRemote(MyInterface2.<jk>class</jk>);

 	 *

 	 * 	<jc>// Resolves to "http://hostname/resturi/org.apache.foo.MyInterface3"</jc>

 	 * 	MyInterface3 <jv>interface3</jv> = RestClient

 	 * 		.<jsm>create</jsm>()

-	 * 		.rootUri(<js>"http://hostname/resturi"</js>)

+	 * 		.rootUrl(<js>"http://hostname/resturi"</js>)

 	 * 		.build()

 	 * 		.getRemote(MyInterface3.<jk>class</jk>);

 	 * </p>

@@ -7309,11 +7309,11 @@
 	 *

 	 * @param <T> The interface to create a proxy for.

 	 * @param interfaceClass The interface to create a proxy for.

-	 * @param rootUri The URI of the REST interface.

+	 * @param rootUrl The URI of the REST interface.

 	 * @return The new proxy interface.

 	 */

-	public <T> T getRemote(Class<T> interfaceClass, Object rootUri) {

-		return getRemote(interfaceClass, rootUri, null, null);

+	public <T> T getRemote(Class<T> interfaceClass, Object rootUrl) {

+		return getRemote(interfaceClass, rootUrl, null, null);

 	}

 

 	/**

@@ -7325,18 +7325,18 @@
 

 	 * @param <T> The interface to create a proxy for.

 	 * @param interfaceClass The interface to create a proxy for.

-	 * @param rootUri The URI of the REST interface.

+	 * @param rootUrl The URI of the REST interface.

 	 * @param serializer The serializer used to serialize POJOs to the body of the HTTP request.

 	 * @param parser The parser used to parse POJOs from the body of the HTTP response.

 	 * @return The new proxy interface.

 	 */

 	@SuppressWarnings({ "unchecked" })

-	public <T> T getRemote(final Class<T> interfaceClass, Object rootUri, final Serializer serializer, final Parser parser) {

+	public <T> T getRemote(final Class<T> interfaceClass, Object rootUrl, final Serializer serializer, final Parser parser) {

 

-		if (rootUri == null)

-			rootUri = this.rootUri;

+		if (rootUrl == null)

+			rootUrl = this.rootUrl;

 

-		final String restUrl2 = trimSlashes(emptyIfNull(rootUri));

+		final String restUrl2 = trimSlashes(emptyIfNull(rootUrl));

 

 		return (T)Proxy.newProxyInstance(

 			interfaceClass.getClassLoader(),

@@ -7488,7 +7488,7 @@
 	 * The URI to the REST interface is based on the following values:

 	 * <ul>

 	 * 	<li>The {@link Remote#path() @Remote(path)} annotation on the interface (<c>remote-path</c>).

-	 * 	<li>The {@link Builder#rootUri(Object) rootUri} on the client (<c>root-url</c>).

+	 * 	<li>The {@link Builder#rootUrl(Object) rootUrl} on the client (<c>root-url</c>).

 	 * 	<li>The fully-qualified class name of the interface (<c>class-name</c>).

 	 * </ul>

 	 *

@@ -7559,9 +7559,9 @@
 			RrpcInterfaceMeta rm = new RrpcInterfaceMeta(interfaceClass, "");

 			String path = rm.getPath();

 			if (path.indexOf("://") == -1) {

-				if (isEmpty(rootUri))

+				if (isEmpty(rootUrl))

 					throw new RemoteMetadataException(interfaceClass, "Root URI has not been specified.  Cannot construct absolute path to remote interface.");

-				path = trimSlashes(rootUri) + '/' + path;

+				path = trimSlashes(rootUrl) + '/' + path;

 			}

 			uri = path;

 		}

@@ -8124,7 +8124,7 @@
 

 	private Pattern absUrlPattern = Pattern.compile("^\\w+\\:\\/\\/.*");

 

-	URI toURI(Object x, String rootUri) throws RestCallException {

+	URI toURI(Object x, String rootUrl) throws RestCallException {

 		try {

 			if (x instanceof URI)

 				return (URI)x;

@@ -8133,11 +8133,11 @@
 			if (x instanceof URIBuilder)

 				return ((URIBuilder)x).build();

 			String s = x == null ? "" : x.toString();

-			if (rootUri != null && ! absUrlPattern.matcher(s).matches()) {

+			if (rootUrl != null && ! absUrlPattern.matcher(s).matches()) {

 				if (s.isEmpty())

-					s = rootUri;

+					s = rootUrl;

 				else {

-					StringBuilder sb = new StringBuilder(rootUri);

+					StringBuilder sb = new StringBuilder(rootUrl);

 					if (! s.startsWith("/"))

 						sb.append('/');

 					sb.append(s);

@@ -8236,6 +8236,6 @@
 			.append("partParser", partParser)

 			.append("partSerializer", partSerializer)

 			.append("queryData", queryData)

-			.append("rootUri", rootUri);

+			.append("rootUrl", rootUrl);

 	}

 }

diff --git a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/HttpEntities.java b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/HttpEntities.java
index a6c6dfc..c52895b 100644
--- a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/HttpEntities.java
+++ b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/HttpEntities.java
@@ -188,28 +188,28 @@
 	}
 
 	/**
-	 * Creates a new {@link InputStreamEntity} builder.
+	 * Creates a new {@link StreamEntity} builder.
 	 *
 	 * <p>
 	 * Assumes no content type.
 	 *
 	 * @param content The entity content.  Can be <jk>null</jk>.
-	 * @return A new {@link InputStreamEntity} builder.
+	 * @return A new {@link StreamEntity} builder.
 	 */
-	public static final HttpEntityBuilder<InputStreamEntity> streamEntity(InputStream content) {
-		return InputStreamEntity.create().content(content);
+	public static final HttpEntityBuilder<StreamEntity> streamEntity(InputStream content) {
+		return StreamEntity.create().content(content);
 	}
 
 	/**
-	 * Creates a new {@link InputStreamEntity} builder.
+	 * Creates a new {@link StreamEntity} builder.
 	 *
 	 * @param content The entity content.  Can be <jk>null</jk>.
 	 * @param contentType The entity content type, or <jk>null</jk> if not specified.
 	 * @param length The content length, or <c>-1</c> if not known.
-	 * @return A new {@link InputStreamEntity} builder.
+	 * @return A new {@link StreamEntity} builder.
 	 */
-	public static final HttpEntityBuilder<InputStreamEntity> streamEntity(InputStream content, long length, ContentType contentType) {
-		return InputStreamEntity.create().content(content).contentLength(length).contentType(contentType);
+	public static final HttpEntityBuilder<StreamEntity> streamEntity(InputStream content, long length, ContentType contentType) {
+		return StreamEntity.create().content(content).contentLength(length).contentType(contentType);
 	}
 
 	/**
diff --git a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/HttpResources.java b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/HttpResources.java
index 90a47c5..59789d3 100644
--- a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/HttpResources.java
+++ b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/HttpResources.java
@@ -126,28 +126,28 @@
 	}
 
 	/**
-	 * Creates a new {@link InputStreamResource} builder.
+	 * Creates a new {@link StreamResource} builder.
 	 *
 	 * <p>
 	 * Assumes no content type.
 	 *
 	 * @param content The entity content.  Can be <jk>null</jk>.
-	 * @return A new {@link InputStreamResource} builder.
+	 * @return A new {@link StreamResource} builder.
 	 */
-	public static final HttpResourceBuilder<InputStreamResource> streamResource(InputStream content) {
-		return InputStreamResource.create().content(content);
+	public static final HttpResourceBuilder<StreamResource> streamResource(InputStream content) {
+		return StreamResource.create().content(content);
 	}
 
 	/**
-	 * Creates a new {@link InputStreamResource} builder.
+	 * Creates a new {@link StreamResource} builder.
 	 *
 	 * @param content The entity content.  Can be <jk>null</jk>.
 	 * @param contentType The entity content type, or <jk>null</jk> if not specified.
 	 * @param length The content length, or <c>-1</c> if not known.
-	 * @return A new {@link InputStreamResource} builder.
+	 * @return A new {@link StreamResource} builder.
 	 */
-	public static final HttpResourceBuilder<InputStreamResource> streamResource(InputStream content, long length, ContentType contentType) {
-		return InputStreamResource.create().content(content).contentLength(length).contentType(contentType);
+	public static final HttpResourceBuilder<StreamResource> streamResource(InputStream content, long length, ContentType contentType) {
+		return StreamResource.create().content(content).contentLength(length).contentType(contentType);
 	}
 
 	/**
diff --git a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/entity/InputStreamEntity.java b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/entity/StreamEntity.java
similarity index 85%
rename from juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/entity/InputStreamEntity.java
rename to juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/entity/StreamEntity.java
index 2adef54..b682884 100644
--- a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/entity/InputStreamEntity.java
+++ b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/entity/StreamEntity.java
@@ -25,19 +25,19 @@
  * 	<li class='extlink'>{@source}
  * </ul>
  */
-public class InputStreamEntity extends BasicHttpEntity {
+public class StreamEntity extends BasicHttpEntity {
 
 	private final InputStream content;
 	private final long maxLength;
 	private final byte[] cache;
 
 	/**
-	 * Creates a new {@link InputStreamEntity} builder.
+	 * Creates a new {@link StreamEntity} builder.
 	 *
-	 * @return A new {@link InputStreamEntity} builder.
+	 * @return A new {@link StreamEntity} builder.
 	 */
-	public static HttpEntityBuilder<InputStreamEntity> create() {
-		return new HttpEntityBuilder<>(InputStreamEntity.class);
+	public static HttpEntityBuilder<StreamEntity> create() {
+		return new HttpEntityBuilder<>(StreamEntity.class);
 	}
 
 	/**
@@ -46,7 +46,7 @@
 	 * @param builder The entity builder.
 	 * @throws IOException If stream could not be read.
 	 */
-	public InputStreamEntity(HttpEntityBuilder<?> builder) throws IOException {
+	public StreamEntity(HttpEntityBuilder<?> builder) throws IOException {
 		super(builder);
 		content = contentOrElse(EMPTY_INPUT_STREAM);
 		cache = builder.cached ? readBytes(content) : null;
@@ -54,12 +54,12 @@
 	}
 
 	/**
-	 * Creates a new {@link InputStreamEntity} builder initialized with the contents of this entity.
+	 * Creates a new {@link StreamEntity} builder initialized with the contents of this entity.
 	 *
-	 * @return A new {@link InputStreamEntity} builder initialized with the contents of this entity.
+	 * @return A new {@link StreamEntity} builder initialized with the contents of this entity.
 	 */
 	@Override /* BasicHttpEntity */
-	public HttpEntityBuilder<InputStreamEntity> copy() {
+	public HttpEntityBuilder<StreamEntity> copy() {
 		return new HttpEntityBuilder<>(this);
 	}
 
diff --git a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/HeaderList.java b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/HeaderList.java
index c26f008..6bfc7db 100644
--- a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/HeaderList.java
+++ b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/HeaderList.java
@@ -1150,7 +1150,7 @@
 	 * 	<br>Can be <jk>null</jk>.
 	 * 	<br><jk>null</jk> entries are ignored.
 	 */
-	protected HeaderList(boolean modifiable, List<Header> headers) {
+	public HeaderList(boolean modifiable, List<Header> headers) {
 		super(modifiable, headers);
 		caseSensitive = false;
 	}
@@ -1163,7 +1163,7 @@
 	 * 	The headers to add to the list.
 	 * 	<br><jk>null</jk> entries are ignored.
 	 */
-	protected HeaderList(boolean modifiable, Header...headers) {
+	public HeaderList(boolean modifiable, Header...headers) {
 		super(modifiable, Arrays.asList(headers));
 		caseSensitive = false;
 	}
@@ -1173,12 +1173,20 @@
 	 *
 	 * @param modifiable Whether this list should be modifiable.
 	 */
-	protected HeaderList(boolean modifiable) {
+	public HeaderList(boolean modifiable) {
 		super(modifiable);
 		caseSensitive = false;
 	}
 
 	/**
+	 * Default constructor.
+	 */
+	public HeaderList() {
+		super(true);
+		caseSensitive = false;
+	}
+
+	/**
 	 * Returns a builder initialized with the contents of this bean.
 	 *
 	 * @return A new builder object.
diff --git a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/PartList.java b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/PartList.java
index db0300d..6bb00b9 100644
--- a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/PartList.java
+++ b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/PartList.java
@@ -1132,7 +1132,7 @@
 	 * 	<br>Can be <jk>null</jk>.
 	 * 	<br><jk>null</jk> entries are ignored.
 	 */
-	protected PartList(boolean modifiable, List<NameValuePair> parts) {
+	public PartList(boolean modifiable, List<NameValuePair> parts) {
 		super(modifiable, parts);
 		caseInsensitive = false;
 	}
@@ -1145,7 +1145,7 @@
 	 * 	The parts to add to the list.
 	 * 	<br><jk>null</jk> entries are ignored.
 	 */
-	protected PartList(boolean modifiable, NameValuePair...parts) {
+	public PartList(boolean modifiable, NameValuePair...parts) {
 		super(modifiable, Arrays.asList(parts));
 		caseInsensitive = false;
 	}
@@ -1155,12 +1155,20 @@
 	 *
 	 * @param modifiable Whether this list should be modifiable.
 	 */
-	protected PartList(boolean modifiable) {
+	public PartList(boolean modifiable) {
 		super(modifiable);
 		caseInsensitive = false;
 	}
 
 	/**
+	 * Default constructor.
+	 */
+	public PartList() {
+		super(true);
+		caseInsensitive = false;
+	}
+
+	/**
 	 * Returns a builder initialized with the contents of this bean.
 	 *
 	 * @return A new builder object.
diff --git a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/BasicResource.java b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/BasicResource.java
index bff2bfa..2043350 100644
--- a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/BasicResource.java
+++ b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/BasicResource.java
@@ -78,7 +78,7 @@
 	 * @throws IOException Rethrown from {@link HttpEntity#getContent()}.
 	 */
 	public BasicResource(HttpResponse response) throws IOException {
-		this(create(null, InputStreamEntity.class).copyFrom(response));
+		this(create(null, StreamEntity.class).copyFrom(response));
 	}
 
 	/**
diff --git a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/ReaderResource.java b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/ReaderResource.java
index 60210e1..6499663 100644
--- a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/ReaderResource.java
+++ b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/ReaderResource.java
@@ -26,9 +26,9 @@
 public class ReaderResource extends BasicResource {
 
 	/**
-	 * Creates a new {@link InputStreamResource} builder.
+	 * Creates a new {@link ReaderResource} builder.
 	 *
-	 * @return A new {@link InputStreamResource} builder.
+	 * @return A new {@link ReaderResource} builder.
 	 */
 	public static HttpResourceBuilder<ReaderResource> create() {
 		return new HttpResourceBuilder<>(ReaderResource.class, ReaderEntity.class);
diff --git a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/InputStreamResource.java b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/StreamResource.java
similarity index 76%
rename from juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/InputStreamResource.java
rename to juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/StreamResource.java
index 69fbce6..569894a 100644
--- a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/InputStreamResource.java
+++ b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/StreamResource.java
@@ -23,15 +23,15 @@
  * 	<li class='extlink'>{@source}
  * </ul>
  */
-public class InputStreamResource extends BasicResource {
+public class StreamResource extends BasicResource {
 
 	/**
-	 * Creates a new {@link InputStreamResource} builder.
+	 * Creates a new {@link StreamResource} builder.
 	 *
-	 * @return A new {@link InputStreamResource} builder.
+	 * @return A new {@link StreamResource} builder.
 	 */
-	public static HttpResourceBuilder<InputStreamResource> create() {
-		return new HttpResourceBuilder<>(InputStreamResource.class, InputStreamEntity.class);
+	public static HttpResourceBuilder<StreamResource> create() {
+		return new HttpResourceBuilder<>(StreamResource.class, StreamEntity.class);
 	}
 
 	/**
@@ -39,17 +39,17 @@
 	 *
 	 * @param builder The resource builder.
 	 */
-	public InputStreamResource(HttpResourceBuilder<?> builder) {
+	public StreamResource(HttpResourceBuilder<?> builder) {
 		super(builder);
 	}
 
 	/**
-	 * Creates a new {@link InputStreamResource} builder initialized with the contents of this entity.
+	 * Creates a new {@link StreamResource} builder initialized with the contents of this entity.
 	 *
-	 * @return A new {@link InputStreamResource} builder initialized with the contents of this entity.
+	 * @return A new {@link StreamResource} builder initialized with the contents of this entity.
 	 */
 	@Override /* BasicResource */
-	public HttpResourceBuilder<InputStreamResource> copy() {
+	public HttpResourceBuilder<StreamResource> copy() {
 		return new HttpResourceBuilder<>(this);
 	}
 }
diff --git a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/StringResource.java b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/StringResource.java
index b86c881..582df47 100644
--- a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/StringResource.java
+++ b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/StringResource.java
@@ -25,9 +25,9 @@
 public class StringResource extends BasicResource {
 
 	/**
-	 * Creates a new {@link InputStreamResource} builder.
+	 * Creates a new {@link StringResource} builder.
 	 *
-	 * @return A new {@link InputStreamResource} builder.
+	 * @return A new {@link StringResource} builder.
 	 */
 	public static HttpResourceBuilder<StringResource> create() {
 		return new HttpResourceBuilder<>(StringResource.class, StringEntity.class);
diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
index bf9c24c..45678fa 100644
--- a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
+++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
@@ -1597,8 +1597,8 @@
 		}
 
 		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
-		public Builder rootUri(Object value) {
-			super.rootUri(value);
+		public Builder rootUrl(Object value) {
+			super.rootUrl(value);
 			return this;
 		}
 
@@ -1887,7 +1887,7 @@
 			rootUrl = rootUrl + emptyIfNull(contextPath) + emptyIfNull(servletPath);
 
 			builder.servletPath = servletPath;
-			builder.rootUri(rootUrl);
+			builder.rootUrl(rootUrl);
 			return builder;
 		} catch (Exception e) {
 			throw new ConfigException(e, "Could not initialize MockRestClient");
diff --git a/juneau-utest/src/test/java/org/apache/juneau/http/SerializedHttpEntity_Test.java b/juneau-utest/src/test/java/org/apache/juneau/http/SerializedHttpEntity_Test.java
index ff3e61c..9f5f395 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/http/SerializedHttpEntity_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/http/SerializedHttpEntity_Test.java
@@ -118,6 +118,6 @@
 	}
 
 	private RestClient checkHeaderClient(String header) {
-		return MockRestClient.create(A.class).rootUri("http://localhost/checkHeader").simpleJson().header("Check",header).ignoreErrors().build();
+		return MockRestClient.create(A.class).rootUrl("http://localhost/checkHeader").simpleJson().header("Check",header).ignoreErrors().build();
 	}
 }
diff --git a/juneau-utest/src/test/java/org/apache/juneau/http/remote/Remote_Test.java b/juneau-utest/src/test/java/org/apache/juneau/http/remote/Remote_Test.java
index 2f2655e..aae253a 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/http/remote/Remote_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/http/remote/Remote_Test.java
@@ -475,7 +475,7 @@
 
 	@Test
 	public void e01_rrpcBasic() throws Exception {
-		E1 x = client(E.class).rootUri("http://localhost/proxy").build().getRrpcInterface(E1.class);
+		E1 x = client(E.class).rootUrl("http://localhost/proxy").build().getRrpcInterface(E1.class);
 
 		assertEquals("foo",x.echo("foo"));
 	}
@@ -487,7 +487,7 @@
 
 	@Test
 	public void e03_rrpc_noRestUrl() throws Exception {
-		E3 x = client(E.class).rootUri("http://localhost").build().getRrpcInterface(E3.class);
+		E3 x = client(E.class).rootUrl("http://localhost").build().getRrpcInterface(E3.class);
 		assertEquals("foo",x.echo("foo"));
 	}
 
@@ -498,7 +498,7 @@
 
 	@Test
 	public void e04_rrpc_fullPathOnRemotePath() throws Exception {
-		E4 x = client(E.class).rootUri("").build().getRrpcInterface(E4.class);
+		E4 x = client(E.class).rootUrl("").build().getRrpcInterface(E4.class);
 		assertEquals("foo",x.echo("foo"));
 	}
 
@@ -742,6 +742,6 @@
 	}
 
 	private static <T> T plainRemote(Class<?> c, Class<T> r, String rootUrl) {
-		return MockRestClient.create(c).rootUri(rootUrl).build().getRemote(r);
+		return MockRestClient.create(c).rootUrl(rootUrl).build().getRemote(r);
 	}
 }
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_RestClient_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_RestClient_Test.java
index 83a65f6..f0e4c28 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_RestClient_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_RestClient_Test.java
@@ -476,8 +476,8 @@
 
 	@Test
 	public void a13_toString() throws Exception {
-		String s = client().rootUri("https://foo").build().toString();
-		assertTrue(s.contains("rootUri: 'https://foo'"));
+		String s = client().rootUrl("https://foo").build().toString();
+		assertTrue(s.contains("rootUrl: 'https://foo'"));
 	}
 
 	@Test