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 ae101610d Test modernization
ae101610d is described below

commit ae101610d5b0b110c3f0750deba37ced9d51299f
Author: James Bognar <james.bog...@salesforce.com>
AuthorDate: Sat Aug 30 17:15:18 2025 -0400

    Test modernization
---
 .../src/test/java/org/apache/juneau/TestUtils.java |  19 +-
 .../apache/juneau/dto/swagger/Contact_Test.java    |  49 ++--
 .../dto/swagger/ExternalDocumentation_Test.java    |  22 +-
 .../apache/juneau/dto/swagger/HeaderInfo_Test.java | 249 +++++++++--------
 .../org/apache/juneau/dto/swagger/Info_Test.java   |  45 ++-
 .../org/apache/juneau/dto/swagger/Items_Test.java  | 213 +++++++-------
 .../apache/juneau/dto/swagger/License_Test.java    |  24 +-
 .../apache/juneau/dto/swagger/Operation_Test.java  | 110 ++++----
 .../juneau/dto/swagger/ParameterInfo_Test.java     | 249 ++++++++---------
 .../juneau/dto/swagger/ResponseInfo_Test.java      | 101 ++++---
 .../apache/juneau/dto/swagger/SchemaInfo_Test.java | 307 +++++++++------------
 .../juneau/dto/swagger/SecurityScheme_Test.java    |  58 ++--
 .../apache/juneau/dto/swagger/Swagger_Test.java    | 208 +++++++-------
 .../org/apache/juneau/dto/swagger/Tag_Test.java    |  35 +--
 .../org/apache/juneau/dto/swagger/Xml_Test.java    |  61 ++--
 .../http/annotation/FormDataAnnotation_Test.java   |  16 +-
 .../http/annotation/HeaderAnnotation_Test.java     |  16 +-
 .../http/annotation/PathAnnotation_Test.java       |  16 +-
 .../http/annotation/QueryAnnotation_Test.java      |  56 ++--
 .../http/annotation/ResponseAnnotation_Test.java   |  15 +-
 20 files changed, 901 insertions(+), 968 deletions(-)

diff --git a/juneau-utest/src/test/java/org/apache/juneau/TestUtils.java 
b/juneau-utest/src/test/java/org/apache/juneau/TestUtils.java
index 742bfa128..972a74f2c 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/TestUtils.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/TestUtils.java
@@ -227,7 +227,7 @@ public class TestUtils extends Utils2 {
         * <h5 class='section'>Advanced Collection Analysis:</h5>
         * <p class='bjava'>
         *      <jc>// Combine size/length, metadata, and content iteration in 
single assertions</jc>
-        *      assertBean(myBean, 
<js>"users{length,class{simpleName},#{name}}"</js>, 
+        *      assertBean(myBean, 
<js>"users{length,class{simpleName},#{name}}"</js>,
         *              <js>"{3,{ArrayList},[{John},{Jane},{Bob}]}"</js>);
         *
         *      <jc>// Comprehensive collection validation with multiple 
iteration patterns</jc>
@@ -235,7 +235,7 @@ public class TestUtils extends Utils2 {
         *              
<js>"{3,[{Laptop},{Phone},{Tablet}],[{999.99},{599.99},{399.99}]}"</js>);
         *
         *      <jc>// Perfect for validation testing - verify error count and 
details</jc>
-        *      assertBean(result, <js>"errors{length,#{field},#{code}}"</js>, 
+        *      assertBean(result, <js>"errors{length,#{field},#{code}}"</js>,
         *              <js>"{2,[{email},{password}],[{E001},{E002}]}"</js>);
         *
         *      <jc>// Mixed collection types with consistent syntax</jc>
@@ -503,11 +503,6 @@ public class TestUtils extends Utils2 {
                assertContains(json, Json5.DEFAULT.write(value));
        }
 
-       public static void assertJsonMatches(Object o, String pattern) throws 
AssertionError {
-               var json = json(o);
-               assertTrue(getMatchPattern3(pattern).matcher(json).matches(), 
fs("JSON did not match pattern.\njson={0}", json));
-       }
-
        public static void assertLines(String expected, Object value) {
                assertEquals(expected, r(value).replaceAll("\\r?\\n", "|"));
        }
@@ -1184,4 +1179,14 @@ public class TestUtils extends Utils2 {
                var xml = s.serialize(o);
                checkXmlWhitespace(xml);
        }
+
+       /**
+        * Helper method for creating StringBuilder objects.
+        *
+        * @param value The string value to wrap in a StringBuilder.
+        * @return A new StringBuilder containing the specified value.
+        */
+       public static StringBuilder sb(String value) {
+               return new StringBuilder(value);
+       }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Contact_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Contact_Test.java
index da97c3a10..48b574985 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Contact_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Contact_Test.java
@@ -33,41 +33,46 @@ class Contact_Test extends SimpleTestBase {
        @Test void a01_gettersAndSetters() {
                var t = new Contact();
 
+               // General - Combined assertBean test
                assertBean(
                        
t.setName("a").setEmail("b").setUrl(URI.create("http://c";)),
                        "name,email,url",
                        "a,b,http://c";
                );
 
-               assertNull(t.setName(null).getName());
-               assertNull(t.setEmail(null).getEmail());
+               // Null cases
+               assertBean(
+                       t.setName(null).setEmail(null),
+                       "name,email",
+                       "null,null"
+               );
        }
 
        /**
         * Test method for {@link Contact#set(String, Object)}.
         */
-       @Test void b01_set() throws Exception {
+       @Test void b01_set() {
                var t = new Contact();
 
                t
-                       .set("name", "a")
-                       .set("url", "b")
-                       .set("email", "c")
-                       .set("$ref", "d");
+                       .set("email", "a")
+                       .set("name", "b")
+                       .set("$ref", "c")
+                       .set("url", "d");
 
-               assertBean(t, "name,url,email,$ref", "a,b,c,d");
+               assertBean(t, "email,name,$ref,url", "a,b,c,d");
 
                t
-                       .set("name", new StringBuilder("a"))
-                       .set("url", new StringBuilder("b"))
-                       .set("email", new StringBuilder("c"))
-                       .set("$ref", new StringBuilder("d"));
+                       .set("email", sb("a"))
+                       .set("name", sb("b"))
+                       .set("$ref", sb("c"))
+                       .set("url", sb("d"));
 
-               assertBean(t, "name,url,email,$ref", "a,b,c,d");
+               assertBean(t, "email,name,$ref,url", "a,b,c,d");
 
                assertMapped(
                        t, (obj,prop) -> obj.get(prop, String.class),
-                       "name,url,email,$ref",
+                       "email,name,$ref,url",
                        "a,b,c,d"
                );
 
@@ -75,11 +80,13 @@ class Contact_Test extends SimpleTestBase {
                assertNull(t.get("null", Object.class));
                assertNull(t.get(null, Object.class));
                assertNull(t.get("foo", Object.class));
+       }
 
+       @Test void b02_roundTripJson() {
                
assertBean(JsonParser.DEFAULT.parse("{name:'a',url:'b',email:'c','$ref':'d'}", 
Contact.class), "name,url,email,$ref", "a,b,c,d");
        }
 
-       @Test void b02_copy() {
+       @Test void b03_copy() {
                var t = new Contact();
 
                t = t.copy();
@@ -96,16 +103,16 @@ class Contact_Test extends SimpleTestBase {
                assertBean(t, "name,url,email,$ref", "a,b,c,d");
        }
 
-       @Test void b03_keySet() {
+       @Test void b04_keySet() {
                var t = new Contact();
 
-               assertJson(t.keySet(), "[]");
+               assertEmpty(t.keySet());
 
                t
-                       .set("name", "foo")
-                       .set("url", "bar")
-                       .set("email", "baz")
-                       .set("$ref", "qux");
+                       .set("name", "a")
+                       .set("url", "b")
+                       .set("email", "c")
+                       .set("$ref", "d");
 
                assertSet(t.keySet(), "email,name,url,$ref");
        }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ExternalDocumentation_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ExternalDocumentation_Test.java
index 8d1c5cb1c..072fcec66 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ExternalDocumentation_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ExternalDocumentation_Test.java
@@ -33,19 +33,25 @@ class ExternalDocumentation_Test extends SimpleTestBase {
        @Test void a01_gettersAndSetters() {
                var t = new ExternalDocumentation();
 
+               // General - Combined assertBean test
                assertBean(
                        t.setDescription("a").setUrl(URI.create("http://b";)),
                        "description,url",
                        "a,http://b";
                );
 
-               assertNull(t.setDescription(null).getDescription());
+               // Null cases
+               assertBean(
+                       t.setDescription(null),
+                       "description",
+                       "null"
+               );
        }
 
        /**
         * Test method for {@link ExternalDocumentation#set(java.lang.String, 
java.lang.Object)}.
         */
-       @Test void b01_set() throws Exception {
+       @Test void b01_set() {
                var t = new ExternalDocumentation();
 
                t
@@ -56,9 +62,9 @@ class ExternalDocumentation_Test extends SimpleTestBase {
                assertBean(t, "description,url,$ref", "a,b,c");
 
                t
-                       .set("description", new StringBuilder("a2"))
-                       .set("url", new StringBuilder("b2"))
-                       .set("$ref", new StringBuilder("c2"));
+                       .set("description", sb("a2"))
+                       .set("url", sb("b2"))
+                       .set("$ref", sb("c2"));
 
                assertBean(t, "description,url,$ref", "a2,b2,c2");
 
@@ -72,11 +78,13 @@ class ExternalDocumentation_Test extends SimpleTestBase {
                assertNull(t.get("null", Object.class));
                assertNull(t.get(null, Object.class));
                assertNull(t.get("foo", Object.class));
+       }
 
+       @Test void b02_roundTripJson() {
                
assertBean(JsonParser.DEFAULT.parse("{description:'a',url:'b','$ref':'c'}", 
ExternalDocumentation.class), "description,url,$ref", "a,b,c");
        }
 
-       @Test void b02_copy() {
+       @Test void b03_copy() {
                var t = new ExternalDocumentation();
 
                t = t.copy();
@@ -92,7 +100,7 @@ class ExternalDocumentation_Test extends SimpleTestBase {
                assertBean(t, "description,url,$ref", "a,b,c");
        }
 
-       @Test void b03_keySet() {
+       @Test void b04_keySet() {
                var t = new ExternalDocumentation();
 
                assertEmpty(t.keySet());
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/HeaderInfo_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/HeaderInfo_Test.java
index 12f1917a1..340c61d30 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/HeaderInfo_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/HeaderInfo_Test.java
@@ -36,134 +36,139 @@ class HeaderInfo_Test extends SimpleTestBase {
 
                // General - Combined assertBean test
                assertBean(
-                       
t.setDescription("foo").setType("foo").setFormat("foo").setItems(items("foo"))
-                        
.setCollectionFormat("foo").setDefault("foo").setMaximum(123).setExclusiveMaximum(true)
-                        
.setMinimum(123).setExclusiveMinimum(true).setMaxLength(123).setMinLength(123)
-                        
.setPattern("foo").setMaxItems(123).setMinItems(123).setUniqueItems(true)
-                        
.setEnum(set("foo","bar")).setMultipleOf(123).setExample("foo").setRef("foo"),
-                       
"description,type,format,items{type},collectionFormat,default,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,enum,multipleOf,example,ref",
-                       
"foo,foo,foo,{foo},foo,foo,123,true,123,true,123,123,foo,123,123,true,[foo,bar],123,foo,foo"
+                       
t.setCollectionFormat("a").setDefault("b").setDescription("c").setEnum(set("d1","d2")).setExample("e")
+                               
.setExclusiveMaximum(true).setExclusiveMinimum(true).setFormat("f").setItems(items("g"))
+                               
.setMaxItems(1).setMaxLength(2).setMaximum(3).setMinItems(4).setMinLength(5)
+                               
.setMinimum(6).setMultipleOf(7).setPattern("h").setRef("i").setType("j").setUniqueItems(true),
+                       
"collectionFormat,default,description,enum,example,exclusiveMaximum,exclusiveMinimum,format,items{type},maxItems,maxLength,maximum,minItems,minLength,minimum,multipleOf,pattern,ref,type,uniqueItems",
+                       
"a,b,c,[d1,d2],e,true,true,f,{g},1,2,3,4,5,6,7,h,i,j,true"
                );
 
-               // Special cases
-               assertNull(t.setDescription(null).getDescription());
-               assertNull(t.setType(null).getType());
-               assertNull(t.setFormat(null).getFormat());
-               assertNull(t.setItems((Items)null).getItems());
-               assertNull(t.setCollectionFormat(null).getCollectionFormat());
-               assertNull(t.setDefault(null).getDefault());
-               assertEquals(123f, t.setMaximum(123f).getMaximum());
-               assertEquals(123f, t.setMinimum(123f).getMinimum());
-               assertNull(t.setPattern(null).getPattern());
-               assertEmpty(t.setEnum(set()).getEnum());
-               assertSet(t.setEnum("foo","bar").getEnum(), "foo,bar");
-               assertNull(t.setEnum((Set<Object>)null).getEnum());
-               assertSet(t.addEnum("foo","bar").getEnum(), "foo,bar");
-               assertSet(t.addEnum("baz").getEnum(), "foo,bar,baz");
-               assertEquals(123f, t.setMultipleOf(123f).getMultipleOf());
-               assertBean(t.setExample(123f), "example", "123.0");
-               assertNull(t.setExample((String)null).getExample());
-               assertBean(t.setRef(null), "ref", "null");
+               // Null cases
+               assertBean(
+                       
t.setCollectionFormat(null).setDefault(null).setDescription(null).setEnum((Set<Object>)null).setExample((String)null)
+                               
.setFormat(null).setItems((Items)null).setPattern(null).setRef(null).setType(null),
+                       
"collectionFormat,default,description,enum,example,format,items,pattern,ref,type",
+                       "null,null,null,null,null,null,null,null,null,null"
+               );
+
+               // Empty collections
+               assertBean(
+                       t.setEnum(set()),
+                       "enum",
+                       "[]"
+               );
+
+               // Other
+               assertBean(
+                       
t.setExample(1f).setMaximum(2f).setMinimum(3f).setMultipleOf(4f),
+                       "example,maximum,minimum,multipleOf", 
"1.0,2.0,3.0,4.0");
+
+               // addEnum
+               assertSet(t.addEnum("a","b").getEnum(), "a,b");
+               assertSet(t.addEnum("c").getEnum(), "a,b,c");
        }
 
        /**
         * Test method for {@link HeaderInfo#set(java.lang.String, 
java.lang.Object)}.
         */
-       @Test void b01_set() throws Exception {
+       @Test void b01_set() {
                var t = new HeaderInfo();
 
                t
-                       .set("default", "a")
-                       .set("enum", set("b"))
-                       .set("collectionFormat", "c")
-                       .set("description", "d")
+                       .set("collectionFormat", "a")
+                       .set("default", "b")
+                       .set("description", "c")
+                       .set("enum", set("d"))
                        .set("example", "e")
                        .set("exclusiveMaximum", true)
                        .set("exclusiveMinimum", true)
-                       .set("format", "g")
-                       .set("items", items("h"))
-                       .set("maximum", 123f)
-                       .set("maxItems", 123)
-                       .set("maxLength", 123)
-                       .set("minimum", 123f)
-                       .set("minItems", 123)
-                       .set("minLength", 123)
-                       .set("multipleOf", 123f)
-                       .set("pattern", "i")
+                       .set("format", "f")
+                       .set("items", items("g"))
+                       .set("maximum", 1f)
+                       .set("maxItems", 2)
+                       .set("maxLength", 3)
+                       .set("minimum", 4f)
+                       .set("minItems", 5)
+                       .set("minLength", 6)
+                       .set("multipleOf", 7f)
+                       .set("pattern", "h")
+                       .set("$ref", "i")
                        .set("type", "j")
-                       .set("uniqueItems", true)
-                       .set("$ref", "ref");
+                       .set("uniqueItems", true);
 
                assertBean(t,
-                       
"description,type,format,items{type},collectionFormat,default,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,enum,multipleOf,ref,example",
-                       
"d,j,g,{h},c,a,123.0,true,123.0,true,123,123,i,123,123,true,[b],123.0,ref,e");
+                       
"collectionFormat,default,description,enum,example,exclusiveMaximum,exclusiveMinimum,format,items{type},maximum,maxItems,maxLength,minimum,minItems,minLength,multipleOf,pattern,ref,type,uniqueItems",
+                       
"a,b,c,[d],e,true,true,f,{g},1.0,2,3,4.0,5,6,7.0,h,i,j,true");
 
                t
-                       .set("default", "a")
-                       .set("enum", "['b']")
-                       .set("collectionFormat", "c")
-                       .set("description", "d")
+                       .set("collectionFormat", "a")
+                       .set("default", "b")
+                       .set("description", "c")
+                       .set("enum", "['d']")
                        .set("example", "e")
                        .set("exclusiveMaximum", "true")
                        .set("exclusiveMinimum", "true")
-                       .set("format", "g")
-                       .set("items", "{type:'h'}")
-                       .set("maximum", "123f")
-                       .set("maxItems", "123")
-                       .set("maxLength", "123")
-                       .set("minimum", "123f")
-                       .set("minItems", "123")
-                       .set("minLength", "123")
-                       .set("multipleOf", "123f")
-                       .set("pattern", "i")
+                       .set("format", "f")
+                       .set("items", "{type:'g'}")
+                       .set("maximum", "1f")
+                       .set("maxItems", "2")
+                       .set("maxLength", "3")
+                       .set("minimum", "4f")
+                       .set("minItems", "5")
+                       .set("minLength", "6")
+                       .set("multipleOf", "7f")
+                       .set("pattern", "h")
+                       .set("$ref", "i")
                        .set("type", "j")
-                       .set("uniqueItems", "true")
-                       .set("$ref", "ref");
+                       .set("uniqueItems", "true");
 
                assertBean(t,
-                       
"description,type,format,items{type},collectionFormat,default,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,enum,multipleOf,ref,example",
-                       
"d,j,g,{h},c,a,123.0,true,123.0,true,123,123,i,123,123,true,[b],123.0,ref,e");
+                       
"collectionFormat,default,description,enum,example,exclusiveMaximum,exclusiveMinimum,format,items{type},maximum,maxItems,maxLength,minimum,minItems,minLength,multipleOf,pattern,ref,type,uniqueItems",
+                       
"a,b,c,[d],e,true,true,f,{g},1.0,2,3,4.0,5,6,7.0,h,i,j,true");
 
                t
-                       .set("default", new StringBuilder("a"))
-                       .set("enum", new StringBuilder("['b']"))
-                       .set("collectionFormat", new StringBuilder("c"))
-                       .set("description", new StringBuilder("d"))
-                       .set("example", new StringBuilder("e"))
-                       .set("exclusiveMaximum", new StringBuilder("true"))
-                       .set("exclusiveMinimum", new StringBuilder("true"))
-                       .set("format", new StringBuilder("g"))
-                       .set("items", new StringBuilder("{type:'h'}"))
-                       .set("maximum", new StringBuilder("123f"))
-                       .set("maxItems", new StringBuilder("123"))
-                       .set("maxLength", new StringBuilder("123"))
-                       .set("minimum", new StringBuilder("123f"))
-                       .set("minItems", new StringBuilder("123"))
-                       .set("minLength", new StringBuilder("123"))
-                       .set("multipleOf", new StringBuilder("123f"))
-                       .set("pattern", new StringBuilder("i"))
-                       .set("type", new StringBuilder("j"))
-                       .set("uniqueItems", new StringBuilder("true"))
-                       .set("$ref", new StringBuilder("ref"));
+                       .set("collectionFormat", sb("a"))
+                       .set("default", sb("b"))
+                       .set("description", sb("c"))
+                       .set("enum", sb("['d']"))
+                       .set("example", sb("e"))
+                       .set("exclusiveMaximum", sb("true"))
+                       .set("exclusiveMinimum", sb("true"))
+                       .set("format", sb("f"))
+                       .set("items", sb("{type:'g'}"))
+                       .set("maximum", sb("1f"))
+                       .set("maxItems", sb("2"))
+                       .set("maxLength", sb("3"))
+                       .set("minimum", sb("4f"))
+                       .set("minItems", sb("5"))
+                       .set("minLength", sb("6"))
+                       .set("multipleOf", sb("7f"))
+                       .set("pattern", sb("h"))
+                       .set("$ref", sb("i"))
+                       .set("type", sb("j"))
+                       .set("uniqueItems", sb("true"));
 
                assertBean(t,
-                       
"description,type,format,items{type},collectionFormat,default,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,enum,multipleOf,ref,example",
-                       
"d,j,g,{h},c,a,123.0,true,123.0,true,123,123,i,123,123,true,[b],123.0,ref,e");
+                       
"collectionFormat,default,description,enum,example,exclusiveMaximum,exclusiveMinimum,format,items{type},maximum,maxItems,maxLength,minimum,minItems,minLength,multipleOf,pattern,ref,type,uniqueItems",
+                       
"a,b,c,[d],e,true,true,f,{g},1.0,2,3,4.0,5,6,7.0,h,i,j,true");
 
                assertMapped(t, (obj,prop) -> obj.get(prop, Object.class),
-                       
"default,collectionFormat,description,enum,example,exclusiveMaximum,exclusiveMinimum,format,items,maximum,maxItems,maxLength,minimum,minItems,minLength,multipleOf,pattern,type,uniqueItems,$ref",
-                       
"a,c,d,[b],e,true,true,g,{\"type\":\"h\"},123.0,123,123,123.0,123,123,123.0,i,j,true,ref");
+                       
"collectionFormat,default,description,enum,example,exclusiveMaximum,exclusiveMinimum,format,items,maximum,maxItems,maxLength,minimum,minItems,minLength,multipleOf,pattern,$ref,type,uniqueItems",
+                       
"a,b,c,[d],e,true,true,f,{\"type\":\"g\"},1.0,2,3,4.0,5,6,7.0,h,i,j,true");
 
                t.set("null", null).set(null, "null");
                assertNull(t.get("null", Object.class));
                assertNull(t.get(null, Object.class));
                assertNull(t.get("foo", Object.class));
+       }
 
+       @Test void b02_roundTripJson() {
                var s = 
"{description:'d',type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref',example:'e'}";
                assertJson(JsonParser.DEFAULT.parse(s, HeaderInfo.class), s);
        }
 
-       @Test void b02_copy() {
+       @Test void b03_copy() {
                var t = new HeaderInfo();
 
                t = t.copy();
@@ -171,59 +176,59 @@ class HeaderInfo_Test extends SimpleTestBase {
                assertJson(t, "{}");
 
                t
-                       .set("default", "a")
-                       .set("enum", set("b"))
-                       .set("collectionFormat", "c")
-                       .set("description", "d")
+                       .set("collectionFormat", "a")
+                       .set("default", "b")
+                       .set("description", "c")
+                       .set("enum", set("d"))
                        .set("example", "e")
                        .set("exclusiveMaximum", true)
                        .set("exclusiveMinimum", true)
-                       .set("format", "g")
-                       .set("items", items("h"))
-                       .set("maximum", 123f)
-                       .set("maxItems", 123)
-                       .set("maxLength", 123)
-                       .set("minimum", 123f)
-                       .set("minItems", 123)
-                       .set("minLength", 123)
-                       .set("multipleOf", 123f)
-                       .set("pattern", "i")
+                       .set("format", "f")
+                       .set("items", items("g"))
+                       .set("maximum", 1f)
+                       .set("maxItems", 2)
+                       .set("maxLength", 3)
+                       .set("minimum", 4f)
+                       .set("minItems", 5)
+                       .set("minLength", 6)
+                       .set("multipleOf", 7f)
+                       .set("pattern", "h")
+                       .set("$ref", "i")
                        .set("type", "j")
                        .set("uniqueItems", true)
-                       .set("$ref", "ref")
                        .copy();
 
                assertBean(t,
-                       
"description,type,format,items{type},collectionFormat,default,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,enum,multipleOf,ref,example",
-                       
"d,j,g,{h},c,a,123.0,true,123.0,true,123,123,i,123,123,true,[b],123.0,ref,e");
+                       
"collectionFormat,default,description,enum,example,exclusiveMaximum,exclusiveMinimum,format,items{type},maximum,maxItems,maxLength,minimum,minItems,minLength,multipleOf,pattern,ref,type,uniqueItems",
+                       
"a,b,c,[d],e,true,true,f,{g},1.0,2,3,4.0,5,6,7.0,h,i,j,true");
        }
 
-       @Test void b03_keySet() {
+       @Test void b04_keySet() {
                var t = new HeaderInfo();
 
                assertEmpty(t.keySet());
 
                t
-                       .set("default", "a")
-                       .set("enum", set("b"))
-                       .set("collectionFormat", "c")
-                       .set("description", "d")
+                       .set("collectionFormat", "a")
+                       .set("default", "b")
+                       .set("description", "c")
+                       .set("enum", set("d"))
                        .set("example", "e")
                        .set("exclusiveMaximum", true)
                        .set("exclusiveMinimum", true)
-                       .set("format", "g")
-                       .set("items", items("h"))
-                       .set("maximum", 123f)
-                       .set("maxItems", 123)
-                       .set("maxLength", 123)
-                       .set("minimum", 123f)
-                       .set("minItems", 123)
-                       .set("minLength", 123)
-                       .set("multipleOf", 123f)
-                       .set("pattern", "i")
+                       .set("format", "f")
+                       .set("items", items("g"))
+                       .set("maximum", 1f)
+                       .set("maxItems", 2)
+                       .set("maxLength", 3)
+                       .set("minimum", 4f)
+                       .set("minItems", 5)
+                       .set("minLength", 6)
+                       .set("multipleOf", 7f)
+                       .set("pattern", "h")
+                       .set("$ref", "i")
                        .set("type", "j")
-                       .set("uniqueItems", true)
-                       .set("$ref", "ref");
+                       .set("uniqueItems", true);
 
                assertSet(t.keySet(), 
"collectionFormat,default,description,enum,example,exclusiveMaximum,exclusiveMinimum,format,items,maximum,maxItems,maxLength,minimum,minItems,minLength,multipleOf,pattern,$ref,type,uniqueItems");
        }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Info_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Info_Test.java
index 664b9f8e1..3254b9548 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Info_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Info_Test.java
@@ -32,24 +32,25 @@ class Info_Test extends SimpleTestBase {
        @Test void a01_gettersAndSetters() {
                var t = new Info();
 
-               // General
+               // Basic property setters
                assertBean(
                        
t.setTitle("a").setDescription("b").setTermsOfService("c").setContact(contact("d")).setLicense(license("e")).setVersion("f"),
                        
"title,description,termsOfService,contact{name},license{name},version",
                        "a,b,c,{d},{e},f"
                );
 
-               // Edge cases for nulls.
-               assertNull(t.setTitle(null).getTitle());
-               assertNull(t.setDescription(null).getDescription());
-               assertNull(t.setTermsOfService(null).getTermsOfService());
-               assertNull(t.setVersion(null).getVersion());
+               // Null values
+               assertBean(
+                       
t.setTitle(null).setDescription(null).setTermsOfService(null).setVersion(null),
+                       "title,description,termsOfService,version",
+                       "null,null,null,null"
+               );
        }
 
        /**
         * Test method for {@link Info#set(java.lang.String, java.lang.Object)}.
         */
-       @Test void b01_set() throws Exception {
+       @Test void b01_set() {
                var t = new Info();
 
                t
@@ -80,13 +81,13 @@ class Info_Test extends SimpleTestBase {
                        "e,b,f,{a},{c},d,ref");
 
                t
-                       .set("contact", new StringBuilder("{name:'a'}"))
-                       .set("description", new StringBuilder("b"))
-                       .set("license", new StringBuilder("{name:'c'}"))
-                       .set("termsOfService", new StringBuilder("d"))
-                       .set("title", new StringBuilder("e"))
-                       .set("version", new StringBuilder("f"))
-                       .set("$ref", new StringBuilder("ref"));
+                       .set("contact", sb("{name:'a'}"))
+                       .set("description", sb("b"))
+                       .set("license", sb("{name:'c'}"))
+                       .set("termsOfService", sb("d"))
+                       .set("title", sb("e"))
+                       .set("version", sb("f"))
+                       .set("$ref", sb("ref"));
 
                assertBean(t,
                        
"title,description,version,contact{name},license{name},termsOfService,$ref",
@@ -96,24 +97,22 @@ class Info_Test extends SimpleTestBase {
                        
"contact,description,license,termsOfService,title,version,$ref",
                        "{name:'a'},b,{name:'c'},d,e,f,ref");
 
-               assertType(Contact.class, t.get("contact", Object.class));
-               assertType(String.class, t.get("description", Object.class));
-               assertType(License.class, t.get("license", Object.class));
-               assertType(String.class, t.get("termsOfService", Object.class));
-               assertType(String.class, t.get("title", Object.class));
-               assertType(String.class, t.get("version", Object.class));
-               assertType(StringBuilder.class, t.get("$ref", Object.class));
+               assertMapped(t, (obj,prop) -> obj.get(prop, 
Object.class).getClass().getSimpleName(),
+                       
"contact,description,license,termsOfService,title,version,$ref",
+                       
"Contact,String,License,String,String,String,StringBuilder");
 
                t.set("null", null).set(null, "null");
                assertNull(t.get("null", Object.class));
                assertNull(t.get(null, Object.class));
                assertNull(t.get("foo", Object.class));
+       }
 
+       @Test void b02_roundTripJson() {
                var s = 
"{title:'e',description:'b',version:'f',contact:{name:'a'},license:{name:'c'},termsOfService:'d','$ref':'ref'}";
                assertJson(JsonParser.DEFAULT.parse(s, Info.class), s);
        }
 
-       @Test void b02_copy() {
+       @Test void b03_copy() {
                var t = new Info();
 
                t = t.copy();
@@ -135,7 +134,7 @@ class Info_Test extends SimpleTestBase {
                        "e,b,f,{a},{c},d,ref");
        }
 
-       @Test void b03_keySet() {
+       @Test void b04_keySet() {
                var t = new Info();
 
                assertEmpty(t.keySet());
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Items_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Items_Test.java
index 975d6807b..86827ae9c 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Items_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Items_Test.java
@@ -34,61 +34,69 @@ class Items_Test extends SimpleTestBase {
        @Test void a01_gettersAndSetters() {
                var t = new Items();
 
-               // General
+               // General - Combined assertBean test
                assertBean(
-                       
t.setType("foo").setFormat("foo").setItems(items("foo")).setCollectionFormat("foo")
-                        
.setDefault("foo").setMaximum(123).setExclusiveMaximum(true).setMinimum(123)
-                        
.setExclusiveMinimum(true).setMaxLength(123).setMinLength(123).setPattern("foo")
-                        
.setMaxItems(123).setMinItems(123).setUniqueItems(true).setEnum(set("foo","bar"))
-                        .setMultipleOf(123),
-                       
"type,format,items{type},collectionFormat,default,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,enum,multipleOf",
-                       
"foo,foo,{foo},foo,foo,123,true,123,true,123,123,foo,123,123,true,[foo,bar],123"
+                       
t.setCollectionFormat("a").setDefault("b").setEnum(set("c1","c2")).setExclusiveMaximum(true)
+                               
.setExclusiveMinimum(true).setFormat("d").setItems(items("e")).setMaxItems(1).setMaxLength(2)
+                               
.setMaximum(3).setMinItems(4).setMinLength(5).setMinimum(6).setMultipleOf(7)
+                               
.setPattern("f").setType("g").setUniqueItems(true),
+                       
"collectionFormat,default,enum,exclusiveMaximum,exclusiveMinimum,format,items{type},maxItems,maxLength,maximum,minItems,minLength,minimum,multipleOf,pattern,type,uniqueItems",
+                       "a,b,[c1,c2],true,true,d,{e},1,2,3,4,5,6,7,f,g,true"
                );
 
-               // Other cases
-               assertString("foo", t.setDefault(new 
StringBuilder("foo")).getDefault());
-               assertNull(t.setType(null).getType());
-               assertNull(t.setFormat(null).getFormat());
-               assertNull(t.setCollectionFormat(null).getCollectionFormat());
-               assertNull(t.setDefault(null).getDefault());
-               assertEquals(123f, t.setMaximum(123f).getMaximum());
-               assertEquals(123f, t.setMinimum(123f).getMinimum());
-               assertNull(t.setPattern(null).getPattern());
-               assertJson(t.setEnum("foo","baz").getEnum(), "['foo','baz']");
-               assertJson(t.setEnum(set()).getEnum(), "[]");
-               assertNull(t.setEnum((Collection<Object>)null).getEnum());
-               assertJson(t.addEnum("foo","bar").getEnum(), "['foo','bar']");
-               assertJson(t.addEnum("baz").getEnum(), "['foo','bar','baz']");
-               assertEquals(123f, t.setMultipleOf(123f).getMultipleOf());
+               // Null cases
+               assertBean(
+                       
t.setCollectionFormat(null).setDefault(null).setEnum((Collection<Object>)null).setFormat(null).setPattern(null).setType(null),
+                       "collectionFormat,default,enum,format,pattern,type",
+                       "null,null,null,null,null,null"
+               );
+
+               // Empty collections
+               assertBean(
+                       t.setEnum(set()),
+                       "enum",
+                       "[]"
+               );
+
+               // Other
+               assertBean(
+                       
t.setDefault(sb("a")).setMaximum(1f).setMinimum(2f).setMultipleOf(3f),
+                       "default,maximum,minimum,multipleOf", "a,1.0,2.0,3.0");
+
+               // addEnum
+               assertSet(t.addEnum("a","b").getEnum(), "a,b");
+               assertSet(t.addEnum("c").getEnum(), "a,b,c");
        }
 
        /**
         * Test method for {@link Items#set(java.lang.String, 
java.lang.Object)}.
         */
-       @Test void b01_set() throws Exception {
+       @Test void b01_set() {
                var t = new Items();
 
                t
+                       .set("collectionFormat", "c")
                        .set("default", "a")
                        .set("enum", set("b"))
-                       .set("collectionFormat", "c")
                        .set("exclusiveMaximum", true)
                        .set("exclusiveMinimum", true)
                        .set("format", "g")
                        .set("items", items("h"))
-                       .set("maximum", 123f)
-                       .set("maxItems", 123)
-                       .set("maxLength", 123)
-                       .set("minimum", 123f)
-                       .set("minItems", 123)
-                       .set("minLength", 123)
-                       .set("multipleOf", 123f)
+                       .set("maxItems", 2)
+                       .set("maxLength", 3)
+                       .set("maximum", 1f)
+                       .set("minItems", 5)
+                       .set("minLength", 6)
+                       .set("minimum", 4f)
+                       .set("multipleOf", 7f)
                        .set("pattern", "i")
+                       .set("$ref", "k")
                        .set("type", "j")
-                       .set("uniqueItems", true)
-                       .set("$ref", "ref");
+                       .set("uniqueItems", true);
 
-               assertBean(t, 
"type,format,items{type},collectionFormat,default,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,enum,multipleOf,ref",
 "j,g,{h},c,a,123.0,true,123.0,true,123,123,i,123,123,true,[b],123.0,ref");
+               assertBean(t,
+                       
"collectionFormat,default,enum,exclusiveMaximum,exclusiveMinimum,format,items{type},maxItems,maxLength,maximum,minItems,minLength,minimum,multipleOf,pattern,ref,type,uniqueItems",
+                       
"c,a,[b],true,true,g,{h},2,3,1.0,5,6,4.0,7.0,i,k,j,true");
 
                t
                        .set("default", "a")
@@ -98,75 +106,64 @@ class Items_Test extends SimpleTestBase {
                        .set("exclusiveMinimum", "true")
                        .set("format", "g")
                        .set("items", "{type:'h'}")
-                       .set("maximum", "123f")
-                       .set("maxItems", "123")
-                       .set("maxLength", "123")
-                       .set("minimum", "123f")
-                       .set("minItems", "123")
-                       .set("minLength", "123")
-                       .set("multipleOf", "123f")
+                       .set("maximum", "1f")
+                       .set("maxItems", "2")
+                       .set("maxLength", "3")
+                       .set("minimum", "4f")
+                       .set("minItems", "5")
+                       .set("minLength", "6")
+                       .set("multipleOf", "7f")
                        .set("pattern", "i")
                        .set("type", "j")
                        .set("uniqueItems", "true")
-                       .set("$ref", "ref");
+                       .set("$ref", "k");
 
-               assertBean(t, 
"type,format,items{type},collectionFormat,default,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,enum,multipleOf,ref",
 "j,g,{h},c,a,123.0,true,123.0,true,123,123,i,123,123,true,[b],123.0,ref");
+               assertBean(t,
+                       
"type,format,items{type},collectionFormat,default,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,enum,multipleOf,ref",
+                       
"j,g,{h},c,a,1.0,true,4.0,true,3,6,i,2,5,true,[b],7.0,k");
 
                t
-                       .set("default", new StringBuilder("a"))
-                       .set("enum", new StringBuilder("['b']"))
-                       .set("collectionFormat", new StringBuilder("c"))
-                       .set("exclusiveMaximum", new StringBuilder("true"))
-                       .set("exclusiveMinimum", new StringBuilder("true"))
-                       .set("format", new StringBuilder("g"))
-                       .set("items", new StringBuilder("{type:'h'}"))
-                       .set("maximum", new StringBuilder("123f"))
-                       .set("maxItems", new StringBuilder("123"))
-                       .set("maxLength", new StringBuilder("123"))
-                       .set("minimum", new StringBuilder("123f"))
-                       .set("minItems", new StringBuilder("123"))
-                       .set("minLength", new StringBuilder("123"))
-                       .set("multipleOf", new StringBuilder("123f"))
-                       .set("pattern", new StringBuilder("i"))
-                       .set("type", new StringBuilder("j"))
-                       .set("uniqueItems", new StringBuilder("true"))
-                       .set("$ref", new StringBuilder("ref"));
-
-               assertBean(t, 
"type,format,items{type},collectionFormat,default,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,enum,multipleOf,ref",
 "j,g,{h},c,a,123.0,true,123.0,true,123,123,i,123,123,true,[b],123.0,ref");
+                       .set("collectionFormat", sb("c"))
+                       .set("default", sb("a"))
+                       .set("enum", sb("['b']"))
+                       .set("exclusiveMaximum", sb("true"))
+                       .set("exclusiveMinimum", sb("true"))
+                       .set("format", sb("g"))
+                       .set("items", sb("{type:'h'}"))
+                       .set("maxItems", sb("2"))
+                       .set("maxLength", sb("3"))
+                       .set("maximum", sb("1f"))
+                       .set("minItems", sb("5"))
+                       .set("minLength", sb("6"))
+                       .set("minimum", sb("4f"))
+                       .set("multipleOf", sb("7f"))
+                       .set("pattern", sb("i"))
+                       .set("$ref", sb("k"))
+                       .set("type", sb("j"))
+                       .set("uniqueItems", sb("true"));
+
+               assertBean(t, 
"collectionFormat,default,enum,exclusiveMaximum,exclusiveMinimum,format,items{type},maxItems,maxLength,maximum,minItems,minLength,minimum,multipleOf,pattern,ref,type,uniqueItems",
 "c,a,[b],true,true,g,{h},2,3,1.0,5,6,4.0,7.0,i,k,j,true");
 
                assertMapped(t, (obj,prop) -> obj.get(prop, String.class),
-                       
"default,enum,collectionFormat,exclusiveMaximum,exclusiveMinimum,format,items,maximum,maxItems,maxLength,minimum,minItems,minLength,multipleOf,pattern,type,uniqueItems,$ref",
-                       
"a,['b'],c,true,true,g,{type:'h'},123.0,123,123,123.0,123,123,123.0,i,j,true,ref");
-
-               assertType(StringBuilder.class, t.get("default", Object.class));
-               assertType(Set.class, t.get("enum", Object.class));
-               assertType(String.class, t.get("collectionFormat", 
Object.class));
-               assertType(Boolean.class, t.get("exclusiveMaximum", 
Object.class));
-               assertType(Boolean.class, t.get("exclusiveMinimum", 
Object.class));
-               assertType(String.class, t.get("format", Object.class));
-               assertType(Items.class, t.get("items", Object.class));
-               assertType(Float.class, t.get("maximum", Object.class));
-               assertType(Integer.class, t.get("maxItems", Object.class));
-               assertType(Integer.class, t.get("maxLength", Object.class));
-               assertType(Float.class, t.get("minimum", Object.class));
-               assertType(Integer.class, t.get("minItems", Object.class));
-               assertType(Integer.class, t.get("minLength", Object.class));
-               assertType(Float.class, t.get("multipleOf", Object.class));
-               assertType(String.class, t.get("pattern", Object.class));
-               assertType(String.class, t.get("type", Object.class));
-               assertType(Boolean.class, t.get("uniqueItems", Object.class));
-               assertType(String.class, t.get("$ref", Object.class));
+                       
"collectionFormat,default,enum,exclusiveMaximum,exclusiveMinimum,format,items,maxItems,maxLength,maximum,minItems,minLength,minimum,multipleOf,pattern,$ref,type,uniqueItems",
+                       
"c,a,['b'],true,true,g,{type:'h'},2,3,1.0,5,6,4.0,7.0,i,k,j,true");
+
+               assertMapped(t, (obj,prop) -> obj.get(prop, 
Object.class).getClass().getSimpleName(),
+                       
"collectionFormat,default,enum,exclusiveMaximum,exclusiveMinimum,format,items,maxItems,maxLength,maximum,minItems,minLength,minimum,multipleOf,pattern,$ref,type,uniqueItems",
+                       
"String,StringBuilder,LinkedHashSet,Boolean,Boolean,String,Items,Integer,Integer,Float,Integer,Integer,Float,Float,String,String,String,Boolean");
 
                t.set("null", null).set(null, "null");
                assertNull(t.get("null", Object.class));
                assertNull(t.get(null, Object.class));
                assertNull(t.get("foo", Object.class));
+       }
 
-               var s = 
"{type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}";
+       @Test void b02_roundTripJson() {
+               var s = 
"{type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:1.0,exclusiveMaximum:true,minimum:4.0,exclusiveMinimum:true,maxLength:3,minLength:6,pattern:'i',maxItems:2,minItems:5,uniqueItems:true,'enum':['b'],multipleOf:7.0,'$ref':'k'}";
                assertJson(JsonParser.DEFAULT.parse(s, Items.class), s);
        }
 
-       @Test void b02_copy() {
+       @Test void b03_copy() {
                var t = new Items();
 
                t = t.copy();
@@ -174,35 +171,35 @@ class Items_Test extends SimpleTestBase {
                assertJson(t, "{}");
 
                t
+                       .set("collectionFormat", "c")
                        .set("default", "a")
                        .set("enum", set("b"))
-                       .set("collectionFormat", "c")
                        .set("exclusiveMaximum", true)
                        .set("exclusiveMinimum", true)
                        .set("format", "g")
                        .set("items", items("h"))
-                       .set("maximum", 123f)
-                       .set("maxItems", 123)
-                       .set("maxLength", 123)
-                       .set("minimum", 123f)
-                       .set("minItems", 123)
-                       .set("minLength", 123)
-                       .set("multipleOf", 123f)
+                       .set("maxItems", 2)
+                       .set("maxLength", 3)
+                       .set("maximum", 1f)
+                       .set("minItems", 5)
+                       .set("minLength", 6)
+                       .set("minimum", 4f)
+                       .set("multipleOf", 7f)
                        .set("pattern", "i")
+                       .set("$ref", "k")
                        .set("type", "j")
                        .set("uniqueItems", true)
-                       .set("$ref", "ref")
                        .copy();
 
                assertBean(t,
-                       
"type,format,items{type},collectionFormat,default,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,enum,multipleOf,ref",
-                       
"j,g,{h},c,a,123.0,true,123.0,true,123,123,i,123,123,true,[b],123.0,ref");
+                       
"collectionFormat,default,enum,exclusiveMaximum,exclusiveMinimum,format,items{type},maxItems,maxLength,maximum,minItems,minLength,minimum,multipleOf,pattern,ref,type,uniqueItems",
+                       
"c,a,[b],true,true,g,{h},2,3,1.0,5,6,4.0,7.0,i,k,j,true");
        }
 
-       @Test void b03_keySet() {
+       @Test void b04_keySet() {
                var t = new Items();
 
-               assertJson(t.keySet(), "[]");
+               assertEmpty(t.keySet());
 
                t
                        .set("collectionFormat", "c")
@@ -212,15 +209,15 @@ class Items_Test extends SimpleTestBase {
                        .set("exclusiveMinimum", true)
                        .set("format", "g")
                        .set("items", items("h"))
-                       .set("maximum", 123f)
-                       .set("maxItems", 123)
-                       .set("maxLength", 123)
-                       .set("minimum", 123f)
-                       .set("minItems", 123)
-                       .set("minLength", 123)
-                       .set("multipleOf", 123f)
+                       .set("maximum", 1f)
+                       .set("maxItems", 2)
+                       .set("maxLength", 3)
+                       .set("minimum", 4f)
+                       .set("minItems", 5)
+                       .set("minLength", 6)
+                       .set("multipleOf", 7f)
                        .set("pattern", "i")
-                       .set("$ref", "ref")
+                       .set("$ref", "k")
                        .set("type", "j")
                        .set("uniqueItems", true);
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/License_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/License_Test.java
index 6aaded66d..7c348181b 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/License_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/License_Test.java
@@ -33,21 +33,21 @@ class License_Test extends SimpleTestBase {
        @Test void a01_gettersAndSetters() {
                var t = new License();
 
-               // General
+               // Basic property setters
                assertBean(
                        t.setName("a").setUrl(URI.create("http://b";)),
                        "name,url",
                        "a,http://b";
                );
 
-               // Edge cases for nulls.
+               // Null values
                assertNull(t.setName(null).getName());
        }
 
        /**
         * Test method for {@link License#set(java.lang.String, 
java.lang.Object)}.
         */
-       @Test void b01_set() throws Exception {
+       @Test void b01_set() {
                var t = new License();
 
                t
@@ -70,9 +70,9 @@ class License_Test extends SimpleTestBase {
                        "a,b,ref");
 
                t
-                       .set("name", new StringBuilder("a"))
-                       .set("url", new StringBuilder("b"))
-                       .set("$ref", new StringBuilder("ref"));
+                       .set("name", sb("a"))
+                       .set("url", sb("b"))
+                       .set("$ref", sb("ref"));
 
                assertBean(t,
                        "name,url,$ref",
@@ -82,20 +82,22 @@ class License_Test extends SimpleTestBase {
                        "name,url,$ref",
                        "a,b,ref");
 
-               assertType(String.class, t.get("name", Object.class));
-               assertType(URI.class, t.get("url", Object.class));
-               assertType(StringBuilder.class, t.get("$ref", Object.class));
+               assertMapped(t, (obj,prop) -> obj.get(prop, 
Object.class).getClass().getSimpleName(),
+                       "name,url,$ref",
+                       "String,URI,StringBuilder");
 
                t.set("null", null).set(null, "null");
                assertNull(t.get("null", Object.class));
                assertNull(t.get(null, Object.class));
                assertNull(t.get("foo", Object.class));
+       }
 
+       @Test void b02_roundTripJson() {
                var s = "{name:'a',url:'b','$ref':'ref'}";
                assertJson(JsonParser.DEFAULT.parse(s, License.class), s);
        }
 
-       @Test void b02_copy() {
+       @Test void b03_copy() {
                var t = new License();
 
                t = t.copy();
@@ -113,7 +115,7 @@ class License_Test extends SimpleTestBase {
                        "a,b,ref");
        }
 
-       @Test void b03_keySet() {
+       @Test void b04_keySet() {
                var t = new License();
 
                assertEmpty(t.keySet());
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Operation_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Operation_Test.java
index 62b887fff..b26e54063 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Operation_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Operation_Test.java
@@ -34,37 +34,35 @@ class Operation_Test extends SimpleTestBase {
        @Test void a01_gettersAndSetters() {
                var t = new Operation();
 
-               // General
+               // Basic property setters
                assertBean(
-                       
t.setSummary("a").setDescription("b").setExternalDocs(externalDocumentation("c")).setOperationId("d")
-                       
.setOperationId("e").setDeprecated(true).setTags(set("f1","f2")).setConsumes(set(MediaType.of("text/foo")))
-                       
.setProduces(set(MediaType.of("text/foo"))).setParameters(set(parameterInfo("g1","g2"))).setResponses(map("1",responseInfo("h")))
-                       
.setSchemes(set("foo")).setSecurity(alist(map("foo",alist("bar")))),
-                       
"summary,description,externalDocs{url},operationId,deprecated,tags,consumes,produces,parameters{0{in,name}},responses{1{description}},schemes,security",
-                       
"a,b,{c},e,true,[f1,f2],[text/foo],[text/foo],{{g1,g2}},{{h}},[foo],[{foo=[bar]}]"
+                       
t.setConsumes(set(MediaType.of("text/a"))).setDeprecated(true).setDescription("b").setExternalDocs(externalDocumentation("c"))
+                       
.setOperationId("d").setParameters(set(parameterInfo("e1","e2"))).setProduces(set(MediaType.of("text/f")))
+                       
.setResponses(map("1",responseInfo("g"))).setSchemes(set("h")).setSecurity(alist(map("i",alist("j")))).setSummary("k").setTags(set("l1","l2")),
+                       
"consumes,deprecated,description,externalDocs{url},operationId,parameters{0{in,name}},produces,responses{1{description}},schemes,security,summary,tags",
+                       
"[text/a],true,b,{c},d,{{e1,e2}},[text/f],{{g}},[h],[{i=[j]}],k,[l1,l2]"
                );
 
-               // Edge cases for collections.
-               assertEmpty(t.setTags(set()).getTags());
-               assertNull(t.setTags((Collection<String>)null).getTags());
-               assertEmpty(t.setConsumes(set()).getConsumes());
-               
assertNull(t.setConsumes((Collection<MediaType>)null).getConsumes());
-               assertEmpty(t.setProduces(set()).getProduces());
-               
assertNull(t.setProduces((Collection<MediaType>)null).getProduces());
-               assertEmpty(t.setParameters(set()).getParameters());
-               
assertNull(t.setParameters((Collection<ParameterInfo>)null).getParameters());
-               assertEmpty(t.setResponses(map()).getResponses());
-               
assertNull(t.setResponses((Map<String,ResponseInfo>)null).getResponses());
-               assertEmpty(t.setSchemes(set()).getSchemes());
-               assertNull(t.setSchemes((Set<String>)null).getSchemes());
-               assertEmpty(t.setSecurity(alist()).getSecurity());
-               
assertNull(t.setSecurity((List<Map<String,List<String>>>)null).getSecurity());
+               // Null values
+               assertBean(
+                       
t.setConsumes((Collection<MediaType>)null).setParameters((Collection<ParameterInfo>)null).setProduces((Collection<MediaType>)null)
+                       
.setResponses((Map<String,ResponseInfo>)null).setSchemes((Set<String>)null).setSecurity((List<Map<String,List<String>>>)null).setTags((Collection<String>)null),
+                       
"consumes,parameters,produces,responses,schemes,security,tags",
+                       "null,null,null,null,null,null,null"
+               );
+
+               // Other methods - empty collections
+               assertBean(
+                       
t.setConsumes(set()).setParameters(set()).setProduces(set()).setResponses(map()).setSchemes(set()).setSecurity(alist()).setTags(set()),
+                       
"consumes,parameters,produces,responses,schemes,security,tags",
+                       "[],[],[],{},[],[],[]"
+               );
        }
 
        /**
         * Test method for {@link Operation#set(java.lang.String, 
java.lang.Object)}.
         */
-       @Test void a01_set() throws Exception {
+       @Test void a01_set() {
                var t = new Operation();
 
                t
@@ -110,19 +108,19 @@ class Operation_Test extends SimpleTestBase {
                );
 
                t
-                       .set("consumes", new StringBuilder("['text/a']"))
-                       .set("deprecated", new StringBuilder("true"))
-                       .set("description", new StringBuilder("b"))
-                       .set("externalDocs", new StringBuilder("{url:'c'}"))
-                       .set("operationId", new StringBuilder("d"))
-                       .set("parameters", new 
StringBuilder("[{'in':'e1',name:'e2'}]"))
-                       .set("produces", new StringBuilder("['text/f']"))
-                       .set("responses", new 
StringBuilder("{'1':{description:'g'}}"))
-                       .set("schemes", new StringBuilder("['h']"))
-                       .set("security", new StringBuilder("[{i1:['i2']}]"))
-                       .set("summary", new StringBuilder("j"))
-                       .set("tags", new StringBuilder("['k']"))
-                       .set("$ref", new StringBuilder("l"));
+                       .set("consumes", sb("['text/a']"))
+                       .set("deprecated", sb("true"))
+                       .set("description", sb("b"))
+                       .set("externalDocs", sb("{url:'c'}"))
+                       .set("operationId", sb("d"))
+                       .set("parameters", sb("[{'in':'e1',name:'e2'}]"))
+                       .set("produces", sb("['text/f']"))
+                       .set("responses", sb("{'1':{description:'g'}}"))
+                       .set("schemes", sb("['h']"))
+                       .set("security", sb("[{i1:['i2']}]"))
+                       .set("summary", sb("j"))
+                       .set("tags", sb("['k']"))
+                       .set("$ref", sb("l"));
 
                assertBean(
                        t,
@@ -136,35 +134,28 @@ class Operation_Test extends SimpleTestBase {
                        
"['text/a'],true,b,{url:'c'},d,[{'in':'e1',name:'e2'}],['text/f'],{'1':{description:'g'}},['h'],[{i1:['i2']}],j,['k'],l"
                );
 
-               assertType(Set.class, t.get("consumes", Object.class));
-               assertType(MediaType.class, t.get("consumes", 
List.class).get(0));
-               assertType(Boolean.class, t.get("deprecated", Object.class));
-               assertType(String.class, t.get("description", Object.class));
-               assertType(ExternalDocumentation.class, t.get("externalDocs", 
Object.class));
-               assertType(String.class, t.get("operationId", Object.class));
-               assertType(List.class, t.get("parameters", Object.class));
-               assertType(ParameterInfo.class, t.get("parameters", 
List.class).get(0));
-               assertType(Set.class, t.get("produces", Object.class));
-               assertType(MediaType.class, t.get("produces", 
List.class).get(0));
-               assertType(Map.class, t.get("responses", Object.class));
-               assertType(String.class, t.get("responses", 
Map.class).keySet().iterator().next());
-               assertType(ResponseInfo.class, t.get("responses", 
Map.class).values().iterator().next());
-               assertType(Set.class, t.get("schemes", Object.class));
-               assertType(List.class, t.get("security", Object.class));
-               assertType(String.class, t.get("summary", Object.class));
-               assertType(Set.class, t.get("tags", Object.class));
-               assertType(StringBuilder.class, t.get("$ref", Object.class));
+               assertMapped(t, (obj,prop) -> obj.get(prop, 
Object.class).getClass().getSimpleName(),
+                       
"consumes,deprecated,description,externalDocs,operationId,parameters,produces,responses,schemes,security,summary,tags,$ref",
+                       
"LinkedHashSet,Boolean,String,ExternalDocumentation,String,ArrayList,LinkedHashSet,LinkedHashMap,LinkedHashSet,ArrayList,String,LinkedHashSet,StringBuilder");
+
+               assertMapped(t, (o,k) -> o.get(k, 
List.class).get(0).getClass().getSimpleName(), "consumes,parameters,produces", 
"MediaType,ParameterInfo,MediaType");
+               assertMapped(t, (o,k) -> {
+                       Map<?,?> map = o.get(k, Map.class);
+                       return 
map.keySet().iterator().next().getClass().getSimpleName() + "," + 
map.values().iterator().next().getClass().getSimpleName();
+               }, "responses", "String,ResponseInfo");
 
                t.set("null", null).set(null, "null");
                assertNull(t.get("null", Object.class));
                assertNull(t.get(null, Object.class));
                assertNull(t.get("foo", Object.class));
+       }
 
+       @Test void b02_roundTripJson() {
                var s = 
"{operationId:'d',summary:'j',description:'b',tags:['k'],externalDocs:{url:'c'},consumes:['text/a'],produces:['text/f'],parameters:[{'in':'e1',name:'e2'}],responses:{'1':{description:'g'}},schemes:['h'],deprecated:true,security:[{i1:['i2']}],'$ref':'ref'}";
                assertJson(JsonParser.DEFAULT.parse(s, Operation.class), s);
        }
 
-       @Test void b02_copy() {
+       @Test void b03_copy() {
                var t = new Operation();
 
                t = t.copy();
@@ -194,7 +185,7 @@ class Operation_Test extends SimpleTestBase {
                );
        }
 
-       @Test void b03_keySet() {
+       @Test void b04_keySet() {
                var t = new Operation();
 
                assertEmpty(t.keySet());
@@ -212,11 +203,8 @@ class Operation_Test extends SimpleTestBase {
                        .set("security", set(map("i1",alist("i2"))))
                        .set("summary", "j")
                        .set("tags", set("k"))
-                       .set("$ref", "ref");
+                       .set("$ref", "l");
 
-               assertSet(
-                       t.keySet(),
-                       
"consumes","deprecated","description","externalDocs","operationId","parameters","produces","responses","schemes","security","summary","tags","$ref"
-               );
+               assertSet(t.keySet(), 
"consumes,deprecated,description,externalDocs,operationId,parameters,produces,responses,schemes,security,summary,tags,$ref");
        }
 }
\ No newline at end of file
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ParameterInfo_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ParameterInfo_Test.java
index 54fd3cba4..d6f88dd33 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ParameterInfo_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ParameterInfo_Test.java
@@ -33,51 +33,47 @@ class ParameterInfo_Test extends SimpleTestBase {
         */
        @Test void a01_gettersAndSetters() {
                var t = new ParameterInfo();
-               assertBean(t.setName("foo"), "name", "foo");
-               assertNull(t.setName(null).getName());
-               assertBean(t.setIn("foo"), "in", "foo");
-               assertNull(t.setIn(null).getIn());
-               assertBean(t.setDescription("foo"), "description", "foo");
-               assertNull(t.setDescription(null).getDescription());
-               assertTrue(t.setRequired(true).getRequired());
-               
assertJson(t.setSchema(schemaInfo().setTitle("foo")).getSchema(), 
"{title:'foo'}");
-               assertBean(t.setType("foo"), "type", "foo");
-               assertNull(t.setType(null).getType());
-               assertBean(t.setFormat("foo"), "format", "foo");
-               assertNull(t.setFormat(null).getFormat());
-               assertTrue(t.setAllowEmptyValue(true).getAllowEmptyValue());
-               assertJson(t.setItems(items("foo")).getItems(), "{type:'foo'}");
-               assertBean(t.setCollectionFormat("foo"), "collectionFormat", 
"foo");
-               assertNull(t.setCollectionFormat(null).getCollectionFormat());
-               assertBean(t.setDefault("foo"), "default", "foo");
-               assertString("foo", t.setDefault(new 
StringBuilder("foo")).getDefault());
-               assertNull(t.setDefault(null).getDefault());
-               assertEquals(123, t.setMaximum(123).getMaximum());
-               assertEquals(123f, t.setMaximum(123f).getMaximum());
-               assertTrue(t.setExclusiveMaximum(true).getExclusiveMaximum());
-               assertEquals(123, t.setMinimum(123).getMinimum());
-               assertEquals(123f, t.setMinimum(123f).getMinimum());
-               assertTrue(t.setExclusiveMinimum(true).getExclusiveMinimum());
-               assertEquals(123, t.setMaxLength(123).getMaxLength());
-               assertEquals(123, t.setMinLength(123).getMinLength());
-               assertBean(t.setPattern("foo"), "pattern", "foo");
-               assertNull(t.setPattern(null).getPattern());
-               assertEquals(123, t.setMaxItems(123).getMaxItems());
-               assertEquals(123, t.setMinItems(123).getMinItems());
-               assertTrue(t.setUniqueItems(true).getUniqueItems());
-               assertJson(t.setEnum(set("foo","bar")).getEnum(), 
"['foo','bar']");
-               assertJson(t.setEnum(set()).getEnum(), "[]");
-               assertNull(t.setEnum((Collection<Object>)null).getEnum());
-               assertJson(t.addEnum("foo","bar").getEnum(), "['foo','bar']");
-               assertJson(t.addEnum("baz").getEnum(), "['foo','bar','baz']");
-               assertEquals(123, t.setMultipleOf(123).getMultipleOf());
-               assertEquals(123f, t.setMultipleOf(123f).getMultipleOf());
+
+               // General - Combined assertBean test
+               assertBean(
+                       
t.setAllowEmptyValue(true).setCollectionFormat("a").setDefault("b").setDescription("c").setEnum(set("d1","d2"))
+                               
.setExclusiveMaximum(true).setExclusiveMinimum(true).setFormat("e").setIn("f").setItems(items("g"))
+                               
.setMaxItems(1).setMaxLength(2).setMaximum(3).setMinItems(4).setMinLength(5).setMinimum(6)
+                               
.setMultipleOf(7).setName("h").setPattern("i").setRequired(true).setSchema(schemaInfo().setTitle("j"))
+                               .setType("k").setUniqueItems(true),
+                       
"allowEmptyValue,collectionFormat,default,description,enum,exclusiveMaximum,exclusiveMinimum,format,in,items{type},maxItems,maxLength,maximum,minItems,minLength,minimum,multipleOf,name,pattern,required,schema{title},type,uniqueItems",
+                       
"true,a,b,c,[d1,d2],true,true,e,f,{g},1,2,3,4,5,6,7,h,i,true,{j},k,true"
+               );
+
+               // Null cases
+               assertBean(
+                       
t.setCollectionFormat(null).setDefault(null).setDescription(null).setEnum((Collection<Object>)null)
+                               
.setFormat(null).setIn(null).setName(null).setPattern(null).setType(null),
+                       
"collectionFormat,default,description,enum,format,in,name,pattern,type",
+                       "null,null,null,null,null,null,null,null,null"
+               );
+
+               // Empty collections
+               assertBean(
+                       t.setEnum(set()),
+                       "enum",
+                       "[]"
+               );
+
+               // Other
+               assertBean(
+                       
t.setDefault(sb("a")).setMaximum(1f).setMinimum(2f).setMultipleOf(3f),
+                       "default,maximum,minimum,multipleOf", "a,1.0,2.0,3.0");
+
+               // addEnum
+               assertSet(t.addEnum("a","b").getEnum(), "a,b");
+               assertSet(t.addEnum("c").getEnum(), "a,b,c");
        }
 
        /**
         * Test method for {@link ParameterInfo#set(java.lang.String, 
java.lang.Object)}.
         */
-       @Test void a01_set() throws Exception {
+       @Test void a01_set() {
                var t = new ParameterInfo();
 
                t
@@ -91,22 +87,24 @@ class ParameterInfo_Test extends SimpleTestBase {
                        .set("format", "e")
                        .set("in", "f")
                        .set("items", items("g"))
-                       .set("maximum", 123f)
-                       .set("maxItems", 123)
-                       .set("maxLength", 123)
-                       .set("minimum", 123f)
-                       .set("minItems", 123)
-                       .set("minLength", 123)
-                       .set("multipleOf", 123f)
+                       .set("maximum", 1f)
+                       .set("maxItems", 2)
+                       .set("maxLength", 3)
+                       .set("minimum", 4f)
+                       .set("minItems", 5)
+                       .set("minLength", 6)
+                       .set("multipleOf", 7f)
                        .set("name", "h")
                        .set("pattern", "i")
                        .set("required", true)
                        .set("schema", schemaInfo().setTitle("j"))
                        .set("type", "k")
                        .set("uniqueItems", true)
-                       .set("$ref", "ref");
+                       .set("$ref", "l");
 
-               assertJson(t, 
"{'in':'f',name:'h',type:'k',description:'d',required:true,schema:{title:'j'},format:'e',allowEmptyValue:true,items:{type:'g'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}");
+               assertBean(t,
+                       
"in,name,type,description,required,schema{title},format,allowEmptyValue,items{type},collectionFormat,default,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,enum,multipleOf,$ref",
+                       
"f,h,k,d,true,{j},e,true,{g},c,a,1.0,true,4.0,true,3,6,i,2,5,true,[b],7.0,l");
 
                t
                        .set("default", "a")
@@ -119,90 +117,75 @@ class ParameterInfo_Test extends SimpleTestBase {
                        .set("format", "e")
                        .set("in", "f")
                        .set("items", "{type:'g'}")
-                       .set("maximum", "123.0")
-                       .set("maxItems", "123")
-                       .set("maxLength", "123")
-                       .set("minimum", "123.0")
-                       .set("minItems", "123")
-                       .set("minLength", "123")
-                       .set("multipleOf", "123.0")
+                       .set("maximum", "1.0")
+                       .set("maxItems", "2")
+                       .set("maxLength", "3")
+                       .set("minimum", "4.0")
+                       .set("minItems", "5")
+                       .set("minLength", "6")
+                       .set("multipleOf", "7.0")
                        .set("name", "h")
                        .set("pattern", "i")
                        .set("required", "true")
                        .set("schema", "{title:'j'}")
                        .set("type", "k")
                        .set("uniqueItems", "true")
-                       .set("$ref", "ref");
+                       .set("$ref", "l");
 
-               assertJson(t, 
"{'in':'f',name:'h',type:'k',description:'d',required:true,schema:{title:'j'},format:'e',allowEmptyValue:true,items:{type:'g'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}");
+               assertBean(t,
+                       
"in,name,type,description,required,schema{title},format,allowEmptyValue,items{type},collectionFormat,default,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,enum,multipleOf,$ref",
+                       
"f,h,k,d,true,{j},e,true,{g},c,a,1.0,true,4.0,true,3,6,i,2,5,true,[b],7.0,l");
 
                t
-                       .set("default", new StringBuilder("a"))
-                       .set("enum", new StringBuilder("['b']"))
-                       .set("allowEmptyValue", new StringBuilder("true"))
-                       .set("collectionFormat", new StringBuilder("c"))
-                       .set("description", new StringBuilder("d"))
-                       .set("exclusiveMaximum", new StringBuilder("true"))
-                       .set("exclusiveMinimum", new StringBuilder("true"))
-                       .set("format", new StringBuilder("e"))
-                       .set("in", new StringBuilder("f"))
-                       .set("items", new StringBuilder("{type:'g'}"))
-                       .set("maximum", new StringBuilder("123.0"))
-                       .set("maxItems", new StringBuilder("123"))
-                       .set("maxLength", new StringBuilder("123"))
-                       .set("minimum", new StringBuilder("123.0"))
-                       .set("minItems", new StringBuilder("123"))
-                       .set("minLength", new StringBuilder("123"))
-                       .set("multipleOf", new StringBuilder("123.0"))
-                       .set("name", new StringBuilder("h"))
-                       .set("pattern", new StringBuilder("i"))
-                       .set("required", new StringBuilder("true"))
-                       .set("schema", new StringBuilder("{title:'j'}"))
-                       .set("type", new StringBuilder("k"))
-                       .set("uniqueItems", new StringBuilder("true"))
-                       .set("$ref", new StringBuilder("ref"));
+                       .set("default", sb("a"))
+                       .set("enum", sb("['b']"))
+                       .set("allowEmptyValue", sb("true"))
+                       .set("collectionFormat", sb("c"))
+                       .set("description", sb("d"))
+                       .set("exclusiveMaximum", sb("true"))
+                       .set("exclusiveMinimum", sb("true"))
+                       .set("format", sb("e"))
+                       .set("in", sb("f"))
+                       .set("items", sb("{type:'g'}"))
+                       .set("maxItems", sb("2"))
+                       .set("maxLength", sb("3"))
+                       .set("maximum", sb("1.0"))
+                       .set("minItems", sb("5"))
+                       .set("minLength", sb("6"))
+                       .set("minimum", sb("4.0"))
+                       .set("multipleOf", sb("7.0"))
+                       .set("name", sb("h"))
+                       .set("pattern", sb("i"))
+                       .set("$ref", sb("l"))
+                       .set("required", sb("true"))
+                       .set("schema", sb("{title:'j'}"))
+                       .set("type", sb("k"))
+                       .set("uniqueItems", sb("true"));
 
-               assertJson(t, 
"{'in':'f',name:'h',type:'k',description:'d',required:true,schema:{title:'j'},format:'e',allowEmptyValue:true,items:{type:'g'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}");
+               assertBean(t,
+                       
"allowEmptyValue,collectionFormat,default,description,enum,exclusiveMaximum,exclusiveMinimum,format,in,items{type},maxItems,maxLength,maximum,minItems,minLength,minimum,multipleOf,name,pattern,$ref,required,schema{title},type,uniqueItems",
+                       
"true,c,a,d,[b],true,true,e,f,{g},2,3,1.0,5,6,4.0,7.0,h,i,l,true,{j},k,true");
 
                assertMapped(t, (obj,prop) -> obj.get(prop, String.class),
-                       
"default,enum,allowEmptyValue,collectionFormat,description,exclusiveMaximum,exclusiveMinimum,format,in,items,maximum,maxItems,maxLength,minimum,minItems,minLength,multipleOf,name,pattern,required,schema,type,uniqueItems,$ref",
-                       
"a,['b'],true,c,d,true,true,e,f,{type:'g'},123.0,123,123,123.0,123,123,123.0,h,i,true,{title:'j'},k,true,ref");
+                       
"allowEmptyValue,collectionFormat,default,description,enum,exclusiveMaximum,exclusiveMinimum,format,in,items,maxItems,maxLength,maximum,minItems,minLength,minimum,multipleOf,name,pattern,$ref,required,schema,type,uniqueItems",
+                       
"true,c,a,d,['b'],true,true,e,f,{type:'g'},2,3,1.0,5,6,4.0,7.0,h,i,l,true,{title:'j'},k,true");
 
-               assertType(StringBuilder.class, t.get("default", Object.class));
-               assertType(Set.class, t.get("enum", Object.class));
-               assertType(Boolean.class, t.get("allowEmptyValue", 
Object.class));
-               assertType(String.class, t.get("collectionFormat", 
Object.class));
-               assertType(String.class, t.get("description", Object.class));
-               assertType(Boolean.class, t.get("exclusiveMaximum", 
Object.class));
-               assertType(Boolean.class, t.get("exclusiveMinimum", 
Object.class));
-               assertType(String.class, t.get("format", Object.class));
-               assertType(String.class, t.get("in", Object.class));
-               assertType(Items.class, t.get("items", Object.class));
-               assertType(Float.class, t.get("maximum", Object.class));
-               assertType(Integer.class, t.get("maxItems", Object.class));
-               assertType(Integer.class, t.get("maxLength", Object.class));
-               assertType(Float.class, t.get("minimum", Object.class));
-               assertType(Integer.class, t.get("minItems", Object.class));
-               assertType(Integer.class, t.get("minLength", Object.class));
-               assertType(Float.class, t.get("multipleOf", Object.class));
-               assertType(String.class, t.get("name", Object.class));
-               assertType(String.class, t.get("pattern", Object.class));
-               assertType(Boolean.class, t.get("required", Object.class));
-               assertType(SchemaInfo.class, t.get("schema", Object.class));
-               assertType(String.class, t.get("type", Object.class));
-               assertType(Boolean.class, t.get("uniqueItems", Object.class));
-               assertType(StringBuilder.class, t.get("$ref", Object.class));
+               assertMapped(t, (obj,prop) -> obj.get(prop, 
Object.class).getClass().getSimpleName(),
+                       
"allowEmptyValue,collectionFormat,default,description,enum,exclusiveMaximum,exclusiveMinimum,format,in,items,maxItems,maxLength,maximum,minItems,minLength,minimum,multipleOf,name,pattern,$ref,required,schema,type,uniqueItems",
+                       
"Boolean,String,StringBuilder,String,LinkedHashSet,Boolean,Boolean,String,String,Items,Integer,Integer,Float,Integer,Integer,Float,Float,String,String,StringBuilder,Boolean,SchemaInfo,String,Boolean");
 
                t.set("null", null).set(null, "null");
                assertNull(t.get("null", Object.class));
                assertNull(t.get(null, Object.class));
                assertNull(t.get("foo", Object.class));
+       }
 
+       @Test void b02_roundTripJson() {
                var s = 
"{'in':'f',name:'h',type:'k',description:'d',required:true,schema:{title:'j'},format:'e',allowEmptyValue:true,items:{type:'g'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}";
                assertJson(JsonParser.DEFAULT.parse(s, ParameterInfo.class), s);
        }
 
-       @Test void b02_copy() {
+       @Test void b03_copy() {
                var t = new ParameterInfo();
 
                t = t.copy();
@@ -220,29 +203,31 @@ class ParameterInfo_Test extends SimpleTestBase {
                        .set("format", "e")
                        .set("in", "f")
                        .set("items", items("g"))
-                       .set("maximum", 123f)
-                       .set("maxItems", 123)
-                       .set("maxLength", 123)
-                       .set("minimum", 123f)
-                       .set("minItems", 123)
-                       .set("minLength", 123)
-                       .set("multipleOf", 123f)
+                       .set("maximum", 1f)
+                       .set("maxItems", 2)
+                       .set("maxLength", 3)
+                       .set("minimum", 4f)
+                       .set("minItems", 5)
+                       .set("minLength", 6)
+                       .set("multipleOf", 7f)
                        .set("name", "h")
                        .set("pattern", "i")
                        .set("required", true)
                        .set("schema", schemaInfo().setTitle("j"))
                        .set("type", "k")
                        .set("uniqueItems", true)
-                       .set("$ref", "ref")
+                       .set("$ref", "l")
                        .copy();
 
-               assertJson(t, 
"{'in':'f',name:'h',type:'k',description:'d',required:true,schema:{title:'j'},format:'e',allowEmptyValue:true,items:{type:'g'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}");
+               assertBean(t,
+                       
"in,name,type,description,required,schema{title},format,allowEmptyValue,items{type},collectionFormat,default,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,enum,multipleOf,$ref",
+                       
"f,h,k,d,true,{j},e,true,{g},c,a,1.0,true,4.0,true,3,6,i,2,5,true,[b],7.0,l");
        }
 
-       @Test void b03_keySet() {
+       @Test void b04_keySet() {
                var t = new ParameterInfo();
 
-               assertJson(t.keySet(), "[]");
+               assertEmpty(t.keySet());
 
                t
                        .set("allowEmptyValue", true)
@@ -255,25 +240,21 @@ class ParameterInfo_Test extends SimpleTestBase {
                        .set("format", "e")
                        .set("in", "f")
                        .set("items", items("g"))
-                       .set("maximum", 123f)
-                       .set("maxItems", 123)
-                       .set("maxLength", 123)
-                       .set("minimum", 123f)
-                       .set("minItems", 123)
-                       .set("minLength", 123)
-                       .set("multipleOf", 123f)
+                       .set("maximum", 1f)
+                       .set("maxItems", 2)
+                       .set("maxLength", 3)
+                       .set("minimum", 4f)
+                       .set("minItems", 5)
+                       .set("minLength", 6)
+                       .set("multipleOf", 7f)
                        .set("name", "h")
                        .set("pattern", "i")
                        .set("required", true)
                        .set("schema", schemaInfo().setTitle("j"))
                        .set("type", "k")
                        .set("uniqueItems", true)
-                       .set("$ref", "ref");
+                       .set("$ref", "l");
 
-               assertJson(t.keySet(),
-                       
"['allowEmptyValue','collectionFormat','default','description','enum','exclusiveMaximum','exclusiveMinimum',"
-                       + 
"'format','in','items','maximum','maxItems','maxLength','minimum','minItems','minLength','multipleOf','name',"
-                       + 
"'pattern','required','schema','type','uniqueItems','$ref']"
-               );
+               assertSet(t.keySet(), 
"allowEmptyValue,collectionFormat,default,description,enum,exclusiveMaximum,exclusiveMinimum,format,in,items,maximum,maxItems,maxLength,minimum,minItems,minLength,multipleOf,name,pattern,required,schema,type,uniqueItems,$ref");
        }
 }
\ No newline at end of file
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ResponseInfo_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ResponseInfo_Test.java
index c702a880f..84f780392 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ResponseInfo_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ResponseInfo_Test.java
@@ -34,21 +34,29 @@ class ResponseInfo_Test extends SimpleTestBase {
        @Test void a01_gettersAndSetters() {
                var t = new ResponseInfo();
 
-               // General
+               // Basic property setters
                assertBean(
-                       
t.setDescription("a").setSchema(schemaInfo().setTitle("b")).setHeaders(map("c",headerInfo("d"))).setExamples(map("e","f","g",alist("h"))),
-                       "description,schema{title},headers{c{type}},examples",
-                       "a,{b},{{d}},{e=f,g=[h]}"
+                       t.setDescription("a")
+                               .setExamples(map("b1","b2","b3",alist("b4")))
+                               .setHeaders(map("c1",headerInfo("c2")))
+                               .setSchema(schemaInfo().setTitle("d")),
+                       "description,examples,headers{c1{type}},schema{title}",
+                       "a,{b1=b2,b3=[b4]},{{c2}},{d}"
                );
 
-               // Edge cases for collections and nulls.
-               assertNull(t.setDescription(null).getDescription());
-               assertEmpty(t.setHeaders(map()).getHeaders());
-               
assertNull(t.setHeaders((Map<String,HeaderInfo>)null).getHeaders());
-               assertEmpty(t.setExamples(map()).getExamples());
-               
assertNull(t.setExamples((Map<String,Object>)null).getExamples());
+               // Null values
+               assertBean(
+                       
t.setDescription(null).setExamples((Map<String,Object>)null).setHeaders((Map<String,HeaderInfo>)null),
+                       "description,examples,headers",
+                       "null,null,null"
+               );
 
-               // Examples addExample method.
+               // Other methods - empty collections
+               assertBean(
+                       t.setExamples(map()).setHeaders(map()),
+                       "examples,headers",
+                       "{},{}"
+               );
                assertMap(
                        t.setExamples(map()).addExample("text/a", 
"a").addExample("text/b", null).addExample(null, "c").getExamples(),
                        "text/a,text/b,<<<NULL>>>",
@@ -59,64 +67,65 @@ class ResponseInfo_Test extends SimpleTestBase {
        /**
         * Test method for {@link ResponseInfo#set(java.lang.String, 
java.lang.Object)}.
         */
-       @Test void b01_set() throws Exception {
+       @Test void b01_set() {
                var t = new ResponseInfo();
 
                t
                        .set("description", "a")
-                       .set("examples", map("foo","bar","baz",alist("qux")))
-                       .set("headers", map("a", headerInfo("a1")))
+                       .set("examples", map("b1","b2","b3",alist("b4")))
+                       .set("headers", map("c1", headerInfo("c2")))
                        .set("schema", schemaInfo().setType("d"))
-                       .set("$ref", "ref");
+                       .set("$ref", "e");
 
                // Comprehensive object state validation
                assertBean(t,
-                       
"description,schema{type},headers{a{type}},examples,$ref",
-                       "a,{d},{{a1}},{foo=bar,baz=[qux]},ref");
+                       
"description,schema{type},headers{c1{type}},examples,$ref",
+                       "a,{d},{{c2}},{b1=b2,b3=[b4]},e");
 
                t
                        .set("description", "a")
-                       .set("examples", "{foo:'bar',baz:['qux']}")
-                       .set("headers", "{a:{type:'a1'}}")
+                       .set("examples", "{b1:'b2',b3:['b4']}")
+                       .set("headers", "{c1:{type:'c2'}}")
                        .set("schema", "{type:'d'}")
-                       .set("$ref", "ref");
+                       .set("$ref", "e");
 
                assertBean(t,
-                       
"description,schema{type},headers{a{type}},examples,$ref",
-                       "a,{d},{{a1}},{foo=bar,baz=[qux]},ref");
+                       
"description,examples,headers{c1{type}},schema{type},$ref",
+                       "a,{b1=b2,b3=[b4]},{{c2}},{d},e");
 
                t
-                       .set("description", new StringBuilder("a"))
-                       .set("examples", new 
StringBuilder("{foo:'bar',baz:['qux']}"))
-                       .set("headers", new StringBuilder("{a:{type:'a1'}}"))
-                       .set("schema", new StringBuilder("{type:'d'}"))
-                       .set("$ref", new StringBuilder("ref"));
+                       .set("description", sb("a"))
+                       .set("examples", sb("{b1:'b2',b3:['b4']}"))
+                       .set("headers", sb("{c1:{type:'c2'}}"))
+                       .set("schema", sb("{type:'d'}"))
+                       .set("$ref", sb("e"));
 
                assertBean(t,
-                       
"description,schema{type},headers{a{type}},examples,$ref",
-                       "a,{d},{{a1}},{foo=bar,baz=[qux]},ref");
+                       
"description,examples,headers{c1{type}},schema{type},$ref",
+                       "a,{b1=b2,b3=[b4]},{{c2}},{d},e");
 
                assertMapped(t, (obj,prop) -> obj.get(prop, String.class),
                        "description,examples,headers,schema,$ref",
-                       
"a,{foo:'bar',baz:['qux']},{a:{type:'a1'}},{type:'d'},ref");
+                       "a,{b1:'b2',b3:['b4']},{c1:{type:'c2'}},{type:'d'},e");
+
+               assertMapped(t, (obj,prop) -> obj.get(prop, 
Object.class).getClass().getSimpleName(),
+                       "description,examples,headers,schema,$ref",
+                       
"String,LinkedHashMap,LinkedHashMap,SchemaInfo,StringBuilder");
 
-               assertType(String.class, t.get("description", Object.class));
-               assertType(Map.class, t.get("examples", Object.class));
-               assertType(Map.class, t.get("headers", Object.class));
                assertType(HeaderInfo.class, t.get("headers", 
Map.class).values().iterator().next());
-               assertType(SchemaInfo.class, t.get("schema", Object.class));
-               assertType(StringBuilder.class, t.get("$ref", Object.class));
 
                t.set("null", null).set(null, "null");
                assertNull(t.get("null", Object.class));
                assertNull(t.get(null, Object.class));
                assertNull(t.get("foo", Object.class));
+       }
 
-               var s = 
"{description:'a',schema:{type:'d'},headers:{a:{type:'a1'}},examples:{foo:'bar',baz:['qux']},'$ref':'ref'}";
+       @Test void b02_roundTripJson() {
+               var s = 
"{description:'a',schema:{type:'d'},headers:{a:{type:'a1'}},examples:{foo:'bar',baz:['qux']},'$ref':'ref'}";
  // Order is determined by @Bean annotation.
                assertJson(JsonParser.DEFAULT.parse(s, ResponseInfo.class), s);
        }
 
-       @Test void b02_copy() {
+       @Test void b03_copy() {
                var t = new ResponseInfo();
 
                t = t.copy();
@@ -125,28 +134,28 @@ class ResponseInfo_Test extends SimpleTestBase {
 
                t
                        .set("description", "a")
-                       .set("examples", map("foo","bar","baz",alist("qux")))
-                       .set("headers", map("a", headerInfo("a1")))
+                       .set("examples", map("b1","b2","b3",alist("b4")))
+                       .set("headers", map("c1", headerInfo("c2")))
                        .set("schema", schemaInfo().setType("d"))
-                       .set("$ref", "ref")
+                       .set("$ref", "e")
                        .copy();
 
                assertBean(t,
-                       
"description,schema{type},headers{a{type}},examples,$ref",
-                       "a,{d},{{a1}},{foo=bar,baz=[qux]},ref");
+                       
"description,examples,headers{c1{type}},schema{type},$ref",
+                       "a,{b1=b2,b3=[b4]},{{c2}},{d},e");
        }
 
-       @Test void b03_keySet() {
+       @Test void b04_keySet() {
                var t = new ResponseInfo();
 
                assertEmpty(t.keySet());
 
                t
                        .set("description", "a")
-                       .set("examples", map("foo","bar","baz",alist("qux")))
-                       .set("headers", map("a", headerInfo("a1")))
+                       .set("examples", map("b1","b2","b3",alist("b4")))
+                       .set("headers", map("c1", headerInfo("c2")))
                        .set("schema", schemaInfo().setType("d"))
-                       .set("$ref", "ref");
+                       .set("$ref", "e");
 
                assertSet(t.keySet(), 
"description,examples,headers,schema,$ref");
        }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/SchemaInfo_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/SchemaInfo_Test.java
index e27be40a5..9ca7eea9f 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/SchemaInfo_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/SchemaInfo_Test.java
@@ -33,101 +33,89 @@ class SchemaInfo_Test extends SimpleTestBase {
         */
        @Test void a01_gettersAndSetters() {
                var t = new SchemaInfo();
-               assertBean(t.setFormat("foo"), "format", "foo");
-               assertNull(t.setFormat(null).getFormat());
-               assertBean(t.setTitle("foo"), "title", "foo");
-               assertNull(t.setTitle(null).getTitle());
-               assertBean(t.setDescription("foo"), "description", "foo");
-               assertNull(t.setDescription(null).getDescription());
-               assertBean(t.setDefault("foo"), "default", "foo");
-               assertString("foo", t.setDefault(new 
StringBuilder("foo")).getDefault());
-               assertNull(t.setDefault(null).getDefault());
-               assertEquals(123, t.setMultipleOf(123).getMultipleOf());
-               assertEquals(123f, t.setMultipleOf(123f).getMultipleOf());
-               assertEquals(123, t.setMaximum(123).getMaximum());
-               assertEquals(123f, t.setMaximum(123f).getMaximum());
-               assertTrue(t.setExclusiveMaximum(true).getExclusiveMaximum());
-               assertEquals(123, t.setMinimum(123).getMinimum());
-               assertEquals(123f, t.setMinimum(123f).getMinimum());
-               assertTrue(t.setExclusiveMinimum(true).getExclusiveMinimum());
-               assertEquals(123, t.setMaxLength(123).getMaxLength());
-               assertEquals(123, t.setMinLength(123).getMinLength());
-               assertEquals("foo", t.setPattern("foo").getPattern());
-               assertNull(t.setPattern(null).getPattern());
-               assertEquals(123, t.setMaxItems(123).getMaxItems());
-               assertEquals(123, t.setMinItems(123).getMinItems());
-               assertTrue(t.setUniqueItems(true).getUniqueItems());
-               assertEquals(123, t.setMaxProperties(123).getMaxProperties());
-               assertEquals(123, t.setMinProperties(123).getMinProperties());
-               
assertJson(t.setRequiredProperties("x").getRequiredProperties(), "['x']");
-               
assertNull(t.setRequiredProperties((Collection<String>)null).getRequiredProperties());
-               assertJson(t.setEnum(set("foo","bar")).getEnum(), 
"['foo','bar']");
-               assertJson(t.setEnum(set()).getEnum(), "[]");
-               assertNull(t.setEnum((Collection<Object>)null).getEnum());
-               assertJson(t.addEnum("foo","bar").getEnum(), "['foo','bar']");
-               assertJson(t.addEnum("baz").getEnum(), "['foo','bar','baz']");
-               assertEquals("foo", t.setType("foo").getType());
-               assertNull(t.setType(null).getType());
-               assertJson(t.setItems(items("foo")).getItems(), "{type:'foo'}");
-               assertJson(t.setAllOf(set("foo","bar")).getAllOf(), 
"['foo','bar']");
-               assertJson(t.setAllOf(set()).getAllOf(), "[]");
-               assertNull(t.setAllOf((Collection<Object>)null).getAllOf());
-               assertJson(t.addAllOf("foo","bar").getAllOf(), "['foo','bar']");
-               assertJson(t.setProperties(map("foo",new 
SchemaInfo().setType("foo"))).getProperties(), "{foo:{type:'foo'}}");
-               assertJson(t.setProperties(map()).getProperties(), "{}");
-               
assertNull(t.setProperties((Map<String,SchemaInfo>)null).getProperties());
-               assertJson(t.setAdditionalProperties(new 
SchemaInfo().setType("foo")).getAdditionalProperties(), "{type:'foo'}");
+
+               // General - Combined assertBean test
+               assertBean(
+                       t.setAdditionalProperties(new 
SchemaInfo().setType("a")).setAllOf(set("b1","b2")).setDefault("c").setDescription("d")
+                               
.setDiscriminator("e").setEnum(set("f1","f2")).setExample("g").setExclusiveMaximum(true).setExclusiveMinimum(true)
+                               
.setExternalDocs(externalDocumentation("h")).setFormat("i").setItems(items("j")).setMaxItems(1).setMaxLength(2)
+                               
.setMaxProperties(3).setMaximum(4).setMinItems(5).setMinLength(6).setMinProperties(7).setMinimum(8)
+                               
.setMultipleOf(9).setPattern("k").setProperties(map("l",new 
SchemaInfo().setType("m"))).setReadOnly(true)
+                               
.setRequiredProperties("n").setTitle("o").setType("p").setUniqueItems(true).setXml(xml().setName("q")),
+                       
"additionalProperties{type},allOf,default,description,discriminator,enum,example,exclusiveMaximum,exclusiveMinimum,externalDocs{url},format,items{type},maxItems,maxLength,maxProperties,maximum,minItems,minLength,minProperties,minimum,multipleOf,pattern,properties{l{type}},readOnly,requiredProperties,title,type,uniqueItems,xml{name}",
+                       
"{a},[b1,b2],c,d,e,[f1,f2],g,true,true,{h},i,{j},1,2,3,4,5,6,7,8,9,k,{{m}},true,[n],o,p,true,{q}"
+               );
+
+               // Null cases
+               assertBean(
+                       
t.setAdditionalProperties((SchemaInfo)null).setAllOf((Collection<Object>)null).setDefault(null).setDescription(null)
+                               
.setDiscriminator(null).setEnum((Collection<Object>)null).setExample(null).setFormat(null)
+                               
.setPattern(null).setProperties((Map<String,SchemaInfo>)null).setRequiredProperties((Collection<String>)null)
+                               .setTitle(null).setType(null),
+                       
"additionalProperties,allOf,default,description,discriminator,enum,example,format,pattern,properties,requiredProperties,title,type",
+                       
"null,null,null,null,null,null,null,null,null,null,null,null,null"
+               );
+
+               // Empty collections
+               assertBean(
+                       t.setAllOf(set()).setProperties(map()),
+                       "allOf,properties",
+                       "[],{}"
+               );
+
+               // Other
+               assertBean(
+                       
t.setDefault(sb("a")).setExample(1).setMaximum(2f).setMinimum(3f).setMultipleOf(4f),
+                       "default,example,maximum,minimum,multipleOf", 
"a,1,2.0,3.0,4.0");
                assertJson(t.setAdditionalProperties(new 
SchemaInfo()).getAdditionalProperties(), "{}");
-               
assertNull(t.setAdditionalProperties((SchemaInfo)null).getAdditionalProperties());
-               assertEquals("foo", 
t.setDiscriminator("foo").getDiscriminator());
-               assertNull(t.setDiscriminator(null).getDiscriminator());
-               assertTrue(t.setReadOnly(true).getReadOnly());
-               assertJson(t.setXml(xml().setName("foo")).getXml(), 
"{name:'foo'}");
-               
assertJson(t.setExternalDocs(externalDocumentation("foo")).getExternalDocs(), 
"{url:'foo'}");
-               assertEquals("foo", t.setExample("foo").getExample());
-               assertEquals(123, t.setExample(123).getExample());
-               assertNull(t.setExample(null).getExample());
+
+               // addEnum and addAllOf
+               assertSet(t.addEnum("a","b").getEnum(), "a,b");
+               assertSet(t.addEnum("c").getEnum(), "a,b,c");
+               assertSet(t.addAllOf("d","e").getAllOf(), "d,e");
        }
 
        /**
         * Test method for {@link SchemaInfo#set(java.lang.String, 
java.lang.Object)}.
         */
-       @Test void b01_set() throws Exception {
+       @Test void b01_set() {
                var t = new SchemaInfo();
 
                t
-                       .set("default", "a")
-                       .set("enum", set("b"))
                        .set("additionalProperties", map("c",alist("c1")))
                        .set("allOf", set("d"))
+                       .set("default", "a")
                        .set("description", "e")
                        .set("discriminator", "f")
+                       .set("enum", set("b"))
                        .set("example", "g")
                        .set("exclusiveMaximum", true)
                        .set("exclusiveMinimum", true)
                        .set("externalDocs", externalDocumentation("h"))
                        .set("format", "i")
                        .set("items", items("j"))
-                       .set("maximum", 123f)
-                       .set("maxItems", 123)
-                       .set("maxLength", 123)
-                       .set("maxProperties", 123)
-                       .set("minimum", 123f)
-                       .set("minItems", 123)
-                       .set("minLength", 123)
-                       .set("minProperties", 123)
-                       .set("multipleOf", 123f)
+                       .set("maxItems", 2)
+                       .set("maxLength", 3)
+                       .set("maxProperties", 4)
+                       .set("maximum", 1f)
+                       .set("minItems", 6)
+                       .set("minLength", 7)
+                       .set("minProperties", 8)
+                       .set("minimum", 5f)
+                       .set("multipleOf", 9f)
                        .set("pattern", "k")
                        .set("properties", map("l",map("l1", 1)))
                        .set("readOnly", true)
+                       .set("$ref", "p")
                        .set("requiredProperties", set("x"))
                        .set("title", "m")
                        .set("type", "n")
                        .set("uniqueItems", true)
-                       .set("xml", xml().setName("o"))
-                       .set("$ref", "ref");
+                       .set("xml", xml().setName("o"));
 
-               assertJson(t, 
"{format:'i',title:'m',description:'e','default':'a',multipleOf:123.0,maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'k',maxItems:123,minItems:123,uniqueItems:true,maxProperties:123,minProperties:123,requiredProperties:['x'],'enum':['b'],type:'n',items:{type:'j'},allOf:['d'],properties:{l:{l1:1}},additionalProperties:{c:['c1']},discriminator:'f',readOnly:true,xml:{name:'o'},externalDocs:{url:'h'},example:'g','$r
 [...]
+               assertBean(t,
+                       
"additionalProperties{c},allOf,default,description,discriminator,enum,example,exclusiveMaximum,exclusiveMinimum,externalDocs{url},format,items{type},maxItems,maxLength,maxProperties,maximum,minItems,minLength,minProperties,minimum,multipleOf,pattern,properties{l{l1}},readOnly,ref,requiredProperties,title,type,uniqueItems,xml{name}",
+                       
"{[c1]},[d],a,e,f,[b],g,true,true,{h},i,{j},2,3,4,1.0,6,7,8,5.0,9.0,k,{{1}},true,p,[x],m,n,true,{o}");
 
                t
                        .set("default", "a")
@@ -142,15 +130,15 @@ class SchemaInfo_Test extends SimpleTestBase {
                        .set("externalDocs", "{url:'h'}")
                        .set("format", "i")
                        .set("items", "{type:'j'}")
-                       .set("maximum", "123.0")
-                       .set("maxItems", "123")
-                       .set("maxLength", "123")
-                       .set("maxProperties", "123")
-                       .set("minimum", "123.0")
-                       .set("minItems", "123")
-                       .set("minLength", "123")
-                       .set("minProperties", "123")
-                       .set("multipleOf", "123.0")
+                       .set("maximum", "1.0")
+                       .set("maxItems", "2")
+                       .set("maxLength", "3")
+                       .set("maxProperties", "4")
+                       .set("minimum", "5.0")
+                       .set("minItems", "6")
+                       .set("minLength", "7")
+                       .set("minProperties", "8")
+                       .set("multipleOf", "9.0")
                        .set("pattern", "k")
                        .set("properties", "{l:{l1:1}}")
                        .set("readOnly", "true")
@@ -159,89 +147,68 @@ class SchemaInfo_Test extends SimpleTestBase {
                        .set("type", "n")
                        .set("uniqueItems", "true")
                        .set("xml", "{name:'o'}")
-                       .set("$ref", "ref");
+                       .set("$ref", "p");
 
-               assertJson(t, 
"{format:'i',title:'m',description:'e','default':'a',multipleOf:123.0,maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'k',maxItems:123,minItems:123,uniqueItems:true,maxProperties:123,minProperties:123,requiredProperties:['x'],'enum':['b'],type:'n',items:{type:'j'},allOf:['d'],properties:{l:{l1:1}},additionalProperties:{c:['c1']},discriminator:'f',readOnly:true,xml:{name:'o'},externalDocs:{url:'h'},example:'g','$r
 [...]
+               assertBean(t,
+                       
"format,title,description,default,multipleOf,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,maxProperties,minProperties,requiredProperties,enum,type,items{type},allOf,properties{l{l1}},additionalProperties{c},discriminator,readOnly,xml{name},externalDocs{url},example,ref",
+                       
"i,m,e,a,9.0,1.0,true,5.0,true,3,7,k,2,6,true,4,8,[x],[b],n,{j},[d],{{1}},{[c1]},f,true,{o},{h},g,p");
 
                t
-                       .set("default", new StringBuilder("a"))
-                       .set("enum", new StringBuilder("['b']"))
-                       .set("additionalProperties", new 
StringBuilder("{c:['c1']}"))
-                       .set("allOf", new StringBuilder("['d']"))
-                       .set("description", new StringBuilder("e"))
-                       .set("discriminator", new StringBuilder("f"))
-                       .set("example", new StringBuilder("g"))
-                       .set("exclusiveMaximum", new StringBuilder("true"))
-                       .set("exclusiveMinimum", new StringBuilder("true"))
-                       .set("externalDocs", new StringBuilder("{url:'h'}"))
-                       .set("format", new StringBuilder("i"))
-                       .set("items", new StringBuilder("{type:'j'}"))
-                       .set("maximum", new StringBuilder("123.0"))
-                       .set("maxItems", new StringBuilder("123"))
-                       .set("maxLength", new StringBuilder("123"))
-                       .set("maxProperties", new StringBuilder("123"))
-                       .set("minimum", new StringBuilder("123.0"))
-                       .set("minItems", new StringBuilder("123"))
-                       .set("minLength", new StringBuilder("123"))
-                       .set("minProperties", new StringBuilder("123"))
-                       .set("multipleOf", new StringBuilder("123.0"))
-                       .set("pattern", new StringBuilder("k"))
-                       .set("properties", new StringBuilder("{l:{l1:1}}"))
-                       .set("readOnly", new StringBuilder("true"))
-                       .set("requiredProperties", new StringBuilder("['x']"))
-                       .set("title", new StringBuilder("m"))
-                       .set("type", new StringBuilder("n"))
-                       .set("uniqueItems", new StringBuilder("true"))
-                       .set("xml", new StringBuilder("{name:'o'}"))
-                       .set("$ref", new StringBuilder("ref"));
+                       .set("default", sb("a"))
+                       .set("enum", sb("['b']"))
+                       .set("additionalProperties", sb("{c:['c1']}"))
+                       .set("allOf", sb("['d']"))
+                       .set("description", sb("e"))
+                       .set("discriminator", sb("f"))
+                       .set("example", sb("g"))
+                       .set("exclusiveMaximum", sb("true"))
+                       .set("exclusiveMinimum", sb("true"))
+                       .set("externalDocs", sb("{url:'h'}"))
+                       .set("format", sb("i"))
+                       .set("items", sb("{type:'j'}"))
+                       .set("maximum", sb("1.0"))
+                       .set("maxItems", sb("2"))
+                       .set("maxLength", sb("3"))
+                       .set("maxProperties", sb("4"))
+                       .set("minimum", sb("5.0"))
+                       .set("minItems", sb("6"))
+                       .set("minLength", sb("7"))
+                       .set("minProperties", sb("8"))
+                       .set("multipleOf", sb("9.0"))
+                       .set("pattern", sb("k"))
+                       .set("properties", sb("{l:{l1:1}}"))
+                       .set("readOnly", sb("true"))
+                       .set("requiredProperties", sb("['x']"))
+                       .set("title", sb("m"))
+                       .set("type", sb("n"))
+                       .set("uniqueItems", sb("true"))
+                       .set("xml", sb("{name:'o'}"))
+                       .set("$ref", sb("p"));
 
-               assertJson(t, 
"{format:'i',title:'m',description:'e','default':'a',multipleOf:123.0,maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'k',maxItems:123,minItems:123,uniqueItems:true,maxProperties:123,minProperties:123,requiredProperties:['x'],'enum':['b'],type:'n',items:{type:'j'},allOf:['d'],properties:{l:{l1:1}},additionalProperties:{c:['c1']},discriminator:'f',readOnly:true,xml:{name:'o'},externalDocs:{url:'h'},example:'g','$r
 [...]
+               assertBean(t,
+                       
"format,title,description,default,multipleOf,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,maxProperties,minProperties,requiredProperties,enum,type,items{type},allOf,properties{l{l1}},additionalProperties{c},discriminator,readOnly,xml{name},externalDocs{url},example,ref",
+                       
"i,m,e,a,9.0,1.0,true,5.0,true,3,7,k,2,6,true,4,8,[x],[b],n,{j},[d],{{1}},{[c1]},f,true,{o},{h},g,p");
 
                assertMapped(t, (obj,prop) -> obj.get(prop, String.class),
                        
"default,enum,additionalProperties,allOf,description,discriminator,example,exclusiveMaximum,exclusiveMinimum,externalDocs,format,items,maximum,maxItems,maxLength,maxProperties,minimum,minItems,minLength,minProperties,multipleOf,pattern,properties,readOnly,requiredProperties,title,type,uniqueItems,xml,$ref",
-                       
"a,['b'],{c:['c1']},['d'],e,f,g,true,true,{url:'h'},i,{type:'j'},123.0,123,123,123,123.0,123,123,123,123.0,k,{l:{l1:1}},true,['x'],m,n,true,{name:'o'},ref");
+                       
"a,['b'],{c:['c1']},['d'],e,f,g,true,true,{url:'h'},i,{type:'j'},1.0,2,3,4,5.0,6,7,8,9.0,k,{l:{l1:1}},true,['x'],m,n,true,{name:'o'},p");
 
-               assertType(StringBuilder.class, t.get("default", Object.class));
-               assertType(Set.class, t.get("enum", Object.class));
-               assertType(SchemaInfo.class, t.get("additionalProperties", 
Object.class));
-               assertType(Set.class, t.get("allOf", Object.class));
-               assertType(String.class, t.get("description", Object.class));
-               assertType(String.class, t.get("discriminator", Object.class));
-               assertType(StringBuilder.class, t.get("example", Object.class));
-               assertType(Boolean.class, t.get("exclusiveMaximum", 
Object.class));
-               assertType(Boolean.class, t.get("exclusiveMinimum", 
Object.class));
-               assertType(ExternalDocumentation.class, t.get("externalDocs", 
Object.class));
-               assertType(String.class, t.get("format", Object.class));
-               assertType(Items.class, t.get("items", Object.class));
-               assertType(Float.class, t.get("maximum", Object.class));
-               assertType(Integer.class, t.get("maxItems", Object.class));
-               assertType(Integer.class, t.get("maxLength", Object.class));
-               assertType(Integer.class, t.get("maxProperties", Object.class));
-               assertType(Float.class, t.get("minimum", Object.class));
-               assertType(Integer.class, t.get("minItems", Object.class));
-               assertType(Integer.class, t.get("minLength", Object.class));
-               assertType(Integer.class, t.get("minProperties", Object.class));
-               assertType(Float.class, t.get("multipleOf", Object.class));
-               assertType(String.class, t.get("pattern", Object.class));
-               assertType(Map.class, t.get("properties", Object.class));
-               assertType(Boolean.class, t.get("readOnly", Object.class));
-               assertType(Set.class, t.get("requiredProperties", 
Object.class));
-               assertType(String.class, t.get("title", Object.class));
-               assertType(String.class, t.get("type", Object.class));
-               assertType(Boolean.class, t.get("uniqueItems", Object.class));
-               assertType(Xml.class, t.get("xml", Object.class));
-               assertType(String.class, t.get("$ref", Object.class));
+               assertMapped(t, (obj,prop) -> obj.get(prop, 
Object.class).getClass().getSimpleName(),
+                       
"default,enum,additionalProperties,allOf,description,discriminator,example,exclusiveMaximum,exclusiveMinimum,externalDocs,format,items,maximum,maxItems,maxLength,maxProperties,minimum,minItems,minLength,minProperties,multipleOf,pattern,properties,readOnly,requiredProperties,title,type,uniqueItems,xml,$ref",
+                       
"StringBuilder,LinkedHashSet,SchemaInfo,LinkedHashSet,String,String,StringBuilder,Boolean,Boolean,ExternalDocumentation,String,Items,Float,Integer,Integer,Integer,Float,Integer,Integer,Integer,Float,String,LinkedHashMap,Boolean,LinkedHashSet,String,String,Boolean,Xml,String");
 
                t.set("null", null).set(null, "null");
                assertNull(t.get("null", Object.class));
                assertNull(t.get(null, Object.class));
                assertNull(t.get("foo", Object.class));
+       }
 
-               var s = 
"{format:'i',title:'m',description:'e','default':'a',multipleOf:123.0,maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'k',maxItems:123,minItems:123,uniqueItems:true,maxProperties:123,minProperties:123,requiredProperties:['x'],'enum':['b'],type:'n',items:{type:'j'},allOf:['d'],properties:{l:{l1:1}},additionalProperties:{c:['c1']},discriminator:'f',readOnly:true,xml:{name:'o'},externalDocs:{url:'h'},example:'g','$ref':'ref'}";
+       @Test void b02_roundTripJson() {
+               var s = 
"{format:'i',title:'m',description:'e','default':'a',multipleOf:9.0,maximum:1.0,exclusiveMaximum:true,minimum:5.0,exclusiveMinimum:true,maxLength:3,minLength:7,pattern:'k',maxItems:2,minItems:6,uniqueItems:true,maxProperties:4,minProperties:8,requiredProperties:['x'],'enum':['b'],type:'n',items:{type:'j'},allOf:['d'],properties:{l:{l1:1}},additionalProperties:{c:['c1']},discriminator:'f',readOnly:true,xml:{name:'o'},externalDocs:{url:'h'},example:'g','$ref':'p'}";
                assertJson(JsonParser.DEFAULT.parse(s, SchemaInfo.class), s);
        }
 
-       @Test void b02_copy() {
+       @Test void b03_copy() {
                var t = new SchemaInfo();
 
                t = t.copy();
@@ -261,15 +228,15 @@ class SchemaInfo_Test extends SimpleTestBase {
                        .set("externalDocs", externalDocumentation("h"))
                        .set("format", "i")
                        .set("items", items("j"))
-                       .set("maximum", 123f)
-                       .set("maxItems", 123)
-                       .set("maxLength", 123)
-                       .set("maxProperties", 123)
-                       .set("minimum", 123f)
-                       .set("minItems", 123)
-                       .set("minLength", 123)
-                       .set("minProperties", 123)
-                       .set("multipleOf", 123f)
+                       .set("maximum", 1f)
+                       .set("maxItems", 2)
+                       .set("maxLength", 3)
+                       .set("maxProperties", 4)
+                       .set("minimum", 5f)
+                       .set("minItems", 6)
+                       .set("minLength", 7)
+                       .set("minProperties", 8)
+                       .set("multipleOf", 9f)
                        .set("pattern", "k")
                        .set("properties", map("l",map("l1", 1)))
                        .set("readOnly", true)
@@ -278,16 +245,18 @@ class SchemaInfo_Test extends SimpleTestBase {
                        .set("type", "n")
                        .set("uniqueItems", true)
                        .set("xml", xml().setName("o"))
-                       .set("$ref", "ref")
+                       .set("$ref", "p")
                        .copy();
 
-               assertJson(t, 
"{format:'i',title:'m',description:'e','default':'a',multipleOf:123.0,maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'k',maxItems:123,minItems:123,uniqueItems:true,maxProperties:123,minProperties:123,requiredProperties:['x'],'enum':['b'],type:'n',items:{type:'j'},allOf:['d'],properties:{l:{l1:1}},additionalProperties:{c:['c1']},discriminator:'f',readOnly:true,xml:{name:'o'},externalDocs:{url:'h'},example:'g','$r
 [...]
+               assertBean(t,
+                       
"format,title,description,default,multipleOf,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,maxProperties,minProperties,requiredProperties,enum,type,items{type},allOf,properties{l{l1}},additionalProperties{c},discriminator,readOnly,xml{name},externalDocs{url},example,ref",
+                       
"i,m,e,a,9.0,1.0,true,5.0,true,3,7,k,2,6,true,4,8,[x],[b],n,{j},[d],{{1}},{[c1]},f,true,{o},{h},g,p");
        }
 
-       @Test void b03_keySet() {
+       @Test void b04_keySet() {
                var t = new SchemaInfo();
 
-               assertJson(t.keySet(), "[]");
+               assertEmpty(t.keySet());
 
                t
                        .set("additionalProperties", map("c",alist("c1")))
@@ -302,29 +271,25 @@ class SchemaInfo_Test extends SimpleTestBase {
                        .set("externalDocs", externalDocumentation("h"))
                        .set("format", "i")
                        .set("items", items("j"))
-                       .set("maximum", 123f)
-                       .set("maxItems", 123)
-                       .set("maxLength", 123)
-                       .set("maxProperties", 123)
-                       .set("minimum", 123f)
-                       .set("minItems", 123)
-                       .set("minLength", 123)
-                       .set("minProperties", 123)
-                       .set("multipleOf", 123f)
+                       .set("maximum", 1f)
+                       .set("maxItems", 2)
+                       .set("maxLength", 3)
+                       .set("maxProperties", 4)
+                       .set("minimum", 5f)
+                       .set("minItems", 6)
+                       .set("minLength", 7)
+                       .set("minProperties", 8)
+                       .set("multipleOf", 9f)
                        .set("pattern", "k")
                        .set("properties", map("l",map("l1", 1)))
                        .set("readOnly", true)
-                       .set("$ref", "ref")
+                       .set("$ref", "p")
                        .set("requiredProperties", set("x"))
                        .set("title", "m")
                        .set("type", "n")
                        .set("uniqueItems", true)
                        .set("xml", xml().setName("o"));
 
-               assertJson(t.keySet(),
-                       
"['additionalProperties','allOf','default','description','discriminator','enum','example','exclusiveMaximum','exclusiveMinimum',"
-                       + 
"'externalDocs','format','items','maximum','maxItems','maxLength','maxProperties','minimum','minItems','minLength','minProperties',"
-                       + 
"'multipleOf','pattern','properties','readOnly','$ref','requiredProperties','title','type','uniqueItems','xml']"
-               );
+               assertSet(t.keySet(), 
"additionalProperties,allOf,default,description,discriminator,enum,example,exclusiveMaximum,exclusiveMinimum,externalDocs,format,items,maximum,maxItems,maxLength,maxProperties,minimum,minItems,minLength,minProperties,multipleOf,pattern,properties,readOnly,$ref,requiredProperties,title,type,uniqueItems,xml");
        }
 }
\ No newline at end of file
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/SecurityScheme_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/SecurityScheme_Test.java
index 5b2820a97..a23248c91 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/SecurityScheme_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/SecurityScheme_Test.java
@@ -33,7 +33,7 @@ class SecurityScheme_Test extends SimpleTestBase {
        @Test void a01_gettersAndSetters() {
                var t = new SecurityScheme();
 
-               // General
+               // Basic property setters
                assertBean(
                        
t.setType("a").setDescription("b").setName("c").setIn("d").setFlow("e")
                        
.setAuthorizationUrl("f").setTokenUrl("g").setScopes(map("h1","h2")),
@@ -41,22 +41,22 @@ class SecurityScheme_Test extends SimpleTestBase {
                        "a,b,c,d,e,f,g,{h1=h2}"
                );
 
-               // Edge cases for nulls and collections.
-               assertNull(t.setType(null).getType());
-               assertNull(t.setDescription(null).getDescription());
-               assertNull(t.setName(null).getName());
-               assertNull(t.setIn(null).getIn());
-               assertNull(t.setFlow(null).getFlow());
-               assertNull(t.setAuthorizationUrl(null).getAuthorizationUrl());
-               assertNull(t.setTokenUrl(null).getTokenUrl());
+               // Null values
+               assertBean(
+                       
t.setType(null).setDescription(null).setName(null).setIn(null).setFlow(null)
+                               
.setAuthorizationUrl(null).setTokenUrl(null).setScopes((Map<String,String>)null),
+                       
"type,description,name,in,flow,authorizationUrl,tokenUrl,scopes",
+                       "null,null,null,null,null,null,null,null"
+               );
+
+               // Other methods
                assertEmpty(t.setScopes(map()).getScopes());
-               assertNull(t.setScopes((Map<String,String>)null).getScopes());
        }
 
        /**
         * Test method for {@link SecurityScheme#set(java.lang.String, 
java.lang.Object)}.
         */
-       @Test void b01_set() throws Exception {
+       @Test void b01_set() {
                var t = new SecurityScheme();
 
                t
@@ -91,15 +91,15 @@ class SecurityScheme_Test extends SimpleTestBase {
                        "g,b,e,d,c,a,f,{foo=bar},ref");
 
                t
-                       .set("authorizationUrl", new StringBuilder("a"))
-                       .set("description", new StringBuilder("b"))
-                       .set("flow", new StringBuilder("c"))
-                       .set("in", new StringBuilder("d"))
-                       .set("name", new StringBuilder("e"))
-                       .set("scopes", new StringBuilder("{foo:'bar'}"))
-                       .set("tokenUrl", new StringBuilder("f"))
-                       .set("type", new StringBuilder("g"))
-                       .set("$ref", new StringBuilder("ref"));
+                       .set("authorizationUrl", sb("a"))
+                       .set("description", sb("b"))
+                       .set("flow", sb("c"))
+                       .set("in", sb("d"))
+                       .set("name", sb("e"))
+                       .set("scopes", sb("{foo:'bar'}"))
+                       .set("tokenUrl", sb("f"))
+                       .set("type", sb("g"))
+                       .set("$ref", sb("ref"));
 
                assertBean(t,
                        
"type,description,name,in,flow,authorizationUrl,tokenUrl,scopes,$ref",
@@ -109,26 +109,22 @@ class SecurityScheme_Test extends SimpleTestBase {
                        
"authorizationUrl,description,flow,in,name,scopes,tokenUrl,type,$ref",
                        "a,b,c,d,e,{foo:'bar'},f,g,ref");
 
-               assertType(String.class, t.get("authorizationUrl", 
Object.class));
-               assertType(String.class, t.get("description", Object.class));
-               assertType(String.class, t.get("flow", Object.class));
-               assertType(String.class, t.get("in", Object.class));
-               assertType(String.class, t.get("name", Object.class));
-               assertType(Map.class, t.get("scopes", Object.class));
-               assertType(String.class, t.get("tokenUrl", Object.class));
-               assertType(String.class, t.get("type", Object.class));
-               assertType(StringBuilder.class, t.get("$ref", Object.class));
+               assertMapped(t, (obj,prop) -> obj.get(prop, 
Object.class).getClass().getSimpleName(),
+                       
"authorizationUrl,description,flow,in,name,scopes,tokenUrl,type,$ref",
+                       
"String,String,String,String,String,LinkedHashMap,String,String,StringBuilder");
 
                t.set("null", null).set(null, "null");
                assertNull(t.get("null", Object.class));
                assertNull(t.get(null, Object.class));
                assertNull(t.get("foo", Object.class));
+       }
 
+       @Test void b02_roundTripJson() {
                var s = 
"{type:'g',description:'b',name:'e','in':'d',flow:'c',authorizationUrl:'a',tokenUrl:'f',scopes:{foo:'bar'},'$ref':'ref'}";
                assertJson(JsonParser.DEFAULT.parse(s, SecurityScheme.class), 
s);
        }
 
-       @Test void b02_copy() {
+       @Test void b03_copy() {
                var t = new SecurityScheme();
 
                t = t.copy();
@@ -152,7 +148,7 @@ class SecurityScheme_Test extends SimpleTestBase {
                        "g,b,e,d,c,a,f,{foo=bar},ref");
        }
 
-       @Test void b03_keySet() {
+       @Test void b04_keySet() {
                var t = new SecurityScheme();
 
                assertEmpty(t.keySet());
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Swagger_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Swagger_Test.java
index cc2ef7b50..eb3d78433 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Swagger_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Swagger_Test.java
@@ -35,56 +35,72 @@ class Swagger_Test extends SimpleTestBase {
         */
        @Test void a01_gettersAndSetters() {
                var t = new Swagger();
-               assertBean(t.setSwagger("foo"), "swagger", "foo");
-               assertNull(t.setSwagger(null).getSwagger());
-               assertJson(t.setInfo(info("foo", "bar")).getInfo(), 
"{title:'foo',version:'bar'}");
-               assertBean(t.setHost("foo"), "host", "foo");
-               assertNull(t.setHost(null).getHost());
-               assertBean(t.setBasePath("foo"), "basePath", "foo");
-               assertNull(t.setBasePath(null).getBasePath());
-               assertJson(t.setSchemes(set("foo","bar")).getSchemes(), 
"['foo','bar']");
-               assertJson(t.setSchemes(set()).getSchemes(), "[]");
-               assertNull(t.setSchemes((Collection<String>)null).getSchemes());
-               
assertJson(t.setConsumes(set(MediaType.of("text/foo"))).getConsumes(), 
"['text/foo']");
-               assertJson(t.setConsumes(set()).getConsumes(), "[]");
-               
assertNull(t.setConsumes((Collection<MediaType>)null).getConsumes());
-               
assertJson(t.setProduces(set(MediaType.of("text/foo"))).getProduces(), 
"['text/foo']");
-               assertJson(t.setProduces(set()).getProduces(), "[]");
-               
assertNull(t.setProduces((Collection<MediaType>)null).getProduces());
-               assertJson(t.setPaths(map("foo", new 
OperationMap().append("bar",operation().setSummary("baz")))).getPaths(), 
"{foo:{bar:{summary:'baz'}}}");
-               assertNull(t.setPaths(map()).getPaths());
-               
assertNull(t.setPaths((Map<String,OperationMap>)null).getPaths());
-               assertJson(t.setPaths(null).addPath("a", "a1", 
operation().setDescription("a2")).addPath("b", null, null).getPaths(), 
"{a:{a1:{description:'a2'}},b:{null:null}}");
-               
assertJson(t.setDefinitions(map("foo",JsonMap.of("type","bar"))).getDefinitions(),
 "{foo:{type:'bar'}}");
-               assertJson(t.setDefinitions(map()).getDefinitions(), "{}");
-               
assertNull(t.setDefinitions((Map<String,JsonMap>)null).getDefinitions());
-               assertJson(t.setDefinitions(null).addDefinition("a", 
JsonMap.of("type","a1")).addDefinition("b", (JsonMap)null).addDefinition(null, 
JsonMap.of("type", "c1")).getDefinitions(), 
"{a:{type:'a1'},b:null,null:{type:'c1'}}");
-               
assertJson(t.setParameters(map("foo",parameterInfo().setName("bar"))).getParameters(),
 "{foo:{name:'bar'}}");
-               assertJson(t.setParameters(map()).getParameters(), "{}");
-               
assertNull(t.setParameters((Map<String,ParameterInfo>)null).getParameters());
-               assertJson(t.setParameters(null).addParameter("a", 
parameterInfo().setIn("a1")).addParameter("b", null).addParameter(null, 
parameterInfo().setIn("c1")).getParameters(), 
"{a:{'in':'a1'},b:null,null:{'in':'c1'}}");
-               
assertJson(t.setResponses(map("123",responseInfo("bar"))).getResponses(), 
"{'123':{description:'bar'}}");
-               assertJson(t.setResponses(map()).getResponses(), "{}");
-               
assertNull(t.setResponses((Map<String,ResponseInfo>)null).getResponses());
-               assertJson(t.setResponses(null).addResponse("a", 
responseInfo("a1")).addResponse(null, responseInfo("b1")).addResponse("c", 
null).getResponses(), "{a:{description:'a1'},null:{description:'b1'},c:null}");
-               
assertJson(t.setSecurityDefinitions(map("foo",securityScheme("bar"))).getSecurityDefinitions(),
 "{foo:{type:'bar'}}");
-               
assertJson(t.setSecurityDefinitions(map()).getSecurityDefinitions(), "{}");
-               
assertNull(t.setSecurityDefinitions((Map<String,SecurityScheme>)null).getSecurityDefinitions());
-               
assertJson(t.setSecurityDefinitions(null).addSecurityDefinition("a", 
securityScheme("a1")).addSecurityDefinition("b", 
null).addSecurityDefinition(null, 
securityScheme("c1")).getSecurityDefinitions(), 
"{a:{type:'a1'},b:null,null:{type:'c1'}}");
-               
assertJson(t.setSecurity(set(map("foo",alist("bar")))).getSecurity(), 
"[{foo:['bar']}]");
-               assertJson(t.setSecurity(set()).getSecurity(), "[]");
-               assertNull(t.setSecurity((Collection<Map<String, 
List<String>>>)null).getSecurity());
-               assertJson(t.setSecurity(null).addSecurity("a", "a1", 
"a2").addSecurity("b", (String)null).addSecurity(null, "d1", 
"d2").getSecurity(), "[{a:['a1','a2']},{b:[null]},{null:['d1','d2']}]");
-               assertJson(t.setTags(set(tag("foo"))).getTags(), 
"[{name:'foo'}]");
-               assertJson(t.setTags(set()).getTags(), "[]");
-               assertNull(t.setTags((Collection<Tag>)null).getTags());
-               
assertJson(t.setExternalDocs(externalDocumentation("foo")).getExternalDocs(), 
"{url:'foo'}");
+
+               // Basic property setters
+               assertBean(
+                       t.setBasePath("a").setHost("b").setSwagger("c"),
+                       "basePath,host,swagger",
+                       "a,b,c"
+               );
+
+               // Complex objects
+               assertBean(
+                       t.setInfo(info("a", 
"b")).setExternalDocs(externalDocumentation("c"))
+                               
.setSchemes(set("d","e")).setConsumes(set(MediaType.of("text/f")))
+                               .setProduces(set(MediaType.of("text/g")))
+                               .setPaths(map("h", new 
OperationMap().append("i",operation().setSummary("j"))))
+                               .setDefinitions(map("k",JsonMap.of("type","l")))
+                               
.setParameters(map("m",parameterInfo().setName("n")))
+                               .setResponses(map("1",responseInfo("o")))
+                               
.setSecurityDefinitions(map("p",securityScheme("q")))
+                               .setSecurity(set(map("r",alist("s"))))
+                               .setTags(set(tag("t"))),
+                       
"consumes,definitions{k{type}},externalDocs{url},info{title,version},parameters{m{name}},paths{h{i{summary}}},produces,responses{1{description}},schemes,security,securityDefinitions{p{type}},tags{#{name}}",
+                       
"[text/f],{{l}},{c},{a,b},{{n}},{{{j}}},[text/g],{{o}},[d,e],[{r=[s]}],{{q}},{[{t}]}"
+               );
+
+               // Null values
+               assertBean(
+                       
t.setSwagger(null).setHost(null).setBasePath(null).setSchemes((Collection<String>)null)
+                               
.setConsumes((Collection<MediaType>)null).setProduces((Collection<MediaType>)null)
+                               
.setPaths((Map<String,OperationMap>)null).setDefinitions((Map<String,JsonMap>)null)
+                               
.setParameters((Map<String,ParameterInfo>)null).setResponses((Map<String,ResponseInfo>)null)
+                               
.setSecurityDefinitions((Map<String,SecurityScheme>)null).setSecurity((Collection<Map<String,
 List<String>>>)null)
+                               .setTags((Collection<Tag>)null),
+                       
"basePath,consumes,definitions,host,parameters,paths,produces,responses,schemes,security,securityDefinitions,swagger,tags",
+                       
"null,null,null,null,null,null,null,null,null,null,null,null,null"
+               );
+
+               // Other methods - empty collections/maps
+               assertBean(
+                       
t.setSchemes(set()).setConsumes(set()).setProduces(set()).setDefinitions(map())
+                               
.setParameters(map()).setResponses(map()).setSecurityDefinitions(map())
+                               .setSecurity(set()).setTags(set()),
+                       
"consumes,definitions,parameters,produces,responses,schemes,security,securityDefinitions,tags",
+                       "[],{},{},[],{},[],[],{},[]"
+               );
+
+               assertNull(t.setPaths(map()).getPaths());  // BUG?
+
+               // addX methods.
+               assertBean(t.setPaths(null).addPath("a", "a1", 
operation().setDescription("a2")).addPath("b", null, null),
+                       "paths", 
"{a={a1={\"description\":\"a2\"}},b={null=null}}");
+               assertBean(t.setDefinitions(null).addDefinition("a", 
JsonMap.of("type","a1")).addDefinition("b", (JsonMap)null).addDefinition(null, 
JsonMap.of("type", "c1")),
+                       "definitions", "{a={type=a1},b=null,null={type=c1}}");
+               assertBean(t.setParameters(null).addParameter("a", 
parameterInfo().setIn("a1")).addParameter("b", null).addParameter(null, 
parameterInfo().setIn("c1")),
+                       "parameters", 
"{a={\"in\":\"a1\"},b=null,null={\"in\":\"c1\"}}");
+               assertBean(t.setResponses(null).addResponse("a", 
responseInfo("a1")).addResponse(null, responseInfo("b1")).addResponse("c", 
null),
+                       "responses", 
"{a={\"description\":\"a1\"},null={\"description\":\"b1\"},c=null}");
+               
assertBean(t.setSecurityDefinitions(null).addSecurityDefinition("a", 
securityScheme("a1")).addSecurityDefinition("b", 
null).addSecurityDefinition(null, securityScheme("c1")),
+                       "securityDefinitions", 
"{a={\"type\":\"a1\"},b=null,null={\"type\":\"c1\"}}");
+               assertBean(t.setSecurity(null).addSecurity("a", "a1", 
"a2").addSecurity("b", (String)null).addSecurity(null, "d1", "d2"),
+                       "security", "[{a=[a1,a2]},{b=[null]},{null=[d1,d2]}]");
        }
 
        /**
         * Test method for {@link Swagger#set(java.lang.String, 
java.lang.Object)}.
         */
-       @Test void b01_set() throws Exception {
+       @Test void b01_set() {
                var t = new Swagger();
 
                t
@@ -103,9 +119,11 @@ class Swagger_Test extends SimpleTestBase {
                        .set("securityDefinitions", 
map("m",securityScheme("m1")))
                        .set("swagger", "n")
                        .set("tags", set(tag("o")))
-                       .set("$ref", "ref");
+                       .set("$ref", "p");
 
-               assertJson(t, 
"{swagger:'n',info:{title:'f1',version:'f2'},tags:[{name:'o'}],externalDocs:{url:'d'},basePath:'a',schemes:['k1'],consumes:['text/b'],produces:['text/i'],paths:{h:{h1:{operationId:'h2'}}},definitions:{c:{type:'c1'}},parameters:{g:{'in':'g1',name:'g2'}},responses:{j:{description:'j1'}},securityDefinitions:{m:{type:'m1'}},security:[{l1:['l2']}],'$ref':'ref'}");
+               assertBean(t,
+                       
"basePath,consumes,definitions{c{type}},externalDocs{url},host,info{title,version},parameters{g{in,name}},paths{h{h1{operationId}}},produces,$ref,responses{j{description}},schemes,security,securityDefinitions{m{type}},swagger,tags{#{name}}",
+                       
"a,[text/b],{{c1}},{d},e,{f1,f2},{{g1,g2}},{{{h2}}},[text/i],p,{{j1}},[k1],[{l1=[l2]}],{{m1}},n,{[{o}]}");
 
                t
                        .set("basePath", "a")
@@ -125,66 +143,55 @@ class Swagger_Test extends SimpleTestBase {
                        .set("tags", "[{name:'o'}]")
                        .set("$ref", "ref");
 
-               assertJson(t, 
"{swagger:'n',info:{title:'f1',version:'f2'},tags:[{name:'o'}],externalDocs:{url:'d'},basePath:'a',schemes:['k1'],consumes:['text/b'],produces:['text/i'],paths:{h:{h1:{operationId:'h2'}}},definitions:{c:{type:'c1'}},parameters:{g:{'in':'g1',name:'g2'}},responses:{j:{description:'j1'}},securityDefinitions:{m:{type:'m1'}},security:[{l1:['l2']}],'$ref':'ref'}");
+               assertBean(t,
+                       
"swagger,info{title,version},tags{#{name}},externalDocs{url},basePath,schemes,consumes,produces,paths{h{h1{operationId}}},definitions{c{type}},parameters{g{in,name}},responses{j{description}},securityDefinitions{m{type}},security,$ref",
+                       
"n,{f1,f2},{[{o}]},{d},a,[k1],[text/b],[text/i],{{{h2}}},{{c1}},{{g1,g2}},{{j1}},{{m1}},[{l1=[l2]}],ref");
 
                t
-                       .set("basePath", new StringBuilder("a"))
-                       .set("consumes", new StringBuilder("['text/b']"))
-                       .set("definitions", new 
StringBuilder("{c:{type:'c1'}}"))
-                       .set("externalDocs", new StringBuilder("{url:'d'}"))
-                       .set("host", new StringBuilder("e"))
-                       .set("info", new 
StringBuilder("{title:'f1',version:'f2'}"))
-                       .set("parameters", new 
StringBuilder("{g:{'in':'g1',name:'g2'}}"))
-                       .set("paths", new 
StringBuilder("{h:{h1:{operationId:'h2'}}}"))
-                       .set("produces", new StringBuilder("['text/i']"))
-                       .set("responses", new 
StringBuilder("{j:{description:'j1'}}"))
-                       .set("schemes", new StringBuilder("['k1']"))
-                       .set("security", new StringBuilder("[{l1:['l2']}]"))
-                       .set("securityDefinitions", new 
StringBuilder("{m:{type:'m1'}}"))
-                       .set("swagger", new StringBuilder("n"))
-                       .set("tags", new StringBuilder("[{name:'o'}]"))
-                       .set("$ref", new StringBuilder("ref"));
-
-               assertJson(t, 
"{swagger:'n',info:{title:'f1',version:'f2'},tags:[{name:'o'}],externalDocs:{url:'d'},basePath:'a',schemes:['k1'],consumes:['text/b'],produces:['text/i'],paths:{h:{h1:{operationId:'h2'}}},definitions:{c:{type:'c1'}},parameters:{g:{'in':'g1',name:'g2'}},responses:{j:{description:'j1'}},securityDefinitions:{m:{type:'m1'}},security:[{l1:['l2']}],'$ref':'ref'}");
-
-               assertMapped(t, (obj,prop) -> obj.get(prop, String.class), 
-                       
"basePath,consumes,definitions,externalDocs,host,info,parameters,paths,produces,responses,schemes,security,securityDefinitions,swagger,tags,$ref",
 
+                       .set("basePath", sb("a"))
+                       .set("consumes", sb("['text/b']"))
+                       .set("definitions", sb("{c:{type:'c1'}}"))
+                       .set("externalDocs", sb("{url:'d'}"))
+                       .set("host", sb("e"))
+                       .set("info", sb("{title:'f1',version:'f2'}"))
+                       .set("parameters", sb("{g:{'in':'g1',name:'g2'}}"))
+                       .set("paths", sb("{h:{h1:{operationId:'h2'}}}"))
+                       .set("produces", sb("['text/i']"))
+                       .set("responses", sb("{j:{description:'j1'}}"))
+                       .set("schemes", sb("['k1']"))
+                       .set("security", sb("[{l1:['l2']}]"))
+                       .set("securityDefinitions", sb("{m:{type:'m1'}}"))
+                       .set("swagger", sb("n"))
+                       .set("tags", sb("[{name:'o'}]"))
+                       .set("$ref", sb("ref"));
+
+               assertBean(t,
+                       
"swagger,info{title,version},tags{#{name}},externalDocs{url},basePath,schemes,consumes,produces,paths{h{h1{operationId}}},definitions{c{type}},parameters{g{in,name}},responses{j{description}},securityDefinitions{m{type}},security,$ref",
+                       
"n,{f1,f2},{[{o}]},{d},a,[k1],[text/b],[text/i],{{{h2}}},{{c1}},{{g1,g2}},{{j1}},{{m1}},[{l1=[l2]}],ref");
+
+               assertMapped(t, (obj,prop) -> obj.get(prop, String.class),
+                       
"basePath,consumes,definitions,externalDocs,host,info,parameters,paths,produces,responses,schemes,security,securityDefinitions,swagger,tags,$ref",
                        
"a,['text/b'],{c:{type:'c1'}},{url:'d'},e,{title:'f1',version:'f2'},{g:{'in':'g1',name:'g2'}},{h:{h1:{operationId:'h2'}}},['text/i'],{j:{description:'j1'}},['k1'],[{l1:['l2']}],{m:{type:'m1'}},n,[{name:'o'}],ref");
 
-               assertType(String.class, t.get("basePath", Object.class));
-               assertType(Set.class, t.get("consumes", Object.class));
-               assertType(MediaType.class, t.get("consumes", 
List.class).get(0));
-               assertType(Map.class, t.get("definitions", Object.class));
-               assertType(JsonMap.class, t.get("definitions", 
Map.class).values().iterator().next());
-               assertType(ExternalDocumentation.class, t.get("externalDocs", 
Object.class));
-               assertType(String.class, t.get("host", Object.class));
-               assertType(Info.class, t.get("info", Object.class));
-               assertType(Map.class, t.get("parameters", Object.class));
-               assertType(ParameterInfo.class, t.get("parameters", 
Map.class).values().iterator().next());
-               assertType(Map.class, t.get("paths", Object.class));
-               assertType(Set.class, t.get("produces", Object.class));
-               assertType(MediaType.class, t.get("consumes", 
List.class).get(0));
-               assertType(Map.class, t.get("responses", Object.class));
-               assertType(ResponseInfo.class, t.get("responses", 
Map.class).values().iterator().next());
-               assertType(Set.class, t.get("schemes", Object.class));
-               assertType(List.class, t.get("security", Object.class));
-               assertType(Map.class, t.get("securityDefinitions", 
Object.class));
-               assertType(SecurityScheme.class, t.get("securityDefinitions", 
Map.class).values().iterator().next());
-               assertType(String.class, t.get("swagger", Object.class));
-               assertType(Set.class, t.get("tags", Object.class));
-               assertType(Tag.class, t.get("tags", List.class).get(0));
-               assertType(StringBuilder.class, t.get("$ref", Object.class));
+               assertMapped(t, (obj,prop) -> obj.get(prop, 
Object.class).getClass().getSimpleName(),
+                       
"basePath,consumes,definitions,externalDocs,host,info,parameters,paths,produces,responses,schemes,security,securityDefinitions,swagger,tags,$ref",
+                       
"String,LinkedHashSet,LinkedHashMap,ExternalDocumentation,String,Info,LinkedHashMap,TreeMap,LinkedHashSet,LinkedHashMap,LinkedHashSet,ArrayList,LinkedHashMap,String,LinkedHashSet,StringBuilder");
+
+               assertMapped(t, (o,k) -> o.get(k, 
List.class).get(0).getClass().getSimpleName(), "consumes,tags", 
"MediaType,Tag");
+               assertMapped(t, (o,k) -> o.get(k, 
Map.class).values().iterator().next().getClass().getSimpleName(), 
"definitions,parameters,responses,securityDefinitions", 
"JsonMap,ParameterInfo,ResponseInfo,SecurityScheme");
 
                t.set("null", null).set(null, "null");
                assertNull(t.get("null", Object.class));
                assertNull(t.get(null, Object.class));
                assertNull(t.get("foo", Object.class));
+       }
 
+       @Test void b02_roundTripJson() {
                var s = 
"{swagger:'n',info:{title:'f1',version:'f2'},tags:[{name:'o'}],externalDocs:{url:'d'},basePath:'a',schemes:['k1'],consumes:['text/b'],produces:['text/i'],paths:{h:{h1:{operationId:'h2'}}},definitions:{c:{type:'c1'}},parameters:{g:{'in':'g1',name:'g2'}},responses:{j:{description:'j1'}},securityDefinitions:{m:{type:'m1'}},security:[{l1:['l2']}],'$ref':'ref'}";
                assertJson(JsonParser.DEFAULT.parse(s, Swagger.class), s);
        }
 
-       @Test void b02_copy() {
+       @Test void b03_copy() {
                var t = new Swagger();
 
                t = t.copy();
@@ -207,13 +214,15 @@ class Swagger_Test extends SimpleTestBase {
                        .set("securityDefinitions", 
map("m",securityScheme("m1")))
                        .set("swagger", "n")
                        .set("tags", set(tag("o")))
-                       .set("$ref", "ref")
+                       .set("$ref", "p")
                        .copy();
 
-               assertJson(t, 
"{swagger:'n',info:{title:'f1',version:'f2'},tags:[{name:'o'}],externalDocs:{url:'d'},basePath:'a',schemes:['k1'],consumes:['text/b'],produces:['text/i'],paths:{h:{h1:{operationId:'h2'}}},definitions:{c:{type:'c1'}},parameters:{g:{'in':'g1',name:'g2'}},responses:{j:{description:'j1'}},securityDefinitions:{m:{type:'m1'}},security:[{l1:['l2']}],'$ref':'ref'}");
+               assertBean(t,
+                       
"swagger,info{title,version},tags{#{name}},externalDocs{url},basePath,schemes,consumes,produces,paths{h{h1{operationId}}},definitions{c{type}},parameters{g{in,name}},responses{j{description}},securityDefinitions{m{type}},security,$ref",
+                       
"n,{f1,f2},{[{o}]},{d},a,[k1],[text/b],[text/i],{{{h2}}},{{c1}},{{g1,g2}},{{j1}},{{m1}},[{l1=[l2]}],p");
        }
 
-       @Test void b03_keySet() {
+       @Test void b04_keySet() {
                var t = new Swagger();
 
                assertJson(t.keySet(), "['swagger']");
@@ -234,11 +243,8 @@ class Swagger_Test extends SimpleTestBase {
                        .set("securityDefinitions", 
map("m",securityScheme("m1")))
                        .set("swagger", "n")
                        .set("tags", set(tag("o")))
-                       .set("$ref", "ref");
+                       .set("$ref", "p");
 
-               assertJson(t.keySet(),
-                       
"['basePath','consumes','definitions','externalDocs','host','info','parameters','paths','produces','responses',"
-                       + 
"'schemes','security','securityDefinitions','swagger','tags','$ref']"
-               );
+               assertSet(t.keySet(), 
"basePath,consumes,definitions,externalDocs,host,info,parameters,paths,produces,responses,schemes,security,securityDefinitions,swagger,tags,$ref");
        }
 }
\ No newline at end of file
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Tag_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Tag_Test.java
index 17a1abd04..6cf07b1e5 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Tag_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Tag_Test.java
@@ -17,7 +17,6 @@ import static org.apache.juneau.bean.swagger.SwaggerBuilder.*;
 import static org.junit.jupiter.api.Assertions.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.bean.swagger.*;
 import org.apache.juneau.bean.swagger.Tag;
 import org.apache.juneau.json.*;
 import org.junit.jupiter.api.*;
@@ -33,22 +32,25 @@ class Tag_Test extends SimpleTestBase {
        @Test void a01_gettersAndSetters() {
                var t = new Tag();
 
-               // General
+               // Basic property setters
                assertBean(
                        
t.setName("a").setDescription("b").setExternalDocs(externalDocumentation("c")),
                        "name,description,externalDocs{url}",
                        "a,b,{c}"
                );
 
-               // Edge cases for nulls.
-               assertNull(t.setName(null).getName());
-               assertNull(t.setDescription(null).getDescription());
+               // Null values
+               assertBean(
+                       t.setName(null).setDescription(null),
+                       "name,description",
+                       "null,null"
+               );
        }
 
        /**
         * Test method for {@link Tag#set(java.lang.String, java.lang.Object)}.
         */
-       @Test void b01_set() throws Exception {
+       @Test void b01_set() {
                var t = new Tag();
 
                t
@@ -73,10 +75,10 @@ class Tag_Test extends SimpleTestBase {
                        "c,a,{b},ref");
 
                t
-                       .set("description", new StringBuilder("a"))
-                       .set("externalDocs", new StringBuilder("{url:'b'}"))
-                       .set("name", new StringBuilder("c"))
-                       .set("$ref", new StringBuilder("ref"));
+                       .set("description", sb("a"))
+                       .set("externalDocs", sb("{url:'b'}"))
+                       .set("name", sb("c"))
+                       .set("$ref", sb("ref"));
 
                assertBean(t,
                        "name,description,externalDocs{url},$ref",
@@ -86,21 +88,22 @@ class Tag_Test extends SimpleTestBase {
                        "description,externalDocs,name,$ref",
                        "a,{url:'b'},c,ref");
 
-               assertType(String.class, t.get("description", Object.class));
-               assertType(ExternalDocumentation.class, t.get("externalDocs", 
Object.class));
-               assertType(String.class, t.get("name", Object.class));
-               assertType(StringBuilder.class, t.get("$ref", Object.class));
+               assertMapped(t, (obj,prop) -> obj.get(prop, 
Object.class).getClass().getSimpleName(),
+                       "description,externalDocs,name,$ref",
+                       "String,ExternalDocumentation,String,StringBuilder");
 
                t.set("null", null).set(null, "null");
                assertNull(t.get("null", Object.class));
                assertNull(t.get(null, Object.class));
                assertNull(t.get("foo", Object.class));
+       }
 
+       @Test void b02_roundTripJson() {
                var s = 
"{name:'c',description:'a',externalDocs:{url:'b'},'$ref':'ref'}";
                assertJson(JsonParser.DEFAULT.parse(s, Tag.class), s);
        }
 
-       @Test void b02_copy() {
+       @Test void b03_copy() {
                var t = new Tag();
 
                t = t.copy();
@@ -119,7 +122,7 @@ class Tag_Test extends SimpleTestBase {
                        "c,a,{b},ref");
        }
 
-       @Test void b03_keySet() {
+       @Test void b04_keySet() {
                var t = new Tag();
 
                assertEmpty(t.keySet());
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Xml_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Xml_Test.java
index 83ebea404..c6f88119e 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Xml_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Xml_Test.java
@@ -31,23 +31,25 @@ class Xml_Test extends SimpleTestBase {
        @Test void a01_gettersAndSetters() {
                var t = new Xml();
 
-               // General
+               // Basic property setters
                assertBean(
                        
t.setName("a").setNamespace("b").setPrefix("c").setAttribute(true).setWrapped(true),
                        "name,namespace,prefix,attribute,wrapped",
                        "a,b,c,true,true"
                );
 
-               // Edge cases for nulls.
-               assertNull(t.setName(null).getName());
-               assertNull(t.setNamespace(null).getNamespace());
-               assertNull(t.setPrefix(null).getPrefix());
+               // Null values
+               assertBean(
+                       t.setName(null).setNamespace(null).setPrefix(null),
+                       "name,namespace,prefix",
+                       "null,null,null"
+               );
        }
 
        /**
         * Test method for {@link Xml#set(java.lang.String, java.lang.Object)}.
         */
-       @Test void b01_set() throws Exception {
+       @Test void b01_set() {
                var t = new Xml();
 
                t
@@ -56,12 +58,12 @@ class Xml_Test extends SimpleTestBase {
                        .set("namespace", "b")
                        .set("prefix", "c")
                        .set("wrapped", true)
-                       .set("$ref", "ref");
+                       .set("$ref", "d");
 
                // Comprehensive object state validation
                assertBean(t,
                        "name,namespace,prefix,attribute,wrapped,$ref",
-                       "a,b,c,true,true,ref");
+                       "a,b,c,true,true,d");
 
                t
                        .set("attribute", "true")
@@ -69,45 +71,44 @@ class Xml_Test extends SimpleTestBase {
                        .set("namespace", "b")
                        .set("prefix", "c")
                        .set("wrapped", "true")
-                       .set("$ref", "ref");
+                       .set("$ref", "d");
 
                assertBean(t,
                        "name,namespace,prefix,attribute,wrapped,$ref",
-                       "a,b,c,true,true,ref");
+                       "a,b,c,true,true,d");
 
                t
-                       .set("attribute", new StringBuilder("true"))
-                       .set("name", new StringBuilder("a"))
-                       .set("namespace", new StringBuilder("b"))
-                       .set("prefix", new StringBuilder("c"))
-                       .set("wrapped", new StringBuilder("true"))
-                       .set("$ref", new StringBuilder("ref"));
+                       .set("attribute", sb("true"))
+                       .set("name", sb("a"))
+                       .set("namespace", sb("b"))
+                       .set("prefix", sb("c"))
+                       .set("wrapped", sb("true"))
+                       .set("$ref", sb("d"));
 
                assertBean(t,
                        "name,namespace,prefix,attribute,wrapped,$ref",
-                       "a,b,c,true,true,ref");
+                       "a,b,c,true,true,d");
 
                assertMapped(t, (obj,prop) -> obj.get(prop, String.class),
                        "attribute,name,namespace,prefix,wrapped,$ref",
-                       "true,a,b,c,true,ref");
+                       "true,a,b,c,true,d");
 
-               assertType(Boolean.class, t.get("attribute", Object.class));
-               assertType(String.class, t.get("name", Object.class));
-               assertType(String.class, t.get("namespace", Object.class));
-               assertType(String.class, t.get("prefix", Object.class));
-               assertType(Boolean.class, t.get("wrapped", Object.class));
-               assertType(StringBuilder.class, t.get("$ref", Object.class));
+               assertMapped(t, (obj,prop) -> obj.get(prop, 
Object.class).getClass().getSimpleName(),
+                       "attribute,name,namespace,prefix,wrapped,$ref",
+                       "Boolean,String,String,String,Boolean,StringBuilder");
 
                t.set("null", null).set(null, "null");
                assertNull(t.get("null", Object.class));
                assertNull(t.get(null, Object.class));
                assertNull(t.get("foo", Object.class));
+       }
 
-               var s = 
"{name:'a',namespace:'b',prefix:'c',attribute:true,wrapped:true,'$ref':'ref'}";
+       @Test void b02_roundTripJson() {
+               var s = 
"{name:'a',namespace:'b',prefix:'c',attribute:true,wrapped:true,'$ref':'d'}";
                assertJson(JsonParser.DEFAULT.parse(s, Xml.class), s);
        }
 
-       @Test void b02_copy() {
+       @Test void b03_copy() {
                var t = new Xml();
 
                t = t.copy();
@@ -120,15 +121,15 @@ class Xml_Test extends SimpleTestBase {
                        .set("namespace", "b")
                        .set("prefix", "c")
                        .set("wrapped", true)
-                       .set("$ref", "ref")
+                       .set("$ref", "d")
                        .copy();
 
                assertBean(t,
                        "name,namespace,prefix,attribute,wrapped,$ref",
-                       "a,b,c,true,true,ref");
+                       "a,b,c,true,true,d");
        }
 
-       @Test void b03_keySet() {
+       @Test void b04_keySet() {
                var t = new Xml();
 
                assertEmpty(t.keySet());
@@ -139,7 +140,7 @@ class Xml_Test extends SimpleTestBase {
                        .set("namespace", "b")
                        .set("prefix", "c")
                        .set("wrapped", true)
-                       .set("$ref", "ref");
+                       .set("$ref", "d");
 
                assertSet(t.keySet(), 
"attribute,name,namespace,prefix,wrapped,$ref");
        }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/annotation/FormDataAnnotation_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/annotation/FormDataAnnotation_Test.java
index 00d63612b..2f9487e69 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/annotation/FormDataAnnotation_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/annotation/FormDataAnnotation_Test.java
@@ -52,18 +52,10 @@ class FormDataAnnotation_Test extends SimpleTestBase {
                .build();
 
        @Test void a01_basic() {
-               assertJsonMatches(a1, ""
-                       + "{"
-                               + "def:'def',"
-                               + "description:['description'],"
-                               + "name:'name',"
-                               + "on:['on'],"
-                               + 
"onClass:['org.apache.juneau.http.annotation.FormDataAnnotation_Test$X1'],"
-                               + 
"parser:'org.apache.juneau.oapi.OpenApiParser',"
-                               + "schema:{*},"
-                               + 
"serializer:'org.apache.juneau.oapi.OpenApiSerializer',"
-                               + "value:'value'"
-                       + "}"
+               assertBean(
+                       a1,
+                       
"def,description,name,on,onClass{#{simpleName}},parser{simpleName},schema{description},serializer{simpleName},value",
+                       
"def,[description],name,[on],{[{X1}]},{OpenApiParser},{[]},{OpenApiSerializer},value"
                );
        }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/annotation/HeaderAnnotation_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/annotation/HeaderAnnotation_Test.java
index 752a251ca..55662831e 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/annotation/HeaderAnnotation_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/annotation/HeaderAnnotation_Test.java
@@ -52,18 +52,10 @@ class HeaderAnnotation_Test extends SimpleTestBase {
                .build();
 
        @Test void a01_basic() {
-               assertJsonMatches(a1, ""
-                       + "{"
-                               + "def:'def',"
-                               + "description:['description'],"
-                               + "name:'name',"
-                               + "on:['on'],"
-                               + "onClass:['"+CNAME+"$X1'],"
-                               + 
"parser:'org.apache.juneau.oapi.OpenApiParser',"
-                               + "schema:{*},"
-                               + 
"serializer:'org.apache.juneau.oapi.OpenApiSerializer',"
-                               + "value:'value'"
-                       + "}"
+               assertBean(
+                       a1,
+                       
"def,description,name,on,onClass{#{simpleName}},parser{simpleName},serializer{simpleName},value",
+                       
"def,[description],name,[on],{[{X1}]},{OpenApiParser},{OpenApiSerializer},value"
                );
        }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/annotation/PathAnnotation_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/annotation/PathAnnotation_Test.java
index 43315bbf2..465218ede 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/annotation/PathAnnotation_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/annotation/PathAnnotation_Test.java
@@ -52,18 +52,10 @@ class PathAnnotation_Test extends SimpleTestBase {
                .build();
 
        @Test void a01_basic() {
-               assertJsonMatches(a1, ""
-                       + "{"
-                               + "def:'def',"
-                               + "description:['description'],"
-                               + "name:'name',"
-                               + "on:['on'],"
-                               + "onClass:['"+CNAME+"$X1'],"
-                               + 
"parser:'org.apache.juneau.oapi.OpenApiParser',"
-                               + "schema:{*},"
-                               + 
"serializer:'org.apache.juneau.oapi.OpenApiSerializer',"
-                               + "value:'value'"
-                       + "}"
+               assertBean(
+                       a1,
+                       
"def,description,name,on,onClass{#{simpleName}},parser{simpleName},serializer{simpleName},value",
+                       
"def,[description],name,[on],{[{X1}]},{OpenApiParser},{OpenApiSerializer},value"
                );
        }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/annotation/QueryAnnotation_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/annotation/QueryAnnotation_Test.java
index 454e7e941..05e359efd 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/annotation/QueryAnnotation_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/annotation/QueryAnnotation_Test.java
@@ -30,40 +30,32 @@ class QueryAnnotation_Test extends SimpleTestBase {
        
//------------------------------------------------------------------------------------------------------------------
 
        Query a1 = QueryAnnotation.create()
-               .def("def")
-               .description("description")
-               .name("name")
-               .on("on")
+               .def("a")
+               .description("b")
+               .name("c")
+               .on("d")
                .onClass(X1.class)
                .parser(OpenApiParser.class)
                .serializer(OpenApiSerializer.class)
-               .value("value")
+               .value("e")
                .build();
 
        Query a2 = QueryAnnotation.create()
-               .def("def")
-               .description("description")
-               .name("name")
-               .on("on")
+               .def("a")
+               .description("b")
+               .name("c")
+               .on("d")
                .onClass(X1.class)
                .parser(OpenApiParser.class)
                .serializer(OpenApiSerializer.class)
-               .value("value")
+               .value("e")
                .build();
 
        @Test void a01_basic() {
-               assertJsonMatches(a1, ""
-                       + "{"
-                               + "def:'def',"
-                               + "description:['description'],"
-                               + "name:'name',"
-                               + "on:['on'],"
-                               + "onClass:['"+CNAME+"$X1'],"
-                               + 
"parser:'org.apache.juneau.oapi.OpenApiParser',"
-                               + "schema:{*},"
-                               + 
"serializer:'org.apache.juneau.oapi.OpenApiSerializer',"
-                               + "value:'value'"
-                       + "}"
+               assertBean(
+                       a1,
+                       
"def,description,name,on,onClass{#{simpleName}},parser{simpleName},serializer{simpleName},value",
+                       
"a,[b],c,[d],{[{X1}]},{OpenApiParser},{OpenApiSerializer},e"
                );
        }
 
@@ -113,27 +105,27 @@ class QueryAnnotation_Test extends SimpleTestBase {
        
//------------------------------------------------------------------------------------------------------------------
 
        @Query(
-               def="def",
-               description={ "description" },
-               name="name",
-               on="on",
+               def="a",
+               description={ "b" },
+               name="c",
+               on="d",
                onClass=X1.class,
                parser=OpenApiParser.class,
                serializer=OpenApiSerializer.class,
-               value="value"
+               value="e"
        )
        public static class D1 {}
        Query d1 = D1.class.getAnnotationsByType(Query.class)[0];
 
        @Query(
-               def="def",
-               description={ "description" },
-               name="name",
-               on="on",
+               def="a",
+               description={ "b" },
+               name="c",
+               on="d",
                onClass=X1.class,
                parser=OpenApiParser.class,
                serializer=OpenApiSerializer.class,
-               value="value"
+               value="e"
        )
        public static class D2 {}
        Query d2 = D2.class.getAnnotationsByType(Query.class)[0];
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/annotation/ResponseAnnotation_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/annotation/ResponseAnnotation_Test.java
index 28d48e092..66ae3b893 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/annotation/ResponseAnnotation_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/annotation/ResponseAnnotation_Test.java
@@ -53,17 +53,10 @@ class ResponseAnnotation_Test extends SimpleTestBase {
                .build();
 
        @Test void a01_basic() {
-               assertJsonMatches(a1, ""
-                       + "{"
-                               + "description:['description'],"
-                               + "examples:['examples'],"
-                               + "headers:[*],"
-                               + "on:['on'],"
-                               + "onClass:['"+CNAME+"$X1'],"
-                               + 
"parser:'org.apache.juneau.oapi.OpenApiParser',"
-                               + "schema:{*,"
-                               + 
"serializer:'org.apache.juneau.oapi.OpenApiSerializer'"
-                       + "}"
+               assertBean(
+                       a1,
+                       
"description,examples,on,onClass{#{simpleName}},parser{simpleName},serializer{simpleName}",
+                       
"[description],[examples],[on],{[{X1}]},{OpenApiParser},{OpenApiSerializer}"
                );
        }
 

Reply via email to