You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2017/03/10 16:50:58 UTC

[02/34] incubator-juneau git commit: Add builder classes for all serializers and parsers.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/InheritanceTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/InheritanceTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/InheritanceTest.java
index 25acda5..a716cc8 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/InheritanceTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/InheritanceTest.java
@@ -14,23 +14,13 @@ package org.apache.juneau.rest.test;
 
 import static org.junit.Assert.*;
 
-import org.apache.juneau.json.*;
 import org.apache.juneau.rest.client.*;
 import org.junit.*;
 
 public class InheritanceTest extends RestTestcase {
 
-	private static RestClient client;
+	private RestClient client = TestMicroservice.DEFAULT_CLIENT;
 
-	@BeforeClass
-	public static void beforeClass() {
-		client = new TestRestClient();
-	}
-
-	@AfterClass
-	public static void afterClass() {
-		client.closeQuietly();
-	}
 
 	//====================================================================================================
 	// Test serializer inheritance.
@@ -81,7 +71,7 @@ public class InheritanceTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testTransforms() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.class, JsonParser.class).setAccept("text/json+simple");
+		RestClient client = TestMicroservice.client().accept("text/json+simple").build();
 		String r;
 		String url = "/testInheritanceTransforms";
 
@@ -108,7 +98,7 @@ public class InheritanceTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testProperties() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.class, JsonParser.class).setAccept("text/json+simple");
+		RestClient client = TestMicroservice.client().accept("text/json+simple").build();
 		String r;
 		String url = "/testInheritanceProperties";
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/LargePojosTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/LargePojosTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/LargePojosTest.java
index dc5c944..f2db303 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/LargePojosTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/LargePojosTest.java
@@ -13,9 +13,8 @@
 package org.apache.juneau.rest.test;
 
 import org.apache.juneau.html.*;
-import org.apache.juneau.json.*;
 import org.apache.juneau.rest.client.*;
-import org.apache.juneau.urlencoding.*;
+import org.apache.juneau.uon.*;
 import org.apache.juneau.xml.*;
 import org.junit.*;
 
@@ -35,7 +34,7 @@ public class LargePojosTest extends RestTestcase {
 		RestClient c;
 
 		System.err.println("\n---Testing JSON---");
-		c = new TestRestClient(JsonSerializer.class, JsonParser.class);
+		c = TestMicroservice.DEFAULT_CLIENT;
 		for (int i = 1; i <= 3; i++) {
 			t = System.currentTimeMillis();
 			p = c.doGet(URL).getResponse(LargePojo.class);
@@ -46,7 +45,7 @@ public class LargePojosTest extends RestTestcase {
 		}
 
 		System.err.println("\n---Testing XML---");
-		c = new TestRestClient(XmlSerializer.class, XmlParser.class);
+		c = TestMicroservice.client(XmlSerializer.class, XmlParser.class).build();
 		for (int i = 1; i <= 3; i++) {
 			t = System.currentTimeMillis();
 			p = c.doGet(URL).getResponse(LargePojo.class);
@@ -57,7 +56,7 @@ public class LargePojosTest extends RestTestcase {
 		}
 
 		System.err.println("\n---Testing HTML---");
-		c = new TestRestClient(HtmlSerializer.class, HtmlParser.class).setAccept("text/html+stripped");
+		c = TestMicroservice.client(HtmlSerializer.class, HtmlParser.class).accept("text/html+stripped").build();
 		for (int i = 1; i <= 3; i++) {
 			t = System.currentTimeMillis();
 			p = c.doGet(URL).getResponse(LargePojo.class);
@@ -67,8 +66,10 @@ public class LargePojosTest extends RestTestcase {
 			System.err.println("Upload: ["+(System.currentTimeMillis() - t)+"] ms");
 		}
 
+		c.closeQuietly();
+
 		System.err.println("\n---Testing UrlEncoding---");
-		c = new TestRestClient(UonSerializer.class, UonParser.class);
+		c = TestMicroservice.client(UonSerializer.class, UonParser.class).build();
 		for (int i = 1; i <= 3; i++) {
 			t = System.currentTimeMillis();
 			p = c.doGet(URL).getResponse(LargePojo.class);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/MessagesTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/MessagesTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/MessagesTest.java
index e833de7..5cb4b82 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/MessagesTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/MessagesTest.java
@@ -16,7 +16,6 @@ import static org.apache.juneau.rest.test.TestUtils.*;
 
 import java.util.*;
 
-import org.apache.juneau.json.*;
 import org.apache.juneau.rest.client.*;
 import org.junit.*;
 
@@ -31,7 +30,7 @@ public class MessagesTest extends RestTestcase {
 	@SuppressWarnings("rawtypes")
 	@Test
 	public void test() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.class,JsonParser.class);
+		RestClient client = TestMicroservice.DEFAULT_CLIENT;
 
 		// Parent resource should just pick up values from its bundle.
 		TreeMap r = client.doGet("/testMessages/test").getResponse(TreeMap.class);
@@ -41,7 +40,5 @@ public class MessagesTest extends RestTestcase {
 		// ordered child before parent.
 		r = client.doGet("/testMessages2/test").getResponse(TreeMap.class);
 		assertObjectEquals("{key1:'value1a',key2:'value2b',key3:'value3b'}", r);
-
-		client.closeQuietly();
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/NlsPropertyTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/NlsPropertyTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/NlsPropertyTest.java
index ddd9c5d..55b0272 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/NlsPropertyTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/NlsPropertyTest.java
@@ -14,7 +14,6 @@ package org.apache.juneau.rest.test;
 
 import static org.junit.Assert.*;
 
-import org.apache.juneau.plaintext.*;
 import org.apache.juneau.rest.client.*;
 import org.junit.*;
 
@@ -27,11 +26,9 @@ public class NlsPropertyTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testInheritedFromClass() throws Exception {
-		RestClient client = new TestRestClient(PlainTextSerializer.class, PlainTextParser.class);
+		RestClient client = TestMicroservice.DEFAULT_CLIENT_PLAINTEXT;
 		String r = client.doGet(URL + "/testInheritedFromClass").getResponseAsString();
 		assertEquals("value1", r);
-
-		client.closeQuietly();
 	}
 
 	//====================================================================================================
@@ -39,10 +36,8 @@ public class NlsPropertyTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testInheritedFromMethod() throws Exception {
-		RestClient client = new TestRestClient(PlainTextSerializer.class, PlainTextParser.class);
+		RestClient client = TestMicroservice.DEFAULT_CLIENT_PLAINTEXT;
 		String r = client.doGet(URL + "/testInheritedFromMethod").getResponseAsString();
 		assertEquals("value2", r);
-
-		client.closeQuietly();
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/NlsTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/NlsTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/NlsTest.java
index 6869df8..1cb00c6 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/NlsTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/NlsTest.java
@@ -15,27 +15,24 @@ package org.apache.juneau.rest.test;
 import static org.apache.juneau.rest.test.TestUtils.*;
 
 import org.apache.juneau.dto.swagger.*;
-import org.apache.juneau.json.*;
 import org.apache.juneau.rest.client.*;
 import org.junit.*;
 
 public class NlsTest extends RestTestcase {
 
 	private static String URL = "/testNls";
+	private RestClient client = TestMicroservice.DEFAULT_CLIENT;
 
 	// ====================================================================================================
 	// test1 - Pull labels from annotations only.
 	// ====================================================================================================
 	@Test
 	public void test1() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
 
 		Swagger s = client.doOptions(URL + "/test1").getResponse(Swagger.class);
 		assertObjectEquals("{title:'Test1.a',description:'Test1.b'}", s.getInfo());
 		assertObjectEquals("[{'in':'body',description:'Test1.f'},{'in':'header',name:'D',type:'string',description:'Test1.g'},{'in':'header',name:'D2',type:'string',description:'Test1.j'},{'in':'header',name:'g'},{'in':'path',name:'a',type:'string',description:'Test1.d',required:true},{'in':'path',name:'a2',type:'string',description:'Test1.h',required:true},{'in':'path',name:'e',required:true},{'in':'query',name:'b',type:'string',description:'Test1.e'},{'in':'query',name:'b2',type:'string',description:'Test1.i'},{'in':'query',name:'f'}]", s.getPaths().get("/{a}").get("post").getParameters());
 		assertObjectEquals("{'200':{description:'OK'},'201':{description:'Test1.l',headers:{bar:{description:'Test1.m',type:'string'}}}}", s.getPaths().get("/{a}").get("post").getResponses());
-
-		client.closeQuietly();
 	}
 
 	// ====================================================================================================
@@ -43,14 +40,11 @@ public class NlsTest extends RestTestcase {
 	// ====================================================================================================
 	@Test
 	public void test2() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
 
 		Swagger s = client.doOptions(URL + "/test2").getResponse(Swagger.class);
 		assertObjectEquals("{title:'Test2.a',description:'Test2.b'}", s.getInfo());
 		assertObjectEquals("[{'in':'body',description:'Test2.f'},{'in':'header',name:'D',description:'Test2.g'},{'in':'header',name:'D2',description:'Test2.j'},{'in':'header',name:'g'},{'in':'path',name:'a',description:'Test2.d',required:true},{'in':'path',name:'a2',description:'Test2.h',required:true},{'in':'path',name:'e',required:true},{'in':'query',name:'b',description:'Test2.e'},{'in':'query',name:'b2',description:'Test2.i'},{'in':'query',name:'f'}]", s.getPaths().get("/{a}").get("post").getParameters());
 		assertObjectEquals("{'200':{description:'OK2'},'201':{description:'Test2.l'}}", s.getPaths().get("/{a}").get("post").getResponses());
-
-		client.closeQuietly();
 	}
 
 	// ====================================================================================================
@@ -58,14 +52,11 @@ public class NlsTest extends RestTestcase {
 	// ====================================================================================================
 	@Test
 	public void test3() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
 
 		Swagger s = client.doOptions(URL + "/test3").getResponse(Swagger.class);
 		assertObjectEquals("{title:'Test3.a',description:'Test3.b'}", s.getInfo());
 		assertObjectEquals("[{'in':'body',description:'Test3.f'},{'in':'header',name:'D',description:'Test3.g'},{'in':'header',name:'D2',description:'Test3.j'},{'in':'header',name:'g'},{'in':'path',name:'a',description:'Test3.d',required:true},{'in':'path',name:'a2',description:'Test3.h',required:true},{'in':'path',name:'e',required:true},{'in':'query',name:'b',description:'Test3.e'},{'in':'query',name:'b2',description:'Test3.i'},{'in':'query',name:'f'}]", s.getPaths().get("/{a}").get("post").getParameters());
 		assertObjectEquals("{'200':{description:'OK3'},'201':{description:'Test3.l'}}", s.getPaths().get("/{a}").get("post").getResponses());
-
-		client.closeQuietly();
 	}
 
 	// ====================================================================================================
@@ -73,14 +64,11 @@ public class NlsTest extends RestTestcase {
 	// ====================================================================================================
 	@Test
 	public void test4() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
 
 		Swagger s = client.doOptions(URL + "/test4").getResponse(Swagger.class);
 		assertObjectEquals("{title:'baz',description:'baz'}", s.getInfo());
 		assertObjectEquals("[{'in':'body',description:'baz'},{'in':'header',name:'D',description:'baz'},{'in':'header',name:'D2',description:'baz'},{'in':'header',name:'g'},{'in':'path',name:'a',description:'baz',required:true},{'in':'path',name:'a2',description:'baz',required:true},{'in':'path',name:'e',required:true},{'in':'query',name:'b',description:'baz'},{'in':'query',name:'b2',description:'baz'},{'in':'query',name:'f'}]", s.getPaths().get("/{a}").get("post").getParameters());
 		assertObjectEquals("{'200':{description:'foobazfoobazfoo'},'201':{description:'baz'}}", s.getPaths().get("/{a}").get("post").getResponses());
-
-		client.closeQuietly();
 	}
 
 	// ====================================================================================================
@@ -88,14 +76,11 @@ public class NlsTest extends RestTestcase {
 	// ====================================================================================================
 	@Test
 	public void test5() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
 
 		Swagger s = client.doOptions(URL + "/test5").getResponse(Swagger.class);
 		assertObjectEquals("{title:'baz2',description:'baz2'}", s.getInfo());
 		assertObjectEquals("[{'in':'body',description:'baz2'},{'in':'header',name:'D',description:'baz2'},{'in':'header',name:'D2',description:'baz2'},{'in':'header',name:'g'},{'in':'path',name:'a',description:'baz2',required:true},{'in':'path',name:'a2',description:'baz2',required:true},{'in':'path',name:'e',required:true},{'in':'query',name:'b',description:'baz2'},{'in':'query',name:'b2',description:'baz2'},{'in':'query',name:'f'}]", s.getPaths().get("/{a}").get("post").getParameters());
 		assertObjectEquals("{'200':{description:'foobaz2foobaz2foo'},'201':{description:'baz2'}}", s.getPaths().get("/{a}").get("post").getResponses());
-
-		client.closeQuietly();
 	}
 
 	// ====================================================================================================
@@ -103,13 +88,10 @@ public class NlsTest extends RestTestcase {
 	// ====================================================================================================
 	@Test
 	public void test6() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
 
 		Swagger s = client.doOptions(URL + "/test6").getResponse(Swagger.class);
 		assertObjectEquals("{title:'baz',description:'baz'}", s.getInfo());
 		assertObjectEquals("[{'in':'body',description:'baz'},{'in':'header',name:'D',type:'string',description:'baz'},{'in':'header',name:'D2',type:'string',description:'baz'},{'in':'header',name:'g'},{'in':'path',name:'a',type:'string',description:'baz',required:true},{'in':'path',name:'a2',type:'string',description:'baz',required:true},{'in':'path',name:'e',required:true},{'in':'query',name:'b',type:'string',description:'baz'},{'in':'query',name:'b2',type:'string',description:'baz'},{'in':'query',name:'f'}]", s.getPaths().get("/{a}").get("post").getParameters());
 		assertObjectEquals("{'200':{description:'OK'},'201':{description:'baz',headers:{bar:{description:'baz',type:'string'}}}}", s.getPaths().get("/{a}").get("post").getResponses());
-
-		client.closeQuietly();
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/NoParserInputTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/NoParserInputTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/NoParserInputTest.java
index b63d14a..0c9b2a3 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/NoParserInputTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/NoParserInputTest.java
@@ -16,7 +16,6 @@ import static javax.servlet.http.HttpServletResponse.*;
 import static org.apache.juneau.rest.test.TestUtils.*;
 import static org.junit.Assert.*;
 
-import org.apache.juneau.plaintext.*;
 import org.apache.juneau.rest.client.*;
 import org.junit.*;
 
@@ -24,17 +23,15 @@ public class NoParserInputTest extends RestTestcase {
 
 	private static String URL = "/testNoParserInput";
 	private static boolean debug = false;
+	RestClient plainTextClient = TestMicroservice.DEFAULT_CLIENT_PLAINTEXT;
 
 	//====================================================================================================
 	// @Body annotated InputStream.
 	//====================================================================================================
 	@Test
 	public void testInputStream() throws Exception {
-		RestClient client = new TestRestClient(PlainTextSerializer.class, PlainTextParser.class);
-		String r = client.doPut(URL + "/testInputStream", "foo").getResponseAsString();
+		String r = plainTextClient.doPut(URL + "/testInputStream", "foo").getResponseAsString();
 		assertEquals("foo", r);
-
-		client.closeQuietly();
 	}
 
 	//====================================================================================================
@@ -42,11 +39,8 @@ public class NoParserInputTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testReader() throws Exception {
-		RestClient client = new TestRestClient(PlainTextSerializer.class, PlainTextParser.class);
-		String r = client.doPut(URL + "/testReader", "foo").getResponseAsString();
+		String r = plainTextClient.doPut(URL + "/testReader", "foo").getResponseAsString();
 		assertEquals("foo", r);
-
-		client.closeQuietly();
 	}
 
 	//====================================================================================================
@@ -55,16 +49,13 @@ public class NoParserInputTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testPushbackReader() throws Exception {
-		RestClient client = new TestRestClient(PlainTextSerializer.class, PlainTextParser.class);
 		try {
-			client.doPut(URL + "/testPushbackReader?noTrace=true", "foo").getResponseAsString();
+			plainTextClient.doPut(URL + "/testPushbackReader?noTrace=true", "foo").getResponseAsString();
 			fail("Exception expected");
 		} catch (RestCallException e) {
 			checkErrorResponse(debug, e, SC_BAD_REQUEST,
 				"Invalid argument type passed to the following method:",
 				"'public java.lang.String org.apache.juneau.rest.test.NoParserInputResource.testPushbackReader(java.io.PushbackReader) throws java.lang.Exception'");
 		}
-
-		client.closeQuietly();
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/OnPostCallTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/OnPostCallTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/OnPostCallTest.java
index aa52ca6..e7786b9 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/OnPostCallTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/OnPostCallTest.java
@@ -28,7 +28,7 @@ public class OnPostCallTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testPropertiesOverridenByAnnotation() throws Exception {
-		RestClient client = new TestRestClient().setAccept("text/s1");
+		RestClient client = TestMicroservice.client().accept("text/s1").build();
 		String url = URL + "/testPropertiesOverridenByAnnotation";
 		String r;
 		RestCall rc;
@@ -36,10 +36,10 @@ public class OnPostCallTest extends RestTestcase {
 		r = client.doPut(url, new StringReader("")).getResponseAsString();
 		assertEquals("p1=sp1,p2=xp2,p3=mp3,p4=xp4,p5=xp5,contentType=text/s1", r);
 
-		r = client.doPut(url, new StringReader("")).setHeader("Override-Accept", "text/s2").getResponseAsString();
+		r = client.doPut(url, new StringReader("")).header("Override-Accept", "text/s2").getResponseAsString();
 		assertEquals("p1=sp1,p2=xp2,p3=mp3,p4=xp4,p5=xp5,contentType=text/s2", r);
 
-		rc = client.doPut(url, new StringReader("")).setHeader("Override-Content-Type", "text/s3").connect();
+		rc = client.doPut(url, new StringReader("")).header("Override-Content-Type", "text/s3").connect();
 		r = rc.getResponseAsString();
 		assertEquals("p1=sp1,p2=xp2,p3=mp3,p4=xp4,p5=xp5,contentType=text/s1", r);
 		assertTrue(rc.getResponse().getFirstHeader("Content-Type").getValue().startsWith("text/s3"));
@@ -52,7 +52,7 @@ public class OnPostCallTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testPropertiesOverridenByAnnotationDefaultAccept() throws Exception {
-		RestClient client = new TestRestClient().setAccept("");
+		RestClient client = TestMicroservice.client().accept("").build();
 		String url = URL + "/testPropertiesOverridenByAnnotation";
 		String r;
 		RestCall rc;
@@ -60,10 +60,10 @@ public class OnPostCallTest extends RestTestcase {
 		r = client.doPut(url, new StringReader("")).getResponseAsString();
 		assertEquals("p1=sp1,p2=xp2,p3=mp3,p4=xp4,p5=xp5,contentType=text/s2", r);
 
-		r = client.doPut(url, new StringReader("")).setHeader("Override-Accept", "text/s3").getResponseAsString();
+		r = client.doPut(url, new StringReader("")).header("Override-Accept", "text/s3").getResponseAsString();
 		assertEquals("p1=sp1,p2=xp2,p3=mp3,p4=xp4,p5=xp5,contentType=text/s3", r);
 
-		rc = client.doPut(url, new StringReader("")).setHeader("Override-Content-Type", "text/s3").connect();
+		rc = client.doPut(url, new StringReader("")).header("Override-Content-Type", "text/s3").connect();
 		r = rc.getResponseAsString();
 		assertEquals("p1=sp1,p2=xp2,p3=mp3,p4=xp4,p5=xp5,contentType=text/s2", r);
 		assertTrue(rc.getResponse().getFirstHeader("Content-Type").getValue().startsWith("text/s3"));
@@ -76,7 +76,7 @@ public class OnPostCallTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testPropertiesOverriddenProgramatically() throws Exception {
-		RestClient client = new TestRestClient().setAccept("text/s1");
+		RestClient client = TestMicroservice.client().accept("text/s1").build();
 		String url = URL + "/testPropertiesOverriddenProgramatically";
 		String r;
 		RestCall rc;
@@ -84,10 +84,10 @@ public class OnPostCallTest extends RestTestcase {
 		r = client.doPut(url, new StringReader("")).getResponseAsString();
 		assertEquals("p1=sp1,p2=xp2,p3=pp3,p4=xp4,p5=xp5,contentType=text/s1", r);
 
-		r = client.doPut(url, new StringReader("")).setHeader("Override-Accept", "text/s2").getResponseAsString();
+		r = client.doPut(url, new StringReader("")).header("Override-Accept", "text/s2").getResponseAsString();
 		assertEquals("p1=sp1,p2=xp2,p3=pp3,p4=xp4,p5=xp5,contentType=text/s2", r);
 
-		rc = client.doPut(url, new StringReader("")).setHeader("Override-Content-Type", "text/s3").connect();
+		rc = client.doPut(url, new StringReader("")).header("Override-Content-Type", "text/s3").connect();
 		r = rc.getResponseAsString();
 		assertEquals("p1=sp1,p2=xp2,p3=pp3,p4=xp4,p5=xp5,contentType=text/s1", r);
 		assertTrue(rc.getResponse().getFirstHeader("Content-Type").getValue().startsWith("text/s3"));
@@ -100,7 +100,7 @@ public class OnPostCallTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testPropertiesOverriddenProgramaticallyDefaultAccept() throws Exception {
-		RestClient client = new TestRestClient().setAccept("");
+		RestClient client = TestMicroservice.client().accept("").build();
 		String url = URL + "/testPropertiesOverriddenProgramatically";
 		String r;
 		RestCall rc;
@@ -108,10 +108,10 @@ public class OnPostCallTest extends RestTestcase {
 		r = client.doPut(url, new StringReader("")).getResponseAsString();
 		assertEquals("p1=sp1,p2=xp2,p3=pp3,p4=xp4,p5=xp5,contentType=text/s2", r);
 
-		r = client.doPut(url, new StringReader("")).setHeader("Override-Accept", "text/s3").getResponseAsString();
+		r = client.doPut(url, new StringReader("")).header("Override-Accept", "text/s3").getResponseAsString();
 		assertEquals("p1=sp1,p2=xp2,p3=pp3,p4=xp4,p5=xp5,contentType=text/s3", r);
 
-		rc = client.doPut(url, new StringReader("")).setHeader("Override-Content-Type", "text/s3").connect();
+		rc = client.doPut(url, new StringReader("")).header("Override-Content-Type", "text/s3").connect();
 		r = rc.getResponseAsString();
 		assertEquals("p1=sp1,p2=xp2,p3=pp3,p4=xp4,p5=xp5,contentType=text/s2", r);
 		assertTrue(rc.getResponse().getFirstHeader("Content-Type").getValue().startsWith("text/s3"));

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/OnPreCallTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/OnPreCallTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/OnPreCallTest.java
index 8159dad..12a4201 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/OnPreCallTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/OnPreCallTest.java
@@ -28,14 +28,14 @@ public class OnPreCallTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testPropertiesOverriddenByAnnotation() throws Exception {
-		RestClient client = new TestRestClient().setContentType("text/a1").setAccept("text/plain");
+		RestClient client = TestMicroservice.client().contentType("text/a1").accept("text/plain").build();
 		String url = URL + "/testPropertiesOverriddenByAnnotation";
 		String r;
 
 		r = client.doPut(url, new StringReader("")).getResponseAsString();
 		assertEquals("p1=sp1,p2=xp2,p3=mp3,p4=xp4,p5=xp5,contentType=text/a1", r);
 
-		r = client.doPut(url, new StringReader("")).setHeader("Override-Content-Type", "text/a2").getResponseAsString();
+		r = client.doPut(url, new StringReader("")).header("Override-Content-Type", "text/a2").getResponseAsString();
 		assertEquals("p1=sp1,p2=xp2,p3=mp3,p4=xp4,p5=xp5,contentType=text/a2", r);
 
 		client.closeQuietly();
@@ -46,14 +46,14 @@ public class OnPreCallTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testPropertiesOverriddenProgrammatically() throws Exception {
-		RestClient client = new TestRestClient().setContentType("text/a1").setAccept("text/plain");
+		RestClient client = TestMicroservice.client().contentType("text/a1").accept("text/plain").build();
 		String url = URL + "/testPropertiesOverriddenProgrammatically";
 		String r;
 
 		r = client.doPut(url, new StringReader("")).getResponseAsString();
 		assertEquals("p1=sp1,p2=xp2,p3=pp3,p4=pp4,p5=xp5,contentType=text/a1", r);
 
-		r = client.doPut(url, new StringReader("")).setHeader("Override-Content-Type", "text/a2").getResponseAsString();
+		r = client.doPut(url, new StringReader("")).header("Override-Content-Type", "text/a2").getResponseAsString();
 		assertEquals("p1=sp1,p2=xp2,p3=pp3,p4=pp4,p5=xp5,contentType=text/a2", r);
 
 		client.closeQuietly();

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/OptionsWithoutNlsTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/OptionsWithoutNlsTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/OptionsWithoutNlsTest.java
index 36529af..ce34166 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/OptionsWithoutNlsTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/OptionsWithoutNlsTest.java
@@ -15,25 +15,22 @@ package org.apache.juneau.rest.test;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.dto.swagger.*;
-import org.apache.juneau.json.*;
 import org.apache.juneau.rest.client.*;
 import org.junit.*;
 
 public class OptionsWithoutNlsTest extends RestTestcase {
 
 	private static String URL = "/testOptionsWithoutNls";
+	private RestClient client = TestMicroservice.DEFAULT_CLIENT;
 
 	//====================================================================================================
 	// Should get to the options page without errors
 	//====================================================================================================
 	@Test
 	public void testOptions() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
 		RestCall r = client.doOptions(URL + "/testOptions");
 		Swagger o = r.getResponse(Swagger.class);
 		assertNotNull(o.getInfo());
-
-		client.closeQuietly();
 	}
 
 	//====================================================================================================
@@ -41,11 +38,8 @@ public class OptionsWithoutNlsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testMissingResourceBundle() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
 		RestCall r = client.doGet(URL + "/testMissingResourceBundle");
 		String o = r.getResponse(String.class);
 		assertEquals("{!!bad}", o);
-
-		client.closeQuietly();
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/OverlappingMethodsTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/OverlappingMethodsTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/OverlappingMethodsTest.java
index 4b4cb43..6822566 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/OverlappingMethodsTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/OverlappingMethodsTest.java
@@ -29,7 +29,7 @@ public class OverlappingMethodsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testOverlappingGuards1() throws Exception {
-		RestClient client = new TestRestClient().setHeader("Accept", "text/plain");
+		RestClient client = TestMicroservice.client().accept("text/plain").build();
 		String r;
 		String url = URL + "/testOverlappingGuards1";
 
@@ -51,7 +51,7 @@ public class OverlappingMethodsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testOverlappingGuards2() throws Exception {
-		RestClient client = new TestRestClient().setHeader("Accept", "text/plain");
+		RestClient client = TestMicroservice.client().accept("text/plain").build();
 		String r;
 		String url = URL + "/testOverlappingGuards2";
 		try {
@@ -86,7 +86,7 @@ public class OverlappingMethodsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testOverlappingMatchers1() throws Exception {
-		RestClient client = new TestRestClient().setHeader("Accept", "text/plain");
+		RestClient client = TestMicroservice.client().accept("text/plain").build();
 		String r;
 		String url = URL + "/testOverlappingMatchers1";
 
@@ -107,7 +107,7 @@ public class OverlappingMethodsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testOverlappingMatchers2() throws Exception {
-		RestClient client = new TestRestClient().setHeader("Accept", "text/plain");
+		RestClient client = TestMicroservice.client().accept("text/plain").build();
 		String r;
 		String url = URL + "/testOverlappingMatchers2";
 
@@ -131,7 +131,7 @@ public class OverlappingMethodsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testOverlappingUrlPatterns() throws Exception {
-		RestClient client = new TestRestClient().setHeader("Accept", "text/plain");
+		RestClient client = TestMicroservice.client().accept("text/plain").build();
 		String r;
 		String url = URL + "/testOverlappingUrlPatterns";
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ParamsTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ParamsTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ParamsTest.java
index 9e14c52..77bc2c0 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ParamsTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ParamsTest.java
@@ -23,7 +23,6 @@ import org.apache.http.client.entity.*;
 import org.apache.http.entity.*;
 import org.apache.http.message.*;
 import org.apache.juneau.*;
-import org.apache.juneau.json.*;
 import org.apache.juneau.rest.client.*;
 import org.junit.*;
 
@@ -37,7 +36,7 @@ public class ParamsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testBasic() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
+		RestClient client = TestMicroservice.DEFAULT_CLIENT;
 		RestCall r;
 
 		//		@Override
@@ -168,8 +167,6 @@ public class ParamsTest extends RestTestcase {
 		UUID uuid = UUID.randomUUID();
 		r = client.doPut(URL + "/uuid/"+uuid, "");
 		assertEquals("PUT /uuid/"+uuid, r.getResponse(String.class));
-
-		client.closeQuietly();
 	}
 
 	//====================================================================================================
@@ -177,7 +174,7 @@ public class ParamsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testParamGet() throws Exception {
-		RestClient client = new TestRestClient().setHeader("Accept", "text/plain");
+		RestClient client = TestMicroservice.client().accept("text/plain").build();
 		String r;
 		String url = URL + "/testParamGet";
 
@@ -214,7 +211,7 @@ public class ParamsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testPlainParamGet() throws Exception {
-		RestClient client = new TestRestClient().setHeader("Accept", "text/plain");
+		RestClient client = TestMicroservice.client().accept("text/plain").build();
 		String r;
 		String url = URL + "/testPlainParamGet";
 
@@ -232,7 +229,7 @@ public class ParamsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testParamPost() throws Exception {
-		RestClient client = new TestRestClient().setHeader("Accept", "text/plain");
+		RestClient client = TestMicroservice.client().accept("text/plain").build();
 		String r;
 		String url = URL + "/testParamPost";
 
@@ -268,7 +265,7 @@ public class ParamsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testPlainParamPost() throws Exception {
-		RestClient client = new TestRestClient().setHeader("Accept", "text/plain");
+		RestClient client = TestMicroservice.client().accept("text/plain").build();
 		String r;
 		String url = URL + "/testPlainParamPost";
 
@@ -294,7 +291,7 @@ public class ParamsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testQParamGet() throws Exception {
-		RestClient client = new TestRestClient().setHeader("Accept", "text/plain");
+		RestClient client = TestMicroservice.client().accept("text/plain").build();
 		String r;
 		String url = URL + "/testQParamGet";
 
@@ -331,7 +328,7 @@ public class ParamsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testPlainQParamGet() throws Exception {
-		RestClient client = new TestRestClient().setHeader("Accept", "text/plain");
+		RestClient client = TestMicroservice.client().accept("text/plain").build();
 		String r;
 		String url = URL + "/testPlainQParamGet";
 
@@ -349,7 +346,7 @@ public class ParamsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testQParamPost() throws Exception {
-		RestClient client = new TestRestClient().setHeader("Accept", "text/plain");
+		RestClient client = TestMicroservice.client().accept("text/plain").build();
 		String r;
 		String url = URL + "/testQParamPost";
 
@@ -385,7 +382,7 @@ public class ParamsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testHasParamGet() throws Exception {
-		RestClient client = new TestRestClient().setHeader("Accept", "text/plain");
+		RestClient client = TestMicroservice.client().accept("text/plain").build();
 		String r;
 		String url = URL + "/testHasParamGet";
 
@@ -422,7 +419,7 @@ public class ParamsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testHasParamPost() throws Exception {
-		RestClient client = new TestRestClient().setHeader("Accept", "text/plain");
+		RestClient client = TestMicroservice.client().accept("text/plain").build();
 		String r;
 		String url = URL + "/testHasParamPost";
 
@@ -458,7 +455,7 @@ public class ParamsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testHasQParamGet() throws Exception {
-		RestClient client = new TestRestClient().setHeader("Accept", "text/plain");
+		RestClient client = TestMicroservice.client().accept("text/plain").build();
 		String r;
 		String url = URL + "/testHasQParamGet";
 
@@ -495,7 +492,7 @@ public class ParamsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testHasQParamPost() throws Exception {
-		RestClient client = new TestRestClient().setHeader("Accept", "text/plain");
+		RestClient client = TestMicroservice.client().accept("text/plain").build();
 		String r;
 		String url = URL + "/testHasQParamPost";
 
@@ -531,7 +528,7 @@ public class ParamsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testFormPostAsContent() throws Exception {
-		RestClient client = new TestRestClient().setHeader("Accept", "text/plain");
+		RestClient client = TestMicroservice.client().accept("text/plain").build();
 		String r;
 		String url = URL + "/testFormPostAsContent";
 
@@ -555,7 +552,7 @@ public class ParamsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testMultiPartParams() throws Exception {
-		RestClient client = new TestRestClient().setHeader("Accept", "text/plain");
+		RestClient client = TestMicroservice.client().accept("text/plain").build();
 		String r;
 		String url = URL + "/testMultiPartParams";
 
@@ -597,7 +594,7 @@ public class ParamsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testMultiPartParamsSingleValues() throws Exception {
-		RestClient client = new TestRestClient().setHeader("Accept", "text/plain");
+		RestClient client = TestMicroservice.client().accept("text/plain").build();
 		String r;
 		String url = URL + "/testMultiPartParams";
 
@@ -641,9 +638,10 @@ public class ParamsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testFormPostsWithMultiParamsUsingProperty() throws Exception {
-		RestClient client = new TestRestClient()
-			.setHeader("Content-Type", "application/x-www-form-urlencoded")
-			.setHeader("Accept", "application/x-www-form-urlencoded");
+		RestClient client = TestMicroservice.client()
+			.contentType("application/x-www-form-urlencoded")
+			.accept("application/x-www-form-urlencoded")
+			.build();
 		String r;
 		String url = URL + "/testFormPostsWithMultiParamsUsingProperty";
 
@@ -681,9 +679,10 @@ public class ParamsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testFormPostsWithMultiParamsUsingAnnotation() throws Exception {
-		RestClient client = new TestRestClient()
-			.setHeader("Content-Type", "application/x-www-form-urlencoded")
-			.setHeader("Accept", "application/x-www-form-urlencoded");
+		RestClient client = TestMicroservice.client()
+			.contentType("application/x-www-form-urlencoded")
+			.accept("application/x-www-form-urlencoded")
+			.build();
 		String r;
 		String url = URL + "/testFormPostsWithMultiParamsUsingAnnotation";
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ParsersTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ParsersTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ParsersTest.java
index 48f86ce..21e07a1 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ParsersTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ParsersTest.java
@@ -16,7 +16,6 @@ import static javax.servlet.http.HttpServletResponse.*;
 import static org.apache.juneau.rest.test.TestUtils.*;
 import static org.junit.Assert.*;
 
-import org.apache.juneau.plaintext.*;
 import org.apache.juneau.rest.client.*;
 import org.junit.*;
 
@@ -30,16 +29,14 @@ public class ParsersTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testParserOnClass() throws Exception {
-		RestClient client = new TestRestClient(PlainTextSerializer.class, PlainTextParser.class);
+		RestClient client = TestMicroservice.DEFAULT_CLIENT_PLAINTEXT;
 		String url = URL + "/testParserOnClass";
 
-		client.setContentType("text/a");
-		String r = client.doPut(url, "test1").getResponseAsString();
+		String r = client.doPut(url, "test1").contentType("text/a").getResponseAsString();
 		assertEquals("text/a - test1", r);
 
 		try {
-			client.setContentType("text/b");
-			client.doPut(url + "?noTrace=true", "test1").getResponseAsString();
+			client.doPut(url + "?noTrace=true", "test1").contentType("text/b").getResponseAsString();
 			fail("Exception expected");
 		} catch (RestCallException e) {
 			checkErrorResponse(debug, e, SC_UNSUPPORTED_MEDIA_TYPE,
@@ -48,11 +45,8 @@ public class ParsersTest extends RestTestcase {
 			);
 		}
 
-		client.setContentType("text/json").setAccept("text/json");
-		r = client.doPut(url, "'test1'").getResponseAsString();
+		r = client.doPut(url, "'test1'").contentType("text/json").accept("text/json").getResponseAsString();
 		assertEquals("\"test1\"", r);
-
-		client.closeQuietly();
 	}
 
 	//====================================================================================================
@@ -60,16 +54,14 @@ public class ParsersTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testParserOnMethod() throws Exception {
-		RestClient client = new TestRestClient(PlainTextSerializer.class, PlainTextParser.class);
+		RestClient client = TestMicroservice.DEFAULT_CLIENT_PLAINTEXT;
 		String url = URL + "/testParserOnMethod";
 
-		client.setContentType("text/b");
-		String r = client.doPut(url, "test2").getResponseAsString();
+		String r = client.doPut(url, "test2").contentType("text/b").getResponseAsString();
 		assertEquals("text/b - test2", r);
 
 		try {
-			client.setContentType("text/a");
-			client.doPut(url + "?noTrace=true", "test2").getResponseAsString();
+			client.doPut(url + "?noTrace=true", "test2").contentType("text/a").getResponseAsString();
 			fail("Exception expected");
 		} catch (RestCallException e) {
 			checkErrorResponse(debug, e, SC_UNSUPPORTED_MEDIA_TYPE,
@@ -79,8 +71,7 @@ public class ParsersTest extends RestTestcase {
 		}
 
 		try {
-			client.setContentType("text/json");
-			r = client.doPut(url + "?noTrace=true", "'test2'").getResponseAsString();
+			r = client.doPut(url + "?noTrace=true", "'test2'").contentType("text/json").getResponseAsString();
 			fail("Exception expected");
 		} catch (RestCallException e) {
 			checkErrorResponse(debug, e, SC_UNSUPPORTED_MEDIA_TYPE,
@@ -88,8 +79,6 @@ public class ParsersTest extends RestTestcase {
 				"Supported media-types: [text/b]"
 			);
 		}
-
-		client.closeQuietly();
 	}
 
 	//====================================================================================================
@@ -97,22 +86,17 @@ public class ParsersTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testParserOverriddenOnMethod() throws Exception {
-		RestClient client = new TestRestClient(PlainTextSerializer.class, PlainTextParser.class);
+		RestClient client = TestMicroservice.DEFAULT_CLIENT_PLAINTEXT;
 		String url = URL + "/testParserOverriddenOnMethod";
 
-		client.setContentType("text/a");
-		String r = client.doPut(url, "test3").getResponseAsString();
+		String r = client.doPut(url, "test3").contentType("text/a").getResponseAsString();
 		assertEquals("text/a - test3", r);
 
-		client.setContentType("text/b");
-		r = client.doPut(url, "test3").getResponseAsString();
+		r = client.doPut(url, "test3").contentType("text/b").getResponseAsString();
 		assertEquals("text/b - test3", r);
 
-		client.setContentType("text/json");
-		r = client.doPut(url, "'test3'").getResponseAsString();
+		r = client.doPut(url, "'test3'").contentType("text/json").getResponseAsString();
 		assertEquals("test3", r);
-
-		client.closeQuietly();
 	}
 
 	//====================================================================================================
@@ -120,22 +104,17 @@ public class ParsersTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testParserWithDifferentMediaTypes() throws Exception {
-		RestClient client = new TestRestClient(PlainTextSerializer.class, PlainTextParser.class);
+		RestClient client = TestMicroservice.DEFAULT_CLIENT_PLAINTEXT;
 		String url = URL + "/testParserWithDifferentMediaTypes";
 
-		client.setContentType("text/a");
-		String r = client.doPut(url, "test4").getResponseAsString();
+		String r = client.doPut(url, "test4").contentType("text/a").getResponseAsString();
 		assertEquals("text/d - test4", r);
 
-		client.setContentType("text/d");
-		r = client.doPut(url, "test4").getResponseAsString();
+		r = client.doPut(url, "test4").contentType("text/d").getResponseAsString();
 		assertEquals("text/d - test4", r);
 
-		client.setContentType("text/json");
-		r = client.doPut(url, "'test4'").getResponseAsString();
+		r = client.doPut(url, "'test4'").contentType("text/json").getResponseAsString();
 		assertEquals("test4", r);
-
-		client.closeQuietly();
 	}
 
 	//====================================================================================================
@@ -143,12 +122,11 @@ public class ParsersTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testValidErrorResponse() throws Exception {
-		RestClient client = new TestRestClient(PlainTextSerializer.class, PlainTextParser.class);
+		RestClient client = TestMicroservice.DEFAULT_CLIENT_PLAINTEXT;
 		String url = URL + "/testValidErrorResponse";
 
 		try {
-			client.setContentType("text/bad");
-			client.doPut(url + "?noTrace=true", "test1").getResponseAsString();
+			client.doPut(url + "?noTrace=true", "test1").contentType("text/bad").getResponseAsString();
 			fail("Exception expected");
 		} catch (RestCallException e) {
 			checkErrorResponse(debug, e, SC_UNSUPPORTED_MEDIA_TYPE,
@@ -156,7 +134,5 @@ public class ParsersTest extends RestTestcase {
 				"Supported media-types: [text/a"
 			);
 		}
-
-		client.closeQuietly();
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/PathTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/PathTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/PathTest.java
index 733a685..a4c9db5 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/PathTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/PathTest.java
@@ -14,7 +14,6 @@ package org.apache.juneau.rest.test;
 
 import static org.junit.Assert.*;
 
-import org.apache.juneau.json.*;
 import org.apache.juneau.rest.client.*;
 import org.junit.*;
 
@@ -27,7 +26,7 @@ public class PathTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testBasic() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
+		RestClient client = TestMicroservice.DEFAULT_CLIENT;
 		String r = null;
 
 		r = client.doGet(URL).getResponse(String.class);
@@ -38,7 +37,5 @@ public class PathTest extends RestTestcase {
 
 		r = client.doGet(URL + "/testPath2/testPath3").getResponse(String.class);
 		assertEquals("/testPath/testPath2/testPath3", r);
-
-		client.closeQuietly();
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/PathsTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/PathsTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/PathsTest.java
index 4282a80..6aa8517 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/PathsTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/PathsTest.java
@@ -15,7 +15,6 @@ package org.apache.juneau.rest.test;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.json.*;
 import org.apache.juneau.rest.client.*;
 import org.junit.*;
 
@@ -28,7 +27,7 @@ public class PathsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testBasic() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
+		RestClient client = TestMicroservice.DEFAULT_CLIENT;
 		ObjectMap r;
 		String url;
 
@@ -1362,7 +1361,5 @@ public class PathsTest extends RestTestcase {
 		assertTrue(r.getString("servletParentURI").endsWith("/testPaths"));
 		assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a"));
 		assertEquals(4, (int)r.getInt("method"));
-
-		client.closeQuietly();
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/PropertiesTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/PropertiesTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/PropertiesTest.java
index 67b827a..f52a564 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/PropertiesTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/PropertiesTest.java
@@ -14,7 +14,6 @@ package org.apache.juneau.rest.test;
 
 import static org.junit.Assert.*;
 
-import org.apache.juneau.json.*;
 import org.apache.juneau.rest.client.*;
 import org.junit.*;
 
@@ -27,11 +26,9 @@ public class PropertiesTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testPropertiesDefinedOnMethod() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
+		RestClient client = TestMicroservice.DEFAULT_CLIENT;
 		String r = client.doGet(URL + "/testPropertiesDefinedOnMethod").getResponseAsString();
 		assertTrue(r.matches("A1=a1,A2=c,B1=b1,B2=c,C=c,R1a=.*/testProperties/testPropertiesDefinedOnMethod,R1b=.*/testProperties,R2=bar,R3=baz,R4=a1,R5=c,R6=c"));
-
-		client.closeQuietly();
 	}
 
 	//====================================================================================================
@@ -39,10 +36,8 @@ public class PropertiesTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testProperties() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
-		String r = client.doGet(URL + "/testProperties/a1?P=p1").setHeader("H", "h1").getResponseAsString();
+		RestClient client = TestMicroservice.DEFAULT_CLIENT;
+		String r = client.doGet(URL + "/testProperties/a1?P=p1").header("H", "h1").getResponseAsString();
 		assertEquals("A=a1,P=p1,H=h1", r);
-
-		client.closeQuietly();
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/RestClientTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/RestClientTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/RestClientTest.java
index 7902f5b..2250489 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/RestClientTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/RestClientTest.java
@@ -19,7 +19,6 @@ import java.util.*;
 import java.util.regex.*;
 
 import org.apache.http.entity.*;
-import org.apache.juneau.json.*;
 import org.apache.juneau.rest.client.*;
 import org.junit.*;
 
@@ -32,7 +31,7 @@ public class RestClientTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testSuccessPattern() throws Exception {
-		RestClient c = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
+		RestClient c = TestMicroservice.DEFAULT_CLIENT;
 		String r;
 		int rc;
 
@@ -47,8 +46,6 @@ public class RestClientTest extends RestTestcase {
 		} catch (RestCallException e) {
 			assertEquals("Success pattern not detected.", e.getLocalizedMessage());
 		}
-
-		c.closeQuietly();
 	}
 
 	//====================================================================================================
@@ -56,7 +53,7 @@ public class RestClientTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testFailurePattern() throws Exception {
-		RestClient c = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
+		RestClient c = TestMicroservice.DEFAULT_CLIENT;
 		String r;
 		int rc;
 
@@ -78,8 +75,6 @@ public class RestClientTest extends RestTestcase {
 		} catch (RestCallException e) {
 			assertEquals("Failure pattern detected.", e.getLocalizedMessage());
 		}
-
-		c.closeQuietly();
 	}
 
 	//====================================================================================================
@@ -87,7 +82,7 @@ public class RestClientTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testCaptureResponse() throws Exception {
-		RestClient c = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
+		RestClient c = TestMicroservice.DEFAULT_CLIENT;
 		RestCall rc = c.doPost(URL, new StringEntity("xxx")).captureResponse();
 
 		try {
@@ -111,8 +106,6 @@ public class RestClientTest extends RestTestcase {
 		} catch (IllegalStateException e) {
 			assertEquals("Method cannot be called.  Response has already been consumed.", e.getLocalizedMessage());
 		}
-
-		c.closeQuietly();
 	}
 
 	//====================================================================================================
@@ -120,7 +113,7 @@ public class RestClientTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testAddResponsePattern() throws Exception {
-		RestClient c = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
+		RestClient c = TestMicroservice.DEFAULT_CLIENT;
 		String r;
 
 		final List<String> l = new ArrayList<String>();
@@ -135,18 +128,18 @@ public class RestClientTest extends RestTestcase {
 			}
 		};
 
-		r = c.doPost(URL, new StringEntity("x=1,y=2")).addResponsePattern(p).getResponseAsString();
+		r = c.doPost(URL, new StringEntity("x=1,y=2")).responsePattern(p).getResponseAsString();
 		assertEquals("x=1,y=2", r);
 		assertObjectEquals("['1/2']", l);
 
 		l.clear();
 
-		r = c.doPost(URL, new StringEntity("x=1,y=2\nx=3,y=4")).addResponsePattern(p).getResponseAsString();
+		r = c.doPost(URL, new StringEntity("x=1,y=2\nx=3,y=4")).responsePattern(p).getResponseAsString();
 		assertEquals("x=1,y=2\nx=3,y=4", r);
 		assertObjectEquals("['1/2','3/4']", l);
 
 		try {
-			c.doPost(URL, new StringEntity("x=1")).addResponsePattern(p).run();
+			c.doPost(URL, new StringEntity("x=1")).responsePattern(p).run();
 			fail();
 		} catch (RestCallException e) {
 			assertEquals("Pattern not found!", e.getLocalizedMessage());
@@ -176,24 +169,22 @@ public class RestClientTest extends RestTestcase {
 		};
 
 		l.clear();
-		r = c.doPost(URL, new StringEntity("x=1,y=2\nx=3,y=4")).addResponsePattern(p1).addResponsePattern(p2).getResponseAsString();
+		r = c.doPost(URL, new StringEntity("x=1,y=2\nx=3,y=4")).responsePattern(p1).responsePattern(p2).getResponseAsString();
 		assertEquals("x=1,y=2\nx=3,y=4", r);
 		assertObjectEquals("['x=1','x=3','y=2','y=4']", l);
 
 		try {
-			c.doPost(URL, new StringEntity("x=1\nx=3")).addResponsePattern(p1).addResponsePattern(p2).getResponseAsString();
+			c.doPost(URL, new StringEntity("x=1\nx=3")).responsePattern(p1).responsePattern(p2).getResponseAsString();
 		} catch (RestCallException e) {
 			assertEquals("Pattern y not found!", e.getLocalizedMessage());
 			assertEquals(0, e.getResponseCode());
 		}
 
 		try {
-			c.doPost(URL, new StringEntity("y=1\ny=3")).addResponsePattern(p1).addResponsePattern(p2).getResponseAsString();
+			c.doPost(URL, new StringEntity("y=1\ny=3")).responsePattern(p1).responsePattern(p2).getResponseAsString();
 		} catch (RestCallException e) {
 			assertEquals("Pattern x not found!", e.getLocalizedMessage());
 			assertEquals(0, e.getResponseCode());
 		}
-
-		c.closeQuietly();
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/SerializersTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/SerializersTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/SerializersTest.java
index ab0649c..b7947f0 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/SerializersTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/SerializersTest.java
@@ -16,7 +16,6 @@ import static javax.servlet.http.HttpServletResponse.*;
 import static org.apache.juneau.rest.test.TestUtils.*;
 import static org.junit.Assert.*;
 
-import org.apache.juneau.json.*;
 import org.apache.juneau.rest.client.*;
 import org.junit.*;
 
@@ -24,17 +23,8 @@ public class SerializersTest extends RestTestcase {
 
 	private static String URL = "/testSerializers";
 	private static boolean debug = false;
-	private static RestClient client;
+	private RestClient client = TestMicroservice.DEFAULT_CLIENT;
 
-	@BeforeClass
-	public static void beforeClass() {
-		client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
-	}
-
-	@AfterClass
-	public static void afterClass() {
-		client.closeQuietly();
-	}
 
 	//====================================================================================================
 	// Serializer defined on class.
@@ -43,13 +33,11 @@ public class SerializersTest extends RestTestcase {
 	public void testSerializerOnClass() throws Exception {
 		String url = URL + "/testSerializerOnClass";
 
-		client.setAccept("text/a");
-		String r = client.doGet(url).getResponseAsString();
+		String r = client.doGet(url).accept("text/a").getResponseAsString();
 		assertEquals("text/a - test1", r);
 
 		try {
-			client.setAccept("text/b");
-			client.doGet(url + "?noTrace=true").getResponseAsString();
+			client.doGet(url + "?noTrace=true").accept("text/b").getResponseAsString();
 			fail("Exception expected");
 		} catch (RestCallException e) {
 			checkErrorResponse(debug, e, SC_NOT_ACCEPTABLE,
@@ -57,8 +45,7 @@ public class SerializersTest extends RestTestcase {
 				"Supported media-types: [text/a, ");
 		}
 
-		client.setAccept("text/json");
-		r = client.doGet(url).getResponseAsString();
+		r = client.doGet(url).accept("text/json").getResponseAsString();
 		assertEquals("\"test1\"", r);
 	}
 
@@ -70,8 +57,7 @@ public class SerializersTest extends RestTestcase {
 		String url = URL + "/testSerializerOnMethod";
 
 		try {
-			client.setAccept("text/a");
-			client.doGet(url + "?noTrace=true").getResponseAsString();
+			client.doGet(url + "?noTrace=true").accept("text/a").getResponseAsString();
 			fail("Exception expected");
 		} catch (RestCallException e) {
 			checkErrorResponse(debug, e, SC_NOT_ACCEPTABLE,
@@ -81,8 +67,7 @@ public class SerializersTest extends RestTestcase {
 		}
 
 		try {
-			client.setAccept("text/json");
-			client.doGet(url + "?noTrace=true").getResponseAsString();
+			client.doGet(url + "?noTrace=true").accept("text/json").getResponseAsString();
 			fail("Exception expected");
 		} catch (RestCallException e) {
 			checkErrorResponse(debug, e, SC_NOT_ACCEPTABLE,
@@ -99,16 +84,13 @@ public class SerializersTest extends RestTestcase {
 	public void testSerializerOverriddenOnMethod() throws Exception {
 		String url = URL + "/testSerializerOverriddenOnMethod";
 
-		client.setAccept("text/a");
-		String r = client.doGet(url).getResponseAsString();
+		String r = client.doGet(url).accept("text/a").getResponseAsString();
 		assertEquals("text/c - test3", r);
 
-		client.setAccept("text/b");
-		r = client.doGet(url).getResponseAsString();
+		r = client.doGet(url).accept("text/b").getResponseAsString();
 		assertEquals("text/b - test3", r);
 
-		client.setAccept("text/json");
-		r = client.doGet(url).getResponseAsString();
+		r = client.doGet(url).accept("text/json").getResponseAsString();
 		assertEquals("\"test3\"", r);
 	}
 
@@ -119,16 +101,13 @@ public class SerializersTest extends RestTestcase {
 	public void testSerializerWithDifferentMediaTypes() throws Exception {
 		String url = URL + "/testSerializerWithDifferentMediaTypes";
 
-		client.setAccept("text/a");
-		String r = client.doGet(url).getResponseAsString();
+		String r = client.doGet(url).accept("text/a").getResponseAsString();
 		assertEquals("text/d - test4", r);
 
-		client.setAccept("text/d");
-		r = client.doGet(url).getResponseAsString();
+		r = client.doGet(url).accept("text/d").getResponseAsString();
 		assertEquals("text/d - test4", r);
 
-		client.setAccept("text/json");
-		r = client.doGet(url).getResponseAsString();
+		r = client.doGet(url).accept("text/json").getResponseAsString();
 		assertEquals("\"test4\"", r);
 	}
 
@@ -140,8 +119,7 @@ public class SerializersTest extends RestTestcase {
 		String url = URL + "/test406";
 
 		try {
-			client.setAccept("text/bad");
-			client.doGet(url + "?noTrace=true").getResponseAsString();
+			client.doGet(url + "?noTrace=true").accept("text/bad").getResponseAsString();
 			fail("Exception expected");
 		} catch (RestCallException e) {
 			checkErrorResponse(debug, e, SC_NOT_ACCEPTABLE,

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/StaticFilesTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/StaticFilesTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/StaticFilesTest.java
index 96e31f8..42c4c9b 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/StaticFilesTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/StaticFilesTest.java
@@ -14,7 +14,6 @@ package org.apache.juneau.rest.test;
 
 import static org.junit.Assert.*;
 
-import org.apache.juneau.plaintext.*;
 import org.apache.juneau.rest.client.*;
 import org.junit.*;
 
@@ -27,7 +26,7 @@ public class StaticFilesTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testXdocs() throws Exception {
-		RestClient client = new TestRestClient(PlainTextSerializer.class, PlainTextParser.class);
+		RestClient client = TestMicroservice.DEFAULT_CLIENT_PLAINTEXT;
 		String r;
 		String url = URL + "/xdocs";
 
@@ -50,7 +49,5 @@ public class StaticFilesTest extends RestTestcase {
 		} catch (RestCallException e) {
 			assertEquals(404, e.getResponseCode());
 		}
-
-		client.closeQuietly();
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/TestMicroservice.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/TestMicroservice.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/TestMicroservice.java
index 84df9ec..25a740d 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/TestMicroservice.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/TestMicroservice.java
@@ -13,18 +13,32 @@
 package org.apache.juneau.rest.test;
 
 import java.net.*;
+import java.security.*;
 import java.util.*;
 
+import javax.net.ssl.*;
+
+import org.apache.http.conn.ssl.*;
+import org.apache.http.impl.client.*;
 import org.apache.juneau.microservice.*;
+import org.apache.juneau.parser.*;
+import org.apache.juneau.plaintext.*;
+import org.apache.juneau.rest.client.*;
+import org.apache.juneau.serializer.*;
 
 /**
  * Utility class for starting up the tests microservice.
  * @author james.bognar
  */
 public class TestMicroservice {
+
 	static RestMicroservice microservice;
 	static URI microserviceURI;
 
+	// Reusable HTTP clients that get created and shut down with the microservice.
+	public static RestClient DEFAULT_CLIENT;
+	public static RestClient DEFAULT_CLIENT_PLAINTEXT;
+
 	/**
 	 * Starts the microservice.
 	 * @return <jk>true</jk> if the service started, <jk>false</jk> if it's already started.
@@ -41,6 +55,8 @@ public class TestMicroservice {
 					"Test-Entry: test-value"
 				);
 			microserviceURI = microservice.start().getURI();
+			DEFAULT_CLIENT = client().build();
+			DEFAULT_CLIENT_PLAINTEXT = client(PlainTextSerializer.class, PlainTextParser.class).build();
 			return true;
 		} catch (Throwable e) {
 			System.err.println(e); // NOT DEBUG
@@ -65,8 +81,55 @@ public class TestMicroservice {
 		try {
 			microservice.stop();
 			microservice = null;
+			DEFAULT_CLIENT.closeQuietly();
+			DEFAULT_CLIENT_PLAINTEXT.closeQuietly();
+
 		} catch (Exception e) {
 			System.err.println(e); // NOT DEBUG
 		}
 	}
+
+	/**
+	 * Create a new HTTP client.
+	 */
+	public static RestClientBuilder client() {
+		try {
+			return new RestClientBuilder()
+				.rootUrl(microserviceURI)
+			//	.httpClient(createHttpClient(), true)
+			;
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	/**
+	 * Create a new HTTP client using the specified serializer and parser.
+	 */
+	public static RestClientBuilder client(Serializer s, Parser p) {
+		return client().serializer(s).parser(p);
+	}
+
+	/**
+	 * Create a new HTTP client using the specified serializer and parser.
+	 */
+	public static RestClientBuilder client(Class<? extends Serializer> s, Class<? extends Parser> p) {
+		return client().serializer(s).parser(p);
+	}
+
+	// TODO - Why is this needed?
+	static SSLConnectionSocketFactory getSSLSocketFactory() throws Exception {
+		SSLContext sslContext = SSLContext.getInstance("SSL");
+		TrustManager tm = new SimpleX509TrustManager(true);
+		sslContext.init(null, new TrustManager[]{tm}, new SecureRandom());
+		return new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier());
+	}
+
+	public static CloseableHttpClient createHttpClient() {
+		try {
+			return HttpClients.custom().setSSLSocketFactory(getSSLSocketFactory()).setRedirectStrategy(new LaxRedirectStrategy()).build();
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/TestRestClient.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/TestRestClient.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/TestRestClient.java
deleted file mode 100644
index 05c491c..0000000
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/TestRestClient.java
+++ /dev/null
@@ -1,69 +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.rest.test;
-
-import java.security.*;
-
-import javax.net.ssl.*;
-
-import org.apache.http.conn.ssl.*;
-import org.apache.http.impl.client.*;
-import org.apache.juneau.parser.*;
-import org.apache.juneau.rest.client.*;
-import org.apache.juneau.serializer.*;
-
-/**
- * REST client with lenient SSL support and lax redirection strategy.
- */
-class TestRestClient extends RestClient {
-
-	public TestRestClient(Class<? extends Serializer> s, Class<? extends Parser> p) throws InstantiationException {
-		super(s,p);
-		setRootUrl(TestMicroservice.getURI());
-	}
-
-	public TestRestClient(Serializer s, Parser p) {
-		super(s,p);
-		setRootUrl(TestMicroservice.getURI());
-	}
-
-	public TestRestClient() {
-		setRootUrl(TestMicroservice.getURI());
-	}
-
-	public TestRestClient(CloseableHttpClient c) {
-		super(c);
-		setRootUrl(TestMicroservice.getURI());
-	}
-
-	public static SSLConnectionSocketFactory getSSLSocketFactory() throws Exception {
-		SSLContext sslContext = SSLContext.getInstance("SSL");
-		TrustManager tm = new SimpleX509TrustManager(true);
-		sslContext.init(null, new TrustManager[]{tm}, new SecureRandom());
-		return new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier());
-	}
-
-	@Override /* RestClient */
-	protected CloseableHttpClient createHttpClient() throws Exception {
-		try {
-			return HttpClients.custom().setSSLSocketFactory(getSSLSocketFactory()).setRedirectStrategy(new LaxRedirectStrategy()).build();
-		} catch (KeyStoreException e) {
-			throw new RuntimeException(e);
-		} catch (NoSuchAlgorithmException e) {
-			throw new RuntimeException(e);
-		} catch (Throwable e) {
-			e.printStackTrace();
-			return null;
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/TestUtils.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/TestUtils.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/TestUtils.java
index 164a04e..22d84e0 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/TestUtils.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/TestUtils.java
@@ -24,8 +24,10 @@ import junit.framework.*;
 
 public class TestUtils {
 
-	private static JsonSerializer js2 = new JsonSerializer.Simple()
-		.addPojoSwaps(IteratorSwap.class, EnumerationSwap.class);
+	private static JsonSerializer js2 = new JsonSerializerBuilder()
+		.simple()
+		.pojoSwaps(IteratorSwap.class, EnumerationSwap.class)
+		.build();
 
 	/**
 	 * Assert that the object equals the specified string after running it through JsonSerializer.DEFAULT_LAX.toString().

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/TransformsTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/TransformsTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/TransformsTest.java
index d758fd8..3d405c4 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/TransformsTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/TransformsTest.java
@@ -14,7 +14,6 @@ package org.apache.juneau.rest.test;
 
 import static org.junit.Assert.*;
 
-import org.apache.juneau.json.*;
 import org.apache.juneau.rest.client.*;
 import org.junit.*;
 
@@ -28,7 +27,7 @@ public class TransformsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testClassTransformOverridesParentClassTransform() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
+		RestClient client = TestMicroservice.DEFAULT_CLIENT;
 		String r;
 		String url = URL + "/testClassTransformOverridesParentClassTransform";
 
@@ -40,8 +39,6 @@ public class TransformsTest extends RestTestcase {
 
 		r = client.doPut(url + "/A2-2", "").getResponse(String.class);
 		assertEquals("A2-2", r);
-
-		client.closeQuietly();
 	}
 
 	//====================================================================================================
@@ -50,7 +47,7 @@ public class TransformsTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testMethodTransformOverridesClassTransform() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
+		RestClient client = TestMicroservice.DEFAULT_CLIENT;
 		String r;
 		String url = URL + "/testMethodTransformOverridesClassTransform";
 
@@ -62,7 +59,5 @@ public class TransformsTest extends RestTestcase {
 
 		r = client.doPut(url + "/A3-2", "").getResponse(String.class);
 		assertEquals("A3-2", r);
-
-		client.closeQuietly();
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/UrisTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/UrisTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/UrisTest.java
index 57b929c..9917e3c 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/UrisTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/UrisTest.java
@@ -15,7 +15,6 @@ package org.apache.juneau.rest.test;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.json.*;
 import org.apache.juneau.rest.client.*;
 import org.junit.*;
 
@@ -33,7 +32,7 @@ public class UrisTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testRoot() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
+		RestClient client = TestMicroservice.DEFAULT_CLIENT;
 		ObjectMap r;
 
 		//--------------------------------------------------------------------------------
@@ -304,8 +303,6 @@ public class UrisTest extends RestTestcase {
 		// Always the same
 		assertTrue(r.getString("testURL2").endsWith(port + "/testURL"));
 		assertEquals("http://testURL", r.getString("testURL3"));
-
-		client.closeQuietly();
 	}
 
 	//====================================================================================================
@@ -313,7 +310,7 @@ public class UrisTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testChild() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
+		RestClient client = TestMicroservice.DEFAULT_CLIENT;
 		ObjectMap r;
 
 		//--------------------------------------------------------------------------------
@@ -603,8 +600,6 @@ public class UrisTest extends RestTestcase {
 		// Always the same
 		assertTrue(r.getString("testURL2").endsWith(port + "/testURL"));
 		assertEquals("http://testURL", r.getString("testURL3"));
-
-		client.closeQuietly();
 	}
 
 	//====================================================================================================
@@ -612,7 +607,7 @@ public class UrisTest extends RestTestcase {
 	//====================================================================================================
 	@Test
 	public void testGrandChild() throws Exception {
-		RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT);
+		RestClient client = TestMicroservice.DEFAULT_CLIENT;
 		ObjectMap r;
 
 		//--------------------------------------------------------------------------------
@@ -902,15 +897,5 @@ public class UrisTest extends RestTestcase {
 		// Always the same
 		assertTrue(r.getString("testURL2").endsWith(port + "/testURL"));
 		assertEquals("http://testURL", r.getString("testURL3"));
-
-		client.closeQuietly();
 	}
-//
-//	private static int getPort(String url) {
-//		Pattern p = Pattern.compile("\\:(\\d{2,5})");
-//		Matcher m = p.matcher(url);
-//		if (m.find())
-//			return Integer.parseInt(m.group(1));
-//		return -1;
-//	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/UrlContentTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/UrlContentTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/UrlContentTest.java
index 4ecee25..0f03f94 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/UrlContentTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/UrlContentTest.java
@@ -20,17 +20,8 @@ import org.junit.*;
 public class UrlContentTest extends RestTestcase {
 
 	private static String URL = "/testUrlContent";
-	private static RestClient client;
+	private RestClient client = TestMicroservice.DEFAULT_CLIENT_PLAINTEXT;
 
-	@BeforeClass
-	public static void beforeClass() {
-		client = new TestRestClient().setHeader("Accept", "text/plain");
-	}
-
-	@AfterClass
-	public static void afterClass() {
-		client.closeQuietly();
-	}
 
 	//====================================================================================================
 	// Test URL &Body parameter containing a String

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/UrlPathPatternTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/UrlPathPatternTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/UrlPathPatternTest.java
index c05bc2e..5e19738 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/UrlPathPatternTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/UrlPathPatternTest.java
@@ -20,7 +20,7 @@ import org.apache.juneau.json.*;
 import org.apache.juneau.rest.*;
 import org.junit.*;
 
-public class UrlPathPatternTest extends RestTestcase {
+public class UrlPathPatternTest {
 	@Test
 	public void testComparison() throws Exception {
 		List<UrlPathPattern> l = new LinkedList<UrlPathPattern>();
@@ -35,6 +35,6 @@ public class UrlPathPatternTest extends RestTestcase {
 		l.add(new UrlPathPattern("/foo/{id}/bar/*"));
 
 		Collections.sort(l);
-		assertEquals("[{vars:[],patternString:'/foo/bar'},{vars:[],patternString:'/foo/bar/*'},{vars:['id'],patternString:'/foo/{id}/bar'},{vars:['id'],patternString:'/foo/{id}/bar/*'},{vars:['id'],patternString:'/foo/{id}'},{vars:['id'],patternString:'/foo/{id}/*'},{vars:[],patternString:'/foo'},{vars:[],patternString:'/foo/*'}]", JsonSerializer.DEFAULT_LAX.serialize(l));
+		assertEquals("[{patternString:'/foo/bar',vars:[]},{patternString:'/foo/bar/*',vars:[]},{patternString:'/foo/{id}/bar',vars:['id']},{patternString:'/foo/{id}/bar/*',vars:['id']},{patternString:'/foo/{id}',vars:['id']},{patternString:'/foo/{id}/*',vars:['id']},{patternString:'/foo',vars:[]},{patternString:'/foo/*',vars:[]}]", JsonSerializer.DEFAULT_LAX.builder().sortProperties(true).build().serialize(l));
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java
index 113d9da..0e907c3 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java
@@ -36,6 +36,7 @@ import org.apache.juneau.parser.*;
 import org.apache.juneau.parser.ParseException;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.svl.*;
+import org.apache.juneau.uon.*;
 import org.apache.juneau.urlencoding.*;
 import org.apache.juneau.utils.*;
 
@@ -113,8 +114,11 @@ public final class RestRequest extends HttpServletRequestWrapper {
 
 			method = _method;
 
-			if (servlet.context.allowBodyParam)
+			if (servlet.context.allowBodyParam) {
 				body = getQueryParameter("body");
+				if (body != null)
+					setHeader("Content-Type", UonSerializer.DEFAULT.getResponseContentType());
+			}
 
 			defaultServletHeaders = servlet.getDefaultRequestHeaders();
 
@@ -192,10 +196,10 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	 * @param name The header name.
 	 * @param value The header value.
 	 */
-	public void setHeader(String name, String value) {
+	public void setHeader(String name, Object value) {
 		if (overriddenHeaders == null)
 			overriddenHeaders = new TreeMap<String,String>(String.CASE_INSENSITIVE_ORDER);
-		overriddenHeaders.put(name, value);
+		overriddenHeaders.put(name, StringUtils.toString(value));
 	}