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 2018/05/10 23:53:21 UTC

[juneau] branch master updated: Consolidate test utility classes.

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 9e349dc  Consolidate test utility classes.
9e349dc is described below

commit 9e349dc1e2f651c763b3508415bb96e727b948b4
Author: JamesBognar <ja...@apache.org>
AuthorDate: Thu May 10 19:53:02 2018 -0400

    Consolidate test utility classes.
---
 .../java/org/apache/juneau/AnnotationsTest.java    |   2 +-
 .../test/java/org/apache/juneau/BeanMapTest.java   |   2 +-
 .../java/org/apache/juneau/ComboRoundTripTest.java |   1 +
 .../java/org/apache/juneau/ComboSerializeTest.java |   1 +
 .../java/org/apache/juneau/ContextCacheTest.java   |   2 +-
 .../java/org/apache/juneau/DataConversionTest.java |   1 +
 .../java/org/apache/juneau/DynaBeanComboTest.java  |   2 +-
 .../java/org/apache/juneau/IgnoredClassesTest.java |   2 +-
 .../test/java/org/apache/juneau/MaxIndentTest.java |   1 +
 .../java/org/apache/juneau/ObjectListTest.java     |   2 +-
 .../test/java/org/apache/juneau/ObjectMapTest.java |   2 +-
 .../java/org/apache/juneau/PojoExamplesTest.java   |   2 +-
 .../java/org/apache/juneau/PropertyStoreTest.java  |   2 +-
 .../a/rttests/RoundTripBeanInheritanceTest.java    |   2 +-
 .../juneau/a/rttests/RoundTripBeanMapsTest.java    |   2 +-
 .../juneau/a/rttests/RoundTripClassesTest.java     |   2 +-
 .../apache/juneau/a/rttests/RoundTripDTOsTest.java |   2 +-
 .../apache/juneau/a/rttests/RoundTripEnumTest.java |   2 +-
 .../juneau/a/rttests/RoundTripGenericsTest.java    |   2 +-
 .../a/rttests/RoundTripObjectsAsStringsTest.java   |   3 +-
 .../RoundTripObjectsWithSpecialMethodsTest.java    |   2 +-
 .../org/apache/juneau/a/rttests/RoundTripTest.java |   1 +
 .../a/rttests/RoundTripTransformBeansTest.java     |   1 +
 .../juneau/a/rttests/RoundTripTrimStringsTest.java |   2 +-
 .../apache/juneau/config/ConfigBuilderTest.java    |   2 +-
 .../apache/juneau/config/ConfigInterfaceTest.java  |   2 +-
 .../juneau/config/ConfigMapListenerTest.java       |   2 +-
 .../org/apache/juneau/config/ConfigMapTest.java    |   2 +-
 .../java/org/apache/juneau/config/ConfigTest.java  |   2 +-
 .../java/org/apache/juneau/dto/atom/AtomTest.java  |   2 +-
 .../apache/juneau/dto/cognos/CognosXmlTest.java    |   2 +-
 .../apache/juneau/dto/html5/Html5ComboTest.java    |   2 +-
 .../juneau/dto/html5/Html5TemplateComboTest.java   |   2 +-
 .../org/apache/juneau/dto/swagger/ContactTest.java |   2 +-
 .../dto/swagger/ExternalDocumentationTest.java     |   2 +-
 .../apache/juneau/dto/swagger/HeaderInfoTest.java  |   2 +-
 .../org/apache/juneau/dto/swagger/InfoTest.java    |   2 +-
 .../org/apache/juneau/dto/swagger/ItemsTest.java   |   2 +-
 .../org/apache/juneau/dto/swagger/LicenseTest.java |   2 +-
 .../apache/juneau/dto/swagger/OperationTest.java   |   2 +-
 .../juneau/dto/swagger/ParameterInfoTest.java      |   2 +-
 .../juneau/dto/swagger/ResponseInfoTest.java       |   2 +-
 .../apache/juneau/dto/swagger/SchemaInfoTest.java  |   2 +-
 .../juneau/dto/swagger/SecuritySchemeTest.java     |   2 +-
 .../juneau/dto/swagger/SwaggerBuilderTest.java     |   2 +-
 .../org/apache/juneau/dto/swagger/SwaggerTest.java |   2 +-
 .../org/apache/juneau/dto/swagger/TagTest.java     |   2 +-
 .../org/apache/juneau/dto/swagger/XmlTest.java     |   2 +-
 .../apache/juneau/encoders/EncoderGroupTest.java   |   2 +-
 .../java/org/apache/juneau/html/BasicHtmlTest.java |   2 +-
 .../java/org/apache/juneau/html/CommonTest.java    |   2 +-
 .../apache/juneau/https/AcceptExtensionsTest.java  |   2 +-
 .../java/org/apache/juneau/https/AcceptTest.java   |   2 +-
 .../org/apache/juneau/https/ContentTypeTest.java   |   2 +-
 .../java/org/apache/juneau/jena/CommonTest.java    |   2 +-
 .../java/org/apache/juneau/jena/CommonXmlTest.java |   2 +-
 .../java/org/apache/juneau/jena/RdfParserTest.java |   3 +-
 .../test/java/org/apache/juneau/jena/RdfTest.java  |   2 +-
 .../java/org/apache/juneau/json/CommonTest.java    |   2 +-
 .../org/apache/juneau/json/JsonParserTest.java     |   2 +-
 .../juneau/json/JsonSchemaSerializerTest.java      |   9 +-
 .../test/java/org/apache/juneau/json/JsonTest.java |   2 +-
 .../apache/juneau/msgpack/MsgPackParserTest.java   |   2 +-
 .../org/apache/juneau/parser/ParserGroupTest.java  |   2 +-
 .../juneau/serializer/SerializerGroupTest.java     |   2 +-
 .../juneau/serializer/UriResolutionTest.java       |   1 +
 .../apache/juneau/svl/ResolvingObjectMapTest.java  |   2 +-
 .../apache/juneau/{ => testutils}/TestEnum.java    |   2 +-
 .../apache/juneau/{ => testutils}/TestUtils.java   |   3 +-
 .../juneau/transforms/BeanDictionaryComboTest.java |   2 +-
 .../apache/juneau/transforms/BeanFilterTest.java   |   2 +-
 .../apache/juneau/transforms/BuilderComboTest.java |   2 +-
 .../transforms/ByteArrayBase64SwapComboTest.java   |   2 +-
 .../juneau/transforms/CalendarSwapComboTest.java   |   3 +-
 .../apache/juneau/transforms/CalendarSwapTest.java |   1 +
 .../juneau/transforms/DateSwapComboTest.java       |   3 +-
 .../org/apache/juneau/transforms/DateSwapTest.java |   1 +
 .../juneau/transforms/LocalizedDatesTest.java      |   1 +
 .../java/org/apache/juneau/uon/Common_UonTest.java |   2 +-
 .../org/apache/juneau/uon/UonParserReaderTest.java |   2 +-
 .../java/org/apache/juneau/uon/UonParserTest.java  |   2 +-
 .../urlencoding/CommonParser_UrlEncodingTest.java  |   2 +-
 .../juneau/urlencoding/Common_UrlEncodingTest.java |   2 +-
 .../juneau/urlencoding/UrlEncodingParserTest.java  |   2 +-
 .../org/apache/juneau/utils/ArrayUtilsTest.java    |   2 +-
 .../apache/juneau/utils/ByteArrayCacheTest.java    |   2 +-
 .../org/apache/juneau/utils/ClassUtilsTest.java    |   2 +-
 .../apache/juneau/utils/CollectionUtilsTest.java   |   2 +-
 .../org/apache/juneau/utils/FilteredMapTest.java   |   2 +-
 .../org/apache/juneau/utils/MultiIterableTest.java |   2 +-
 .../java/org/apache/juneau/utils/MultiSetTest.java |   2 +-
 .../org/apache/juneau/utils/PojoQueryTest.java     |   2 +-
 .../org/apache/juneau/utils/SimpleMapTest.java     |   2 +-
 .../org/apache/juneau/utils/StringUtilsTest.java   |   3 +-
 .../utils/UriContextResolutionComboTest.java       |   2 +-
 .../juneau/utils/UriContextUriComboTest.java       |   2 +-
 .../java/org/apache/juneau/xml/CommonTest.java     |   3 +-
 .../java/org/apache/juneau/xml/CommonXmlTest.java  |   2 +-
 .../org/apache/juneau/xml/XmlCollapsedTest.java    |   2 +-
 .../java/org/apache/juneau/xml/XmlContentTest.java |   2 +-
 .../apache/juneau/xml/XmlIgnoreCommentsTest.java   |   1 +
 .../test/java/org/apache/juneau/xml/XmlTest.java   |   2 +-
 .../org/apache/juneau/yaml/proto/CommonTest.java   |   2 +-
 juneau-examples/juneau-examples-rest/pom.xml       |   7 +
 .../juneau-microservice-test/pom.xml               |   6 +
 .../juneau/microservice/testutils/TestUtils.java}  |  51 ++-
 .../org/apache/juneau/rest/test/BpiResource.java   |   2 +-
 .../apache/juneau/rest/test/ContentResource.java   |  79 ----
 .../java/org/apache/juneau/rest/test/DTO2s.java    | 138 -------
 .../apache/juneau/rest/test/InterfaceProxy.java    |   2 +-
 .../juneau/rest/test/InterfaceProxyResource.java   |   4 +-
 .../apache/juneau/rest/test/ParamsResource.java    |   5 +-
 .../java/org/apache/juneau/rest/test/Root.java     |   2 -
 .../org/apache/juneau/rest/test/TestUtils.java     | 100 -----
 .../juneau/rest/test/ThirdPartyProxyResource.java  |   6 +-
 .../juneau/rest/test/UrlContentResource.java       |  61 ---
 .../apache/juneau/rest/test/AcceptCharsetTest.java |   2 +-
 .../java/org/apache/juneau/rest/test/BpiTest.java  |   1 +
 .../juneau/rest/test/CharsetEncodingsTest.java     |   2 +-
 .../apache/juneau/rest/test/ClientFuturesTest.java |   2 +-
 .../org/apache/juneau/rest/test/ConfigTest.java    |   2 +-
 .../org/apache/juneau/rest/test/ContentTest.java   | 450 ---------------------
 .../java/org/apache/juneau/rest/test/DTOs.java     | 138 -------
 .../juneau/rest/test/DefaultContentTypesTest.java  |   2 +-
 .../juneau/rest/test/ErrorConditionsTest.java      |   2 +-
 .../org/apache/juneau/rest/test/FormDataTest.java  |   2 +-
 .../org/apache/juneau/rest/test/GroupsTest.java    |   2 +-
 .../java/org/apache/juneau/rest/test/GzipTest.java |   2 +-
 .../org/apache/juneau/rest/test/HeadersTest.java   |   2 +-
 .../juneau/rest/test/InterfaceProxyTest.java       |   6 +-
 .../org/apache/juneau/rest/test/MessagesTest.java  |   2 +-
 .../java/org/apache/juneau/rest/test/NlsTest.java  |   2 +-
 .../juneau/rest/test/OverlappingMethodsTest.java   |   2 +-
 .../org/apache/juneau/rest/test/ParamsTest.java    |   2 +-
 .../org/apache/juneau/rest/test/ParsersTest.java   |   2 +-
 .../org/apache/juneau/rest/test/QueryTest.java     |   2 +-
 .../apache/juneau/rest/test/RestClientTest.java    |   2 +-
 .../apache/juneau/rest/test/RestHooksInitTest.java |   2 +-
 .../org/apache/juneau/rest/test/RestHooksTest.java |   2 +-
 .../org/apache/juneau/rest/test/RestUtilsTest.java |   1 +
 .../apache/juneau/rest/test/SerializersTest.java   |   2 +-
 .../juneau/rest/test/ThirdPartyProxyTest.java      |   6 +-
 .../apache/juneau/rest/test/UrlContentTest.java    |  65 ---
 .../org/apache/juneau/rest/test/_TestSuite.java    |   4 +-
 juneau-rest/juneau-rest-server/pom.xml             |  11 +
 .../java/org/apache/juneau/rest/RequestBody.java   |  10 +-
 .../java/org/apache/juneau/rest/RestRequest.java   |   2 +-
 .../java/org/apache/juneau/rest/mock/MockRest.java |  11 +-
 .../juneau/rest/mock/MockServletRequest.java       |  60 ++-
 .../juneau/rest/BasicRestInfoProviderTest.java     |   2 +-
 .../apache/juneau/rest/annotation/BodyTest.java    | 283 ++++++++++++-
 .../juneau/rest/mock/MockServletRequestTest.java   | 122 ++++++
 .../org/apache/juneau/rest/testutils}/ABean.java   |   3 +-
 .../apache/juneau/rest/testutils}/Constants.java   |   9 +-
 .../apache/juneau/rest/{ => testutils}/DTOs.java   |  10 +-
 .../rest/testutils}/ImplicitSwappedPojo.java       |   5 +-
 .../apache/juneau/rest/testutils}/SwappedPojo.java |   3 +-
 .../juneau/rest/testutils}/SwappedPojoSwap.java    |   5 +-
 .../apache/juneau/rest/testutils}/TestEnum.java    |   7 +-
 .../juneau/rest/{ => testutils}/TestUtils.java     |  20 +-
 .../apache/juneau/rest/testutils}/TypedBean.java   |   3 +-
 .../juneau/rest/testutils}/TypedBeanImpl.java      |   3 +-
 162 files changed, 702 insertions(+), 1250 deletions(-)

diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/AnnotationsTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/AnnotationsTest.java
index 1008b35..a9b4a8b 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/AnnotationsTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/AnnotationsTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.annotation.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/BeanMapTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/BeanMapTest.java
index bb29ed1..9c7679d 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/BeanMapTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/BeanMapTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ComboRoundTripTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ComboRoundTripTest.java
index 2384e71..bfad48d 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ComboRoundTripTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ComboRoundTripTest.java
@@ -23,6 +23,7 @@ import org.apache.juneau.json.*;
 import org.apache.juneau.msgpack.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
+import org.apache.juneau.testutils.*;
 import org.apache.juneau.uon.*;
 import org.apache.juneau.urlencoding.*;
 import org.apache.juneau.xml.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ComboSerializeTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ComboSerializeTest.java
index 7911592..51f6236 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ComboSerializeTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ComboSerializeTest.java
@@ -22,6 +22,7 @@ import org.apache.juneau.jena.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.msgpack.*;
 import org.apache.juneau.serializer.*;
+import org.apache.juneau.testutils.*;
 import org.apache.juneau.uon.*;
 import org.apache.juneau.urlencoding.*;
 import org.apache.juneau.xml.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ContextCacheTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ContextCacheTest.java
index afd4a9e..772c4f2 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ContextCacheTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ContextCacheTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import org.junit.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/DataConversionTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/DataConversionTest.java
index 4072a39..1266afd 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/DataConversionTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/DataConversionTest.java
@@ -16,6 +16,7 @@ import static org.junit.Assert.*;
 
 import java.util.*;
 
+import org.apache.juneau.testutils.*;
 import org.apache.juneau.transforms.*;
 import org.junit.*;
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/DynaBeanComboTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/DynaBeanComboTest.java
index 9fbd80a..805ac3d 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/DynaBeanComboTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/DynaBeanComboTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 
 import java.util.*;
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/IgnoredClassesTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/IgnoredClassesTest.java
index 70714b8..0a18c08 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/IgnoredClassesTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/IgnoredClassesTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 import static org.junit.Assume.*;
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/MaxIndentTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/MaxIndentTest.java
index 1ff8786..df5b018 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/MaxIndentTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/MaxIndentTest.java
@@ -18,6 +18,7 @@ import org.apache.juneau.html.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.test.pojos.*;
+import org.apache.juneau.testutils.*;
 import org.apache.juneau.uon.*;
 import org.apache.juneau.urlencoding.*;
 import org.apache.juneau.xml.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ObjectListTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ObjectListTest.java
index fd49d4c..c5019d2 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ObjectListTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ObjectListTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.io.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ObjectMapTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ObjectMapTest.java
index ea67c5f..745bf83 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ObjectMapTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ObjectMapTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.io.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/PojoExamplesTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/PojoExamplesTest.java
index 20bcdd8..38b0fe6 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/PojoExamplesTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/PojoExamplesTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.annotation.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/PropertyStoreTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/PropertyStoreTest.java
index c261d45..12a38e8 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/PropertyStoreTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/PropertyStoreTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanInheritanceTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanInheritanceTest.java
index f76eabc..acbafb1 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanInheritanceTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanInheritanceTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.a.rttests;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java
index 50eb915..5ab98ca 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.a.rttests;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripClassesTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripClassesTest.java
index f302fc8..4e5818b 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripClassesTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripClassesTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.a.rttests;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.parser.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripDTOsTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripDTOsTest.java
index c8eb042..cf7df6e 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripDTOsTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripDTOsTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.a.rttests;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 
 import org.apache.juneau.dto.jsonschema.*;
 import org.apache.juneau.parser.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripEnumTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripEnumTest.java
index 37b9ebb..bf7f92d 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripEnumTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripEnumTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.a.rttests;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripGenericsTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripGenericsTest.java
index 8c34364..84d0b38 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripGenericsTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripGenericsTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.a.rttests;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.annotation.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripObjectsAsStringsTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripObjectsAsStringsTest.java
index 989c059..4612e66 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripObjectsAsStringsTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripObjectsAsStringsTest.java
@@ -12,12 +12,13 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.a.rttests;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
+import org.apache.juneau.testutils.*;
 import org.junit.*;
 
 /**
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripObjectsWithSpecialMethodsTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripObjectsWithSpecialMethodsTest.java
index 526f50c..a577b1c 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripObjectsWithSpecialMethodsTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripObjectsWithSpecialMethodsTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.a.rttests;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java
index decb228..1ea81ef 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java
@@ -26,6 +26,7 @@ import org.apache.juneau.jsonschema.*;
 import org.apache.juneau.msgpack.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
+import org.apache.juneau.testutils.*;
 import org.apache.juneau.uon.*;
 import org.apache.juneau.urlencoding.*;
 import org.apache.juneau.xml.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java
index 409ce97..7e251d3 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java
@@ -24,6 +24,7 @@ import org.apache.juneau.annotation.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
+import org.apache.juneau.testutils.*;
 import org.apache.juneau.transform.*;
 import org.apache.juneau.transforms.*;
 import org.apache.juneau.utils.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTrimStringsTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTrimStringsTest.java
index 94c3ab5..2bc9d28 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTrimStringsTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTrimStringsTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.a.rttests;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.parser.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigBuilderTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigBuilderTest.java
index 6b729c8..c6252e0 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigBuilderTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigBuilderTest.java
@@ -12,9 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.config;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.internal.FileUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.io.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigInterfaceTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigInterfaceTest.java
index 57c0a1e..e3893bb 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigInterfaceTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigInterfaceTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.config;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigMapListenerTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigMapListenerTest.java
index 0e9d590..f10b5d3 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigMapListenerTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigMapListenerTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.config;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigMapTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigMapTest.java
index a686cbf..9fce357 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigMapTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigMapTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.config;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigTest.java
index dd0c8e6..6aaf3b8 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/config/ConfigTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.config;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.config.ConfigMod.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.io.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/atom/AtomTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/atom/AtomTest.java
index 4800a7c..32931b5 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/atom/AtomTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/atom/AtomTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.dto.atom.AtomBuilder.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.net.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/cognos/CognosXmlTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/cognos/CognosXmlTest.java
index 0e0ad8f..4b1eea6 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/cognos/CognosXmlTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/cognos/CognosXmlTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.cognos;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5ComboTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5ComboTest.java
index b684e80..6bb599e 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5ComboTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5ComboTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.html5;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.dto.html5.HtmlBuilder.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 
 import java.util.*;
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5TemplateComboTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5TemplateComboTest.java
index 69a5612..fa9d8c9 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5TemplateComboTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5TemplateComboTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.html5;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.dto.html5.HtmlBuilder.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 
 import java.util.*;
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/ContactTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/ContactTest.java
index 31efe4a..1b93458 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/ContactTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/ContactTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.net.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/ExternalDocumentationTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/ExternalDocumentationTest.java
index aa6e8e7..371a5d7 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/ExternalDocumentationTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/ExternalDocumentationTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.net.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/HeaderInfoTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/HeaderInfoTest.java
index f4b18e5..22ba191 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/HeaderInfoTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/HeaderInfoTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.dto.swagger.SwaggerBuilder.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/InfoTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/InfoTest.java
index 508280a..f33e060 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/InfoTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/InfoTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.dto.swagger.SwaggerBuilder.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.json.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/ItemsTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/ItemsTest.java
index eec0380..f1158ae 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/ItemsTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/ItemsTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.dto.swagger.SwaggerBuilder.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/LicenseTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/LicenseTest.java
index 25ad6b4..b5426e5 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/LicenseTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/LicenseTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.net.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/OperationTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/OperationTest.java
index a56472d..0a58815 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/OperationTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/OperationTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.dto.swagger.SwaggerBuilder.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/ParameterInfoTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/ParameterInfoTest.java
index 0463461..e8192c2 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/ParameterInfoTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/ParameterInfoTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.dto.swagger.SwaggerBuilder.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/ResponseInfoTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/ResponseInfoTest.java
index e51f6bf..1dd2375 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/ResponseInfoTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/ResponseInfoTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.dto.swagger.SwaggerBuilder.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SchemaInfoTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SchemaInfoTest.java
index 23b1f78..a5feaae 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SchemaInfoTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SchemaInfoTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.dto.swagger.SwaggerBuilder.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SecuritySchemeTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SecuritySchemeTest.java
index d05485d..a5921db 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SecuritySchemeTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SecuritySchemeTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SwaggerBuilderTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SwaggerBuilderTest.java
index 76d0cce..544b5a3 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SwaggerBuilderTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SwaggerBuilderTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.dto.swagger.SwaggerBuilder.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import org.junit.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SwaggerTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SwaggerTest.java
index 95553e5..57dba1a 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SwaggerTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SwaggerTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.dto.swagger.SwaggerBuilder.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/TagTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/TagTest.java
index 1a3be90..ac53f95 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/TagTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/TagTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.dto.swagger.SwaggerBuilder.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.json.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/XmlTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/XmlTest.java
index c020032..258b079 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/XmlTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/XmlTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.json.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/encoders/EncoderGroupTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/encoders/EncoderGroupTest.java
index 1629cce..e461a4c 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/encoders/EncoderGroupTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/encoders/EncoderGroupTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.encoders;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 
 import org.junit.*;
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/html/BasicHtmlTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/html/BasicHtmlTest.java
index 61d7f0d..5997bdb 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/html/BasicHtmlTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/html/BasicHtmlTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.html;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.html.annotation.HtmlFormat.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.lang.reflect.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/html/CommonTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/html/CommonTest.java
index e748503..7445f3e 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/html/CommonTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/html/CommonTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.html;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.net.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/https/AcceptExtensionsTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/https/AcceptExtensionsTest.java
index c2759d4..25022ba 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/https/AcceptExtensionsTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/https/AcceptExtensionsTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.https;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.http.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/https/AcceptTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/https/AcceptTest.java
index 14bd8b8..707c72f 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/https/AcceptTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/https/AcceptTest.java
@@ -14,9 +14,9 @@ package org.apache.juneau.https;
 
 import java.util.*;
 
-import org.apache.juneau.*;
 import org.apache.juneau.http.*;
 import org.apache.juneau.json.*;
+import org.apache.juneau.testutils.*;
 import org.junit.*;
 import org.junit.runner.*;
 import org.junit.runners.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/https/ContentTypeTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/https/ContentTypeTest.java
index ecf7b93..2c15fd3 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/https/ContentTypeTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/https/ContentTypeTest.java
@@ -14,9 +14,9 @@ package org.apache.juneau.https;
 
 import java.util.*;
 
-import org.apache.juneau.*;
 import org.apache.juneau.http.*;
 import org.apache.juneau.json.*;
+import org.apache.juneau.testutils.*;
 import org.junit.*;
 import org.junit.runner.*;
 import org.junit.runners.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonTest.java
index 3137ee8..21895b2 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.jena;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.jena.RdfCommon.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.net.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonXmlTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonXmlTest.java
index fcf5e5c..f46092f 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonXmlTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonXmlTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.jena;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.jena.RdfCommon.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.net.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/jena/RdfParserTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/jena/RdfParserTest.java
index 1e479e0..9e6ef72 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/jena/RdfParserTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/jena/RdfParserTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.jena;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.jena.RdfCommon.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.net.URI;
@@ -24,6 +24,7 @@ import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.jena.annotation.*;
 import org.apache.juneau.json.*;
+import org.apache.juneau.testutils.*;
 import org.apache.juneau.transforms.*;
 import org.junit.*;
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/jena/RdfTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/jena/RdfTest.java
index 3e2f7b0..b169914 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/jena/RdfTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/jena/RdfTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.jena;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.jena.RdfCommon.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 
 import java.net.*;
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/json/CommonTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/json/CommonTest.java
index 8c6f64a..e782e08 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/json/CommonTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/json/CommonTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.json;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.net.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/json/JsonParserTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/json/JsonParserTest.java
index 0bb793e..5fcd030 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/json/JsonParserTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/json/JsonParserTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.json;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.io.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/json/JsonSchemaSerializerTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/json/JsonSchemaSerializerTest.java
index 1cfcd7d..563cf31 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/json/JsonSchemaSerializerTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/json/JsonSchemaSerializerTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.json;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
@@ -21,6 +21,7 @@ import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.jsonschema.*;
 import org.apache.juneau.jsonschema.annotation.*;
+import org.apache.juneau.testutils.*;
 import org.apache.juneau.transform.*;
 import org.junit.*;
 
@@ -1016,13 +1017,13 @@ public class JsonSchemaSerializerTest {
 	@Test
 	public void addDescription_ENUM() throws Exception {
 		JsonSchemaSerializerSession s = JsonSchemaSerializer.DEFAULT_LAX.builder().addDescriptionsTo("enum").build().createSession();
-		assertObjectEquals("{type:'string','enum':['one','two','three'],description:'org.apache.juneau.TestEnum'}", s.getSchema(TestEnum.class));
+		assertObjectEquals("{type:'string','enum':['one','two','three'],description:'org.apache.juneau.testutils.TestEnum'}", s.getSchema(TestEnum.class));
 	}
 
 	@Test
 	public void addDescription_ENUM_2darray() throws Exception {
 		JsonSchemaSerializerSession s = JsonSchemaSerializer.DEFAULT_LAX.builder().addDescriptionsTo("enum").build().createSession();
-		assertObjectEquals("{type:'array',items:{type:'array',items:{type:'string','enum':['one','two','three'],description:'org.apache.juneau.TestEnum'}}}", s.getSchema(TestEnum[][].class));
+		assertObjectEquals("{type:'array',items:{type:'array',items:{type:'string','enum':['one','two','three'],description:'org.apache.juneau.testutils.TestEnum'}}}", s.getSchema(TestEnum[][].class));
 	}
 
 	//====================================================================================================
@@ -1051,7 +1052,7 @@ public class JsonSchemaSerializerTest {
 		assertObjectEquals("{type:'string',description:'java.lang.StringBuilder'}", s.getSchema(StringBuilder.class));
 		assertObjectEquals("{type:'string',description:'java.lang.Character'}", s.getSchema(Character.class));
 		assertObjectEquals("{type:'string',description:'char'}", s.getSchema(char.class));
-		assertObjectEquals("{type:'string','enum':['one','two','three'],description:'org.apache.juneau.TestEnum'}", s.getSchema(TestEnum.class));
+		assertObjectEquals("{type:'string','enum':['one','two','three'],description:'org.apache.juneau.testutils.TestEnum'}", s.getSchema(TestEnum.class));
 	}
 
 	//====================================================================================================
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/json/JsonTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/json/JsonTest.java
index 4dd9a4e..27a08db 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/json/JsonTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/json/JsonTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.json;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/msgpack/MsgPackParserTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/msgpack/MsgPackParserTest.java
index 9cfdf28..71951a3 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/msgpack/MsgPackParserTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/msgpack/MsgPackParserTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.msgpack;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.io.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/parser/ParserGroupTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/parser/ParserGroupTest.java
index 864f375..de160bd 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/parser/ParserGroupTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/parser/ParserGroupTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.parser;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.json.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/serializer/SerializerGroupTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/serializer/SerializerGroupTest.java
index a443d6d..fba08de 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/serializer/SerializerGroupTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/serializer/SerializerGroupTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.serializer;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.json.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/serializer/UriResolutionTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/serializer/UriResolutionTest.java
index 870af2c..7c53d99 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/serializer/UriResolutionTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/serializer/UriResolutionTest.java
@@ -20,6 +20,7 @@ import org.apache.juneau.jena.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.msgpack.*;
 import org.apache.juneau.parser.*;
+import org.apache.juneau.testutils.*;
 import org.apache.juneau.uon.*;
 import org.apache.juneau.urlencoding.*;
 import org.apache.juneau.xml.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/svl/ResolvingObjectMapTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/svl/ResolvingObjectMapTest.java
index b43ddd1..f65c938 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/svl/ResolvingObjectMapTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/svl/ResolvingObjectMapTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.svl;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/TestEnum.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/testutils/TestEnum.java
similarity index 97%
rename from juneau-core/juneau-core-test/src/test/java/org/apache/juneau/TestEnum.java
rename to juneau-core/juneau-core-test/src/test/java/org/apache/juneau/testutils/TestEnum.java
index 0b8317b..12024b6 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/TestEnum.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/testutils/TestEnum.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;
+package org.apache.juneau.testutils;
 
 public enum TestEnum {
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/TestUtils.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/testutils/TestUtils.java
similarity index 96%
rename from juneau-core/juneau-core-test/src/test/java/org/apache/juneau/TestUtils.java
rename to juneau-core/juneau-core-test/src/test/java/org/apache/juneau/testutils/TestUtils.java
index 5c354d9..3afda8a 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/TestUtils.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/testutils/TestUtils.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;
+package org.apache.juneau.testutils;
 
 import static org.apache.juneau.internal.IOUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
@@ -26,6 +26,7 @@ import javax.xml.transform.dom.*;
 import javax.xml.transform.stream.*;
 import javax.xml.validation.*;
 
+import org.apache.juneau.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.transforms.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/BeanDictionaryComboTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/BeanDictionaryComboTest.java
index 3327447..874468b 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/BeanDictionaryComboTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/BeanDictionaryComboTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.transforms;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 
 import java.util.*;
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/BeanFilterTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/BeanFilterTest.java
index 0215c71..cbc73f2 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/BeanFilterTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/BeanFilterTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.transforms;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/BuilderComboTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/BuilderComboTest.java
index 73fcb6b..9b63baa 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/BuilderComboTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/BuilderComboTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.transforms;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/ByteArrayBase64SwapComboTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/ByteArrayBase64SwapComboTest.java
index 1efa531..71b9c1e 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/ByteArrayBase64SwapComboTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/ByteArrayBase64SwapComboTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.transforms;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 
 import java.util.*;
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/CalendarSwapComboTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/CalendarSwapComboTest.java
index 313c92f..17a4c43 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/CalendarSwapComboTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/CalendarSwapComboTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.transforms;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 
 import java.lang.reflect.*;
 import java.util.*;
@@ -20,6 +20,7 @@ import java.util.*;
 import org.apache.juneau.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
+import org.apache.juneau.testutils.*;
 import org.junit.*;
 import org.junit.runner.*;
 import org.junit.runners.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java
index 5294f92..a3dacbf 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java
@@ -26,6 +26,7 @@ import org.apache.juneau.jena.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
+import org.apache.juneau.testutils.*;
 import org.apache.juneau.transform.*;
 import org.apache.juneau.uon.*;
 import org.apache.juneau.urlencoding.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/DateSwapComboTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/DateSwapComboTest.java
index 2df74a9..1fc72d0 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/DateSwapComboTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/DateSwapComboTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.transforms;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 
 import java.lang.reflect.*;
 import java.util.*;
@@ -20,6 +20,7 @@ import java.util.*;
 import org.apache.juneau.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
+import org.apache.juneau.testutils.*;
 import org.junit.*;
 import org.junit.runner.*;
 import org.junit.runners.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/DateSwapTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/DateSwapTest.java
index 5b17f55..6ea9459 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/DateSwapTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/DateSwapTest.java
@@ -16,6 +16,7 @@ import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.json.*;
+import org.apache.juneau.testutils.*;
 import org.junit.*;
 
 @SuppressWarnings({})
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/LocalizedDatesTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/LocalizedDatesTest.java
index a8b07fb..60c6bc6 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/LocalizedDatesTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/transforms/LocalizedDatesTest.java
@@ -18,6 +18,7 @@ import static org.junit.Assert.*;
 import java.util.*;
 
 import org.apache.juneau.*;
+import org.apache.juneau.testutils.*;
 import org.apache.juneau.transform.*;
 import org.junit.*;
 import org.junit.runner.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/uon/Common_UonTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/uon/Common_UonTest.java
index 4b57a0f..1979722 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/uon/Common_UonTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/uon/Common_UonTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.uon;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.net.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/uon/UonParserReaderTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/uon/UonParserReaderTest.java
index 8e24115..bd34fde 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/uon/UonParserReaderTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/uon/UonParserReaderTest.java
@@ -16,8 +16,8 @@ import static org.junit.Assert.*;
 
 import java.io.*;
 
-import org.apache.juneau.*;
 import org.apache.juneau.parser.*;
+import org.apache.juneau.testutils.*;
 import org.junit.*;
 
 @SuppressWarnings({"resource"})
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/uon/UonParserTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/uon/UonParserTest.java
index cbb1742..31527c2 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/uon/UonParserTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/uon/UonParserTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.uon;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.io.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java
index 02b734b..8de7eb6 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.urlencoding;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/Common_UrlEncodingTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/Common_UrlEncodingTest.java
index 61befc1..c0d4454 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/Common_UrlEncodingTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/Common_UrlEncodingTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.urlencoding;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.net.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
index 72e5e86..cfd3dc1 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.urlencoding;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/ArrayUtilsTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/ArrayUtilsTest.java
index b432504..4e62f17 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/ArrayUtilsTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/ArrayUtilsTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.utils;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.internal.ArrayUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/ByteArrayCacheTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/ByteArrayCacheTest.java
index 2b35180..ece28bc 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/ByteArrayCacheTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/ByteArrayCacheTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.utils;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.io.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/ClassUtilsTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/ClassUtilsTest.java
index ccad5f9..7edcc97 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/ClassUtilsTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/ClassUtilsTest.java
@@ -14,8 +14,8 @@ package org.apache.juneau.utils;
 
 import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.internal.ClassUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.lang.annotation.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/CollectionUtilsTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/CollectionUtilsTest.java
index 2b838ba..9d24be2 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/CollectionUtilsTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/CollectionUtilsTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.utils;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/FilteredMapTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/FilteredMapTest.java
index 8a35599..cda951e 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/FilteredMapTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/FilteredMapTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.utils;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/MultiIterableTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/MultiIterableTest.java
index f73f9be..db55a81 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/MultiIterableTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/MultiIterableTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.utils;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/MultiSetTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/MultiSetTest.java
index cd67523..2557e96 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/MultiSetTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/MultiSetTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.utils;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/PojoQueryTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/PojoQueryTest.java
index c19c815..568151d 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/PojoQueryTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/PojoQueryTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.utils;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/SimpleMapTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/SimpleMapTest.java
index 67572da..6f14e0e 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/SimpleMapTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/SimpleMapTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.utils;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.internal.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/StringUtilsTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/StringUtilsTest.java
index 5b0934b..9f33dbd 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/StringUtilsTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/StringUtilsTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.utils;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.math.*;
@@ -24,6 +24,7 @@ import org.apache.juneau.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
+import org.apache.juneau.testutils.*;
 import org.apache.juneau.transforms.*;
 import org.junit.*;
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/UriContextResolutionComboTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/UriContextResolutionComboTest.java
index 8e3b43b..bd3f65e 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/UriContextResolutionComboTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/UriContextResolutionComboTest.java
@@ -12,9 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.utils;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.UriRelativity.*;
 import static org.apache.juneau.UriResolution.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 
 import java.util.*;
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/UriContextUriComboTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/UriContextUriComboTest.java
index 408c594..f90f32d 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/UriContextUriComboTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/UriContextUriComboTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.utils;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 
 import java.util.*;
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/CommonTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/CommonTest.java
index 0481204..bf82aa5 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/CommonTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/CommonTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.xml;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 import static org.junit.Assert.*;
 
@@ -23,6 +23,7 @@ import java.util.*;
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.jena.annotation.*;
+import org.apache.juneau.testutils.*;
 import org.apache.juneau.utils.*;
 import org.apache.juneau.xml.annotation.*;
 import org.junit.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/CommonXmlTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/CommonXmlTest.java
index f5f4239..1c86167 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/CommonXmlTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/CommonXmlTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.xml;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 import static org.junit.Assert.*;
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlCollapsedTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlCollapsedTest.java
index c477eda..492133d 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlCollapsedTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlCollapsedTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.xml;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 import static org.junit.Assert.*;
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlContentTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlContentTest.java
index 2419de2..a6b44ad 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlContentTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlContentTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.xml;
 
-import static org.apache.juneau.TestUtils.*;
 import static org.apache.juneau.serializer.Serializer.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 import static org.junit.Assert.*;
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlIgnoreCommentsTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlIgnoreCommentsTest.java
index 0f9d792..7661a0d 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlIgnoreCommentsTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlIgnoreCommentsTest.java
@@ -17,6 +17,7 @@ import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
+import org.apache.juneau.testutils.*;
 import org.apache.juneau.xml.annotation.*;
 import org.junit.*;
 import org.junit.runner.*;
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlTest.java
index 40f8c40..ba0ee67 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.xml;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 import static org.junit.Assert.*;
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/yaml/proto/CommonTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/yaml/proto/CommonTest.java
index 1e71b1c..7718bf1 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/yaml/proto/CommonTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/yaml/proto/CommonTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.yaml.proto;
 
-import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.net.*;
diff --git a/juneau-examples/juneau-examples-rest/pom.xml b/juneau-examples/juneau-examples-rest/pom.xml
index 56f7f66..118a391 100644
--- a/juneau-examples/juneau-examples-rest/pom.xml
+++ b/juneau-examples/juneau-examples-rest/pom.xml
@@ -67,6 +67,13 @@
 			<artifactId>httpmime</artifactId>
 		</dependency>
 		<dependency>
+			<groupId>org.apache.juneau</groupId>
+			<artifactId>juneau-rest-server</artifactId>
+			<version>${project.version}</version>
+			<type>test-jar</type>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
 			<groupId>junit</groupId>
 			<artifactId>junit</artifactId>
 		</dependency>
diff --git a/juneau-microservice/juneau-microservice-test/pom.xml b/juneau-microservice/juneau-microservice-test/pom.xml
index 34c8295..3eeb56d 100644
--- a/juneau-microservice/juneau-microservice-test/pom.xml
+++ b/juneau-microservice/juneau-microservice-test/pom.xml
@@ -43,6 +43,12 @@
 		</dependency>
 		<dependency>
 			<groupId>org.apache.juneau</groupId>
+			<artifactId>juneau-rest-server</artifactId>
+			<version>${project.version}</version>
+			  <type>test-jar</type>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.juneau</groupId>
 			<artifactId>juneau-rest-server-jaxrs</artifactId>
 			<version>${project.version}</version>
 		</dependency>
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ClientFuturesTest.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/microservice/testutils/TestUtils.java
similarity index 58%
copy from juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ClientFuturesTest.java
copy to juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/microservice/testutils/TestUtils.java
index d89d9de..55cdba2 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ClientFuturesTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/microservice/testutils/TestUtils.java
@@ -10,35 +10,32 @@
 // * "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;
+package org.apache.juneau.microservice.testutils;
 
-import static org.apache.juneau.rest.test.TestUtils.*;
-import static org.junit.Assert.*;
+import static org.apache.juneau.internal.StringUtils.*;
 
-import java.util.concurrent.*;
-
-import org.apache.juneau.*;
 import org.apache.juneau.rest.client.*;
-import org.junit.*;
-
-public class ClientFuturesTest extends RestTestcase {
-
-	private static String URL = "/testClientFutures";
-
-	//====================================================================================================
-	// Basic tests
-	//====================================================================================================
-	@Test
-	public void test() throws Exception {
-		RestClient client = TestMicroservice.DEFAULT_CLIENT;
-
-		Future<Integer> f = client.doGet(URL).runFuture();
-		assertEquals(200, f.get().intValue());
-
-		Future<ObjectMap> f2 = client.doGet(URL).getResponseFuture(ObjectMap.class);
-		assertObjectEquals("{foo:'bar'}", f2.get());
 
-		Future<String> f3 = client.doGet(URL).getResponseAsStringFuture();
-		assertObjectEquals("'{\"foo\":\"bar\"}'", f3.get());
+import junit.framework.*;
+
+public class TestUtils extends org.apache.juneau.rest.testutils.TestUtils {
+
+	public static void checkErrorResponse(boolean debug, RestCallException e, int status, String...contains) throws AssertionFailedError {
+		String r = e.getResponseMessage();
+		if (debug) {
+			System.err.println(r); // NOT DEBUG
+			e.printStackTrace();
+		}
+		if (status != e.getResponseCode()) {
+			dumpResponse(r, "Response status code was not correct.  Expected: ''{0}''.  Actual: ''{1}''", status, e.getResponseCode());
+			throw new AssertionFailedError(format("Response status code was not correct.  Expected: ''{0}''.  Actual: ''{1}''", status, e.getResponseCode()));
+		}
+		for (String s : contains) {
+			if (r == null || ! r.contains(s)) {
+				if (! debug)
+					dumpResponse(r, "Response did not have the following expected text: ''{0}''", s);
+				throw new AssertionFailedError(format("Response did not have the following expected text: ''{0}''", s));
+			}
+		}
 	}
-}
\ No newline at end of file
+}
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/BpiResource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/BpiResource.java
index 86f437e..c92704a 100644
--- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/BpiResource.java
+++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/BpiResource.java
@@ -96,7 +96,7 @@ public class BpiResource extends BasicRestServletJena {
 		return new MyBeanA().init();
 	}
 
-	@RestMethod(name=GET, path="/test/c2", bpi="org.apache.juneau.rest.test.BpIncludesResource$MyBeanA: a")
+	@RestMethod(name=GET, path="/test/c2", bpi="org.apache.juneau.rest.testutils.BpIncludesResource$MyBeanA: a")
 	public Object testC2() throws Exception {
 		return new MyBeanA().init();
 	}
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ContentResource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ContentResource.java
deleted file mode 100644
index be72322..0000000
--- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ContentResource.java
+++ /dev/null
@@ -1,79 +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 static org.apache.juneau.http.HttpMethodName.*;
-
-import java.util.*;
-
-import org.apache.juneau.rest.*;
-import org.apache.juneau.rest.annotation.*;
-
-/**
- * JUnit automated testcase resource.
- */
-@RestResource(
-	path="/testContent",
-	allowedMethodParams="*"
-)
-public class ContentResource extends BasicRestServlet {
-	private static final long serialVersionUID = 1L;
-
-	//====================================================================================================
-	// Basic tests
-	//====================================================================================================
-	@RestMethod(name=POST, path="/boolean")
-	public boolean testBool(@Body boolean b) {
-		return b;
-	}
-
-	@RestMethod(name=POST, path="/Boolean")
-	public Boolean testBoolean(@Body Boolean b) {
-		return b;
-	}
-
-	@RestMethod(name=POST, path="/int")
-	public int testInt(@Body int i) {
-		return i;
-	}
-
-	@RestMethod(name=POST, path="/Integer")
-	public Integer testInteger(@Body Integer i) {
-		return i;
-	}
-
-	@RestMethod(name=POST, path="/float")
-	public float testFloat(@Body float f) {
-		return f;
-	}
-
-	@RestMethod(name=POST, path="/Float")
-	public Float testFloat2(@Body Float f) {
-		return f;
-	}
-
-	@RestMethod(name=POST, path="/Map")
-	public TreeMap<String,String> testMap(@Body TreeMap<String,String> m) {
-		return m;
-	}
-
-	@RestMethod(name=POST, path="/B")
-	public DTO2s.B testPojo1(@Body DTO2s.B b) {
-		return b;
-	}
-
-	@RestMethod(name=POST, path="/C")
-	public DTO2s.C testPojo2(@Body DTO2s.C c) {
-		return c;
-	}
-}
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/DTO2s.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/DTO2s.java
deleted file mode 100644
index 262d34c..0000000
--- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/DTO2s.java
+++ /dev/null
@@ -1,138 +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.util.*;
-
-import org.apache.juneau.annotation.*;
-import org.apache.juneau.urlencoding.annotation.*;
-import org.apache.juneau.utils.*;
-
-public class DTO2s {
-
-	@Bean(sort=true)
-	public static class A {
-		public String a;
-		public int b;
-		public boolean c;
-
-		public static A create() {
-			A t = new A();
-			t.a = "a";
-			t.b = 1;
-			t.c = true;
-			return t;
-		}
-
-	}
-
-	@Bean(sort=true)
-	public static class B {
-		public String[] f01;
-		public List<String> f02;
-		public int[] f03;
-		public List<Integer> f04;
-		public String[][] f05;
-		public List<String[]> f06;
-		public A[] f07;
-		public List<A> f08;
-		public A[][] f09;
-		public List<List<A>> f10;
-
-		private String[] f11;
-		private List<String> f12;
-		private int[] f13;
-		private List<Integer> f14;
-		private String[][] f15;
-		private List<String[]> f16;
-		private A[] f17;
-		private List<A> f18;
-		private A[][] f19;
-		private List<List<A>> f20;
-
-		public String[] getF11() { return f11; }
-		public List<String> getF12() { return f12; }
-		public int[] getF13() { return f13; }
-		public List<Integer> getF14() { return f14; }
-		public String[][] getF15() { return f15; }
-		public List<String[]> getF16() { return f16; }
-		public A[] getF17() { return f17; }
-		public List<A> getF18() { return f18; }
-		public A[][] getF19() { return f19; }
-		public List<List<A>> getF20() { return f20; }
-
-		public void setF11(String[] f11) { this.f11 = f11; }
-		public void setF12(List<String> f12) { this.f12 = f12; }
-		public void setF13(int[] f13) { this.f13 = f13; }
-		public void setF14(List<Integer> f14) { this.f14 = f14; }
-		public void setF15(String[][] f15) { this.f15 = f15; }
-		public void setF16(List<String[]> f16) { this.f16 = f16; }
-		public void setF17(A[] f17) { this.f17 = f17; }
-		public void setF18(List<A> f18) { this.f18 = f18; }
-		public void setF19(A[][] f19) { this.f19 = f19; }
-		public void setF20(List<List<A>> f20) { this.f20 = f20; }
-
-		static B create() {
-			B t = new B();
-			t.f01 = new String[]{"a","b"};
-			t.f02 = new AList<String>().append("c").append("d");
-			t.f03 = new int[]{1,2};
-			t.f04 = new AList<Integer>().append(3).append(4);
-			t.f05 = new String[][]{{"e","f"},{"g","h"}};
-			t.f06 = new AList<String[]>().append(new String[]{"i","j"}).append(new String[]{"k","l"});
-			t.f07 = new A[]{A.create(),A.create()};
-			t.f08 = new AList<A>().append(A.create()).append(A.create());
-			t.f09 = new A[][]{{A.create()},{A.create()}};
-			t.f10 = new AList<List<A>>().append(Arrays.asList(A.create())).append(Arrays.asList(A.create()));
-			t.setF11(new String[]{"a","b"});
-			t.setF12(new AList<String>().append("c").append("d"));
-			t.setF13(new int[]{1,2});
-			t.setF14(new AList<Integer>().append(3).append(4));
-			t.setF15(new String[][]{{"e","f"},{"g","h"}});
-			t.setF16(new AList<String[]>().append(new String[]{"i","j"}).append(new String[]{"k","l"}));
-			t.setF17(new A[]{A.create(),A.create()});
-			t.setF18(new AList<A>().append(A.create()).append(A.create()));
-			t.setF19(new A[][]{{A.create()},{A.create()}});
-			t.setF20(new AList<List<A>>().append(Arrays.asList(A.create())).append(Arrays.asList(A.create())));
-			return t;
-		}
-	}
-
-	@UrlEncoding(expandedParams=true)
-	public static class C extends B {
-		static C create() {
-			C t = new C();
-			t.f01 = new String[]{"a","b"};
-			t.f02 = new AList<String>().append("c").append("d");
-			t.f03 = new int[]{1,2};
-			t.f04 = new AList<Integer>().append(3).append(4);
-			t.f05 = new String[][]{{"e","f"},{"g","h"}};
-			t.f06 = new AList<String[]>().append(new String[]{"i","j"}).append(new String[]{"k","l"});
-			t.f07 = new A[]{A.create(),A.create()};
-			t.f08 = new AList<A>().append(A.create()).append(A.create());
-			t.f09 = new A[][]{{A.create()},{A.create()}};
-			t.f10 = new AList<List<A>>().append(Arrays.asList(A.create())).append(Arrays.asList(A.create()));
-			t.setF11(new String[]{"a","b"});
-			t.setF12(new AList<String>().append("c").append("d"));
-			t.setF13(new int[]{1,2});
-			t.setF14(new AList<Integer>().append(3).append(4));
-			t.setF15(new String[][]{{"e","f"},{"g","h"}});
-			t.setF16(new AList<String[]>().append(new String[]{"i","j"}).append(new String[]{"k","l"}));
-			t.setF17(new A[]{A.create(),A.create()});
-			t.setF18(new AList<A>().append(A.create()).append(A.create()));
-			t.setF19(new A[][]{{A.create()},{A.create()}});
-			t.setF20(new AList<List<A>>().append(Arrays.asList(A.create())).append(Arrays.asList(A.create())));
-			return t;
-		}
-	}
-}
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/InterfaceProxy.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/InterfaceProxy.java
index b2af7a6..bc4e4c1 100644
--- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/InterfaceProxy.java
+++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/InterfaceProxy.java
@@ -15,7 +15,7 @@ package org.apache.juneau.rest.test;
 import java.util.*;
 
 import org.apache.juneau.remoteable.*;
-import org.apache.juneau.rest.test.pojos.*;
+import org.apache.juneau.rest.testutils.*;
 
 /**
  * Interface proxy exposed in InterfaceProxyResource and tested in InterfaceProxyTest.
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/InterfaceProxyResource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/InterfaceProxyResource.java
index 0841635..e728fc5 100644
--- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/InterfaceProxyResource.java
+++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/InterfaceProxyResource.java
@@ -13,15 +13,15 @@
 package org.apache.juneau.rest.test;
 
 import static java.util.Arrays.*;
-import static org.apache.juneau.rest.test.TestUtils.*;
 import static org.junit.Assert.*;
 import static org.apache.juneau.http.HttpMethodName.*;
+import static org.apache.juneau.rest.testutils.TestUtils.*;
 
 import java.util.*;
 
 import org.apache.juneau.microservice.*;
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.test.pojos.*;
+import org.apache.juneau.rest.testutils.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.utils.*;
 
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ParamsResource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ParamsResource.java
index f3c3fef..8e8ca91 100644
--- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ParamsResource.java
+++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ParamsResource.java
@@ -32,6 +32,7 @@ import org.apache.juneau.parser.*;
 import org.apache.juneau.plaintext.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.testutils.*;
 import org.apache.juneau.transforms.*;
 import org.apache.juneau.urlencoding.*;
 import org.apache.juneau.utils.*;
@@ -308,7 +309,7 @@ public class ParamsResource extends BasicRestServlet {
 			@Property(name=UrlEncodingParser.URLENC_expandedParams, value="true")
 		}
 	)
-	public DTO2s.B testFormPostsWithMultiParamsViaProperty(@Body DTO2s.B content) throws Exception {
+	public DTOs.B testFormPostsWithMultiParamsViaProperty(@Body DTOs.B content) throws Exception {
 		return content;
 	}
 
@@ -318,7 +319,7 @@ public class ParamsResource extends BasicRestServlet {
 	// A simple round-trip test to verify that both serializing and parsing works.
 	//====================================================================================================
 	@RestMethod(name=POST, path="/testFormPostsWithMultiParamsUsingAnnotation")
-	public DTO2s.C testFormPostsWithMultiParamsUsingAnnotation(@Body DTO2s.C content) throws Exception {
+	public DTOs.C testFormPostsWithMultiParamsUsingAnnotation(@Body DTOs.C content) throws Exception {
 		return content;
 	}
 
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/Root.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/Root.java
index ed3cdb1..3b4973e 100644
--- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/Root.java
+++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/Root.java
@@ -32,7 +32,6 @@ import org.apache.juneau.rest.helper.*;
 		ClientFuturesResource.class,
 		ClientVersionResource.class,
 		ConfigResource.class,
-		ContentResource.class,
 		DefaultContentTypesResource.class,
 		ErrorConditionsResource.class,
 		TransformsResource.class,
@@ -73,7 +72,6 @@ import org.apache.juneau.rest.helper.*;
 		StaticFilesResource.class,
 		ThirdPartyProxyResource.class,
 		UrisResource.class,
-		UrlContentResource.class,
 		ShutdownResource.class,
 	}
 )
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/TestUtils.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/TestUtils.java
deleted file mode 100644
index d790e4c..0000000
--- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/TestUtils.java
+++ /dev/null
@@ -1,100 +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 static org.apache.juneau.internal.StringUtils.*;
-
-import java.util.*;
-
-import org.apache.juneau.json.*;
-import org.apache.juneau.rest.client.*;
-import org.apache.juneau.serializer.*;
-import org.apache.juneau.transforms.*;
-import org.junit.Assert;
-import org.junit.ComparisonFailure;
-
-import junit.framework.*;
-
-public class TestUtils {
-
-	private static JsonSerializer js2 = JsonSerializer.create()
-		.ssq()
-		.pojoSwaps(IteratorSwap.class, EnumerationSwap.class)
-		.addBeanTypes()
-		.addRootType()
-		.build();
-
-	/**
-	 * Assert that the object equals the specified string after running it through JsonSerializer.DEFAULT_LAX.toString().
-	 */
-	public static void assertObjectEquals(String s, Object o) {
-		assertObjectEquals(s, o, js2);
-	}
-
-	/**
-	 * Assert that the object is an instance of the specified class.
-	 */
-	public static void assertClass(Class<?> c, Object o) {
-		Assert.assertEquals(c, o == null ? null : o.getClass());
-	}
-
-	/**
-	 * Assert that the object equals the specified string after running it through ws.toString().
-	 */
-	public static void assertObjectEquals(String s, Object o, WriterSerializer ws) {
-		if ("xxx".equals(s))
-			System.err.println("Actual=" + ws.toString(o));
-		Assert.assertEquals(s, ws.toString(o));
-	}
-
-	public static void checkErrorResponse(boolean debug, RestCallException e, int status, String...contains) throws AssertionFailedError {
-		String r = e.getResponseMessage();
-		if (debug) {
-			System.err.println(r); // NOT DEBUG
-			e.printStackTrace();
-		}
-		if (status != e.getResponseCode()) {
-			dumpResponse(r, "Response status code was not correct.  Expected: ''{0}''.  Actual: ''{1}''", status, e.getResponseCode());
-			throw new AssertionFailedError(format("Response status code was not correct.  Expected: ''{0}''.  Actual: ''{1}''", status, e.getResponseCode()));
-		}
-		for (String s : contains) {
-			if (r == null || ! r.contains(s)) {
-				if (! debug)
-					dumpResponse(r, "Response did not have the following expected text: ''{0}''", s);
-				throw new AssertionFailedError(format("Response did not have the following expected text: ''{0}''", s));
-			}
-		}
-	}
-
-	private static void dumpResponse(String r, String msg, Object...args) {
-		System.err.println("*** Failure ****************************************************************************************"); // NOT DEBUG
-		System.err.println(format(msg, args));
-		System.err.println("*** Response-Start *********************************************************************************"); // NOT DEBUG
-		System.err.println(r); // NOT DEBUG
-		System.err.println("*** Response-End ***********************************************************************************"); // NOT DEBUG
-	}
-
-	public static void assertEqualsAfterSort(String expected, String actual, String msg, Object...args) {
-		String[] e = expected.trim().split("\n"), a = actual.trim().split("\n");
-
-		if (e.length != a.length)
-			throw new ComparisonFailure(format(msg, args), expected, actual);
-
-		Arrays.sort(e);
-		Arrays.sort(a);
-
-		for (int i = 0; i < e.length; i++)
-			if (! e[i].equals(a[i]))
-				throw new ComparisonFailure(format(msg, args), expected, actual);
-	}
-}
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ThirdPartyProxyResource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ThirdPartyProxyResource.java
index e0c4878..c04eb33 100644
--- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ThirdPartyProxyResource.java
+++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ThirdPartyProxyResource.java
@@ -13,10 +13,10 @@
 package org.apache.juneau.rest.test;
 
 import static java.util.Arrays.*;
-import static org.apache.juneau.rest.test.TestUtils.*;
-import static org.apache.juneau.rest.test.pojos.Constants.*;
 import static org.junit.Assert.*;
 import static org.apache.juneau.http.HttpMethodName.*;
+import static org.apache.juneau.rest.testutils.Constants.*;
+import static org.apache.juneau.rest.testutils.TestUtils.*;
 
 import java.io.*;
 import java.util.*;
@@ -26,7 +26,7 @@ import javax.servlet.http.*;
 import org.apache.juneau.microservice.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.test.pojos.*;
+import org.apache.juneau.rest.testutils.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.utils.*;
 
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/UrlContentResource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/UrlContentResource.java
deleted file mode 100644
index 3cdc924..0000000
--- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/UrlContentResource.java
+++ /dev/null
@@ -1,61 +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 static org.apache.juneau.http.HttpMethodName.*;
-
-import org.apache.juneau.json.*;
-import org.apache.juneau.plaintext.*;
-import org.apache.juneau.rest.*;
-import org.apache.juneau.rest.annotation.*;
-
-/**
- * JUnit automated testcase resource.
- */
-@RestResource(
-	path="/testUrlContent",
-	serializers={PlainTextSerializer.class},
-	parsers={JsonParser.class}
-)
-public class UrlContentResource extends RestServlet {
-	private static final long serialVersionUID = 1L;
-
-	@RestMethod(name=GET, path="/testString")
-	public String testString(@Body String content) {
-		return String.format("class=%s, value=%s", content.getClass().getName(), content.toString());
-	}
-
-	@RestMethod(name=GET, path="/testEnum")
-	public String testEnum(@Body TestEnum content) {
-		return String.format("class=%s, value=%s", content.getClass().getName(), content.toString());
-	}
-
-	public static enum TestEnum {
-		X1
-	}
-
-	@RestMethod(name=GET, path="/testBean")
-	public String testBean(@Body TestBean content) throws Exception {
-		return String.format("class=%s, value=%s", content.getClass().getName(), JsonSerializer.DEFAULT_LAX.serialize(content));
-	}
-
-	public static class TestBean {
-		public int f1;
-		public String f2;
-	}
-
-	@RestMethod(name=GET, path="/testInt")
-	public String testString(@Body Integer content) {
-		return String.format("class=%s, value=%s", content.getClass().getName(), content.toString());
-	}
-}
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/AcceptCharsetTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/AcceptCharsetTest.java
index 57674e7..dcd54d1 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/AcceptCharsetTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/AcceptCharsetTest.java
@@ -14,7 +14,7 @@ package org.apache.juneau.rest.test;
 
 import static javax.servlet.http.HttpServletResponse.*;
 import static org.apache.juneau.internal.IOUtils.*;
-import static org.apache.juneau.rest.test.TestUtils.*;
+import static org.apache.juneau.microservice.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.io.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/BpiTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/BpiTest.java
index d78f59e..737ad2a 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/BpiTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/BpiTest.java
@@ -19,6 +19,7 @@ import java.util.*;
 import org.apache.juneau.*;
 import org.apache.juneau.msgpack.*;
 import org.apache.juneau.rest.client.*;
+import org.apache.juneau.rest.testutils.*;
 import org.junit.*;
 import org.junit.runner.*;
 import org.junit.runners.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/CharsetEncodingsTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/CharsetEncodingsTest.java
index fa0a242..b103aea 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/CharsetEncodingsTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/CharsetEncodingsTest.java
@@ -14,7 +14,7 @@ package org.apache.juneau.rest.test;
 
 import static javax.servlet.http.HttpServletResponse.*;
 import static org.apache.juneau.internal.IOUtils.*;
-import static org.apache.juneau.rest.test.TestUtils.*;
+import static org.apache.juneau.microservice.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.io.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ClientFuturesTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ClientFuturesTest.java
index d89d9de..6424c14 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ClientFuturesTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ClientFuturesTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.test;
 
-import static org.apache.juneau.rest.test.TestUtils.*;
+import static org.apache.juneau.rest.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.concurrent.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ConfigTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ConfigTest.java
index b6a475e..383cc88 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ConfigTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ConfigTest.java
@@ -13,7 +13,7 @@
 package org.apache.juneau.rest.test;
 
 import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.rest.test.TestUtils.*;
+import static org.apache.juneau.rest.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ContentTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ContentTest.java
deleted file mode 100644
index f6b43b3..0000000
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ContentTest.java
+++ /dev/null
@@ -1,450 +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 static org.apache.juneau.internal.StringUtils.*;
-import static org.junit.Assert.*;
-
-import org.apache.juneau.json.*;
-import org.apache.juneau.plaintext.*;
-import org.apache.juneau.rest.client.*;
-import org.apache.juneau.uon.*;
-import org.junit.*;
-
-public class ContentTest extends RestTestcase {
-
-	private static String URL = "/testContent";
-
-	//====================================================================================================
-	// Basic tests using @Body parameter
-	//====================================================================================================
-	@Test
-	public void testUsingContentParam() throws Exception {
-		RestClient c = TestMicroservice.client().accept("text/json+simple").build();
-		String r;
-
-		//	@RestMethod(name=POST, path="/boolean")
-		//	public boolean testBool(@Body boolean b) {
-		//		return b;
-		//	}
-		r = c.doPost(URL + "/boolean?body=true", null).getResponseAsString();
-		assertEquals("true", r);
-		r = c.doPost(URL + "/boolean?body=false", null).getResponseAsString();
-		assertEquals("false", r);
-		r = c.doPost(URL + "/boolean?body=null", null).getResponseAsString();
-		assertEquals("false", r);
-		try {
-			r = c.doPost(URL + "/boolean?body=bad&noTrace=true", null).getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-
-		//	@RestMethod(name=POST, path="/Boolean")
-		//	public Boolean testBoolean(@Body Boolean b) {
-		//		return b;
-		//	}
-		r = c.doPost(URL + "/Boolean?body=true", null).getResponseAsString();
-		assertEquals("true", r);
-		r = c.doPost(URL + "/Boolean?body=false", null).getResponseAsString();
-		assertEquals("false", r);
-		r = c.doPost(URL + "/Boolean?body=null", null).getResponseAsString();
-		assertEquals("null", r);
-		try {
-			r = c.doPost(URL + "/Boolean?body=bad&noTrace=true", null).getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-		//	@RestMethod(name=POST, path="/int")
-		//	public int testInt(@Body int i) {
-		//		return i;
-		//	}
-		r = c.doPost(URL + "/int?body=-123", null).getResponseAsString();
-		assertEquals("-123", r);
-		r = c.doPost(URL + "/int?body=null", null).getResponseAsString();
-		assertEquals("0", r);
-		try {
-			r = c.doPost(URL + "/int?body=bad&noTrace=true", null).getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-		//	@RestMethod(name=POST, path="/Integer")
-		//	public Integer testInteger(@Body Integer i) {
-		//		return i;
-		//	}
-		r = c.doPost(URL + "/Integer?body=-123", null).getResponseAsString();
-		assertEquals("-123", r);
-		r = c.doPost(URL + "/Integer?body=null", null).getResponseAsString();
-		assertEquals("null", r);
-		try {
-			r = c.doPost(URL + "/Integer?body=bad&noTrace=true", null).getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-		//	@RestMethod(name=POST, path="/float")
-		//	public float testFloat(@Body float f) {
-		//		return f;
-		//	}
-		r = c.doPost(URL + "/float?body=-1.23", null).getResponseAsString();
-		assertEquals("-1.23", r);
-		r = c.doPost(URL + "/float?body=null", null).getResponseAsString();
-		assertEquals("0.0", r);
-		try {
-			r = c.doPost(URL + "/float?body=bad&noTrace=true", null).getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-		//	@RestMethod(name=POST, path="/Float")
-		//	public Float testFloat2(@Body Float f) {
-		//		return f;
-		//	}
-		r = c.doPost(URL + "/Float?body=-1.23", null).getResponseAsString();
-		assertEquals("-1.23", r);
-		r = c.doPost(URL + "/Float?body=null", null).getResponseAsString();
-		assertEquals("null", r);
-		try {
-			r = c.doPost(URL + "/Float?body=bad&noTrace=true", null).getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-		//	@RestMethod(name=POST, path="/Map")
-		//	public TreeMap<String,String> testMap(@Body TreeMap<String,String> m) {
-		//		return m;
-		//	}
-		r = c.doPost(URL + "/Map?body=(a=b,c=d)", null).getResponseAsString();
-		assertEquals("{a:'b',c:'d'}", r);
-		r = c.doPost(URL + "/Map?body=null", null).getResponseAsString();
-		assertEquals("null", r);
-		try {
-			r = c.doPost(URL + "/Map?body=bad&noTrace=true", null).getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-		//	@RestMethod(name=POST, path="/B")
-		//	public DTO2s.B testPojo1(@Body DTO2s.B b) {
-		//		return b;
-		//	}
-		DTOs.B b = DTOs.B.create();
-		r = c.doPost(URL + "/B?body=" + UonSerializer.DEFAULT.serialize(b), null).getResponseAsString();
-		assertEquals("{f01:['a','b'],f02:['c','d'],f03:[1,2],f04:[3,4],f05:[['e','f'],['g','h']],f06:[['i','j'],['k','l']],f07:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f08:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f09:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f10:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f11:['a','b'],f12:['c','d'],f13:[1,2],f14:[3,4],f15:[['e','f'],['g','h']],f16:[['i','j'],['k','l']],f17:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f18:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f19 [...]
-
-		//	@RestMethod(name=POST, path="/C")
-		//	public DTO2s.C testPojo2(@Body DTO2s.C c) {
-		//		return c;
-		//	}
-		DTOs.C x = DTOs.C.create();
-		r = c.doPost(URL + "/C?body=" + UonSerializer.DEFAULT.serialize(x), null).getResponseAsString();
-		assertEquals("{f01:['a','b'],f02:['c','d'],f03:[1,2],f04:[3,4],f05:[['e','f'],['g','h']],f06:[['i','j'],['k','l']],f07:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f08:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f09:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f10:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f11:['a','b'],f12:['c','d'],f13:[1,2],f14:[3,4],f15:[['e','f'],['g','h']],f16:[['i','j'],['k','l']],f17:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f18:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f19 [...]
-
-		c.closeQuietly();
-	}
-
-	//====================================================================================================
-	// Basic tests using &Body parameter with &Accept=text/json
-	//====================================================================================================
-	@Test
-	public void testUsingContentParamJsonParam() throws Exception {
-		RestClient c = TestMicroservice.client().accept("text/json+simple").build();
-		String r;
-
-		//	@RestMethod(name=POST, path="/boolean")
-		//	public boolean testBool(@Body boolean b) {
-		//		return b;
-		//	}
-		r = c.doPost(URL + "/boolean?body=true&Content-Type=text/json", null).getResponseAsString();
-		assertEquals("true", r);
-		r = c.doPost(URL + "/boolean?body=false&Content-Type=text/json", null).getResponseAsString();
-		assertEquals("false", r);
-		try {
-			r = c.doPost(URL + "/boolean?body=null&Content-Type=text/json&noTrace=true", null).getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-		try {
-			r = c.doPost(URL + "/boolean?body=bad&Content-Type=text/json&noTrace=true", null).getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-
-		//	@RestMethod(name=POST, path="/Boolean")
-		//	public Boolean testBoolean(@Body Boolean b) {
-		//		return b;
-		//	}
-		r = c.doPost(URL + "/Boolean?body=true&Content-Type=text/json", null).getResponseAsString();
-		assertEquals("true", r);
-		r = c.doPost(URL + "/Boolean?body=false&Content-Type=text/json", null).getResponseAsString();
-		assertEquals("false", r);
-		r = c.doPost(URL + "/Boolean?body=null&Content-Type=text/json", null).getResponseAsString();
-		assertEquals("null", r);
-		try {
-			r = c.doPost(URL + "/Boolean?body=bad&Content-Type=text/json&noTrace=true", null).getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-		//	@RestMethod(name=POST, path="/int")
-		//	public int testInt(@Body int i) {
-		//		return i;
-		//	}
-		r = c.doPost(URL + "/int?body=-123&Content-Type=text/json", null).getResponseAsString();
-		assertEquals("-123", r);
-		try {
-			r = c.doPost(URL + "/int?body=null&Content-Type=text/json&noTrace=true", null).getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-		try {
-			r = c.doPost(URL + "/int?body=bad&Content-Type=text/json&noTrace=true", null).getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-		//	@RestMethod(name=POST, path="/Integer")
-		//	public Integer testInteger(@Body Integer i) {
-		//		return i;
-		//	}
-		r = c.doPost(URL + "/Integer?body=-123&Content-Type=text/json", null).getResponseAsString();
-		assertEquals("-123", r);
-		r = c.doPost(URL + "/Integer?body=null&Content-Type=text/json", null).getResponseAsString();
-		assertEquals("null", r);
-		try {
-			r = c.doPost(URL + "/Integer?body=bad&Content-Type=text/json&noTrace=true", null).getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-		//	@RestMethod(name=POST, path="/float")
-		//	public float testFloat(@Body float f) {
-		//		return f;
-		//	}
-		r = c.doPost(URL + "/float?body=-1.23&Content-Type=text/json", null).getResponseAsString();
-		assertEquals("-1.23", r);
-		try {
-			r = c.doPost(URL + "/float?body=null&Content-Type=text/json&noTrace=true", null).getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-		try {
-			r = c.doPost(URL + "/float?body=bad&Content-Type=text/json&noTrace=true", null).getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-		//	@RestMethod(name=POST, path="/Float")
-		//	public Float testFloat2(@Body Float f) {
-		//		return f;
-		//	}
-		r = c.doPost(URL + "/Float?body=-1.23&Content-Type=text/json", null).getResponseAsString();
-		assertEquals("-1.23", r);
-		r = c.doPost(URL + "/Float?body=null&Content-Type=text/json", null).getResponseAsString();
-		assertEquals("null", r);
-		try {
-			r = c.doPost(URL + "/Float?body=bad&Content-Type=text/json&noTrace=true", null).getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-		//	@RestMethod(name=POST, path="/Map")
-		//	public TreeMap<String,String> testMap(@Body TreeMap<String,String> m) {
-		//		return m;
-		//	}
-		r = c.doPost(URL + "/Map?body=" + urlEncode("{a:'b',c:'d'}") + "&Content-Type=text/json", null).getResponseAsString();
-		assertEquals("{a:'b',c:'d'}", r);
-		r = c.doPost(URL + "/Map?body=null&Content-Type=text/json", null).getResponseAsString();
-		assertEquals("null", r);
-		try {
-			r = c.doPost(URL + "/Map?body=bad&Content-Type=text/json&noTrace=true", null).getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-		//	@RestMethod(name=POST, path="/B")
-		//	public DTO2s.B testPojo1(@Body DTO2s.B b) {
-		//		return b;
-		//	}
-		DTOs.B b = DTOs.B.create();
-		r = c.doPost(URL + "/B?body=" + urlEncode(JsonSerializer.DEFAULT_LAX.serialize(b)) + "&Content-Type=text/json", null).getResponseAsString();
-		assertEquals("{f01:['a','b'],f02:['c','d'],f03:[1,2],f04:[3,4],f05:[['e','f'],['g','h']],f06:[['i','j'],['k','l']],f07:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f08:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f09:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f10:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f11:['a','b'],f12:['c','d'],f13:[1,2],f14:[3,4],f15:[['e','f'],['g','h']],f16:[['i','j'],['k','l']],f17:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f18:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f19 [...]
-
-		//	@RestMethod(name=POST, path="/C")
-		//	public DTO2s.C testPojo2(@Body DTO2s.C c) {
-		//		return c;
-		//	}
-		DTOs.C x = DTOs.C.create();
-		r = c.doPost(URL + "/C?body=" + urlEncode(JsonSerializer.DEFAULT_LAX.serialize(x)) + "&Content-Type=text/json", null).getResponseAsString();
-		assertEquals("{f01:['a','b'],f02:['c','d'],f03:[1,2],f04:[3,4],f05:[['e','f'],['g','h']],f06:[['i','j'],['k','l']],f07:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f08:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f09:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f10:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f11:['a','b'],f12:['c','d'],f13:[1,2],f14:[3,4],f15:[['e','f'],['g','h']],f16:[['i','j'],['k','l']],f17:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f18:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f19 [...]
-
-		c.closeQuietly();
-	}
-
-	//====================================================================================================
-	// Basic tests using HTTP body content
-	//====================================================================================================
-	@Test
-	public void testUsingContent() throws Exception {
-		RestClient c = TestMicroservice.client().accept("text/json+simple").contentType("text/uon").serializer(PlainTextSerializer.class).build();
-		String r;
-
-		//	@RestMethod(name=POST, path="/boolean")
-		//	public boolean testBool(@Body boolean b) {
-		//		return b;
-		//	}
-		r = c.doPost(URL + "/boolean", "true").getResponseAsString();
-		assertEquals("true", r);
-		r = c.doPost(URL + "/boolean", "false").getResponseAsString();
-		assertEquals("false", r);
-		r = c.doPost(URL + "/boolean", "null").getResponseAsString();
-		assertEquals("false", r);
-		try {
-			r = c.doPost(URL + "/boolean?noTrace=true", "bad").getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-
-		//	@RestMethod(name=POST, path="/Boolean")
-		//	public Boolean testBoolean(@Body Boolean b) {
-		//		return b;
-		//	}
-		r = c.doPost(URL + "/Boolean", "true").getResponseAsString();
-		assertEquals("true", r);
-		r = c.doPost(URL + "/Boolean", "false").getResponseAsString();
-		assertEquals("false", r);
-		r = c.doPost(URL + "/Boolean", "null").getResponseAsString();
-		assertEquals("null", r);
-		try {
-			r = c.doPost(URL + "/Boolean?noTrace=true", "bad").getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-		//	@RestMethod(name=POST, path="/int")
-		//	public int testInt(@Body int i) {
-		//		return i;
-		//	}
-		r = c.doPost(URL + "/int", "-123").getResponseAsString();
-		assertEquals("-123", r);
-		r = c.doPost(URL + "/int", "null").getResponseAsString();
-		assertEquals("0", r);
-		try {
-			r = c.doPost(URL + "/int?noTrace=true", "bad").getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-		//	@RestMethod(name=POST, path="/Integer")
-		//	public Integer testInteger(@Body Integer i) {
-		//		return i;
-		//	}
-		r = c.doPost(URL + "/Integer", "-123").getResponseAsString();
-		assertEquals("-123", r);
-		r = c.doPost(URL + "/Integer", "null").getResponseAsString();
-		assertEquals("null", r);
-		try {
-			r = c.doPost(URL + "/Integer?noTrace=true", "bad").getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-		//	@RestMethod(name=POST, path="/float")
-		//	public float testFloat(@Body float f) {
-		//		return f;
-		//	}
-		r = c.doPost(URL + "/float", "-1.23").getResponseAsString();
-		assertEquals("-1.23", r);
-		r = c.doPost(URL + "/float", "null").getResponseAsString();
-		assertEquals("0.0", r);
-		try {
-			r = c.doPost(URL + "/float?noTrace=true", "bad").getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-		//	@RestMethod(name=POST, path="/Float")
-		//	public Float testFloat2(@Body Float f) {
-		//		return f;
-		//	}
-		r = c.doPost(URL + "/Float", "-1.23").getResponseAsString();
-		assertEquals("-1.23", r);
-		r = c.doPost(URL + "/Float", "null").getResponseAsString();
-		assertEquals("null", r);
-		try {
-			r = c.doPost(URL + "/Float?noTrace=true", "bad").getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-		//	@RestMethod(name=POST, path="/Map")
-		//	public TreeMap<String,String> testMap(@Body TreeMap<String,String> m) {
-		//		return m;
-		//	}
-		r = c.doPost(URL + "/Map", "(a=b,c=d)").getResponseAsString();
-		assertEquals("{a:'b',c:'d'}", r);
-		r = c.doPost(URL + "/Map", "null").getResponseAsString();
-		assertEquals("null", r);
-		try {
-			r = c.doPost(URL + "/Map?noTrace=true", "bad").getResponseAsString();
-			fail("Exception expected!");
-		} catch (RestCallException e) {
-			assertEquals(400, e.getResponseCode());
-		}
-
-		//	@RestMethod(name=POST, path="/B")
-		//	public DTO2s.B testPojo1(@Body DTO2s.B b) {
-		//		return b;
-		//	}
-		DTOs.B b = DTOs.B.create();
-		r = c.doPost(URL + "/B", "" + UonSerializer.DEFAULT.serialize(b)).getResponseAsString();
-		assertEquals("{f01:['a','b'],f02:['c','d'],f03:[1,2],f04:[3,4],f05:[['e','f'],['g','h']],f06:[['i','j'],['k','l']],f07:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f08:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f09:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f10:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f11:['a','b'],f12:['c','d'],f13:[1,2],f14:[3,4],f15:[['e','f'],['g','h']],f16:[['i','j'],['k','l']],f17:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f18:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f19 [...]
-
-		//	@RestMethod(name=POST, path="/C")
-		//	public DTO2s.C testPojo2(@Body DTO2s.C c) {
-		//		return c;
-		//	}
-		DTOs.C x = DTOs.C.create();
-		r = c.doPost(URL + "/C", "" + UonSerializer.DEFAULT.serialize(x)).getResponseAsString();
-		assertEquals("{f01:['a','b'],f02:['c','d'],f03:[1,2],f04:[3,4],f05:[['e','f'],['g','h']],f06:[['i','j'],['k','l']],f07:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f08:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f09:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f10:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f11:['a','b'],f12:['c','d'],f13:[1,2],f14:[3,4],f15:[['e','f'],['g','h']],f16:[['i','j'],['k','l']],f17:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f18:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f19 [...]
-
-		c.closeQuietly();
-	}
-}
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/DTOs.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/DTOs.java
deleted file mode 100644
index 69a925e..0000000
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/DTOs.java
+++ /dev/null
@@ -1,138 +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.util.*;
-
-import org.apache.juneau.annotation.*;
-import org.apache.juneau.urlencoding.annotation.*;
-import org.apache.juneau.utils.*;
-
-public class DTOs {
-
-	@Bean(sort=true)
-	public static class A {
-		public String a;
-		public int b;
-		public boolean c;
-
-		public static A create() {
-			A t = new A();
-			t.a = "a";
-			t.b = 1;
-			t.c = true;
-			return t;
-		}
-
-	}
-
-	@Bean(sort=true)
-	public static class B {
-		public String[] f01;
-		public List<String> f02;
-		public int[] f03;
-		public List<Integer> f04;
-		public String[][] f05;
-		public List<String[]> f06;
-		public A[] f07;
-		public List<A> f08;
-		public A[][] f09;
-		public List<List<A>> f10;
-
-		private String[] f11;
-		private List<String> f12;
-		private int[] f13;
-		private List<Integer> f14;
-		private String[][] f15;
-		private List<String[]> f16;
-		private A[] f17;
-		private List<A> f18;
-		private A[][] f19;
-		private List<List<A>> f20;
-
-		public String[] getF11() { return f11; }
-		public List<String> getF12() { return f12; }
-		public int[] getF13() { return f13; }
-		public List<Integer> getF14() { return f14; }
-		public String[][] getF15() { return f15; }
-		public List<String[]> getF16() { return f16; }
-		public A[] getF17() { return f17; }
-		public List<A> getF18() { return f18; }
-		public A[][] getF19() { return f19; }
-		public List<List<A>> getF20() { return f20; }
-
-		public void setF11(String[] f11) { this.f11 = f11; }
-		public void setF12(List<String> f12) { this.f12 = f12; }
-		public void setF13(int[] f13) { this.f13 = f13; }
-		public void setF14(List<Integer> f14) { this.f14 = f14; }
-		public void setF15(String[][] f15) { this.f15 = f15; }
-		public void setF16(List<String[]> f16) { this.f16 = f16; }
-		public void setF17(A[] f17) { this.f17 = f17; }
-		public void setF18(List<A> f18) { this.f18 = f18; }
-		public void setF19(A[][] f19) { this.f19 = f19; }
-		public void setF20(List<List<A>> f20) { this.f20 = f20; }
-
-		static B create() {
-			B t = new B();
-			t.f01 = new String[]{"a","b"};
-			t.f02 = new AList<String>().append("c").append("d");
-			t.f03 = new int[]{1,2};
-			t.f04 = new AList<Integer>().append(3).append(4);
-			t.f05 = new String[][]{{"e","f"},{"g","h"}};
-			t.f06 = new AList<String[]>().append(new String[]{"i","j"}).append(new String[]{"k","l"});
-			t.f07 = new A[]{A.create(),A.create()};
-			t.f08 = new AList<A>().append(A.create()).append(A.create());
-			t.f09 = new A[][]{{A.create()},{A.create()}};
-			t.f10 = new AList<List<A>>().append(Arrays.asList(A.create())).append(Arrays.asList(A.create()));
-			t.setF11(new String[]{"a","b"});
-			t.setF12(new AList<String>().append("c").append("d"));
-			t.setF13(new int[]{1,2});
-			t.setF14(new AList<Integer>().append(3).append(4));
-			t.setF15(new String[][]{{"e","f"},{"g","h"}});
-			t.setF16(new AList<String[]>().append(new String[]{"i","j"}).append(new String[]{"k","l"}));
-			t.setF17(new A[]{A.create(),A.create()});
-			t.setF18(new AList<A>().append(A.create()).append(A.create()));
-			t.setF19(new A[][]{{A.create()},{A.create()}});
-			t.setF20(new AList<List<A>>().append(Arrays.asList(A.create())).append(Arrays.asList(A.create())));
-			return t;
-		}
-	}
-
-	@UrlEncoding(expandedParams=true)
-	public static class C extends B {
-		static C create() {
-			C t = new C();
-			t.f01 = new String[]{"a","b"};
-			t.f02 = new AList<String>().append("c").append("d");
-			t.f03 = new int[]{1,2};
-			t.f04 = new AList<Integer>().append(3).append(4);
-			t.f05 = new String[][]{{"e","f"},{"g","h"}};
-			t.f06 = new AList<String[]>().append(new String[]{"i","j"}).append(new String[]{"k","l"});
-			t.f07 = new A[]{A.create(),A.create()};
-			t.f08 = new AList<A>().append(A.create()).append(A.create());
-			t.f09 = new A[][]{{A.create()},{A.create()}};
-			t.f10 = new AList<List<A>>().append(Arrays.asList(A.create())).append(Arrays.asList(A.create()));
-			t.setF11(new String[]{"a","b"});
-			t.setF12(new AList<String>().append("c").append("d"));
-			t.setF13(new int[]{1,2});
-			t.setF14(new AList<Integer>().append(3).append(4));
-			t.setF15(new String[][]{{"e","f"},{"g","h"}});
-			t.setF16(new AList<String[]>().append(new String[]{"i","j"}).append(new String[]{"k","l"}));
-			t.setF17(new A[]{A.create(),A.create()});
-			t.setF18(new AList<A>().append(A.create()).append(A.create()));
-			t.setF19(new A[][]{{A.create()},{A.create()}});
-			t.setF20(new AList<List<A>>().append(Arrays.asList(A.create())).append(Arrays.asList(A.create())));
-			return t;
-		}
-	}
-}
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/DefaultContentTypesTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/DefaultContentTypesTest.java
index 57199ce..9ce9e19 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/DefaultContentTypesTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/DefaultContentTypesTest.java
@@ -13,7 +13,7 @@
 package org.apache.juneau.rest.test;
 
 import static javax.servlet.http.HttpServletResponse.*;
-import static org.apache.juneau.rest.test.TestUtils.*;
+import static org.apache.juneau.microservice.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.rest.client.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ErrorConditionsTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ErrorConditionsTest.java
index 81bce1d..6206efb 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ErrorConditionsTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ErrorConditionsTest.java
@@ -13,7 +13,7 @@
 package org.apache.juneau.rest.test;
 
 import static javax.servlet.http.HttpServletResponse.*;
-import static org.apache.juneau.rest.test.TestUtils.*;
+import static org.apache.juneau.microservice.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/FormDataTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/FormDataTest.java
index de670a9..54bc8f7 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/FormDataTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/FormDataTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.test;
 
-import static org.apache.juneau.rest.test.TestUtils.*;
+import static org.apache.juneau.rest.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/GroupsTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/GroupsTest.java
index 874b0da..a09bba6 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/GroupsTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/GroupsTest.java
@@ -13,7 +13,7 @@
 package org.apache.juneau.rest.test;
 
 import static javax.servlet.http.HttpServletResponse.*;
-import static org.apache.juneau.rest.test.TestUtils.*;
+import static org.apache.juneau.microservice.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.io.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/GzipTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/GzipTest.java
index f6efc23..e401e6a 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/GzipTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/GzipTest.java
@@ -14,7 +14,7 @@ package org.apache.juneau.rest.test;
 
 import static javax.servlet.http.HttpServletResponse.*;
 import static org.apache.juneau.internal.IOUtils.*;
-import static org.apache.juneau.rest.test.TestUtils.*;
+import static org.apache.juneau.microservice.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.io.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/HeadersTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/HeadersTest.java
index e6dd7d4..2001415 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/HeadersTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/HeadersTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.test;
 
-import static org.apache.juneau.rest.test.TestUtils.*;
+import static org.apache.juneau.rest.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/InterfaceProxyTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/InterfaceProxyTest.java
index 48cc453..d04ff1b 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/InterfaceProxyTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/InterfaceProxyTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.test;
 
-import static org.apache.juneau.rest.test.TestUtils.*;
-import static org.apache.juneau.rest.test.pojos.Constants.*;
+import static org.apache.juneau.rest.testutils.Constants.*;
+import static org.apache.juneau.rest.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
@@ -23,7 +23,7 @@ import org.apache.juneau.jena.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.msgpack.*;
 import org.apache.juneau.parser.*;
-import org.apache.juneau.rest.test.pojos.*;
+import org.apache.juneau.rest.testutils.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.uon.*;
 import org.apache.juneau.urlencoding.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/MessagesTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/MessagesTest.java
index 5cb4b82..80c1ea8 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/MessagesTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/MessagesTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.test;
 
-import static org.apache.juneau.rest.test.TestUtils.*;
+import static org.apache.juneau.rest.testutils.TestUtils.*;
 
 import java.util.*;
 
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/NlsTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/NlsTest.java
index b2cb435..8528fe7 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/NlsTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/NlsTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.test;
 
-import static org.apache.juneau.rest.test.TestUtils.*;
+import static org.apache.juneau.rest.testutils.TestUtils.*;
 
 import org.apache.juneau.dto.swagger.*;
 import org.apache.juneau.rest.client.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/OverlappingMethodsTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/OverlappingMethodsTest.java
index 6822566..313fd7f 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/OverlappingMethodsTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/OverlappingMethodsTest.java
@@ -13,7 +13,7 @@
 package org.apache.juneau.rest.test;
 
 import static javax.servlet.http.HttpServletResponse.*;
-import static org.apache.juneau.rest.test.TestUtils.*;
+import static org.apache.juneau.microservice.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.rest.client.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ParamsTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ParamsTest.java
index db2d1fd..bd7bf6f 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ParamsTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ParamsTest.java
@@ -13,7 +13,7 @@
 package org.apache.juneau.rest.test;
 
 import static javax.servlet.http.HttpServletResponse.*;
-import static org.apache.juneau.rest.test.TestUtils.*;
+import static org.apache.juneau.microservice.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.io.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ParsersTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ParsersTest.java
index 9e11659..3a1d073 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ParsersTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ParsersTest.java
@@ -13,7 +13,7 @@
 package org.apache.juneau.rest.test;
 
 import static javax.servlet.http.HttpServletResponse.*;
-import static org.apache.juneau.rest.test.TestUtils.*;
+import static org.apache.juneau.microservice.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.rest.client.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/QueryTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/QueryTest.java
index c211ca8..2da01e2 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/QueryTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/QueryTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.test;
 
-import static org.apache.juneau.rest.test.TestUtils.*;
+import static org.apache.juneau.rest.testutils.TestUtils.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.rest.client.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/RestClientTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/RestClientTest.java
index 2250489..7833a82 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/RestClientTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/RestClientTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.test;
 
-import static org.apache.juneau.rest.test.TestUtils.*;
+import static org.apache.juneau.rest.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/RestHooksInitTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/RestHooksInitTest.java
index 0743682..99ab093 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/RestHooksInitTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/RestHooksInitTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.test;
 
-import static org.apache.juneau.rest.test.TestUtils.*;
+import static org.apache.juneau.rest.testutils.TestUtils.*;
 
 import java.util.*;
 
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/RestHooksTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/RestHooksTest.java
index 0e85392..f306c0c 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/RestHooksTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/RestHooksTest.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.test;
 
-import static org.apache.juneau.rest.test.TestUtils.*;
+import static org.apache.juneau.microservice.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/RestUtilsTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/RestUtilsTest.java
index 040f61e..55334b1 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/RestUtilsTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/RestUtilsTest.java
@@ -18,6 +18,7 @@ import static org.junit.Assert.*;
 
 import java.util.*;
 
+import org.apache.juneau.rest.testutils.*;
 import org.apache.juneau.urlencoding.*;
 import org.junit.*;
 
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/SerializersTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/SerializersTest.java
index ec17178..c65880d 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/SerializersTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/SerializersTest.java
@@ -13,7 +13,7 @@
 package org.apache.juneau.rest.test;
 
 import static javax.servlet.http.HttpServletResponse.*;
-import static org.apache.juneau.rest.test.TestUtils.*;
+import static org.apache.juneau.microservice.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.rest.client.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ThirdPartyProxyTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ThirdPartyProxyTest.java
index f6de1e9..53c7dcc 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ThirdPartyProxyTest.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ThirdPartyProxyTest.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.test;
 
-import static org.apache.juneau.rest.test.TestUtils.*;
-import static org.apache.juneau.rest.test.pojos.Constants.*;
+import static org.apache.juneau.microservice.testutils.TestUtils.*;
+import static org.apache.juneau.rest.testutils.Constants.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
@@ -29,7 +29,7 @@ import org.apache.juneau.parser.*;
 import org.apache.juneau.remoteable.*;
 import org.apache.juneau.rest.client.*;
 import org.apache.juneau.rest.test.ThirdPartyProxyTest.ThirdPartyProxy.*;
-import org.apache.juneau.rest.test.pojos.*;
+import org.apache.juneau.rest.testutils.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.uon.*;
 import org.apache.juneau.urlencoding.*;
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/UrlContentTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/UrlContentTest.java
deleted file mode 100644
index 0f03f94..0000000
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/UrlContentTest.java
+++ /dev/null
@@ -1,65 +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 static org.junit.Assert.*;
-
-import org.apache.juneau.rest.client.*;
-import org.junit.*;
-
-public class UrlContentTest extends RestTestcase {
-
-	private static String URL = "/testUrlContent";
-	private RestClient client = TestMicroservice.DEFAULT_CLIENT_PLAINTEXT;
-
-
-	//====================================================================================================
-	// Test URL &Body parameter containing a String
-	//====================================================================================================
-	@Test
-	public void testString() throws Exception {
-		String r;
-		r = client.doGet(URL + "/testString?body=\'xxx\'&Content-Type=text/json").getResponseAsString();
-		assertEquals("class=java.lang.String, value=xxx", r);
-	}
-
-	//====================================================================================================
-	// Test URL &Body parameter containing an Enum
-	//====================================================================================================
-	@Test
-	public void testEnum() throws Exception {
-		String r;
-		r = client.doGet(URL + "/testEnum?body='X1'&Content-Type=text/json").getResponseAsString();
-		assertEquals("class=org.apache.juneau.rest.test.UrlContentResource$TestEnum, value=X1", r);
-	}
-
-	//====================================================================================================
-	// Test URL &Body parameter containing a Bean
-	//====================================================================================================
-	@Test
-	public void testBean() throws Exception {
-		String r;
-		r = client.doGet(URL + "/testBean?body=%7Bf1:1,f2:'foobar'%7D&Content-Type=text/json").getResponseAsString();
-		assertEquals("class=org.apache.juneau.rest.test.UrlContentResource$TestBean, value={f1:1,f2:'foobar'}", r);
-	}
-
-	//====================================================================================================
-	// Test URL &Body parameter containing an int
-	//====================================================================================================
-	@Test
-	public void testInt() throws Exception {
-		String r;
-		r = client.doGet(URL + "/testInt?body=123&Content-Type=text/json").getResponseAsString();
-		assertEquals("class=java.lang.Integer, value=123", r);
-	}
-}
\ No newline at end of file
diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/_TestSuite.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/_TestSuite.java
index c66cba4..6841615 100644
--- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/_TestSuite.java
+++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/_TestSuite.java
@@ -19,7 +19,7 @@ import org.junit.runners.Suite.*;
 
 /**
  * Runs all the testcases in this project.
- * Starts a REST service running org.apache.juneau.rest.test.Root on port 10001.
+ * Starts a REST service running org.apache.juneau.rest.testutils.Root on port 10001.
  * Stops the REST service after running the tests.
  */
 @RunWith(Suite.class)
@@ -31,7 +31,6 @@ import org.junit.runners.Suite.*;
 	ClientFuturesTest.class,
 	ClientVersionTest.class,
 	ConfigTest.class,
-	ContentTest.class,
 	DefaultContentTypesTest.class,
 	ErrorConditionsTest.class,
 	FormDataTest.class,
@@ -66,7 +65,6 @@ import org.junit.runners.Suite.*;
 	ThirdPartyProxyTest.class,
 	TransformsTest.class,
 	UrisTest.class,
-	UrlContentTest.class,
 	UrlPathPatternTest.class
 })
 public class _TestSuite {
diff --git a/juneau-rest/juneau-rest-server/pom.xml b/juneau-rest/juneau-rest-server/pom.xml
index 61032e9..aba83c0 100644
--- a/juneau-rest/juneau-rest-server/pom.xml
+++ b/juneau-rest/juneau-rest-server/pom.xml
@@ -93,6 +93,17 @@
 					</includes>
 				</configuration>
 			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-jar-plugin</artifactId>
+				<executions>
+					<execution>
+						<goals>
+							<goal>test-jar</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
 		</plugins>
 	</build>
 </project>
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestBody.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestBody.java
index e97a615..b5e7c4a 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestBody.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestBody.java
@@ -49,6 +49,8 @@ public class RequestBody {
 	private RequestHeaders headers;
 	private BeanSession beanSession;
 	private int contentLength = 0;
+	private MediaType mediaType;
+	private Parser parser;
 
 	RequestBody(RestRequest req) {
 		this.req = req;
@@ -79,7 +81,9 @@ public class RequestBody {
 		return this;
 	}
 
-	RequestBody load(byte[] body) {
+	RequestBody load(MediaType mediaType, Parser parser, byte[] body) {
+		this.mediaType = mediaType;
+		this.parser = parser;
 		this.body = body;
 		return this;
 	}
@@ -337,6 +341,8 @@ public class RequestBody {
 	 * 	Includes the matching media type.
 	 */
 	public ParserMatch getParserMatch() {
+		if (mediaType != null && parser != null)
+			return new ParserMatch(mediaType, parser);
 		MediaType mediaType = headers.getContentType();
 		if (isEmpty(mediaType)) {
 			if (body != null)
@@ -400,7 +406,7 @@ public class RequestBody {
 			TimeZone timeZone = headers.getTimeZone();
 			Locale locale = req.getLocale();
 			ParserMatch pm = getParserMatch();
-
+			
 			if (pm != null) {
 				Parser p = pm.getParser();
 				MediaType mediaType = pm.getMediaType();
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
index 85cbfca..ea1c224 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
@@ -135,7 +135,7 @@ public final class RestRequest extends HttpServletRequestWrapper {
 				String b = getQuery().getString("body");
 				if (b != null) {
 					headers.put("Content-Type", UonSerializer.DEFAULT.getResponseContentType());
-					body.load(b.getBytes(UTF8));
+					body.load(MediaType.UON, UonParser.DEFAULT, b.getBytes(UTF8));
 				}
 			}
 
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/mock/MockRest.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/mock/MockRest.java
index 1199068..e88af04 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/mock/MockRest.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/mock/MockRest.java
@@ -64,10 +64,15 @@ public class MockRest {
 	 * 
 	 * @param c The REST class.
 	 * @return A new mock interface.
-	 * @throws Exception
+	 * @throws RuntimeException 
+	 * 	For testing conveniences, this method wraps all exceptions in a RuntimeException so that you can easily define mocks as reusable fields. 
 	 */
-	public static MockRest create(Class<?> c) throws Exception {
-		return new MockRest(c);
+	public static MockRest create(Class<?> c) throws RuntimeException {
+		try {
+			return new MockRest(c);
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
 	}
 	
 	/**
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
index 4730eb6..142b3a2 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.mock;
 
+import static org.apache.juneau.internal.StringUtils.*;
+
 import java.io.*;
 import java.security.*;
 import java.util.*;
@@ -34,7 +36,7 @@ import org.apache.juneau.rest.util.*;
 public class MockServletRequest implements HttpServletRequest {
 	
 	private String method = "GET";
-	private Map<String,String[]> parameterMap = new LinkedHashMap<>();
+	private Map<String,String[]> parameterMap;
 	private Map<String,String[]> headerMap = new LinkedHashMap<>();	
 	private Map<String,Object> attributeMap = new LinkedHashMap<>();
 	private String characterEncoding = "UTF-8";
@@ -59,14 +61,15 @@ public class MockServletRequest implements HttpServletRequest {
 	private String pathInfo;
 	private String pathTranslated;
 	private String contextPath = "";
-	private String queryString = "";
+	private String queryString;
 	private String remoteUser;
 	private Principal userPrincipal;
 	private String requestedSessionId;
-	private String requestURI = "";
+	private String requestURI;
 	private String servletPath = "";
 	private HttpSession httpSession = MockHttpSession.create();
 	private RestContext restContext;
+	private String uri = "";
 	
 	/**
 	 * Creates a new servlet request.
@@ -103,7 +106,18 @@ public class MockServletRequest implements HttpServletRequest {
 	public static MockServletRequest create(String method, String path, Object...pathArgs) {
 		return create()
 			.method(method)
-			.requestURI(StringUtils.format(path, pathArgs));
+			.uri(StringUtils.format(path, pathArgs));
+	}
+	
+	/**
+	 * Fluent setter.
+	 * 
+	 * @param uri The URI of the request.
+	 * @return This object (for method chaining).
+	 */
+	public MockServletRequest uri(String uri) {
+		this.uri = uri;
+		return this;
 	}
 	
 	/**
@@ -560,22 +574,29 @@ public class MockServletRequest implements HttpServletRequest {
 
 	@Override /* HttpServletRequest */
 	public String getParameter(String name) {
-		String[] s = parameterMap.get(name);
+		String[] s = getParameterMap().get(name);
 		return s == null || s.length == 0 ? null : s[0];
 	}
 
 	@Override /* HttpServletRequest */
 	public Enumeration<String> getParameterNames() {
-		return Collections.enumeration(new ArrayList<>(parameterMap.keySet()));
+		return Collections.enumeration(new ArrayList<>(getParameterMap().keySet()));
 	}
 
 	@Override /* HttpServletRequest */
 	public String[] getParameterValues(String name) {
-		return parameterMap.get(name);
+		return getParameterMap().get(name);
 	}
 
 	@Override /* HttpServletRequest */
 	public Map<String,String[]> getParameterMap() {
+		if (parameterMap == null) {
+			try {
+				parameterMap = RestUtils.parseQuery(getQueryString());
+			} catch (Exception e) {
+				throw new RuntimeException(e);
+			}
+		}
 		return parameterMap;
 	}
 
@@ -750,11 +771,20 @@ public class MockServletRequest implements HttpServletRequest {
 
 	@Override /* HttpServletRequest */
 	public String getPathInfo() {
+		if (pathInfo == null) {
+			pathInfo = getRequestURI();
+			if (! isEmpty(contextPath))
+				pathInfo = pathInfo.substring(contextPath.length());
+			if (! isEmpty(servletPath))
+				pathInfo = pathInfo.substring(servletPath.length());
+		}
 		return pathInfo;
 	}
 
 	@Override /* HttpServletRequest */
 	public String getPathTranslated() {
+		if (pathTranslated == null)
+			pathTranslated = "/mock-path" + getPathInfo();
 		return pathTranslated;
 	}
 
@@ -765,7 +795,15 @@ public class MockServletRequest implements HttpServletRequest {
 
 	@Override /* HttpServletRequest */
 	public String getQueryString() {
-		return queryString;
+		if (queryString == null) {
+			queryString = "";
+			if (uri.indexOf('?') != -1) {
+				queryString = uri.substring(uri.indexOf('?') + 1);
+			if (queryString.indexOf('#') != -1)
+				queryString = queryString.substring(0, queryString.indexOf('#'));
+			}
+		}
+		return isEmpty(queryString) ? null : queryString;
 	}
 
 	@Override /* HttpServletRequest */
@@ -790,12 +828,16 @@ public class MockServletRequest implements HttpServletRequest {
 
 	@Override /* HttpServletRequest */
 	public String getRequestURI() {
+		if (requestURI == null) {
+			requestURI = uri;
+			requestURI = requestURI.replaceAll("^\\w+\\:\\/\\/[^\\/]+", "").replaceAll("\\?.*$", "");
+		}
 		return requestURI;
 	}
 
 	@Override /* HttpServletRequest */
 	public StringBuffer getRequestURL() {
-		return new StringBuffer(requestURI);
+		return new StringBuffer(uri.replaceAll("\\?.*$", ""));
 	}
 
 	@Override /* HttpServletRequest */
diff --git a/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/BasicRestInfoProviderTest.java b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/BasicRestInfoProviderTest.java
index 7d2b17c..f638100 100644
--- a/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/BasicRestInfoProviderTest.java
+++ b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/BasicRestInfoProviderTest.java
@@ -14,8 +14,8 @@ package org.apache.juneau.rest;
 
 import static org.junit.Assert.*;
 import static org.junit.Assert.assertEquals;
-import static org.apache.juneau.rest.TestUtils.*;
 import static org.apache.juneau.http.HttpMethodName.*;
+import static org.apache.juneau.rest.testutils.TestUtils.*;
 
 import java.io.*;
 import java.util.*;
diff --git a/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/annotation/BodyTest.java b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/annotation/BodyTest.java
index 5147f11..07707bb 100644
--- a/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/annotation/BodyTest.java
+++ b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/annotation/BodyTest.java
@@ -22,6 +22,8 @@ import java.util.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.rest.mock.*;
+import org.apache.juneau.rest.testutils.*;
+import org.apache.juneau.uon.*;
 import org.junit.*;
 import org.junit.runners.*;
 
@@ -73,6 +75,16 @@ public class BodyTest {
 		public Float a07(@Body Float f) {
 			return f;
 		}
+		
+		@RestMethod(name=PUT, path="/Map")
+		public TreeMap<String,Integer> a08(@Body TreeMap<String,Integer> m) {
+			return m;
+		}
+
+		@RestMethod(name=PUT, path="/enum")
+		public TestEnum a09(@Body TestEnum e) {
+			return e;
+		}
 
 		public static class A11 {
 			public String f1;
@@ -129,54 +141,64 @@ public class BodyTest {
 			return b;
 		}
 	}
-
+	
+	private MockRest a = MockRest.create(A.class);
+	
 	@Test
 	public void a01_onParameter_String() throws Exception {
-		assertEquals("'foo'", MockRest.create(A.class).request("PUT", "/String").body("'foo'").execute().getBodyAsString());
+		assertEquals("'foo'", a.request("PUT", "/String").body("'foo'").execute().getBodyAsString());
 	}
 	@Test
 	public void a02_onParameter_Integer() throws Exception {
-		assertEquals("123", MockRest.create(A.class).request("PUT", "/Integer").body("123").execute().getBodyAsString());
+		assertEquals("123", a.request("PUT", "/Integer").body("123").execute().getBodyAsString());
 	}
 	@Test
 	public void a03_onParameter_int() throws Exception {
-		assertEquals("123", MockRest.create(A.class).request("PUT", "/int").body("123").execute().getBodyAsString());
+		assertEquals("123", a.request("PUT", "/int").body("123").execute().getBodyAsString());
 	}
 	@Test
 	public void a04_onParameter_Boolean() throws Exception {
-		assertEquals("true", MockRest.create(A.class).request("PUT", "/Boolean").body("true").execute().getBodyAsString());
+		assertEquals("true", a.request("PUT", "/Boolean").body("true").execute().getBodyAsString());
 	}
 	@Test
 	public void a05_onParameter_boolean() throws Exception {
-		assertEquals("true", MockRest.create(A.class).request("PUT", "/boolean").body("true").execute().getBodyAsString());
+		assertEquals("true", a.request("PUT", "/boolean").body("true").execute().getBodyAsString());
 	}
 	@Test
 	public void a06_onParameter_float() throws Exception {
-		assertEquals("1.23", MockRest.create(A.class).request("PUT", "/float").body("1.23").execute().getBodyAsString());
+		assertEquals("1.23", a.request("PUT", "/float").body("1.23").execute().getBodyAsString());
 	}
 	@Test
 	public void a07_onParameter_Float() throws Exception {
-		assertEquals("1.23", MockRest.create(A.class).request("PUT", "/Float").body("1.23").execute().getBodyAsString());
+		assertEquals("1.23", a.request("PUT", "/Float").body("1.23").execute().getBodyAsString());
+	}
+	@Test
+	public void a08_onParameter_Map() throws Exception {
+		assertEquals("{foo:123}", a.request("PUT", "/Map").body("{foo:123}").execute().getBodyAsString());
+	}
+	@Test
+	public void a09_onParameter_enum() throws Exception {
+		assertEquals("'ONE'", a.request("PUT", "/enum").body("'ONE'").execute().getBodyAsString());
 	}
 	@Test
 	public void a11_onParameter_bean() throws Exception {
-		assertEquals("{f1:'a'}", MockRest.create(A.class).request("PUT", "/bean").body("{f1:'a'}").execute().getBodyAsString());
+		assertEquals("{f1:'a'}", a.request("PUT", "/bean").body("{f1:'a'}").execute().getBodyAsString());
 	}
 	@Test
 	public void a12_onParameter_inputStream() throws Exception {
-		assertEquals("'a'", MockRest.create(A.class).request("PUT", "/inputStream").body("a").execute().getBodyAsString());
+		assertEquals("'a'", a.request("PUT", "/inputStream").body("a").execute().getBodyAsString());
 	}
 	@Test
 	public void a13_onParameter_reader() throws Exception {
-		assertEquals("'a'", MockRest.create(A.class).request("PUT", "/reader").body("a").execute().getBodyAsString());
+		assertEquals("'a'", a.request("PUT", "/reader").body("a").execute().getBodyAsString());
 	}
 	@Test
 	public void a14_onParameter_inputStreamTransform() throws Exception {
-		assertEquals("'a'", MockRest.create(A.class).request("PUT", "/inputStreamTransform").body("a").execute().getBodyAsString());
+		assertEquals("'a'", a.request("PUT", "/inputStreamTransform").body("a").execute().getBodyAsString());
 	}
 	@Test
 	public void a15_onParameter_readerTransform() throws Exception {
-		assertEquals("'a'", MockRest.create(A.class).request("PUT", "/readerTransform").body("a").execute().getBodyAsString());
+		assertEquals("'a'", a.request("PUT", "/readerTransform").body("a").execute().getBodyAsString());
 	}
 	
 	
@@ -263,24 +285,249 @@ public class BodyTest {
 		}
 	}
 	
+	private MockRest b = MockRest.create(B.class);
+
 	@Test
 	public void b01_onPojo_string() throws Exception {
-		assertEquals("'foo'", MockRest.create(B.class).request("PUT", "/string").body("'foo'").execute().getBodyAsString());
+		assertEquals("'foo'", b.request("PUT", "/string").body("'foo'").execute().getBodyAsString());
 	}
 	@Test
 	public void b02_onPojo_bean() throws Exception {
-		assertEquals("{f1:'a'}", MockRest.create(B.class).request("PUT", "/bean").body("{f1:'a'}").execute().getBodyAsString());
+		assertEquals("{f1:'a'}", b.request("PUT", "/bean").body("{f1:'a'}").execute().getBodyAsString());
 	}
 	@Test
 	public void b03_onPojo_beanList() throws Exception {
-		assertEquals("[{f1:'a'}]", MockRest.create(B.class).request("PUT", "/beanList").body("[{f1:'a'}]").execute().getBodyAsString());
+		assertEquals("[{f1:'a'}]", b.request("PUT", "/beanList").body("[{f1:'a'}]").execute().getBodyAsString());
 	}
 	@Test
 	public void b04_onPojo_inputStream() throws Exception {
-		assertEquals("'a'", MockRest.create(B.class).request("PUT", "/inputStreamTransform").body("a").execute().getBodyAsString());
+		assertEquals("'a'", b.request("PUT", "/inputStreamTransform").body("a").execute().getBodyAsString());
 	}
 	@Test
 	public void b05_onPojo_reader() throws Exception {
-		assertEquals("'a'", MockRest.create(B.class).request("PUT", "/readerTransform").body("a").execute().getBodyAsString());
+		assertEquals("'a'", b.request("PUT", "/readerTransform").body("a").execute().getBodyAsString());
+	}
+
+	
+	//-----------------------------------------------------------------------------------------------------------------
+	// Basic tests using @Body parameter
+	//-----------------------------------------------------------------------------------------------------------------
+
+	public void c01_bodyParam_String() throws Exception {
+		assertEquals("'foo'", a.request("PUT", "/String?body=foo").execute().getBodyAsString());
+		assertEquals("null", a.request("PUT", "/String?body=null").execute().getBodyAsString());
+		assertEquals("''", a.request("PUT", "/String?body=").execute().getBodyAsString());
+	}
+	@Test
+	public void c02_bodyParam_Integer() throws Exception {
+		assertEquals("123", a.request("PUT", "/Integer?body=123").execute().getBodyAsString());
+		assertEquals("-123", a.request("PUT", "/Integer?body=-123").execute().getBodyAsString());
+		assertEquals("null", a.request("PUT", "/Integer?body=null").execute().getBodyAsString());
+		assertEquals("null", a.request("PUT", "/Integer?body=").execute().getBodyAsString());
+		assertEquals(400, a.request("PUT", "/Integer?body=bad&noTrace=true").execute().getStatus());
+	}
+	@Test
+	public void c03_bodyParam_int() throws Exception {
+		assertEquals("123", a.request("PUT", "/int?body=123").execute().getBodyAsString());
+		assertEquals("-123", a.request("PUT", "/int?body=-123").execute().getBodyAsString());
+		assertEquals("0", a.request("PUT", "/int?body=null").execute().getBodyAsString());
+		assertEquals("0", a.request("PUT", "/int?body=").execute().getBodyAsString());
+		assertEquals(400, a.request("PUT", "/int?body=bad&noTrace=true").execute().getStatus());
+	}
+	@Test
+	public void c04_bodyParam_Boolean() throws Exception {
+		assertEquals("true", a.request("PUT", "/Boolean?body=true").execute().getBodyAsString());
+		assertEquals("false", a.request("PUT", "/Boolean?body=false").execute().getBodyAsString());
+		assertEquals("null", a.request("PUT", "/Boolean?body=null").execute().getBodyAsString());
+		assertEquals("null", a.request("PUT", "/Boolean?body=").execute().getBodyAsString());
+		assertEquals(400, a.request("PUT", "/Boolean?body=bad&noTrace=true").execute().getStatus());
+	}
+	@Test
+	public void c05_bodyParam_boolean() throws Exception {
+		assertEquals("true", a.request("PUT", "/boolean?body=true").execute().getBodyAsString());
+		assertEquals("false", a.request("PUT", "/boolean?body=false").execute().getBodyAsString());
+		assertEquals("false", a.request("PUT", "/boolean?body=null").execute().getBodyAsString());
+		assertEquals("false", a.request("PUT", "/boolean?body=").execute().getBodyAsString());
+		assertEquals(400, a.request("PUT", "/boolean?body=bad&noTrace=true").execute().getStatus());
+	}
+	@Test
+	public void c06_bodyParam_Float() throws Exception {
+		assertEquals("1.23", a.request("PUT", "/Float?body=1.23").execute().getBodyAsString());
+		assertEquals("-1.23", a.request("PUT", "/Float?body=-1.23").execute().getBodyAsString());
+		assertEquals("null", a.request("PUT", "/Float?body=null").execute().getBodyAsString());
+		assertEquals("null", a.request("PUT", "/Float?body=").execute().getBodyAsString());
+		assertEquals(400, a.request("PUT", "/Float?body=bad&noTrace=true").execute().getStatus());
+	}
+	@Test
+	public void c07_bodyParam_float() throws Exception {
+		assertEquals("1.23", a.request("PUT", "/float?body=1.23").execute().getBodyAsString());
+		assertEquals("-1.23", a.request("PUT", "/float?body=-1.23").execute().getBodyAsString());
+		assertEquals("0.0", a.request("PUT", "/float?body=null").execute().getBodyAsString());
+		assertEquals("0.0", a.request("PUT", "/float?body=").execute().getBodyAsString());
+		assertEquals(400, a.request("PUT", "/float?body=bad&noTrace=true").execute().getStatus());
+	}
+	@Test
+	public void c08_bodyParam_Map() throws Exception {
+		assertEquals("{foo:123}", a.request("PUT", "/Map?body=(foo=123)").execute().getBodyAsString());
+		assertEquals("{}", a.request("PUT", "/Map?body=()").execute().getBodyAsString());
+		assertEquals("null", a.request("PUT", "/Map?body=null").execute().getBodyAsString());
+		assertEquals("null", a.request("PUT", "/Map?body=").execute().getBodyAsString());
+		assertEquals(400, a.request("PUT", "/Map?body=bad&noTrace=true").execute().getStatus());
+	}
+	@Test
+	public void c09_bodyParam_enum() throws Exception {
+		assertEquals("'ONE'", a.request("PUT", "/enum?body=ONE").execute().getBodyAsString());
+		assertEquals("'TWO'", a.request("PUT", "/enum?body=TWO").execute().getBodyAsString());
+		assertEquals("null", a.request("PUT", "/enum?body=null").execute().getBodyAsString());
+		assertEquals("null", a.request("PUT", "/enum?body=").execute().getBodyAsString());
+		assertEquals(400, a.request("PUT", "/enum?body=bad&noTrace=true").execute().getStatus());
+	}
+	@Test
+	public void c11_bodyParam_bean() throws Exception {
+		assertEquals("{f1:'a'}", a.request("PUT", "/bean?body=(f1=a)").execute().getBodyAsString());
+		assertEquals("{}", a.request("PUT", "/bean?body=()").execute().getBodyAsString());
+		assertEquals("null", a.request("PUT", "/bean?body=null").execute().getBodyAsString());
+		assertEquals("null", a.request("PUT", "/bean?body=").execute().getBodyAsString());
+		assertEquals(400, a.request("PUT", "/bean?body=bad&noTrace=true").execute().getStatus());
+	}
+	@Test
+	public void c12_bodyParam_inputStream() throws Exception {
+		assertEquals("'a'", a.request("PUT", "/inputStream?body=a").execute().getBodyAsString());
+		assertEquals("'null'", a.request("PUT", "/inputStream?body=null").execute().getBodyAsString());
+		assertEquals("''", a.request("PUT", "/inputStream?body=").execute().getBodyAsString());
+	}
+	@Test
+	public void c13_bodyParam_reader() throws Exception {
+		assertEquals("'a'", a.request("PUT", "/reader?body=a").execute().getBodyAsString());
+		assertEquals("'null'", a.request("PUT", "/reader?body=null").execute().getBodyAsString());
+		assertEquals("''", a.request("PUT", "/reader?body=").execute().getBodyAsString());
+	}
+	@Test
+	public void c14_bodyParam_inputStreamTransform() throws Exception {
+		assertEquals("'a'", a.request("PUT", "/inputStreamTransform?body=a").execute().getBodyAsString());
+		assertEquals("'null'", a.request("PUT", "/inputStreamTransform?body=null").execute().getBodyAsString());
+		assertEquals("''", a.request("PUT", "/inputStreamTransform?body=").execute().getBodyAsString());
+	}
+	@Test
+	public void c15_bodyParam_readerTransform() throws Exception {
+		assertEquals("'a'", a.request("PUT", "/readerTransform?body=a").execute().getBodyAsString());
+		assertEquals("'null'", a.request("PUT", "/readerTransform?body=null").execute().getBodyAsString());
+		assertEquals("''", a.request("PUT", "/readerTransform?body=").execute().getBodyAsString());
+	}
+
+	
+	//-----------------------------------------------------------------------------------------------------------------
+	// No serializers or parsers needed when using only streams and readers.
+	//-----------------------------------------------------------------------------------------------------------------
+	
+	@RestResource
+	public static class D {
+		
+		@RestMethod(name=PUT, path="/inputStream")
+		public InputStream d01(@Body InputStream b) throws Exception {
+			return b;
+		}
+
+		@RestMethod(name=PUT, path="/reader")
+		public Reader d02(@Body Reader b) throws Exception {
+			return b;
+		}
+
+		public static class D03 {
+			String s;
+			
+			public D03(InputStream in) throws Exception {
+				this.s = IOUtils.read(in);
+			}
+			
+			@Override /* Object */
+			public String toString() {
+				return s;
+			}
+		}
+		
+		@RestMethod(name=PUT, path="/inputStreamTransform")
+		public Reader d03(@Body D03 b) throws Exception {
+			return new StringReader(b.toString());
+		}
+
+		public static class D04 {
+			private String s;
+			
+			public D04(Reader in) throws Exception {
+				this.s = IOUtils.read(in);
+			}
+			
+			@Override /* Object */
+			public String toString() {
+				return s;
+			}
+		}
+		
+		@RestMethod(name=PUT, path="/readerTransform")
+		public Reader d04(@Body D04 b) throws Exception {
+			return new StringReader(b.toString());
+		}
+	}
+	
+	private MockRest d = MockRest.create(D.class);
+	
+	@Test
+	public void d01_noMediaTypes_inputStream() throws Exception {
+		assertEquals("a", d.request("PUT", "/inputStream").body("a").execute().getBodyAsString());
+	}
+	@Test
+	public void d02_noMediaTypes_reader() throws Exception {
+		assertEquals("a", d.request("PUT", "/reader").body("a").execute().getBodyAsString());
+	}
+	@Test
+	public void d03_noMediaTypes_inputStreamTransform() throws Exception {
+		assertEquals("a", d.request("PUT", "/inputStreamTransform").body("a").execute().getBodyAsString());
+	}
+	@Test
+	public void d04_noMediaTypes_readerTransform() throws Exception {
+		assertEquals("a", d.request("PUT", "/readerTransform").body("a").execute().getBodyAsString());
+	}
+	
+	
+	//-----------------------------------------------------------------------------------------------------------------
+	// Complex POJOs
+	//-----------------------------------------------------------------------------------------------------------------
+	
+	@RestResource(serializers=JsonSerializer.Simple.class, parsers=JsonParser.class)
+	public static class E {
+	
+		@RestMethod(name=PUT, path="/B")
+		public DTOs.B testPojo1(@Body DTOs.B b) {
+			return b;
+		}
+	
+		@RestMethod(name=PUT, path="/C")
+		public DTOs.C testPojo2(@Body DTOs.C c) {
+			return c;
+		}
+	}
+	
+	private MockRest e = MockRest.create(E.class);
+	
+	@Test
+	public void e01_complexPojos_B_body() throws Exception {
+		String expected = "{f01:['a','b'],f02:['c','d'],f03:[1,2],f04:[3,4],f05:[['e','f'],['g','h']],f06:[['i','j'],['k','l']],f07:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f08:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f09:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f10:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f11:['a','b'],f12:['c','d'],f13:[1,2],f14:[3,4],f15:[['e','f'],['g','h']],f16:[['i','j'],['k','l']],f17:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f18:[{a:'a',b:1,c:true},{a:'a',b:1,c:true} [...]
+		assertEquals(expected, e.request("PUT", "/B").body(JsonSerializer.DEFAULT_LAX.toString(DTOs.B.INSTANCE)).execute().getBodyAsString());
+	}
+	@Test
+	public void e02_complexPojos_B_bodyParam() throws Exception {
+		String expected = "{f01:['a','b'],f02:['c','d'],f03:[1,2],f04:[3,4],f05:[['e','f'],['g','h']],f06:[['i','j'],['k','l']],f07:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f08:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f09:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f10:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f11:['a','b'],f12:['c','d'],f13:[1,2],f14:[3,4],f15:[['e','f'],['g','h']],f16:[['i','j'],['k','l']],f17:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f18:[{a:'a',b:1,c:true},{a:'a',b:1,c:true} [...]
+		assertEquals(expected, e.request("PUT", "/B?body=" + UonSerializer.DEFAULT.serialize(DTOs.B.INSTANCE)).body("a").execute().getBodyAsString());
+	}
+	@Test
+	public void e03_complexPojos_C_body() throws Exception {
+		String expected = "{f01:['a','b'],f02:['c','d'],f03:[1,2],f04:[3,4],f05:[['e','f'],['g','h']],f06:[['i','j'],['k','l']],f07:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f08:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f09:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f10:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f11:['a','b'],f12:['c','d'],f13:[1,2],f14:[3,4],f15:[['e','f'],['g','h']],f16:[['i','j'],['k','l']],f17:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f18:[{a:'a',b:1,c:true},{a:'a',b:1,c:true} [...]
+		assertEquals(expected, e.request("PUT", "/C").body(JsonSerializer.DEFAULT_LAX.toString(DTOs.B.INSTANCE)).execute().getBodyAsString());
+	}
+	@Test
+	public void e04_complexPojos_C_bodyParam() throws Exception {
+		String expected = "{f01:['a','b'],f02:['c','d'],f03:[1,2],f04:[3,4],f05:[['e','f'],['g','h']],f06:[['i','j'],['k','l']],f07:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f08:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f09:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f10:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f11:['a','b'],f12:['c','d'],f13:[1,2],f14:[3,4],f15:[['e','f'],['g','h']],f16:[['i','j'],['k','l']],f17:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f18:[{a:'a',b:1,c:true},{a:'a',b:1,c:true} [...]
+		assertEquals(expected, e.request("PUT", "/C?body=" + UonSerializer.DEFAULT.serialize(DTOs.B.INSTANCE)).body("a").execute().getBodyAsString());
 	}
 }
diff --git a/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/mock/MockServletRequestTest.java b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/mock/MockServletRequestTest.java
new file mode 100644
index 0000000..6ea8f63
--- /dev/null
+++ b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/mock/MockServletRequestTest.java
@@ -0,0 +1,122 @@
+// ***************************************************************************************************************************
+// * 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.mock;
+
+import static org.apache.juneau.rest.testutils.TestUtils.*;
+import static org.junit.Assert.*;
+
+import org.junit.*;
+import org.junit.runners.*;
+
+/**
+ * Tests the {@link MockServletRequest} class.
+ */
+@SuppressWarnings({"javadoc"})
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class MockServletRequestTest {
+	
+	//-----------------------------------------------------------------------------------------------------------------
+	// URIs
+	//-----------------------------------------------------------------------------------------------------------------
+	
+	@Test
+	public void a01_uris_basic() {
+		MockServletRequest req = MockServletRequest.create("GET", "/foo");
+		
+		assertEquals("", req.getContextPath());
+		assertEquals("/foo", req.getPathInfo());
+		assertEquals("/mock-path/foo", req.getPathTranslated());
+		assertEquals(null, req.getQueryString());
+		assertEquals("/foo", req.getRequestURI());
+		assertEquals("/foo", req.getRequestURL().toString());
+		assertEquals("", req.getServletPath());
+	}
+
+	@Test
+	public void a02_uris_full() {
+		MockServletRequest req = MockServletRequest.create("GET", "http://localhost:8080/foo?bar=baz#quz");
+		
+		assertEquals("", req.getContextPath());
+		assertEquals("/foo", req.getPathInfo());
+		assertEquals("/mock-path/foo", req.getPathTranslated());
+		assertEquals("bar=baz", req.getQueryString());
+		assertEquals("/foo", req.getRequestURI());
+		assertEquals("http://localhost:8080/foo", req.getRequestURL().toString());
+		assertEquals("", req.getServletPath());
+	}
+
+	@Test
+	public void a03_uris_full2() {
+		MockServletRequest req = MockServletRequest.create("GET", "http://localhost:8080/foo/bar/baz?bar=baz#quz");
+		
+		assertEquals("", req.getContextPath());
+		assertEquals("/foo/bar/baz", req.getPathInfo());
+		assertEquals("/mock-path/foo/bar/baz", req.getPathTranslated());
+		assertEquals("bar=baz", req.getQueryString());
+		assertEquals("/foo/bar/baz", req.getRequestURI());
+		assertEquals("http://localhost:8080/foo/bar/baz", req.getRequestURL().toString());
+		assertEquals("", req.getServletPath());
+	}
+
+	@Test
+	public void a04_uris_contextPath() {
+		MockServletRequest req = MockServletRequest.create("GET", "http://localhost:8080/foo/bar/baz?bar=baz#quz").contextPath("/foo");
+		
+		assertEquals("/foo", req.getContextPath());
+		assertEquals("/bar/baz", req.getPathInfo());
+		assertEquals("/mock-path/bar/baz", req.getPathTranslated());
+		assertEquals("bar=baz", req.getQueryString());
+		assertEquals("/foo/bar/baz", req.getRequestURI());
+		assertEquals("http://localhost:8080/foo/bar/baz", req.getRequestURL().toString());
+		assertEquals("", req.getServletPath());
+	}
+
+	@Test
+	public void a05_uris_servletPath() {
+		MockServletRequest req = MockServletRequest.create("GET", "http://localhost:8080/foo/bar/baz?bar=baz#quz").servletPath("/foo");
+		
+		assertEquals("", req.getContextPath());
+		assertEquals("/bar/baz", req.getPathInfo());
+		assertEquals("/mock-path/bar/baz", req.getPathTranslated());
+		assertEquals("bar=baz", req.getQueryString());
+		assertEquals("/foo/bar/baz", req.getRequestURI());
+		assertEquals("http://localhost:8080/foo/bar/baz", req.getRequestURL().toString());
+		assertEquals("/foo", req.getServletPath());
+	}
+
+	//-----------------------------------------------------------------------------------------------------------------
+	// Query strings
+	//-----------------------------------------------------------------------------------------------------------------
+
+	@Test
+	public void b01_query_basic() {
+		MockServletRequest req = MockServletRequest.create("GET", "/foo?bar=baz&bing=qux");
+		
+		assertEquals("bar=baz&bing=qux", req.getQueryString());
+		assertObjectEquals("{bar:['baz'],bing:['qux']}", req.getParameterMap());
+		assertObjectEquals("'baz'", req.getParameter("bar"));
+		assertObjectEquals("['bar','bing']", req.getParameterNames());
+		assertObjectEquals("['baz']", req.getParameterValues("bar"));
+	}
+
+	@Test
+	public void b02_query_multivalues() {
+		MockServletRequest req = MockServletRequest.create("GET", "/foo?bar=baz&bar=bing");
+		
+		assertEquals("bar=baz&bar=bing", req.getQueryString());
+		assertObjectEquals("{bar:['baz','bing']}", req.getParameterMap());
+		assertObjectEquals("'baz'", req.getParameter("bar"));
+		assertObjectEquals("['bar']", req.getParameterNames());
+		assertObjectEquals("['baz','bing']", req.getParameterValues("bar"));
+	}
+}
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/ABean.java b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/ABean.java
similarity index 95%
rename from juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/ABean.java
rename to juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/ABean.java
index 21d9c0e..247a88f 100644
--- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/ABean.java
+++ b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/ABean.java
@@ -10,8 +10,9 @@
 // * "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.pojos;
+package org.apache.juneau.rest.testutils;
 
+@SuppressWarnings("javadoc")
 public class ABean {
 	public int a;
 	public String b;
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/Constants.java b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/Constants.java
similarity index 92%
rename from juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/Constants.java
rename to juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/Constants.java
index ba7aced..71bdaf9 100644
--- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/Constants.java
+++ b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/Constants.java
@@ -10,14 +10,9 @@
 // * "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.pojos;
+package org.apache.juneau.rest.testutils;
 
-/**
- * Description.
- * <p>
- * 
- * @author James Bognar (james.bognar@salesforce.com)
- */
+@SuppressWarnings("javadoc")
 public class Constants {
 
 	public static final String SWAP = "swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/";
diff --git a/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/DTOs.java b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/DTOs.java
similarity index 94%
rename from juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/DTOs.java
rename to juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/DTOs.java
index 2a44524..ff5cd92 100644
--- a/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/DTOs.java
+++ b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/DTOs.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.rest;
+package org.apache.juneau.rest.testutils;
 
 import java.util.*;
 
@@ -83,7 +83,7 @@ public class DTOs {
 		public void setF19(A[][] f19) { this.f19 = f19; }
 		public void setF20(List<List<A>> f20) { this.f20 = f20; }
 
-		static B create() {
+		public static B create() {
 			B t = new B();
 			t.f01 = new String[]{"a","b"};
 			t.f02 = new AList<String>().append("c").append("d");
@@ -107,11 +107,13 @@ public class DTOs {
 			t.setF20(new AList<List<A>>().append(Arrays.asList(A.create())).append(Arrays.asList(A.create())));
 			return t;
 		}
+		
+		public static B INSTANCE = create();
 	}
 
 	@UrlEncoding(expandedParams=true)
 	public static class C extends B {
-		static C create() {
+		public static C create() {
 			C t = new C();
 			t.f01 = new String[]{"a","b"};
 			t.f02 = new AList<String>().append("c").append("d");
@@ -135,5 +137,7 @@ public class DTOs {
 			t.setF20(new AList<List<A>>().append(Arrays.asList(A.create())).append(Arrays.asList(A.create())));
 			return t;
 		}
+		
+		public static C INSTANCE = create();
 	}
 }
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/ImplicitSwappedPojo.java b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/ImplicitSwappedPojo.java
similarity index 93%
rename from juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/ImplicitSwappedPojo.java
rename to juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/ImplicitSwappedPojo.java
index 5f3f445..dee1e3d 100644
--- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/ImplicitSwappedPojo.java
+++ b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/ImplicitSwappedPojo.java
@@ -10,13 +10,14 @@
 // * "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.pojos;
+package org.apache.juneau.rest.testutils;
 
-import static org.apache.juneau.rest.test.pojos.Constants.*;
+import static org.apache.juneau.rest.testutils.Constants.*;
 
 import org.apache.juneau.annotation.*;
 
 @BeanIgnore
+@SuppressWarnings("javadoc")
 public class ImplicitSwappedPojo {
 	public boolean wasUnswapped;
 
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/SwappedPojo.java b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/SwappedPojo.java
similarity index 95%
rename from juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/SwappedPojo.java
rename to juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/SwappedPojo.java
index 6d38a7c..02def38 100644
--- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/SwappedPojo.java
+++ b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/SwappedPojo.java
@@ -10,11 +10,12 @@
 // * "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.pojos;
+package org.apache.juneau.rest.testutils;
 
 import org.apache.juneau.annotation.*;
 
 @Swap(SwappedPojoSwap.class)
+@SuppressWarnings("javadoc")
 public class SwappedPojo {
 	public boolean wasUnswapped;
 }
\ No newline at end of file
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/SwappedPojoSwap.java b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/SwappedPojoSwap.java
similarity index 93%
rename from juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/SwappedPojoSwap.java
rename to juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/SwappedPojoSwap.java
index 53c3e93..0af33ed 100644
--- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/SwappedPojoSwap.java
+++ b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/SwappedPojoSwap.java
@@ -10,15 +10,16 @@
 // * "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.pojos;
+package org.apache.juneau.rest.testutils;
 
-import static org.apache.juneau.rest.test.pojos.Constants.*;
+import static org.apache.juneau.rest.testutils.Constants.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.transform.*;
 
+@SuppressWarnings("javadoc")
 public class SwappedPojoSwap extends PojoSwap<SwappedPojo,String> {
 	@Override
 	public String swap(BeanSession session, SwappedPojo c) throws SerializeException {
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/TestEnum.java b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/TestEnum.java
similarity index 91%
rename from juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/TestEnum.java
rename to juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/TestEnum.java
index 06facf7..0befe3c 100644
--- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/TestEnum.java
+++ b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/TestEnum.java
@@ -2,7 +2,7 @@
 // * 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                                                              *
+// * with the License.  You may obtain a copy of the License at                                                              * 
 // *                                                                                                                         *
 // *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
 // *                                                                                                                         *
@@ -10,8 +10,9 @@
 // * "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.pojos;
+package org.apache.juneau.rest.testutils;
 
+@SuppressWarnings("javadoc")
 public enum TestEnum {
 	ONE,TWO,THREE
-}
\ No newline at end of file
+}
diff --git a/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/TestUtils.java b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/TestUtils.java
similarity index 92%
rename from juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/TestUtils.java
rename to juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/TestUtils.java
index 455d6a8..56af527 100755
--- a/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/TestUtils.java
+++ b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/TestUtils.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.rest;
+package org.apache.juneau.rest.testutils;
 
 import static org.apache.juneau.internal.IOUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
@@ -32,7 +32,8 @@ import org.apache.juneau.serializer.*;
 import org.apache.juneau.transforms.*;
 import org.apache.juneau.utils.*;
 import org.apache.juneau.xml.*;
-import org.junit.*;
+import org.junit.Assert;
+import org.junit.ComparisonFailure;
 import org.w3c.dom.*;
 import org.w3c.dom.bootstrap.*;
 import org.w3c.dom.ls.*;
@@ -526,4 +527,19 @@ public class TestUtils {
 			return false;
 		return o1.equals(o2);
 	}
+	
+	/**
+	 * Assert that the object is an instance of the specified class.
+	 */
+	public static void assertClass(Class<?> c, Object o) {
+		Assert.assertEquals(c, o == null ? null : o.getClass());
+	}
+
+	public static void dumpResponse(String r, String msg, Object...args) {
+		System.err.println("*** Failure ****************************************************************************************"); // NOT DEBUG
+		System.err.println(format(msg, args));
+		System.err.println("*** Response-Start *********************************************************************************"); // NOT DEBUG
+		System.err.println(r); // NOT DEBUG
+		System.err.println("*** Response-End ***********************************************************************************"); // NOT DEBUG
+	}
 }
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/TypedBean.java b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/TypedBean.java
similarity index 95%
rename from juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/TypedBean.java
rename to juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/TypedBean.java
index 0e13279..6c66f0f 100644
--- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/TypedBean.java
+++ b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/TypedBean.java
@@ -10,8 +10,9 @@
 // * "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.pojos;
+package org.apache.juneau.rest.testutils;
 
 @org.apache.juneau.annotation.Bean(beanDictionary={TypedBeanImpl.class})
+@SuppressWarnings("javadoc")
 public interface TypedBean {
 }
\ No newline at end of file
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/TypedBeanImpl.java b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/TypedBeanImpl.java
similarity index 96%
rename from juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/TypedBeanImpl.java
rename to juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/TypedBeanImpl.java
index a381475..9fa1337 100644
--- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/pojos/TypedBeanImpl.java
+++ b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/TypedBeanImpl.java
@@ -10,9 +10,10 @@
 // * "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.pojos;
+package org.apache.juneau.rest.testutils;
 
 @org.apache.juneau.annotation.Bean(typeName="TypedBeanImpl", sort=true)
+@SuppressWarnings("javadoc")
 public class TypedBeanImpl implements TypedBean {
 	public int a;
 	public String b;

-- 
To stop receiving notification emails like this one, please contact
jamesbognar@apache.org.