This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new 748b309  org.apache.juneau.http tests.
748b309 is described below

commit 748b309030c33324404d0d6c31ddee48be602225
Author: JamesBognar <[email protected]>
AuthorDate: Tue Jul 7 15:57:08 2020 -0400

    org.apache.juneau.http tests.
---
 .../main/java/org/apache/juneau/config/Config.java |   5 +-
 .../apache/juneau/BeanConfigAnnotationTest.java    |  12 +-
 .../java/org/apache/juneau/config/ConfigTest.java  |   2 +-
 .../org/apache/juneau/http/BasicHeaderTest.java    |  44 ------
 .../org/apache/juneau/http/BasicHeader_Test.java   | 173 +++++++++++++++++++++
 .../apache/juneau/http/BasicNameValuePairTest.java |  43 -----
 .../juneau/http/BasicNameValuePair_Test.java       | 142 +++++++++++++++++
 ...rSupplierTest.java => HeaderSupplier_Test.java} |  15 +-
 .../juneau/http/NameValuePairSupplierTest.java     |  49 ------
 ...erTest.java => NameValuePairSupplier_Test.java} |  75 +++++----
 .../src/main/java/org/apache/juneau/Context.java   |   6 +-
 .../src/main/java/org/apache/juneau/Session.java   |   6 +-
 .../main/java/org/apache/juneau/Streamable.java    |   6 +-
 .../src/main/java/org/apache/juneau/Writable.java  |   6 +-
 .../juneau/http/{header => }/BasicHeader.java      |  14 +-
 .../org/apache/juneau/http/BasicNameValuePair.java |  48 +++++-
 .../org/apache/juneau/http/HeaderSupplier.java     |  15 +-
 .../apache/juneau/http/NameValuePairSupplier.java  |   2 +-
 .../org/apache/juneau/http/ReaderResource.java     |   4 +-
 .../org/apache/juneau/http/SerializedHeader.java   |   2 +-
 .../apache/juneau/http/SerializedHttpEntity.java   |   1 -
 .../juneau/http/SerializedNameValuePair.java       |  22 +--
 .../org/apache/juneau/http/StreamResource.java     |   4 +-
 .../apache/juneau/http/header/AcceptCharset.java   |   1 -
 .../apache/juneau/http/header/AcceptEncoding.java  |   1 -
 .../apache/juneau/http/header/AcceptLanguage.java  |   1 -
 .../juneau/http/header/BasicCsvArrayHeader.java    |   1 +
 .../apache/juneau/http/header/BasicDateHeader.java |   1 +
 .../juneau/http/header/BasicIntegerHeader.java     |   1 +
 .../apache/juneau/http/header/BasicLongHeader.java |   1 +
 .../juneau/http/header/BasicStringHeader.java      |   1 +
 .../apache/juneau/http/header/BasicUriHeader.java  |   2 +
 .../juneau/http/{ => header}/EntityValidator.java  |   2 +-
 .../http/{ => header}/HeaderEntityValidator.java   |   2 +-
 .../org/apache/juneau/http/header/IfMatch.java     |   1 -
 .../org/apache/juneau/http/header/IfNoneMatch.java |   1 -
 .../org/apache/juneau/http/header/IfRange.java     |   1 -
 .../juneau/http/{ => header}/StringRange.java      |   3 +-
 .../java/org/apache/juneau/http/header/TE.java     |   1 -
 .../java/org/apache/juneau/svl/VarResolver.java    |   2 +-
 .../org/apache/juneau/utils/StringMessage.java     |   3 +-
 .../java/org/apache/juneau/utils/StringObject.java |   5 +-
 .../java/org/apache/juneau/utils/ZipFileList.java  |   5 +-
 .../09.juneau-rest-client/02.RequestHeaders.html   |   7 +
 .../03.RequestQueryParameters.html                 |   2 +
 .../09.juneau-rest-client/04.RequestFormData.html  |   2 +
 .../09.juneau-rest-client/05.RequestBody.html      |   3 +
 .../rest/client2/Remote_CommonInterfaces_Test.java |   4 +-
 .../apache/juneau/rest/client2/Remote_Test.java    |   1 -
 .../client2/RestClient_Response_Headers_Test.java  |   1 +
 .../rest/client2/RestClient_Response_Test.java     |   2 +-
 .../org/apache/juneau/rest/client2/RestClient.java |   4 +-
 .../apache/juneau/rest/client2/RestRequest.java    |   4 +-
 .../juneau/rest/client2/RestResponseHeader.java    |   1 +
 .../java/org/apache/juneau/rest/RestContext.java   |   2 +-
 55 files changed, 490 insertions(+), 275 deletions(-)

diff --git 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
index 194608e..4c08f4d 100644
--- 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
+++ 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
@@ -30,7 +30,6 @@ import org.apache.juneau.config.event.*;
 import org.apache.juneau.config.internal.*;
 import org.apache.juneau.config.store.*;
 import org.apache.juneau.config.vars.*;
-import org.apache.juneau.http.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
@@ -1908,8 +1907,8 @@ public final class Config extends Context implements 
ConfigEventListener, Writab
        }
 
        @Override /* Writable */
-       public MediaType getContentType() {
-               return MediaType.PLAIN;
+       public String getMediaType() {
+               return "text/plain";
        }
 
 
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/BeanConfigAnnotationTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/BeanConfigAnnotationTest.java
index b5ff38a..a504f53 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/BeanConfigAnnotationTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/BeanConfigAnnotationTest.java
@@ -243,14 +243,14 @@ public class BeanConfigAnnotationTest {
                check("true", bc.isIgnoreUnknownNullBeanProperties());
                check("", bc.getImplClasses());
                check("0", bc.getInitialDepth());
-               check(Locale.getDefault().toString(), bc.getLocale());
+               check(Locale.getDefault().toString(), bc.getDefaultLocale());
                check("100", bc.getMaxDepth());
-               check(null, bc.getMediaType());
+               check(null, bc.getDefaultMediaType());
                
check("java.lang,java.lang.annotation,java.lang.ref,java.lang.reflect,java.io,java.net",
 bc.getNotBeanPackagesNames());
                check("", bc.getSwaps());
                check("PropertyNamerDefault", bc.getPropertyNamer());
                check("false", bc.isSortProperties());
-               check(null, bc.getTimeZone());
+               check(null, bc.getDefaultTimeZone());
                check("false", bc.isUseEnumNames());
                check("true", bc.isUseInterfaceProxies());
                check("false", bc.isUseJavaBeanIntrospector());
@@ -295,14 +295,14 @@ public class BeanConfigAnnotationTest {
                check("true", bc.isIgnoreUnknownNullBeanProperties());
                check("", bc.getImplClasses());
                check("0", bc.getInitialDepth());
-               check(Locale.getDefault().toString(), bc.getLocale());
+               check(Locale.getDefault().toString(), bc.getDefaultLocale());
                check("100", bc.getMaxDepth());
-               check(null, bc.getMediaType());
+               check(null, bc.getDefaultMediaType());
                
check("java.lang,java.lang.annotation,java.lang.ref,java.lang.reflect,java.io,java.net",
 bc.getNotBeanPackagesNames());
                check("", bc.getSwaps());
                check("PropertyNamerDefault", bc.getPropertyNamer());
                check("false", bc.isSortProperties());
-               check(null, bc.getTimeZone());
+               check(null, bc.getDefaultTimeZone());
                check("false", bc.isUseEnumNames());
                check("true", bc.isUseInterfaceProxies());
                check("false", bc.isUseJavaBeanIntrospector());
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/config/ConfigTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/config/ConfigTest.java
index a2e015a..96f6d4f 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/config/ConfigTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/config/ConfigTest.java
@@ -1445,7 +1445,7 @@ public class ConfigTest {
                cf.writeTo(sw);
                assertString(sw).replaceAll("\\r?\\n", "|").is("a = b|");
 
-               assertEquals("text/plain", cf.getContentType().toString());
+               assertEquals("text/plain", cf.getMediaType().toString());
        }
 
 
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicHeaderTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicHeaderTest.java
deleted file mode 100644
index 78f54d3..0000000
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicHeaderTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// 
***************************************************************************************************************************
-// * 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.http;
-
-import static org.junit.Assert.*;
-import static org.junit.runners.MethodSorters.*;
-
-import org.apache.juneau.http.header.*;
-import org.junit.*;
-
-@FixMethodOrder(NAME_ASCENDING)
-public class BasicHeaderTest {
-
-       @Test
-       public void a01_of_pairString() {
-               BasicHeader h = BasicHeader.ofPair("Foo:bar");
-               assertEquals("Foo", h.getName());
-               assertEquals("bar", h.getValue());
-
-               h = BasicHeader.ofPair(" Foo : bar ");
-               assertEquals("Foo", h.getName());
-               assertEquals("bar", h.getValue());
-
-               h = BasicHeader.ofPair(" Foo : bar : baz ");
-               assertEquals("Foo", h.getName());
-               assertEquals("bar : baz", h.getValue());
-
-               h = BasicHeader.ofPair("Foo");
-               assertEquals("Foo", h.getName());
-               assertEquals("", h.getValue());
-
-               assertNull(BasicHeader.ofPair((String)null));
-       }
-}
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicHeader_Test.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicHeader_Test.java
new file mode 100644
index 0000000..92ed4a0
--- /dev/null
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicHeader_Test.java
@@ -0,0 +1,173 @@
+// 
***************************************************************************************************************************
+// * 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.http;
+
+import static org.apache.juneau.assertions.Assertions.*;
+import static org.junit.Assert.*;
+import static org.junit.runners.MethodSorters.*;
+
+import java.util.*;
+import java.util.function.*;
+
+import org.apache.http.*;
+import org.apache.juneau.collections.*;
+import org.apache.juneau.utils.*;
+import org.junit.*;
+
+@FixMethodOrder(NAME_ASCENDING)
+public class BasicHeader_Test {
+
+       @Test
+       public void a01_ofPair() {
+               BasicHeader x = BasicHeader.ofPair("Foo:bar");
+               assertEquals("Foo", x.getName());
+               assertEquals("bar", x.getValue());
+
+               x = BasicHeader.ofPair(" Foo : bar ");
+               assertEquals("Foo", x.getName());
+               assertEquals("bar", x.getValue());
+
+               x = BasicHeader.ofPair(" Foo : bar : baz ");
+               assertEquals("Foo", x.getName());
+               assertEquals("bar : baz", x.getValue());
+
+               x = BasicHeader.ofPair("Foo");
+               assertEquals("Foo", x.getName());
+               assertEquals("", x.getValue());
+
+               assertNull(BasicHeader.ofPair((String)null));
+       }
+
+       @Test
+       public void a02_of() {
+               BasicHeader x;
+               x = header("Foo","bar");
+               assertObject(x).json().is("'Foo: bar'");
+               x = header("Foo",()->"bar");
+               assertObject(x).json().is("'Foo: bar'");
+       }
+
+       @Test
+       public void a03_cast() {
+               BasicNameValuePair x1 = pair("X1","1");
+               SerializedNameValuePairBuilder x2 = 
SerializedNameValuePair.create().name("X2").value("2");
+               Header x3 = header("X3","3");
+               SerializedHeaderBuilder x4 = 
SerializedHeader.create().name("X4").value("4");
+               Map.Entry<String,Object> x5 = 
AMap.of("X5",(Object)"5").entrySet().iterator().next();
+               org.apache.http.message.BasicNameValuePair x6 = new 
org.apache.http.message.BasicNameValuePair("X6","6");
+               NameValuePairable x7 = new NameValuePairable() {
+                       @Override
+                       public NameValuePair asNameValuePair() {
+                               return pair("X7","7");
+                       }
+               };
+               Headerable x8 = new Headerable() {
+                       @Override
+                       public Header asHeader() {
+                               return header("X8","8");
+                       }
+               };
+
+               
assertObject(BasicHeader.cast(x1)).isType(Header.class).json().is("'X1: 1'");
+               
assertObject(BasicHeader.cast(x2)).isType(Header.class).json().is("'X2: 2'");
+               
assertObject(BasicHeader.cast(x3)).isType(Header.class).json().is("'X3: 3'");
+               
assertObject(BasicHeader.cast(x4)).isType(Header.class).json().is("'X4: 4'");
+               
assertObject(BasicHeader.cast(x5)).isType(Header.class).json().is("'X5: 5'");
+               
assertObject(BasicHeader.cast(x6)).isType(Header.class).json().is("'X6: 6'");
+               
assertObject(BasicHeader.cast(x7)).isType(Header.class).json().is("'X7: 7'");
+               
assertObject(BasicHeader.cast(x8)).isType(Header.class).json().is("'X8: 8'");
+
+               assertThrown(()->BasicHeader.cast("X")).is("Object of type 
java.lang.String could not be converted to a Header.");
+               assertThrown(()->BasicHeader.cast(null)).is("Object of type 
null could not be converted to a Header.");
+
+               assertTrue(BasicHeader.canCast(x1));
+               assertTrue(BasicHeader.canCast(x2));
+               assertTrue(BasicHeader.canCast(x3));
+               assertTrue(BasicHeader.canCast(x4));
+               assertTrue(BasicHeader.canCast(x5));
+               assertTrue(BasicHeader.canCast(x6));
+               assertTrue(BasicHeader.canCast(x7));
+               assertTrue(BasicHeader.canCast(x8));
+
+               assertFalse(BasicHeader.canCast("X"));
+               assertFalse(BasicHeader.canCast(null));
+       }
+
+       @Test
+       public void a05_assertions() {
+               BasicHeader x = header("X1","1");
+               x.assertName().is("X1").assertValue().is("1");
+       }
+
+       @Test
+       public void a06_hashSet() {
+               Set<BasicHeader> x = 
ASet.of(header("X1","1"),header("X1","1"),header("X1","2"),header("X2","1"),header("X2","2"),header("X3","3"),null);
+               assertObject(x).json().stderr().is("['X1: 1','X1: 2','X2: 
1','X2: 2','X3: 3',null]");
+               assertFalse(header("X1","1").equals(null));
+               assertFalse(header("X1","1").equals(header("X1","2")));
+               assertFalse(header("X1","1").equals(header("X2","1")));
+               assertTrue(header("X1","1").equals(header("X1","1")));
+       }
+
+       @Test
+       public void a07_eqIC() {
+               BasicHeader x = header("X1","1");
+               assertTrue(x.eqIC("1"));
+               assertFalse(x.eqIC("2"));
+               assertFalse(x.eqIC(null));
+       }
+
+       @Test
+       public void a08_getElements() {
+               Mutable<Integer> m = Mutable.of(1);
+               Header h1 = header("X1","1");
+               Header h2 = header("X2",()->m);
+               Header h3 = header("X3",null);
+
+               HeaderElement[] x;
+
+               x = h1.getElements();
+               assertEquals(1, x.length);
+               assertEquals("1", x[0].getName());
+               x = h1.getElements();
+               assertEquals(1, x.length);
+               assertEquals("1", x[0].getName());
+
+               x = h2.getElements();
+               assertEquals(1, x.length);
+               assertEquals("1", x[0].getName());
+               m.set(2);
+               x = h2.getElements();
+               assertEquals(1, x.length);
+               assertEquals("2", x[0].getName());
+
+               x = h3.getElements();
+               assertEquals(0, x.length);
+       }
+
+       
//------------------------------------------------------------------------------------------------------------------
+       // Utility methods
+       
//------------------------------------------------------------------------------------------------------------------
+
+       private BasicHeader header(String name, Object val) {
+               return BasicHeader.of(name, val);
+       }
+
+       private BasicHeader header(String name, Supplier<?> val) {
+               return BasicHeader.of(name, val);
+       }
+
+       private BasicNameValuePair pair(String name, Object val) {
+               return BasicNameValuePair.of(name, val);
+       }
+}
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicNameValuePairTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicNameValuePairTest.java
deleted file mode 100644
index e8d6b73..0000000
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicNameValuePairTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-// 
***************************************************************************************************************************
-// * 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.http;
-
-import static org.junit.Assert.*;
-import static org.junit.runners.MethodSorters.*;
-
-import org.junit.*;
-
-@FixMethodOrder(NAME_ASCENDING)
-public class BasicNameValuePairTest {
-
-       @Test
-       public void a01_of_pairString() {
-               BasicNameValuePair h = BasicNameValuePair.ofPair("Foo:bar");
-               assertEquals("Foo", h.getName());
-               assertEquals("bar", h.getValue());
-
-               h = BasicNameValuePair.ofPair(" Foo : bar ");
-               assertEquals("Foo", h.getName());
-               assertEquals("bar", h.getValue());
-
-               h = BasicNameValuePair.ofPair(" Foo : bar : baz ");
-               assertEquals("Foo", h.getName());
-               assertEquals("bar : baz", h.getValue());
-
-               h = BasicNameValuePair.ofPair("Foo");
-               assertEquals("Foo", h.getName());
-               assertEquals("", h.getValue());
-
-               assertNull(BasicNameValuePair.ofPair((String)null));
-       }
-}
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicNameValuePair_Test.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicNameValuePair_Test.java
new file mode 100644
index 0000000..f64173a
--- /dev/null
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicNameValuePair_Test.java
@@ -0,0 +1,142 @@
+// 
***************************************************************************************************************************
+// * 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.http;
+
+import static org.apache.juneau.assertions.Assertions.*;
+import static org.junit.Assert.*;
+import static org.junit.runners.MethodSorters.*;
+
+import java.util.*;
+import java.util.function.*;
+
+import org.apache.http.*;
+import org.apache.juneau.collections.*;
+import org.junit.*;
+
+@FixMethodOrder(NAME_ASCENDING)
+public class BasicNameValuePair_Test {
+
+       @Test
+       public void a01_ofPair() {
+               BasicNameValuePair x = BasicNameValuePair.ofPair("Foo:bar");
+               assertEquals("Foo", x.getName());
+               assertEquals("bar", x.getValue());
+
+               x = BasicNameValuePair.ofPair(" Foo : bar ");
+               assertEquals("Foo", x.getName());
+               assertEquals("bar", x.getValue());
+
+               x = BasicNameValuePair.ofPair(" Foo : bar : baz ");
+               assertEquals("Foo", x.getName());
+               assertEquals("bar : baz", x.getValue());
+
+               x = BasicNameValuePair.ofPair("Foo");
+               assertEquals("Foo", x.getName());
+               assertEquals("", x.getValue());
+
+               assertNull(BasicNameValuePair.ofPair((String)null));
+       }
+
+       @Test
+       public void a02_of() {
+               BasicNameValuePair x;
+               x = pair("Foo","bar");
+               assertObject(x).json().is("'Foo=bar'");
+               x = pair("Foo",()->"bar");
+               assertObject(x).json().is("'Foo=bar'");
+       }
+
+       @Test
+       public void a03_cast() {
+               BasicNameValuePair x1 = pair("X1","1");
+               SerializedNameValuePairBuilder x2 = 
SerializedNameValuePair.create().name("X2").value("2");
+               Header x3 = header("X3","3");
+               SerializedHeaderBuilder x4 = 
SerializedHeader.create().name("X4").value("4");
+               Map.Entry<String,Object> x5 = 
AMap.of("X5",(Object)"5").entrySet().iterator().next();
+               org.apache.http.message.BasicNameValuePair x6 = new 
org.apache.http.message.BasicNameValuePair("X6","6");
+               NameValuePairable x7 = new NameValuePairable() {
+                       @Override
+                       public NameValuePair asNameValuePair() {
+                               return pair("X7","7");
+                       }
+               };
+               Headerable x8 = new Headerable() {
+                       @Override
+                       public Header asHeader() {
+                               return header("X8","8");
+                       }
+               };
+
+               
assertObject(BasicNameValuePair.cast(x1)).isType(NameValuePair.class).json().is("'X1=1'");
+               
assertObject(BasicNameValuePair.cast(x2)).isType(NameValuePair.class).json().is("'X2=2'");
+               
assertObject(BasicNameValuePair.cast(x3)).isType(NameValuePair.class).json().is("'X3:
 3'");
+               
assertObject(BasicNameValuePair.cast(x4)).isType(NameValuePair.class).json().is("'X4:
 4'");
+               
assertObject(BasicNameValuePair.cast(x5)).isType(NameValuePair.class).json().is("'X5=5'");
+               
assertObject(BasicNameValuePair.cast(x6)).isType(NameValuePair.class).json().is("{name:'X6',value:'6'}");
+               
assertObject(BasicNameValuePair.cast(x7)).isType(NameValuePair.class).json().is("'X7=7'");
+               
assertObject(BasicNameValuePair.cast(x8)).isType(NameValuePair.class).json().is("'X8:
 8'");
+
+               assertThrown(()->BasicNameValuePair.cast("X")).is("Object of 
type java.lang.String could not be converted to a NameValuePair.");
+               assertThrown(()->BasicNameValuePair.cast(null)).is("Object of 
type null could not be converted to a NameValuePair.");
+
+               assertTrue(BasicNameValuePair.canCast(x1));
+               assertTrue(BasicNameValuePair.canCast(x2));
+               assertTrue(BasicNameValuePair.canCast(x3));
+               assertTrue(BasicNameValuePair.canCast(x4));
+               assertTrue(BasicNameValuePair.canCast(x5));
+               assertTrue(BasicNameValuePair.canCast(x6));
+               assertTrue(BasicNameValuePair.canCast(x7));
+               assertTrue(BasicNameValuePair.canCast(x8));
+
+               assertFalse(BasicNameValuePair.canCast("X"));
+               assertFalse(BasicNameValuePair.canCast(null));
+       }
+
+       @Test
+       public void a04_asHeader() {
+               BasicNameValuePair x = pair("X1","1");
+               assertObject(x.asHeader()).isType(Header.class).json().is("'X1: 
1'");
+       }
+
+       @Test
+       public void a05_assertions() {
+               BasicNameValuePair x = pair("X1","1");
+               x.assertName().is("X1").assertValue().is("1");
+       }
+
+       @Test
+       public void a06_hashSet() {
+               Set<BasicNameValuePair> x = 
ASet.of(pair("X1","1"),pair("X1","1"),pair("X1","2"),pair("X2","1"),pair("X2","2"),pair("X3","3"),null);
+               
assertObject(x).json().stderr().is("['X1=1','X1=2','X2=1','X2=2','X3=3',null]");
+               assertFalse(pair("X1","1").equals(null));
+               assertFalse(pair("X1","1").equals(pair("X1","2")));
+               assertFalse(pair("X1","1").equals(pair("X2","1")));
+               assertTrue(pair("X1","1").equals(pair("X1","1")));
+       }
+
+       
//------------------------------------------------------------------------------------------------------------------
+       // Utility methods
+       
//------------------------------------------------------------------------------------------------------------------
+
+       private BasicHeader header(String name, Object val) {
+               return BasicHeader.of(name, val);
+       }
+
+       private BasicNameValuePair pair(String name, Supplier<?> val) {
+               return BasicNameValuePair.of(name, val);
+       }
+
+       private BasicNameValuePair pair(String name, Object val) {
+               return BasicNameValuePair.of(name, val);
+       }
+}
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplierTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplier_Test.java
similarity index 91%
copy from 
juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplierTest.java
copy to 
juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplier_Test.java
index 1bf6e58..c0c63a2 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplierTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplier_Test.java
@@ -17,13 +17,12 @@ import static org.junit.runners.MethodSorters.*;
 
 import org.apache.http.*;
 import org.apache.juneau.collections.*;
-import org.apache.juneau.http.header.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.oapi.*;
 import org.junit.*;
 
 @FixMethodOrder(NAME_ASCENDING)
-public class HeaderSupplierTest {
+public class HeaderSupplier_Test {
 
        @Test
        public void a01_basic() {
@@ -80,23 +79,23 @@ public class HeaderSupplierTest {
                x.add("X5","bar",openApiSession(),null,false);
                x.add("X6","$S{"+pname+"}",openApiSession(),null,false);
 
-               
assertString(x.toString()).is("X1=bar&X2=y&X3=bar&X4=y&X5=bar&X6=y");
+               assertString(x.toString()).stderr().is("['X1: bar','X2: y','X3: 
bar','X4: y','X5: bar','X6: y']");
 
                System.setProperty(pname, "z");
 
-               
assertString(x.toString()).is("X1=bar&X2=z&X3=bar&X4=z&X5=bar&X6=z");
+               assertString(x.toString()).is("['X1: bar','X2: z','X3: 
bar','X4: z','X5: bar','X6: z']");
 
                System.clearProperty(pname);
        }
 
        @Test
        public void a04_toArrayMethods() {
-               Header[] x = HeaderSupplier
+               HeaderSupplier x = HeaderSupplier
                        .create()
                        .add("X1","1")
-                       .add(HeaderSupplier.ofPairs("X2","2"))
-                       .toArray();
-               assertObject(x).json().is("['X1: 1','X2: 2']");
+                       .add(HeaderSupplier.ofPairs("X2","2"));
+               assertObject(x.toArray()).json().is("['X1: 1','X2: 2']");
+               assertObject(x.toArray(new Header[0])).json().is("['X1: 1','X2: 
2']");
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/NameValuePairSupplierTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/NameValuePairSupplierTest.java
deleted file mode 100644
index 00ce76a..0000000
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/NameValuePairSupplierTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// 
***************************************************************************************************************************
-// * 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.http;
-
-import static org.apache.juneau.assertions.Assertions.*;
-import static org.junit.runners.MethodSorters.*;
-
-import org.apache.http.*;
-import org.junit.*;
-
-@FixMethodOrder(NAME_ASCENDING)
-public class NameValuePairSupplierTest {
-
-       @Test
-       public void a01_basic() {
-               NameValuePairSupplier h = NameValuePairSupplier.of();
-               assertObject(h.iterator()).json().is("[]");
-               h.add(header("Foo","bar"));
-               
assertObject(h.iterator()).json().is("[{name:'Foo',value:'bar'}]");
-               h.add(header("Foo","baz"));
-               
assertObject(h.iterator()).json().is("[{name:'Foo',value:'bar'},{name:'Foo',value:'baz'}]");
-               h.add(NameValuePairSupplier.of());
-               
assertObject(h.iterator()).json().is("[{name:'Foo',value:'bar'},{name:'Foo',value:'baz'}]");
-               h.add(NameValuePairSupplier.of(header("Foo","qux")));
-               
assertObject(h.iterator()).json().is("[{name:'Foo',value:'bar'},{name:'Foo',value:'baz'},{name:'Foo',value:'qux'}]");
-               h.add(NameValuePairSupplier.of(header("Foo","q2x"), 
header("Foo","q3x")));
-               
assertObject(h.iterator()).json().is("[{name:'Foo',value:'bar'},{name:'Foo',value:'baz'},{name:'Foo',value:'qux'},{name:'Foo',value:'q2x'},{name:'Foo',value:'q3x'}]");
-               
h.add(NameValuePairSupplier.of(NameValuePairSupplier.of(header("Foo","q4x"),header("Foo","q5x"))));
-               
assertObject(h.iterator()).json().is("[{name:'Foo',value:'bar'},{name:'Foo',value:'baz'},{name:'Foo',value:'qux'},{name:'Foo',value:'q2x'},{name:'Foo',value:'q3x'},{name:'Foo',value:'q4x'},{name:'Foo',value:'q5x'}]");
-               h.add((NameValuePair)null);
-               
assertObject(h.iterator()).json().is("[{name:'Foo',value:'bar'},{name:'Foo',value:'baz'},{name:'Foo',value:'qux'},{name:'Foo',value:'q2x'},{name:'Foo',value:'q3x'},{name:'Foo',value:'q4x'},{name:'Foo',value:'q5x'}]");
-               h.add((NameValuePairSupplier)null);
-               
assertObject(h.iterator()).json().is("[{name:'Foo',value:'bar'},{name:'Foo',value:'baz'},{name:'Foo',value:'qux'},{name:'Foo',value:'q2x'},{name:'Foo',value:'q3x'},{name:'Foo',value:'q4x'},{name:'Foo',value:'q5x'}]");
-       }
-
-       private static NameValuePair header(String name, Object val) {
-               return BasicNameValuePair.of(name, val);
-       }
-}
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplierTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/NameValuePairSupplier_Test.java
similarity index 52%
rename from 
juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplierTest.java
rename to 
juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/NameValuePairSupplier_Test.java
index 1bf6e58..a4b7abd 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplierTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/NameValuePairSupplier_Test.java
@@ -17,70 +17,69 @@ import static org.junit.runners.MethodSorters.*;
 
 import org.apache.http.*;
 import org.apache.juneau.collections.*;
-import org.apache.juneau.http.header.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.oapi.*;
 import org.junit.*;
 
 @FixMethodOrder(NAME_ASCENDING)
-public class HeaderSupplierTest {
+public class NameValuePairSupplier_Test {
 
        @Test
        public void a01_basic() {
-               HeaderSupplier x = HeaderSupplier.of();
+               NameValuePairSupplier x = NameValuePairSupplier.of();
 
                assertObject(x.iterator()).json().is("[]");
-               x.add(header("Foo","bar"));
-               assertObject(x.iterator()).json().is("['Foo: bar']");
-               x.add(header("Foo","baz"));
-               assertObject(x.iterator()).json().is("['Foo: bar','Foo: baz']");
-               x.add(HeaderSupplier.of());
-               assertObject(x.iterator()).json().is("['Foo: bar','Foo: baz']");
-               x.add(HeaderSupplier.of(header("Foo","qux")));
-               assertObject(x.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux']");
-               x.add(HeaderSupplier.of(header("Foo","q2x"), 
header("Foo","q3x")));
-               assertObject(x.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: q2x','Foo: q3x']");
-               
x.add(HeaderSupplier.of(HeaderSupplier.of(header("Foo","q4x"),header("Foo","q5x"))));
-               assertObject(x.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: q2x','Foo: q3x','Foo: q4x','Foo: q5x']");
+               x.add(pair("Foo","bar"));
+               assertObject(x.iterator()).json().is("['Foo=bar']");
+               x.add(pair("Foo","baz"));
+               assertObject(x.iterator()).json().is("['Foo=bar','Foo=baz']");
+               x.add(NameValuePairSupplier.of());
+               assertObject(x.iterator()).json().is("['Foo=bar','Foo=baz']");
+               x.add(NameValuePairSupplier.of(pair("Foo","qux")));
+               
assertObject(x.iterator()).json().is("['Foo=bar','Foo=baz','Foo=qux']");
+               x.add(NameValuePairSupplier.of(pair("Foo","q2x"), 
pair("Foo","q3x")));
+               
assertObject(x.iterator()).json().is("['Foo=bar','Foo=baz','Foo=qux','Foo=q2x','Foo=q3x']");
+               
x.add(NameValuePairSupplier.of(NameValuePairSupplier.of(pair("Foo","q4x"),pair("Foo","q5x"))));
+               
assertObject(x.iterator()).json().is("['Foo=bar','Foo=baz','Foo=qux','Foo=q2x','Foo=q3x','Foo=q4x','Foo=q5x']");
                x.add((Header)null);
-               assertObject(x.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: q2x','Foo: q3x','Foo: q4x','Foo: q5x']");
-               x.add((HeaderSupplier)null);
-               assertObject(x.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: q2x','Foo: q3x','Foo: q4x','Foo: q5x']");
+               
assertObject(x.iterator()).json().is("['Foo=bar','Foo=baz','Foo=qux','Foo=q2x','Foo=q3x','Foo=q4x','Foo=q5x']");
+               x.add((NameValuePairSupplier)null);
+               
assertObject(x.iterator()).json().is("['Foo=bar','Foo=baz','Foo=qux','Foo=q2x','Foo=q3x','Foo=q4x','Foo=q5x']");
        }
 
        @Test
        public void a02_creators() {
-               HeaderSupplier x;
+               NameValuePairSupplier x;
 
-               x = HeaderSupplier.of(header("Foo","bar"), header("Foo","baz"), 
null);
-               assertObject(x.iterator()).json().is("['Foo: bar','Foo: baz']");
+               x = NameValuePairSupplier.of(pair("Foo","bar"), 
pair("Foo","baz"), null);
+               assertObject(x.iterator()).json().is("['Foo=bar','Foo=baz']");
 
-               x = HeaderSupplier.of(AList.of(header("Foo","bar"), 
header("Foo","baz"), null));
-               assertObject(x.iterator()).json().is("['Foo: bar','Foo: baz']");
+               x = NameValuePairSupplier.of(AList.of(pair("Foo","bar"), 
pair("Foo","baz"), null));
+               assertObject(x.iterator()).json().is("['Foo=bar','Foo=baz']");
 
-               x = HeaderSupplier.ofPairs("Foo","bar","Foo","baz");
-               assertObject(x.iterator()).json().is("['Foo: bar','Foo: baz']");
+               x = NameValuePairSupplier.ofPairs("Foo","bar","Foo","baz");
+               assertObject(x.iterator()).json().is("['Foo=bar','Foo=baz']");
 
-               assertThrown(()->HeaderSupplier.ofPairs("Foo")).is("Odd number 
of parameters passed into HeaderSupplier.ofPairs()");
+               assertThrown(()->NameValuePairSupplier.ofPairs("Foo")).is("Odd 
number of parameters passed into NameValuePairSupplier.ofPairs()");
 
-               assertThrown(()->HeaderSupplier.of("Foo")).is("Invalid type 
passed to HeaderSupplier.of(): java.lang.String");
+               assertThrown(()->NameValuePairSupplier.of("Foo")).is("Invalid 
type passed to NameValuePairSupplier.of(): java.lang.String");
        }
 
        @Test
        public void a03_addMethods() {
-               String pname = "HeaderSupplierTest.x";
+               String pname = "NameValuePairSupplierTest.x";
 
-               HeaderSupplier x = HeaderSupplier.create().resolving();
+               NameValuePairSupplier x = 
NameValuePairSupplier.create().resolving();
                System.setProperty(pname, "y");
 
                x.add("X1","bar");
                x.add("X2","$S{"+pname+"}");
                x.add("X3","bar");
                x.add("X4",()->"$S{"+pname+"}");
-               x.add("X5","bar",openApiSession(),null,false);
-               x.add("X6","$S{"+pname+"}",openApiSession(),null,false);
+               
x.add("X5","bar",HttpPartType.QUERY,openApiSession(),null,false);
+               
x.add("X6","$S{"+pname+"}",HttpPartType.QUERY,openApiSession(),null,false);
 
-               
assertString(x.toString()).is("X1=bar&X2=y&X3=bar&X4=y&X5=bar&X6=y");
+               
assertString(x.toString()).stderr().is("X1=bar&X2=y&X3=bar&X4=y&X5=bar&X6=y");
 
                System.setProperty(pname, "z");
 
@@ -91,20 +90,20 @@ public class HeaderSupplierTest {
 
        @Test
        public void a04_toArrayMethods() {
-               Header[] x = HeaderSupplier
+               NameValuePairSupplier x = NameValuePairSupplier
                        .create()
                        .add("X1","1")
-                       .add(HeaderSupplier.ofPairs("X2","2"))
-                       .toArray();
-               assertObject(x).json().is("['X1: 1','X2: 2']");
+                       .add(NameValuePairSupplier.ofPairs("X2","2"));
+               assertObject(x.toArray()).json().is("['X1=1','X2=2']");
+               assertObject(x.toArray(new 
NameValuePair[0])).json().is("['X1=1','X2=2']");
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
        // Utility methods
        
//-----------------------------------------------------------------------------------------------------------------
 
-       private static Header header(String name, Object val) {
-               return BasicHeader.of(name, val);
+       private static NameValuePair pair(String name, Object val) {
+               return BasicNameValuePair.of(name, val);
        }
 
        private static HttpPartSerializerSession openApiSession() {
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
index 2996347..2fd3b90 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
@@ -842,7 +842,7 @@ public abstract class Context {
         * @return
         *      The default locale for serializer and parser sessions.
         */
-       protected final Locale getLocale() {
+       protected final Locale getDefaultLocale() {
                return locale;
        }
 
@@ -853,7 +853,7 @@ public abstract class Context {
         * @return
         *      The default media type value for serializer and parser sessions.
         */
-       protected final MediaType getMediaType() {
+       protected final MediaType getDefaultMediaType() {
                return mediaType;
        }
 
@@ -864,7 +864,7 @@ public abstract class Context {
         * @return
         *      The default timezone for serializer and parser sessions.
         */
-       protected final TimeZone getTimeZone() {
+       protected final TimeZone getDefaultTimeZone() {
                return timeZone;
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java
index 3b3f1a1..9f5c373 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java
@@ -56,9 +56,9 @@ public abstract class Session {
        protected Session(Context ctx, SessionArgs args) {
                this.properties = args.properties == null ? OMap.EMPTY_MAP : 
args.properties;
                debug = getProperty(CONTEXT_debug, Boolean.class, 
ctx.isDebug());
-               locale = getProperty(CONTEXT_locale, Locale.class, 
ctx.getLocale());
-               timeZone = getProperty(CONTEXT_timeZone, TimeZone.class, 
ctx.getTimeZone());
-               mediaType = getProperty(CONTEXT_mediaType, MediaType.class, 
ctx.getMediaType());
+               locale = getProperty(CONTEXT_locale, Locale.class, 
ctx.getDefaultLocale());
+               timeZone = getProperty(CONTEXT_timeZone, TimeZone.class, 
ctx.getDefaultTimeZone());
+               mediaType = getProperty(CONTEXT_mediaType, MediaType.class, 
ctx.getDefaultMediaType());
        }
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Streamable.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Streamable.java
index 97a81d0..c6ae548 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Streamable.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Streamable.java
@@ -14,13 +14,11 @@ package org.apache.juneau;
 
 import java.io.*;
 
-import org.apache.juneau.http.*;
-
 /**
  * Interface that identifies that an object can be serialized directly to an 
output stream.
  *
  * <p>
- * Instances must identify the media type of the content by implementing the 
{@link #getContentType()} method.
+ * Instances must identify the media type of the content by implementing the 
{@link #getMediaType()} method.
  */
 public interface Streamable {
 
@@ -37,5 +35,5 @@ public interface Streamable {
         *
         * @return The media type, or <jk>null</jk> if the media type is not 
known.
         */
-       MediaType getContentType();
+       String getMediaType();
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Writable.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Writable.java
index 0a8744f..3ef14a0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Writable.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Writable.java
@@ -14,13 +14,11 @@ package org.apache.juneau;
 
 import java.io.*;
 
-import org.apache.juneau.http.*;
-
 /**
  * Interface that identifies that an object can be serialized directly to a 
writer.
  *
  * <p>
- * Instances must identify the media type of the content by implementing the 
{@link #getContentType()} method.
+ * Instances must identify the media type of the content by implementing the 
{@link #getMediaType()} method.
  */
 public interface Writable {
 
@@ -38,5 +36,5 @@ public interface Writable {
         *
         * @return The media type, or <jk>null</jk> if the media type is not 
known.
         */
-       MediaType getContentType();
+       String getMediaType();
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicHeader.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicHeader.java
similarity index 95%
rename from 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicHeader.java
rename to 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicHeader.java
index 33fed34..30b9985 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicHeader.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicHeader.java
@@ -10,7 +10,7 @@
 // * "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.http.header;
+package org.apache.juneau.http;
 
 import static org.apache.juneau.internal.StringUtils.*;
 import java.io.*;
@@ -22,10 +22,9 @@ import org.apache.http.message.*;
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.assertions.*;
-import org.apache.juneau.http.*;
-import org.apache.juneau.http.header.BasicHeader;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.reflect.*;
+import org.apache.juneau.svl.*;
 
 /**
  * Superclass of all headers defined in this package.
@@ -86,6 +85,9 @@ public class BasicHeader implements Header, Cloneable, 
Serializable {
         * <p>
         * Header value is re-evaluated on each call to {@link #getValue()}.
         *
+        * <p>
+        * Note that you can use {@link VarResolver#supplier(String)} to create 
headers with auto-resolving embedded SVL variables.
+        *
         * @param name The parameter name.
         * @param value
         *      The parameter value supplier.
@@ -183,7 +185,7 @@ public class BasicHeader implements Header, Cloneable, 
Serializable {
         * @return <jk>true</jk> if the specified value is the same.
         */
        protected boolean eqIC(String compare) {
-               return getValue().equalsIgnoreCase(compare);
+               return isEqualsIc(getValue(), compare);
        }
 
        /**
@@ -228,7 +230,9 @@ public class BasicHeader implements Header, Cloneable, 
Serializable {
 
        @Override /* Object */
        public boolean equals(Object o) {
-               return (o instanceof Header) && ObjectUtils.eq(this, (Header)o, 
(x,y)->isEquals(x.name, y.getName()) && isEquals(x.getValue(), y.getValue()));
+               if (! (o instanceof Header))
+                       return false;
+               return ObjectUtils.eq(this, (Header)o, (x,y)->isEquals(x.name, 
y.getName()) && isEquals(x.getValue(), y.getValue()));
        }
 
        @Override /* Object */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicNameValuePair.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicNameValuePair.java
index 5ebdf31..b47d3b0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicNameValuePair.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicNameValuePair.java
@@ -19,8 +19,11 @@ import java.util.function.*;
 
 import org.apache.http.*;
 import org.apache.juneau.*;
-import org.apache.juneau.http.header.*;
+import org.apache.juneau.annotation.*;
+import org.apache.juneau.assertions.*;
+import org.apache.juneau.internal.*;
 import org.apache.juneau.reflect.*;
+import org.apache.juneau.svl.*;
 
 /**
  * Subclass of {@link NameValuePair} for serializing POJOs as URL-encoded form 
post entries.
@@ -29,6 +32,7 @@ import org.apache.juneau.reflect.*;
  * The value is serialized using {@link Object#toString()} at the point of 
reading.  This allows the value to be modified
  * periodically by overriding the method to return different values.
  */
+@BeanIgnore
 public class BasicNameValuePair implements NameValuePair, Headerable {
        private String name;
        private Object value;
@@ -65,6 +69,9 @@ public class BasicNameValuePair implements NameValuePair, 
Headerable {
         * <p>
         * Value is re-evaluated on each call to {@link #getValue()}.
         *
+        * <p>
+        * Note that you can use {@link VarResolver#supplier(String)} to create 
pair values with auto-resolving embedded SVL variables.
+        *
         * @param name The parameter name.
         * @param value The parameter value supplier.
         * @return A new {@link BasicNameValuePair} object.
@@ -117,6 +124,24 @@ public class BasicNameValuePair implements NameValuePair, 
Headerable {
                this.value = value;
        }
 
+       /**
+        * Provides an object for performing assertions against the name of 
this pair.
+        *
+        * @return An object for performing assertions against the name of this 
pair.
+        */
+       public FluentStringAssertion<BasicNameValuePair> assertName() {
+               return new FluentStringAssertion<>(getName(), this);
+       }
+
+       /**
+        * Provides an object for performing assertions against the value of 
this pair.
+        *
+        * @return An object for performing assertions against the value of 
this pair.
+        */
+       public FluentStringAssertion<BasicNameValuePair> assertValue() {
+               return new FluentStringAssertion<>(getValue(), this);
+       }
+
        @Override /* Headerable */
        public BasicHeader asHeader() {
                return BasicHeader.of(name, value);
@@ -132,9 +157,26 @@ public class BasicNameValuePair implements NameValuePair, 
Headerable {
                return stringify(unwrap(value));
        }
 
+       @Override /* Object */
+       public boolean equals(Object o) {
+               if (! (o instanceof NameValuePair))
+                       return false;
+               return ObjectUtils.eq(this, (NameValuePair)o, 
(x,y)->isEquals(x.name, y.getName()) && isEquals(x.getValue(), y.getValue()));
+       }
+
+       @Override /* Object */
+       public int hashCode() {
+               return HashCode.create().add(name).add(value).get();
+       }
+
+       @Override /* Object */
+       public String toString() {
+               return urlEncode(getName()) + "=" + urlEncode(getValue());
+       }
+
        private Object unwrap(Object o) {
-               if (o instanceof Supplier)
-                       return ((Supplier<?>)o).get();
+               while (o instanceof Supplier)
+                       o = ((Supplier<?>)o).get();
                return o;
        }
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HeaderSupplier.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HeaderSupplier.java
index bbc0720..bdac4c5 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HeaderSupplier.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HeaderSupplier.java
@@ -21,9 +21,9 @@ import java.util.stream.*;
 
 import org.apache.http.*;
 import org.apache.juneau.*;
-import org.apache.juneau.http.header.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
+import org.apache.juneau.marshall.*;
 import org.apache.juneau.oapi.*;
 import org.apache.juneau.svl.*;
 
@@ -243,20 +243,11 @@ public class HeaderSupplier implements Iterable<Header> {
        }
 
        /**
-        * Returns this list as a URL-encoded custom query.
+        * Returns this list as a JSON list of strings.
         */
        @Override /* Object */
        public String toString() {
-               StringBuilder sb = new StringBuilder();
-               for (Header h : this) {
-                       String v = h.getValue();
-                       if (v != null) {
-                               if (sb.length() > 0)
-                                       sb.append("&");
-                               
sb.append(urlEncode(h.getName())).append('=').append(urlEncode(h.getValue()));
-                       }
-               }
-               return sb.toString();
+               return SimpleJson.DEFAULT.toString(toArray());
        }
 
        @Override
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/NameValuePairSupplier.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/NameValuePairSupplier.java
index 2367edd..eaed3d9 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/NameValuePairSupplier.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/NameValuePairSupplier.java
@@ -184,7 +184,7 @@ public class NameValuePairSupplier implements 
Iterable<NameValuePair> {
         * @return This object(for method chaining).
         */
        private NameValuePairSupplier addAll(Collection<NameValuePair> pairs) {
-               
this.pairs.addAll(pairs.stream().map(x->Collections.singleton(x)).collect(Collectors.toList()));
+               this.pairs.addAll(pairs.stream().filter(x->x != 
null).map(x->Collections.singleton(x)).collect(Collectors.toList()));
                return this;
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ReaderResource.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ReaderResource.java
index f2457b6..9b16e31 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ReaderResource.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ReaderResource.java
@@ -124,8 +124,8 @@ public class ReaderResource implements Writable {
 
        @ResponseHeader("Content-Type")
        @Override /* Writeable */
-       public MediaType getContentType() {
-               return mediaType;
+       public String getMediaType() {
+               return mediaType == null ? null : mediaType.toString();
        }
 
        @Override /* Object */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/SerializedHeader.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/SerializedHeader.java
index ac68273..bd4ee05 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/SerializedHeader.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/SerializedHeader.java
@@ -95,7 +95,7 @@ public class SerializedHeader extends BasicStringHeader 
implements NameValuePair
                        }
                        if (isEmpty(v) && skipIfEmpty && schema.getDefault() == 
null)
                                return null;
-                       return serializer.serialize(HttpPartType.HEADER, 
schema, v);
+                       return serializer == null ? stringify(v) : 
serializer.serialize(HttpPartType.HEADER, schema, v);
                } catch (SchemaValidationException e) {
                        throw new BasicRuntimeException(e, "Validation error on 
request {0} parameter ''{1}''=''{2}''", HttpPartType.HEADER, getName(), value);
                } catch (SerializeException e) {
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/SerializedHttpEntity.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/SerializedHttpEntity.java
index b7d8fa9..b0bdefb 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/SerializedHttpEntity.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/SerializedHttpEntity.java
@@ -18,7 +18,6 @@ import java.io.*;
 
 import org.apache.http.entity.*;
 import org.apache.juneau.*;
-import org.apache.juneau.http.header.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.serializer.*;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/SerializedNameValuePair.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/SerializedNameValuePair.java
index 71da93f..caa4b3a 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/SerializedNameValuePair.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/SerializedNameValuePair.java
@@ -35,8 +35,7 @@ import org.apache.juneau.urlencoding.*;
  *     request.setEntity(<jk>new</jk> UrlEncodedFormEntity(params));
  * </p>
  */
-public class SerializedNameValuePair implements NameValuePair, Headerable {
-       private String name;
+public class SerializedNameValuePair extends BasicNameValuePair implements 
Headerable {
        private Object value;
        private HttpPartType type;
        private HttpPartSerializerSession serializer;
@@ -68,7 +67,7 @@ public class SerializedNameValuePair implements 
NameValuePair, Headerable {
         * @param skipIfEmpty If value is a blank string, the value should 
return as <jk>null</jk>.
         */
        public SerializedNameValuePair(String name, Object value, HttpPartType 
type, HttpPartSerializerSession serializer, HttpPartSchema schema, boolean 
skipIfEmpty) {
-               this.name = name;
+               super(name, null);
                this.value = value;
                this.type = type;
                this.serializer = serializer;
@@ -78,11 +77,11 @@ public class SerializedNameValuePair implements 
NameValuePair, Headerable {
 
        @Override /* Headerable */
        public SerializedHeader asHeader() {
-               return new SerializedHeader(name, value, serializer, schema, 
skipIfEmpty);
+               return new SerializedHeader(getName(), value, serializer, 
schema, skipIfEmpty);
        }
 
        SerializedNameValuePair(SerializedNameValuePairBuilder b) {
-               this.name = b.name;
+               super(b.name, null);
                this.value = b.value;
                this.type = b.type;
                this.serializer = b.serializer;
@@ -90,11 +89,6 @@ public class SerializedNameValuePair implements 
NameValuePair, Headerable {
        }
 
        @Override /* NameValuePair */
-       public String getName() {
-               return name;
-       }
-
-       @Override /* NameValuePair */
        public String getValue() {
                try {
                        Object v = unwrap(value);
@@ -108,17 +102,17 @@ public class SerializedNameValuePair implements 
NameValuePair, Headerable {
                        }
                        if (isEmpty(v) && skipIfEmpty && schema.getDefault() == 
null)
                                return null;
-                       return serializer.serialize(type, schema, v);
+                       return serializer == null ? stringify(v) : 
serializer.serialize(type, schema, v);
                } catch (SchemaValidationException e) {
-                       throw new BasicRuntimeException(e, "Validation error on 
request {0} parameter ''{1}''=''{2}''", type, name, value);
+                       throw new BasicRuntimeException(e, "Validation error on 
request {0} parameter ''{1}''=''{2}''", type, getName(), value);
                } catch (SerializeException e) {
-                       throw new BasicRuntimeException(e, "Serialization error 
on request {0} parameter ''{1}''", type, name);
+                       throw new BasicRuntimeException(e, "Serialization error 
on request {0} parameter ''{1}''", type, getName());
                }
        }
 
        @Override /* Object */
        public String toString() {
-               return name + "=" + getValue();
+               return getName() + "=" + getValue();
        }
 
        private Object unwrap(Object o) {
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/StreamResource.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/StreamResource.java
index 2f61327..449c9d3 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/StreamResource.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/StreamResource.java
@@ -113,8 +113,8 @@ public class StreamResource implements Streamable {
 
        @ResponseHeader("Content-Type")
        @Override /* Streamable */
-       public MediaType getContentType() {
-               return mediaType;
+       public String getMediaType() {
+               return mediaType == null ? null : mediaType.toString();
        }
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/AcceptCharset.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/AcceptCharset.java
index 983e49f..9793c65 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/AcceptCharset.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/AcceptCharset.java
@@ -16,7 +16,6 @@ import static org.apache.juneau.http.header.Constants.*;
 
 import java.util.function.*;
 
-import org.apache.juneau.http.*;
 import org.apache.juneau.http.annotation.*;
 import org.apache.juneau.internal.*;
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/AcceptEncoding.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/AcceptEncoding.java
index 700fd42..3dc6bd7 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/AcceptEncoding.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/AcceptEncoding.java
@@ -16,7 +16,6 @@ import static org.apache.juneau.http.header.Constants.*;
 
 import java.util.function.*;
 
-import org.apache.juneau.http.*;
 import org.apache.juneau.http.annotation.*;
 import org.apache.juneau.internal.*;
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/AcceptLanguage.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/AcceptLanguage.java
index f5dac8a..fb4b271 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/AcceptLanguage.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/AcceptLanguage.java
@@ -16,7 +16,6 @@ import static org.apache.juneau.http.header.Constants.*;
 
 import java.util.function.*;
 
-import org.apache.juneau.http.*;
 import org.apache.juneau.http.annotation.*;
 import org.apache.juneau.internal.*;
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicCsvArrayHeader.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicCsvArrayHeader.java
index 436a1b4..d9b2d6b 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicCsvArrayHeader.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicCsvArrayHeader.java
@@ -19,6 +19,7 @@ import java.util.*;
 import java.util.function.*;
 
 import org.apache.juneau.collections.*;
+import org.apache.juneau.http.*;
 
 /**
  * Category of headers that consist of a comma-delimited list of string values.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicDateHeader.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicDateHeader.java
index c26fa90..58d7780 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicDateHeader.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicDateHeader.java
@@ -20,6 +20,7 @@ import java.util.function.*;
 
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.assertions.*;
+import org.apache.juneau.http.*;
 
 /**
  * Category of headers that consist of a single HTTP-date.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicIntegerHeader.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicIntegerHeader.java
index fc730aa..37eec16 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicIntegerHeader.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicIntegerHeader.java
@@ -15,6 +15,7 @@ package org.apache.juneau.http.header;
 import java.util.function.*;
 
 import org.apache.juneau.assertions.*;
+import org.apache.juneau.http.*;
 import org.apache.juneau.http.annotation.*;
 
 /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicLongHeader.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicLongHeader.java
index 586d1b8..1cc34e7 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicLongHeader.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicLongHeader.java
@@ -15,6 +15,7 @@ package org.apache.juneau.http.header;
 import java.util.function.*;
 
 import org.apache.juneau.assertions.*;
+import org.apache.juneau.http.*;
 import org.apache.juneau.http.annotation.*;
 
 /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicStringHeader.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicStringHeader.java
index 29f4fd6..55de7fa 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicStringHeader.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicStringHeader.java
@@ -15,6 +15,7 @@ package org.apache.juneau.http.header;
 import java.util.function.*;
 
 import org.apache.juneau.assertions.*;
+import org.apache.juneau.http.*;
 
 /**
  * Category of headers that consist of a single string value.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicUriHeader.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicUriHeader.java
index 27ca78b..314e52d 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicUriHeader.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicUriHeader.java
@@ -15,6 +15,8 @@ package org.apache.juneau.http.header;
 import java.net.*;
 import java.util.function.*;
 
+import org.apache.juneau.http.*;
+
 /**
  * Category of headers that consist of a single URL value.
  *
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/EntityValidator.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/EntityValidator.java
similarity index 98%
rename from 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/EntityValidator.java
rename to 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/EntityValidator.java
index 474f6e2..7ba1937 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/EntityValidator.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/EntityValidator.java
@@ -10,7 +10,7 @@
 // * "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.http;
+package org.apache.juneau.http.header;
 
 /**
  * Represents a validator value.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HeaderEntityValidator.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderEntityValidator.java
similarity index 98%
rename from 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HeaderEntityValidator.java
rename to 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderEntityValidator.java
index 318c0cc..a122b31 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HeaderEntityValidator.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderEntityValidator.java
@@ -10,7 +10,7 @@
 // * "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.http;
+package org.apache.juneau.http.header;
 
 /**
  * Category of headers that consist of a single entity validator value.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/IfMatch.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/IfMatch.java
index e54b4a7..6072a91 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/IfMatch.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/IfMatch.java
@@ -14,7 +14,6 @@ package org.apache.juneau.http.header;
 
 import java.util.function.*;
 
-import org.apache.juneau.http.*;
 import org.apache.juneau.http.annotation.*;
 
 /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/IfNoneMatch.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/IfNoneMatch.java
index 8fe4561..0c182b4 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/IfNoneMatch.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/IfNoneMatch.java
@@ -14,7 +14,6 @@ package org.apache.juneau.http.header;
 
 import java.util.function.*;
 
-import org.apache.juneau.http.*;
 import org.apache.juneau.http.annotation.*;
 
 /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/IfRange.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/IfRange.java
index ea7acc3..ebe3bdc 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/IfRange.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/IfRange.java
@@ -16,7 +16,6 @@ import static org.apache.juneau.internal.StringUtils.*;
 
 import java.util.function.*;
 
-import org.apache.juneau.http.*;
 import org.apache.juneau.http.annotation.*;
 import org.apache.juneau.internal.*;
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/StringRange.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/StringRange.java
similarity index 96%
rename from 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/StringRange.java
rename to 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/StringRange.java
index 24893ae..802f566 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/StringRange.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/StringRange.java
@@ -10,7 +10,7 @@
 // * "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.http;
+package org.apache.juneau.http.header;
 
 import static org.apache.juneau.internal.ObjectUtils.*;
 
@@ -19,6 +19,7 @@ import java.util.Map.*;
 
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
+import org.apache.juneau.http.*;
 import org.apache.juneau.internal.*;
 
 /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/TE.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/TE.java
index 3413ca2..3306902 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/TE.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/TE.java
@@ -16,7 +16,6 @@ import static org.apache.juneau.http.header.Constants.*;
 
 import java.util.function.*;
 
-import org.apache.juneau.http.*;
 import org.apache.juneau.http.annotation.*;
 import org.apache.juneau.internal.*;
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolver.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolver.java
index f76b743..ea03dc6 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolver.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolver.java
@@ -186,7 +186,7 @@ public class VarResolver {
         * @param s The string to resolve.
         * @return A supplier for the specified string.
         */
-       public Supplier<String> resolver(String s) {
+       public Supplier<String> supplier(String s) {
                return ()->resolve(s);
        }
 }
\ No newline at end of file
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringMessage.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringMessage.java
index 9c9df6a..68988ce 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringMessage.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringMessage.java
@@ -18,7 +18,6 @@ import java.io.*;
 import java.text.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.http.*;
 
 /**
  * An encapsulated MessageFormat-style string and arguments.
@@ -51,7 +50,7 @@ public class StringMessage implements CharSequence, Writable {
        }
 
        @Override /* Writable */
-       public MediaType getContentType() {
+       public String getMediaType() {
                return null;
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringObject.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringObject.java
index 07f096e..f389978 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringObject.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringObject.java
@@ -15,7 +15,6 @@ package org.apache.juneau.utils;
 import java.io.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.http.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.serializer.*;
 
@@ -93,7 +92,7 @@ public class StringObject implements CharSequence, Writable {
        }
 
        @Override /* Writable */
-       public MediaType getContentType() {
-               return s.getPrimaryMediaType();
+       public String getMediaType() {
+               return s.getPrimaryMediaType().toString();
        }
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ZipFileList.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ZipFileList.java
index 575eb1e..a9e4c17 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ZipFileList.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ZipFileList.java
@@ -17,7 +17,6 @@ import java.util.*;
 import java.util.zip.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.http.*;
 import org.apache.juneau.http.annotation.*;
 
 /**
@@ -40,8 +39,8 @@ public class ZipFileList extends 
LinkedList<ZipFileList.ZipFileEntry> implements
 
        @Header("Content-Type")
        @Override /* Streamable */
-       public MediaType getContentType() {
-               return MediaType.forString("application/zip");
+       public String getMediaType() {
+               return "application/zip";
        }
 
        /**
diff --git 
a/juneau-doc/docs/Topics/09.juneau-rest-client/02.RequestHeaders.html 
b/juneau-doc/docs/Topics/09.juneau-rest-client/02.RequestHeaders.html
index 8090309..d2fa26a 100644
--- a/juneau-doc/docs/Topics/09.juneau-rest-client/02.RequestHeaders.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-client/02.RequestHeaders.html
@@ -120,6 +120,13 @@ Request Headers
        The methods with {@link oaj.AddFlag} parameters allow you to control 
whether new headers get appended, prepended, or
        replace existing headers with the same name.
 </p>
+
+TODO - Headers with variables.
+
+
+
+
+
 <ul class='notes'>
        <li>Methods that pass in POJOs convert values to strings using the part 
serializers.  Methods that pass in <c>Header</c> or
                <c>NameValuePair</c> objects use the values returned by that 
bean directly.
diff --git 
a/juneau-doc/docs/Topics/09.juneau-rest-client/03.RequestQueryParameters.html 
b/juneau-doc/docs/Topics/09.juneau-rest-client/03.RequestQueryParameters.html
index c72668c..b89edad 100644
--- 
a/juneau-doc/docs/Topics/09.juneau-rest-client/03.RequestQueryParameters.html
+++ 
b/juneau-doc/docs/Topics/09.juneau-rest-client/03.RequestQueryParameters.html
@@ -89,6 +89,8 @@ Request Query Parameters
        replace existing query parameters with the same name.
 </p>
 
+TODO - NameValuePairs with variables.
+
 <ul class='notes'>
        <li>Methods that pass in POJOs convert values to strings using the part 
serializers.  Methods that pass in <c>NameValuePair</c>
                objects use the values returned by that bean directly.
diff --git 
a/juneau-doc/docs/Topics/09.juneau-rest-client/04.RequestFormData.html 
b/juneau-doc/docs/Topics/09.juneau-rest-client/04.RequestFormData.html
index 45aa0f8..8674297 100644
--- a/juneau-doc/docs/Topics/09.juneau-rest-client/04.RequestFormData.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-client/04.RequestFormData.html
@@ -89,6 +89,8 @@ Request Form Data
        replace existing form-data parameters with the same name.
 </p>
 
+TODO - NameValuePairs with variables.
+
 <ul class='notes'>
        <li>Like header values, dynamic values and OpenAPI schemas are 
supported.
        <li>Methods that pass in POJOs convert values to strings using the part 
serializers.  Methods that pass in <c>NameValuePair</c>
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/05.RequestBody.html 
b/juneau-doc/docs/Topics/09.juneau-rest-client/05.RequestBody.html
index 5e1602d..6a5bcdf 100644
--- a/juneau-doc/docs/Topics/09.juneau-rest-client/05.RequestBody.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-client/05.RequestBody.html
@@ -77,6 +77,9 @@ Request Body
                .assertStatus().code().is(200);
 </p>
 
+TODO - Bodies with variables.
+
+
 <ul class='notes'>
        <li>If the serializer on the client or request is explicitly set to 
<jk>null</jk>, POJOs will be converted to strings
                using the registered part serializer as content type 
<js>"text/plain</js>.  If the part serializer is also <jk>null</jk>,
diff --git 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/Remote_CommonInterfaces_Test.java
 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/Remote_CommonInterfaces_Test.java
index 2d787bc..ef6fa97 100644
--- 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/Remote_CommonInterfaces_Test.java
+++ 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/Remote_CommonInterfaces_Test.java
@@ -226,12 +226,12 @@ public class Remote_CommonInterfaces_Test {
                assertEquals("foo",IOUtils.read(sr.getContents()));
                assertEquals("foo",sr.getHeaders().get("Foo"));
                assertEquals("bar",sr.getHeaders().get("ETag"));
-               assertEquals("text/foo",sr.getContentType().toString());
+               assertEquals("text/foo",sr.getMediaType().toString());
                ReaderResource rr = x.readerResource();
                assertEquals("foo",IOUtils.read(rr.getContents()));
                assertEquals("foo",rr.getHeaders().get("Foo"));
                assertEquals("bar",rr.getHeaders().get("ETag"));
-               assertEquals("text/foo",rr.getContentType().toString());
+               assertEquals("text/foo",rr.getMediaType().toString());
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
diff --git 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/Remote_Test.java
 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/Remote_Test.java
index 13c3831..c63de55 100644
--- 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/Remote_Test.java
+++ 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/Remote_Test.java
@@ -22,7 +22,6 @@ import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.client.remote.*;
 import org.apache.juneau.rest.config.*;
 import org.apache.juneau.http.*;
-import org.apache.juneau.http.header.*;
 import org.apache.juneau.http.remote.*;
 import org.apache.juneau.http.remote.RemoteMethod;
 import org.apache.juneau.http.remote.RemoteReturn;
diff --git 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClient_Response_Headers_Test.java
 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClient_Response_Headers_Test.java
index 3c6c2f6..a1e9861 100644
--- 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClient_Response_Headers_Test.java
+++ 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClient_Response_Headers_Test.java
@@ -21,6 +21,7 @@ import java.util.regex.*;
 
 import org.apache.http.*;
 import org.apache.juneau.*;
+import org.apache.juneau.http.*;
 import org.apache.juneau.http.header.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
diff --git 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClient_Response_Test.java
 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClient_Response_Test.java
index 53a6d8d..49cb30d 100644
--- 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClient_Response_Test.java
+++ 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClient_Response_Test.java
@@ -25,9 +25,9 @@ import org.apache.http.entity.*;
 import org.apache.http.message.*;
 import org.apache.http.params.*;
 import org.apache.juneau.*;
+import org.apache.juneau.http.BasicHeader;
 import org.apache.juneau.http.annotation.*;
 import org.apache.juneau.http.header.*;
-import org.apache.juneau.http.header.BasicHeader;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
index 9332b7b..4ba6eff 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
@@ -2536,7 +2536,7 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable, Re
                                body = ((ReaderResourceBuilder)body).build();
                        if (body instanceof ReaderResource) {
                                ReaderResource r = (ReaderResource)body;
-                               if (r.getContentType() == null)
+                               if (r.getMediaType() == null)
                                        
req.contentType("application/x-www-form-urlencoded");
                                return req.body(r);
                        }
@@ -2544,7 +2544,7 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable, Re
                                body = ((StreamResourceBuilder)body).build();
                        if (body instanceof StreamResource) {
                                StreamResource r = (StreamResource)body;
-                               if (r.getContentType() == null)
+                               if (r.getMediaType() == null)
                                        
req.contentType("application/x-www-form-urlencoded");
                                return req.body(r);
                        }
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestRequest.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestRequest.java
index 79c840b..8efc233 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestRequest.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestRequest.java
@@ -2861,7 +2861,7 @@ public class RestRequest extends BeanSession implements 
HttpUriRequest, Configur
                                        if (input2 instanceof 
ReaderResourceBuilder)
                                                input2 = 
((ReaderResourceBuilder)input2).build();
                                        ReaderResource r = 
(ReaderResource)input2;
-                                       contentType(r.getContentType());
+                                       contentType(r.getMediaType());
                                        headers(r.getHeaders());
                                        entity = new 
StringEntity(IOUtils.read(r.getContents()), getRequestContentType(TEXT_PLAIN));
                                }
@@ -2869,7 +2869,7 @@ public class RestRequest extends BeanSession implements 
HttpUriRequest, Configur
                                        if (input2 instanceof 
StreamResourceBuilder)
                                                input2 = 
((StreamResourceBuilder)input2).build();
                                        StreamResource r = 
(StreamResource)input2;
-                                       contentType(r.getContentType());
+                                       contentType(r.getMediaType());
                                        headers(r.getHeaders());
                                        entity = new 
InputStreamEntity(r.getContents(), 
getRequestContentType(ContentType.APPLICATION_OCTET_STREAM));
                                }
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseHeader.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseHeader.java
index 6384045..0fe9b09 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseHeader.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseHeader.java
@@ -20,6 +20,7 @@ import java.util.regex.*;
 import org.apache.http.*;
 import org.apache.juneau.*;
 import org.apache.juneau.assertions.*;
+import org.apache.juneau.http.*;
 import org.apache.juneau.http.header.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.oapi.*;
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index 0efe8ae..75c352f 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -3893,7 +3893,7 @@ public final class RestContext extends BeanContext {
 
                        for (MethodInfo mi : rci.getPublicMethods()) {
                                RestMethod a = 
mi.getLastAnnotation(RestMethod.class);
-                               
+
                                // Also include methods on @Rest-annotated 
interfaces.
                                if (a == null) {
                                        for (Method mi2 : mi.getMatching()) {

Reply via email to