You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2018/07/17 14:53:48 UTC

[juneau] branch master updated: Minor changes to HttpPartSchema

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 aba2710  Minor changes to HttpPartSchema
aba2710 is described below

commit aba2710558c1e93baa3e60d29343c4a5738f4b23
Author: JamesBognar <ja...@apache.org>
AuthorDate: Tue Jul 17 10:53:33 2018 -0400

    Minor changes to HttpPartSchema
---
 .../juneau/httppart/HttpPartSchemaTest_Body.java   |  31 +-
 .../httppart/HttpPartSchemaTest_FormData.java      |  54 +--
 .../juneau/httppart/HttpPartSchemaTest_Header.java |  54 +--
 .../juneau/httppart/HttpPartSchemaTest_Path.java   |  36 +-
 .../juneau/httppart/HttpPartSchemaTest_Query.java  |  54 +--
 .../httppart/HttpPartSchemaTest_Response.java      |  24 +-
 .../HttpPartSchemaTest_ResponseHeader.java         |  46 +--
 .../juneau/httppart/OpenApiPartParserTest.java     |   4 +-
 .../org/apache/juneau/http/annotation/Schema.java  |   4 +-
 .../org/apache/juneau/httppart/HttpPartSchema.java | 116 +++---
 .../juneau/httppart/HttpPartSchemaBuilder.java     | 396 ++++++++++++++++-----
 .../apache/juneau/remoteable/RemoteMethodArg.java  |   4 +-
 12 files changed, 516 insertions(+), 307 deletions(-)

diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Body.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Body.java
index 088424f..d13d06f 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Body.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Body.java
@@ -50,7 +50,7 @@ public class HttpPartSchemaTest_Body {
 	@Test
 	public void a02_basic_onClass() throws Exception {
 		HttpPartSchema s = HttpPartSchema.create().apply(Body.class, A02.class).noValidate().build();
-		assertTrue(s.getRequired());
+		assertTrue(s.isRequired());
 		assertObjectEquals("{description:'b1\\nb2',example:'f1',required:true,schema:{'$ref':'c1'},_value:'{g1:true}'}", s.getApi());
 	}
 
@@ -71,7 +71,7 @@ public class HttpPartSchemaTest_Body {
 	@Test
 	public void a03_basic_onParameter() throws Exception {
 		HttpPartSchema s = HttpPartSchema.create().apply(Body.class, A03.class.getMethod("a", String.class), 0).noValidate().build();
-		assertTrue(s.getRequired());
+		assertTrue(s.isRequired());
 		assertObjectEquals("{description:'b1\\nb2',example:'f1',required:true,schema:{'$ref':'c1'},_value:'{g1:true}'}", s.getApi());
 	}
 
@@ -79,6 +79,7 @@ public class HttpPartSchemaTest_Body {
 		public void a(
 				@Body(
 					description={"b3","b3"},
+					required=true,
 					schema=@Schema($ref="c3"),
 					example="f2",
 					api="{g2:true}"
@@ -91,7 +92,7 @@ public class HttpPartSchemaTest_Body {
 	@Test
 	public void a04_basic_onParameterAndClass() throws Exception {
 		HttpPartSchema s = HttpPartSchema.create().apply(Body.class, A04.class.getMethod("a", A02.class), 0).noValidate().build();
-		assertTrue(s.getRequired());
+		assertTrue(s.isRequired());
 		assertObjectEquals("{description:'b3\\nb3',example:'f2',required:true,schema:{'$ref':'c3'},_value:'{g2:true}'}", s.getApi());
 	}
 
@@ -188,9 +189,9 @@ public class HttpPartSchemaTest_Body {
 		assertEquals(4, s.getMinItems().longValue());
 		assertEquals(5, s.getMaxProperties().longValue());
 		assertEquals(6, s.getMinProperties().longValue());
-		assertTrue(s.getExclusiveMaximum());
-		assertTrue(s.getExclusiveMinimum());
-		assertTrue(s.getUniqueItems());
+		assertTrue(s.isExclusiveMaximum());
+		assertTrue(s.isExclusiveMinimum());
+		assertTrue(s.isUniqueItems());
 		assertObjectEquals("['e1','e2']", s.getEnum());
 		assertEquals("c1\nc2", s.getDefault());
 
@@ -206,9 +207,9 @@ public class HttpPartSchemaTest_Body {
 		assertEquals(6, items.getMinLength().longValue());
 		assertEquals(7, items.getMaxItems().longValue());
 		assertEquals(8, items.getMinItems().longValue());
-		assertNull(items.getExclusiveMaximum());
-		assertNull(items.getExclusiveMinimum());
-		assertNull(items.getUniqueItems());
+		assertFalse(items.isExclusiveMaximum());
+		assertFalse(items.isExclusiveMinimum());
+		assertFalse(items.isUniqueItems());
 		assertObjectEquals("['e3','e4']", items.getEnum());
 		assertEquals("c3\nc4", items.getDefault());
 
@@ -224,9 +225,9 @@ public class HttpPartSchemaTest_Body {
 		assertEquals(10, items.getMinLength().longValue());
 		assertEquals(11, items.getMaxItems().longValue());
 		assertEquals(12, items.getMinItems().longValue());
-		assertTrue(items.getExclusiveMaximum());
-		assertTrue(items.getExclusiveMinimum());
-		assertTrue(items.getUniqueItems());
+		assertTrue(items.isExclusiveMaximum());
+		assertTrue(items.isExclusiveMinimum());
+		assertTrue(items.isUniqueItems());
 		assertObjectEquals("['e5','e6']", items.getEnum());
 		assertEquals("c5\nc6", items.getDefault());
 
@@ -242,9 +243,9 @@ public class HttpPartSchemaTest_Body {
 		assertEquals(14, items.getMinLength().longValue());
 		assertEquals(15, items.getMaxItems().longValue());
 		assertEquals(16, items.getMinItems().longValue());
-		assertFalse(items.getExclusiveMaximum());
-		assertFalse(items.getExclusiveMinimum());
-		assertFalse(items.getUniqueItems());
+		assertFalse(items.isExclusiveMaximum());
+		assertFalse(items.isExclusiveMinimum());
+		assertFalse(items.isUniqueItems());
 		assertObjectEquals("['e7','e8']", items.getEnum());
 		assertEquals("c7\nc8", items.getDefault());
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_FormData.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_FormData.java
index b9a0c2b..f8ae41e 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_FormData.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_FormData.java
@@ -90,11 +90,11 @@ public class HttpPartSchemaTest_FormData {
 		assertEquals(2, s.getMinLength().longValue());
 		assertEquals(3, s.getMaxItems().longValue());
 		assertEquals(4, s.getMinItems().longValue());
-		assertTrue(s.getExclusiveMaximum());
-		assertTrue(s.getExclusiveMinimum());
-		assertTrue(s.getUniqueItems());
-		assertTrue(s.getRequired());
-		assertTrue(s.getSkipIfEmpty());
+		assertTrue(s.isExclusiveMaximum());
+		assertTrue(s.isExclusiveMinimum());
+		assertTrue(s.isUniqueItems());
+		assertTrue(s.isRequired());
+		assertTrue(s.isSkipIfEmpty());
 		assertObjectEquals("['e1','e2','e3']", s.getEnum());
 		assertEquals("c1\nc2", s.getDefault());
 		assertObjectEquals("{collectionFormat:'csv','default':'c1\\nc2',description:'b1\\nb2','enum':['e1','e2','e3'],example:'f1',exclusiveMaximum:true,exclusiveMinimum:true,format:'int32',items:{'$ref':'d1'},maximum:'1',maxItems:3,maxLength:1,minimum:'2',minItems:4,minLength:2,multipleOf:'3',pattern:'4',required:true,type:'number',uniqueItems:true,_value:'{g1:true}'}", s.getApi());
@@ -147,11 +147,11 @@ public class HttpPartSchemaTest_FormData {
 		assertEquals(2, s.getMinLength().longValue());
 		assertEquals(3, s.getMaxItems().longValue());
 		assertEquals(4, s.getMinItems().longValue());
-		assertTrue(s.getExclusiveMaximum());
-		assertTrue(s.getExclusiveMinimum());
-		assertTrue(s.getUniqueItems());
-		assertTrue(s.getRequired());
-		assertTrue(s.getSkipIfEmpty());
+		assertTrue(s.isExclusiveMaximum());
+		assertTrue(s.isExclusiveMinimum());
+		assertTrue(s.isUniqueItems());
+		assertTrue(s.isRequired());
+		assertTrue(s.isSkipIfEmpty());
 		assertObjectEquals("['e1','e2','e3']", s.getEnum());
 		assertEquals("c1\nc2", s.getDefault());
 		assertObjectEquals("{collectionFormat:'csv','default':'c1\\nc2',description:'b1\\nb2','enum':['e1','e2','e3'],example:'f1',exclusiveMaximum:true,exclusiveMinimum:true,format:'int32',items:{'$ref':'d1'},maximum:'1',maxItems:3,maxLength:1,minimum:'2',minItems:4,minLength:2,multipleOf:'3',pattern:'4',required:true,type:'number',uniqueItems:true,_value:'{g1:true}'}", s.getApi());
@@ -204,11 +204,11 @@ public class HttpPartSchemaTest_FormData {
 		assertEquals(6, s.getMinLength().longValue());
 		assertEquals(7, s.getMaxItems().longValue());
 		assertEquals(8, s.getMinItems().longValue());
-		assertNull(s.getExclusiveMaximum());
-		assertNull(s.getExclusiveMinimum());
-		assertNull(s.getUniqueItems());
-		assertNull(s.getRequired());
-		assertNull(s.getSkipIfEmpty());
+		assertFalse(s.isExclusiveMaximum());
+		assertFalse(s.isExclusiveMinimum());
+		assertFalse(s.isUniqueItems());
+		assertFalse(s.isRequired());
+		assertFalse(s.isSkipIfEmpty());
 		assertObjectEquals("['e4','e5','e6']", s.getEnum());
 		assertEquals("c3\nc4", s.getDefault());
 		assertObjectEquals("{collectionFormat:'ssv','default':'c3\\nc4',description:'b3\\nb3','enum':['e4','e5','e6'],example:'f2',format:'int64',items:{'$ref':'d2'},maximum:'5',maxItems:7,maxLength:5,minimum:'6',minItems:8,minLength:6,multipleOf:'7',pattern:'8',type:'integer',_value:'{g2:true}'}", s.getApi());
@@ -308,9 +308,9 @@ public class HttpPartSchemaTest_FormData {
 		assertEquals(2, items.getMinLength().longValue());
 		assertEquals(3, items.getMaxItems().longValue());
 		assertEquals(4, items.getMinItems().longValue());
-		assertTrue(items.getExclusiveMaximum());
-		assertTrue(items.getExclusiveMinimum());
-		assertTrue(items.getUniqueItems());
+		assertTrue(items.isExclusiveMaximum());
+		assertTrue(items.isExclusiveMinimum());
+		assertTrue(items.isUniqueItems());
 		assertObjectEquals("['e1','e2']", items.getEnum());
 		assertEquals("c1\nc2", items.getDefault());
 
@@ -326,9 +326,9 @@ public class HttpPartSchemaTest_FormData {
 		assertEquals(6, items.getMinLength().longValue());
 		assertEquals(7, items.getMaxItems().longValue());
 		assertEquals(8, items.getMinItems().longValue());
-		assertNull(items.getExclusiveMaximum());
-		assertNull(items.getExclusiveMinimum());
-		assertNull(items.getUniqueItems());
+		assertFalse(items.isExclusiveMaximum());
+		assertFalse(items.isExclusiveMinimum());
+		assertFalse(items.isUniqueItems());
 		assertObjectEquals("['e3','e4']", items.getEnum());
 		assertEquals("c3\nc4", items.getDefault());
 
@@ -344,9 +344,9 @@ public class HttpPartSchemaTest_FormData {
 		assertEquals(10, items.getMinLength().longValue());
 		assertEquals(11, items.getMaxItems().longValue());
 		assertEquals(12, items.getMinItems().longValue());
-		assertTrue(items.getExclusiveMaximum());
-		assertTrue(items.getExclusiveMinimum());
-		assertTrue(items.getUniqueItems());
+		assertTrue(items.isExclusiveMaximum());
+		assertTrue(items.isExclusiveMinimum());
+		assertTrue(items.isUniqueItems());
 		assertObjectEquals("['e5','e6']", items.getEnum());
 		assertEquals("c5\nc6", items.getDefault());
 
@@ -362,9 +362,9 @@ public class HttpPartSchemaTest_FormData {
 		assertEquals(14, items.getMinLength().longValue());
 		assertEquals(15, items.getMaxItems().longValue());
 		assertEquals(16, items.getMinItems().longValue());
-		assertFalse(items.getExclusiveMaximum());
-		assertFalse(items.getExclusiveMinimum());
-		assertFalse(items.getUniqueItems());
+		assertFalse(items.isExclusiveMaximum());
+		assertFalse(items.isExclusiveMinimum());
+		assertFalse(items.isUniqueItems());
 		assertObjectEquals("['e7','e8']", items.getEnum());
 		assertEquals("c7\nc8", items.getDefault());
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Header.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Header.java
index 50427f1..617c8b3 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Header.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Header.java
@@ -90,11 +90,11 @@ public class HttpPartSchemaTest_Header {
 		assertEquals(2, s.getMinLength().longValue());
 		assertEquals(3, s.getMaxItems().longValue());
 		assertEquals(4, s.getMinItems().longValue());
-		assertTrue(s.getExclusiveMaximum());
-		assertTrue(s.getExclusiveMinimum());
-		assertTrue(s.getUniqueItems());
-		assertTrue(s.getRequired());
-		assertTrue(s.getSkipIfEmpty());
+		assertTrue(s.isExclusiveMaximum());
+		assertTrue(s.isExclusiveMinimum());
+		assertTrue(s.isUniqueItems());
+		assertTrue(s.isRequired());
+		assertTrue(s.isSkipIfEmpty());
 		assertObjectEquals("['e1','e2','e3']", s.getEnum());
 		assertEquals("c1\nc2", s.getDefault());
 		assertObjectEquals("{collectionFormat:'csv','default':'c1\\nc2',description:'b1\\nb2','enum':['e1','e2','e3'],example:'f1',exclusiveMaximum:true,exclusiveMinimum:true,format:'int32',items:{'$ref':'d1'},maximum:'1',maxItems:3,maxLength:1,minimum:'2',minItems:4,minLength:2,multipleOf:'3',pattern:'4',required:true,type:'number',uniqueItems:true,_value:'{g1:true}'}", s.getApi());
@@ -147,11 +147,11 @@ public class HttpPartSchemaTest_Header {
 		assertEquals(2, s.getMinLength().longValue());
 		assertEquals(3, s.getMaxItems().longValue());
 		assertEquals(4, s.getMinItems().longValue());
-		assertTrue(s.getExclusiveMaximum());
-		assertTrue(s.getExclusiveMinimum());
-		assertTrue(s.getUniqueItems());
-		assertTrue(s.getRequired());
-		assertTrue(s.getSkipIfEmpty());
+		assertTrue(s.isExclusiveMaximum());
+		assertTrue(s.isExclusiveMinimum());
+		assertTrue(s.isUniqueItems());
+		assertTrue(s.isRequired());
+		assertTrue(s.isSkipIfEmpty());
 		assertObjectEquals("['e1','e2','e3']", s.getEnum());
 		assertEquals("c1\nc2", s.getDefault());
 		assertObjectEquals("{collectionFormat:'csv','default':'c1\\nc2',description:'b1\\nb2','enum':['e1','e2','e3'],example:'f1',exclusiveMaximum:true,exclusiveMinimum:true,format:'int32',items:{'$ref':'d1'},maximum:'1',maxItems:3,maxLength:1,minimum:'2',minItems:4,minLength:2,multipleOf:'3',pattern:'4',required:true,type:'number',uniqueItems:true,_value:'{g1:true}'}", s.getApi());
@@ -204,11 +204,11 @@ public class HttpPartSchemaTest_Header {
 		assertEquals(6, s.getMinLength().longValue());
 		assertEquals(7, s.getMaxItems().longValue());
 		assertEquals(8, s.getMinItems().longValue());
-		assertNull(s.getExclusiveMaximum());
-		assertNull(s.getExclusiveMinimum());
-		assertNull(s.getUniqueItems());
-		assertNull(s.getRequired());
-		assertNull(s.getSkipIfEmpty());
+		assertFalse(s.isExclusiveMaximum());
+		assertFalse(s.isExclusiveMinimum());
+		assertFalse(s.isUniqueItems());
+		assertFalse(s.isRequired());
+		assertFalse(s.isSkipIfEmpty());
 		assertObjectEquals("['e4','e5','e6']", s.getEnum());
 		assertEquals("c3\nc4", s.getDefault());
 		assertObjectEquals("{collectionFormat:'ssv','default':'c3\\nc4',description:'b3\\nb3','enum':['e4','e5','e6'],example:'f2',format:'int64',items:{'$ref':'d2'},maximum:'5',maxItems:7,maxLength:5,minimum:'6',minItems:8,minLength:6,multipleOf:'7',pattern:'8',type:'integer',_value:'{g2:true}'}", s.getApi());
@@ -308,9 +308,9 @@ public class HttpPartSchemaTest_Header {
 		assertEquals(2, items.getMinLength().longValue());
 		assertEquals(3, items.getMaxItems().longValue());
 		assertEquals(4, items.getMinItems().longValue());
-		assertTrue(items.getExclusiveMaximum());
-		assertTrue(items.getExclusiveMinimum());
-		assertTrue(items.getUniqueItems());
+		assertTrue(items.isExclusiveMaximum());
+		assertTrue(items.isExclusiveMinimum());
+		assertTrue(items.isUniqueItems());
 		assertObjectEquals("['e1','e2']", items.getEnum());
 		assertEquals("c1\nc2", items.getDefault());
 
@@ -326,9 +326,9 @@ public class HttpPartSchemaTest_Header {
 		assertEquals(6, items.getMinLength().longValue());
 		assertEquals(7, items.getMaxItems().longValue());
 		assertEquals(8, items.getMinItems().longValue());
-		assertNull(items.getExclusiveMaximum());
-		assertNull(items.getExclusiveMinimum());
-		assertNull(items.getUniqueItems());
+		assertFalse(items.isExclusiveMaximum());
+		assertFalse(items.isExclusiveMinimum());
+		assertFalse(items.isUniqueItems());
 		assertObjectEquals("['e3','e4']", items.getEnum());
 		assertEquals("c3\nc4", items.getDefault());
 
@@ -344,9 +344,9 @@ public class HttpPartSchemaTest_Header {
 		assertEquals(10, items.getMinLength().longValue());
 		assertEquals(11, items.getMaxItems().longValue());
 		assertEquals(12, items.getMinItems().longValue());
-		assertTrue(items.getExclusiveMaximum());
-		assertTrue(items.getExclusiveMinimum());
-		assertTrue(items.getUniqueItems());
+		assertTrue(items.isExclusiveMaximum());
+		assertTrue(items.isExclusiveMinimum());
+		assertTrue(items.isUniqueItems());
 		assertObjectEquals("['e5','e6']", items.getEnum());
 		assertEquals("c5\nc6", items.getDefault());
 
@@ -362,9 +362,9 @@ public class HttpPartSchemaTest_Header {
 		assertEquals(14, items.getMinLength().longValue());
 		assertEquals(15, items.getMaxItems().longValue());
 		assertEquals(16, items.getMinItems().longValue());
-		assertFalse(items.getExclusiveMaximum());
-		assertFalse(items.getExclusiveMinimum());
-		assertFalse(items.getUniqueItems());
+		assertFalse(items.isExclusiveMaximum());
+		assertFalse(items.isExclusiveMinimum());
+		assertFalse(items.isUniqueItems());
 		assertObjectEquals("['e7','e8']", items.getEnum());
 		assertEquals("c7\nc8", items.getDefault());
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Path.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Path.java
index 8612836..d061a76 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Path.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Path.java
@@ -82,8 +82,8 @@ public class HttpPartSchemaTest_Path {
 		assertEquals("4", s.getPattern().pattern());
 		assertEquals(1, s.getMaxLength().longValue());
 		assertEquals(2, s.getMinLength().longValue());
-		assertTrue(s.getExclusiveMaximum());
-		assertTrue(s.getExclusiveMinimum());
+		assertTrue(s.isExclusiveMaximum());
+		assertTrue(s.isExclusiveMinimum());
 		assertObjectEquals("['e1','e2','e3']", s.getEnum());
 		assertObjectEquals("{collectionFormat:'csv',description:'b1\\nb2','enum':['e1','e2','e3'],example:'f1',exclusiveMaximum:true,exclusiveMinimum:true,format:'int32',items:{'$ref':'d1'},maximum:'1',maxLength:1,minimum:'2',minLength:2,multipleOf:'3',pattern:'4',type:'number',_value:'{g1:true}'}", s.getApi());
 	}
@@ -127,8 +127,8 @@ public class HttpPartSchemaTest_Path {
 		assertEquals("4", s.getPattern().pattern());
 		assertEquals(1, s.getMaxLength().longValue());
 		assertEquals(2, s.getMinLength().longValue());
-		assertTrue(s.getExclusiveMaximum());
-		assertTrue(s.getExclusiveMinimum());
+		assertTrue(s.isExclusiveMaximum());
+		assertTrue(s.isExclusiveMinimum());
 		assertObjectEquals("['e1','e2','e3']", s.getEnum());
 		assertObjectEquals("{collectionFormat:'csv',description:'b1\\nb2','enum':['e1','e2','e3'],example:'f1',exclusiveMaximum:true,exclusiveMinimum:true,format:'int32',items:{'$ref':'d1'},maximum:'1',maxLength:1,minimum:'2',minLength:2,multipleOf:'3',pattern:'4',type:'number',_value:'{g1:true}'}", s.getApi());
 	}
@@ -172,8 +172,8 @@ public class HttpPartSchemaTest_Path {
 		assertEquals("8", s.getPattern().pattern());
 		assertEquals(5, s.getMaxLength().longValue());
 		assertEquals(6, s.getMinLength().longValue());
-		assertNull(s.getExclusiveMaximum());
-		assertNull(s.getExclusiveMinimum());
+		assertFalse(s.isExclusiveMaximum());
+		assertFalse(s.isExclusiveMinimum());
 		assertObjectEquals("['e4','e5','e6']", s.getEnum());
 		assertObjectEquals("{collectionFormat:'ssv',description:'b3\\nb3','enum':['e4','e5','e6'],example:'f2',format:'int64',items:{'$ref':'d2'},maximum:'5',maxLength:5,minimum:'6',minLength:6,multipleOf:'7',pattern:'8',type:'integer',_value:'{g2:true}'}", s.getApi());
 	}
@@ -272,9 +272,9 @@ public class HttpPartSchemaTest_Path {
 		assertEquals(2, items.getMinLength().longValue());
 		assertEquals(3, items.getMaxItems().longValue());
 		assertEquals(4, items.getMinItems().longValue());
-		assertTrue(items.getExclusiveMaximum());
-		assertTrue(items.getExclusiveMinimum());
-		assertTrue(items.getUniqueItems());
+		assertTrue(items.isExclusiveMaximum());
+		assertTrue(items.isExclusiveMinimum());
+		assertTrue(items.isUniqueItems());
 		assertObjectEquals("['e1','e2']", items.getEnum());
 		assertEquals("c1\nc2", items.getDefault());
 
@@ -290,9 +290,9 @@ public class HttpPartSchemaTest_Path {
 		assertEquals(6, items.getMinLength().longValue());
 		assertEquals(7, items.getMaxItems().longValue());
 		assertEquals(8, items.getMinItems().longValue());
-		assertNull(items.getExclusiveMaximum());
-		assertNull(items.getExclusiveMinimum());
-		assertNull(items.getUniqueItems());
+		assertFalse(items.isExclusiveMaximum());
+		assertFalse(items.isExclusiveMinimum());
+		assertFalse(items.isUniqueItems());
 		assertObjectEquals("['e3','e4']", items.getEnum());
 		assertEquals("c3\nc4", items.getDefault());
 
@@ -308,9 +308,9 @@ public class HttpPartSchemaTest_Path {
 		assertEquals(10, items.getMinLength().longValue());
 		assertEquals(11, items.getMaxItems().longValue());
 		assertEquals(12, items.getMinItems().longValue());
-		assertTrue(items.getExclusiveMaximum());
-		assertTrue(items.getExclusiveMinimum());
-		assertTrue(items.getUniqueItems());
+		assertTrue(items.isExclusiveMaximum());
+		assertTrue(items.isExclusiveMinimum());
+		assertTrue(items.isUniqueItems());
 		assertObjectEquals("['e5','e6']", items.getEnum());
 		assertEquals("c5\nc6", items.getDefault());
 
@@ -326,9 +326,9 @@ public class HttpPartSchemaTest_Path {
 		assertEquals(14, items.getMinLength().longValue());
 		assertEquals(15, items.getMaxItems().longValue());
 		assertEquals(16, items.getMinItems().longValue());
-		assertFalse(items.getExclusiveMaximum());
-		assertFalse(items.getExclusiveMinimum());
-		assertFalse(items.getUniqueItems());
+		assertFalse(items.isExclusiveMaximum());
+		assertFalse(items.isExclusiveMinimum());
+		assertFalse(items.isUniqueItems());
 		assertObjectEquals("['e7','e8']", items.getEnum());
 		assertEquals("c7\nc8", items.getDefault());
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Query.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Query.java
index acc0482..e2799d5 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Query.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Query.java
@@ -90,11 +90,11 @@ public class HttpPartSchemaTest_Query {
 		assertEquals(2, s.getMinLength().longValue());
 		assertEquals(3, s.getMaxItems().longValue());
 		assertEquals(4, s.getMinItems().longValue());
-		assertTrue(s.getExclusiveMaximum());
-		assertTrue(s.getExclusiveMinimum());
-		assertTrue(s.getUniqueItems());
-		assertTrue(s.getRequired());
-		assertTrue(s.getSkipIfEmpty());
+		assertTrue(s.isExclusiveMaximum());
+		assertTrue(s.isExclusiveMinimum());
+		assertTrue(s.isUniqueItems());
+		assertTrue(s.isRequired());
+		assertTrue(s.isSkipIfEmpty());
 		assertObjectEquals("['e1','e2','e3']", s.getEnum());
 		assertEquals("c1\nc2", s.getDefault());
 		assertObjectEquals("{collectionFormat:'csv','default':'c1\\nc2',description:'b1\\nb2','enum':['e1','e2','e3'],example:'f1',exclusiveMaximum:true,exclusiveMinimum:true,format:'int32',items:{'$ref':'d1'},maximum:'1',maxItems:3,maxLength:1,minimum:'2',minItems:4,minLength:2,multipleOf:'3',pattern:'4',required:true,type:'number',uniqueItems:true,_value:'{g1:true}'}", s.getApi());
@@ -147,11 +147,11 @@ public class HttpPartSchemaTest_Query {
 		assertEquals(2, s.getMinLength().longValue());
 		assertEquals(3, s.getMaxItems().longValue());
 		assertEquals(4, s.getMinItems().longValue());
-		assertTrue(s.getExclusiveMaximum());
-		assertTrue(s.getExclusiveMinimum());
-		assertTrue(s.getUniqueItems());
-		assertTrue(s.getRequired());
-		assertTrue(s.getSkipIfEmpty());
+		assertTrue(s.isExclusiveMaximum());
+		assertTrue(s.isExclusiveMinimum());
+		assertTrue(s.isUniqueItems());
+		assertTrue(s.isRequired());
+		assertTrue(s.isSkipIfEmpty());
 		assertObjectEquals("['e1','e2','e3']", s.getEnum());
 		assertEquals("c1\nc2", s.getDefault());
 		assertObjectEquals("{collectionFormat:'csv','default':'c1\\nc2',description:'b1\\nb2','enum':['e1','e2','e3'],example:'f1',exclusiveMaximum:true,exclusiveMinimum:true,format:'int32',items:{'$ref':'d1'},maximum:'1',maxItems:3,maxLength:1,minimum:'2',minItems:4,minLength:2,multipleOf:'3',pattern:'4',required:true,type:'number',uniqueItems:true,_value:'{g1:true}'}", s.getApi());
@@ -204,11 +204,11 @@ public class HttpPartSchemaTest_Query {
 		assertEquals(6, s.getMinLength().longValue());
 		assertEquals(7, s.getMaxItems().longValue());
 		assertEquals(8, s.getMinItems().longValue());
-		assertNull(s.getExclusiveMaximum());
-		assertNull(s.getExclusiveMinimum());
-		assertNull(s.getUniqueItems());
-		assertNull(s.getRequired());
-		assertNull(s.getSkipIfEmpty());
+		assertFalse(s.isExclusiveMaximum());
+		assertFalse(s.isExclusiveMinimum());
+		assertFalse(s.isUniqueItems());
+		assertFalse(s.isRequired());
+		assertFalse(s.isSkipIfEmpty());
 		assertObjectEquals("['e4','e5','e6']", s.getEnum());
 		assertEquals("c3\nc4", s.getDefault());
 		assertObjectEquals("{collectionFormat:'ssv','default':'c3\\nc4',description:'b3\\nb3','enum':['e4','e5','e6'],example:'f2',format:'int64',items:{'$ref':'d2'},maximum:'5',maxItems:7,maxLength:5,minimum:'6',minItems:8,minLength:6,multipleOf:'7',pattern:'8',type:'integer',_value:'{g2:true}'}", s.getApi());
@@ -308,9 +308,9 @@ public class HttpPartSchemaTest_Query {
 		assertEquals(2, items.getMinLength().longValue());
 		assertEquals(3, items.getMaxItems().longValue());
 		assertEquals(4, items.getMinItems().longValue());
-		assertTrue(items.getExclusiveMaximum());
-		assertTrue(items.getExclusiveMinimum());
-		assertTrue(items.getUniqueItems());
+		assertTrue(items.isExclusiveMaximum());
+		assertTrue(items.isExclusiveMinimum());
+		assertTrue(items.isUniqueItems());
 		assertObjectEquals("['e1','e2']", items.getEnum());
 		assertEquals("c1\nc2", items.getDefault());
 
@@ -326,9 +326,9 @@ public class HttpPartSchemaTest_Query {
 		assertEquals(6, items.getMinLength().longValue());
 		assertEquals(7, items.getMaxItems().longValue());
 		assertEquals(8, items.getMinItems().longValue());
-		assertNull(items.getExclusiveMaximum());
-		assertNull(items.getExclusiveMinimum());
-		assertNull(items.getUniqueItems());
+		assertFalse(items.isExclusiveMaximum());
+		assertFalse(items.isExclusiveMinimum());
+		assertFalse(items.isUniqueItems());
 		assertObjectEquals("['e3','e4']", items.getEnum());
 		assertEquals("c3\nc4", items.getDefault());
 
@@ -344,9 +344,9 @@ public class HttpPartSchemaTest_Query {
 		assertEquals(10, items.getMinLength().longValue());
 		assertEquals(11, items.getMaxItems().longValue());
 		assertEquals(12, items.getMinItems().longValue());
-		assertTrue(items.getExclusiveMaximum());
-		assertTrue(items.getExclusiveMinimum());
-		assertTrue(items.getUniqueItems());
+		assertTrue(items.isExclusiveMaximum());
+		assertTrue(items.isExclusiveMinimum());
+		assertTrue(items.isUniqueItems());
 		assertObjectEquals("['e5','e6']", items.getEnum());
 		assertEquals("c5\nc6", items.getDefault());
 
@@ -362,9 +362,9 @@ public class HttpPartSchemaTest_Query {
 		assertEquals(14, items.getMinLength().longValue());
 		assertEquals(15, items.getMaxItems().longValue());
 		assertEquals(16, items.getMinItems().longValue());
-		assertFalse(items.getExclusiveMaximum());
-		assertFalse(items.getExclusiveMinimum());
-		assertFalse(items.getUniqueItems());
+		assertFalse(items.isExclusiveMaximum());
+		assertFalse(items.isExclusiveMinimum());
+		assertFalse(items.isUniqueItems());
 		assertObjectEquals("['e7','e8']", items.getEnum());
 		assertEquals("c7\nc8", items.getDefault());
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Response.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Response.java
index cd90caa..c3c0df5 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Response.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Response.java
@@ -183,9 +183,9 @@ public class HttpPartSchemaTest_Response {
 		assertEquals(4, s.getMinItems().longValue());
 		assertEquals(5, s.getMaxProperties().longValue());
 		assertEquals(6, s.getMinProperties().longValue());
-		assertTrue(s.getExclusiveMaximum());
-		assertTrue(s.getExclusiveMinimum());
-		assertTrue(s.getUniqueItems());
+		assertTrue(s.isExclusiveMaximum());
+		assertTrue(s.isExclusiveMinimum());
+		assertTrue(s.isUniqueItems());
 		assertObjectEquals("['e1','e2']", s.getEnum());
 		assertEquals("c1\nc2", s.getDefault());
 
@@ -201,9 +201,9 @@ public class HttpPartSchemaTest_Response {
 		assertEquals(6, items.getMinLength().longValue());
 		assertEquals(7, items.getMaxItems().longValue());
 		assertEquals(8, items.getMinItems().longValue());
-		assertNull(items.getExclusiveMaximum());
-		assertNull(items.getExclusiveMinimum());
-		assertNull(items.getUniqueItems());
+		assertFalse(items.isExclusiveMaximum());
+		assertFalse(items.isExclusiveMinimum());
+		assertFalse(items.isUniqueItems());
 		assertObjectEquals("['e3','e4']", items.getEnum());
 		assertEquals("c3\nc4", items.getDefault());
 
@@ -219,9 +219,9 @@ public class HttpPartSchemaTest_Response {
 		assertEquals(10, items.getMinLength().longValue());
 		assertEquals(11, items.getMaxItems().longValue());
 		assertEquals(12, items.getMinItems().longValue());
-		assertTrue(items.getExclusiveMaximum());
-		assertTrue(items.getExclusiveMinimum());
-		assertTrue(items.getUniqueItems());
+		assertTrue(items.isExclusiveMaximum());
+		assertTrue(items.isExclusiveMinimum());
+		assertTrue(items.isUniqueItems());
 		assertObjectEquals("['e5','e6']", items.getEnum());
 		assertEquals("c5\nc6", items.getDefault());
 
@@ -237,9 +237,9 @@ public class HttpPartSchemaTest_Response {
 		assertEquals(14, items.getMinLength().longValue());
 		assertEquals(15, items.getMaxItems().longValue());
 		assertEquals(16, items.getMinItems().longValue());
-		assertFalse(items.getExclusiveMaximum());
-		assertFalse(items.getExclusiveMinimum());
-		assertFalse(items.getUniqueItems());
+		assertFalse(items.isExclusiveMaximum());
+		assertFalse(items.isExclusiveMinimum());
+		assertFalse(items.isUniqueItems());
 		assertObjectEquals("['e7','e8']", items.getEnum());
 		assertEquals("c7\nc8", items.getDefault());
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_ResponseHeader.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_ResponseHeader.java
index 6bc92aa..58dfe0f 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_ResponseHeader.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_ResponseHeader.java
@@ -88,9 +88,9 @@ public class HttpPartSchemaTest_ResponseHeader {
 		assertEquals(2, s.getMinLength().longValue());
 		assertEquals(3, s.getMaxItems().longValue());
 		assertEquals(4, s.getMinItems().longValue());
-		assertTrue(s.getExclusiveMaximum());
-		assertTrue(s.getExclusiveMinimum());
-		assertTrue(s.getUniqueItems());
+		assertTrue(s.isExclusiveMaximum());
+		assertTrue(s.isExclusiveMinimum());
+		assertTrue(s.isUniqueItems());
 		assertObjectEquals("['e1','e2','e3']", s.getEnum());
 		assertEquals("c1\nc2", s.getDefault());
 		assertObjectEquals("{collectionFormat:'csv','default':'c1\\nc2',description:'b1\\nb2','enum':['e1','e2','e3'],example:'f1',exclusiveMaximum:true,exclusiveMinimum:true,format:'int32',items:{'$ref':'d1'},maximum:'1',maxItems:3,maxLength:1,minimum:'2',minItems:4,minLength:2,multipleOf:'3',pattern:'4',type:'number',uniqueItems:true,_value:'{g1:true}'}", s.getApi());
@@ -141,9 +141,9 @@ public class HttpPartSchemaTest_ResponseHeader {
 		assertEquals(2, s.getMinLength().longValue());
 		assertEquals(3, s.getMaxItems().longValue());
 		assertEquals(4, s.getMinItems().longValue());
-		assertTrue(s.getExclusiveMaximum());
-		assertTrue(s.getExclusiveMinimum());
-		assertTrue(s.getUniqueItems());
+		assertTrue(s.isExclusiveMaximum());
+		assertTrue(s.isExclusiveMinimum());
+		assertTrue(s.isUniqueItems());
 		assertObjectEquals("['e1','e2','e3']", s.getEnum());
 		assertEquals("c1\nc2", s.getDefault());
 		assertObjectEquals("{collectionFormat:'csv','default':'c1\\nc2',description:'b1\\nb2','enum':['e1','e2','e3'],example:'f1',exclusiveMaximum:true,exclusiveMinimum:true,format:'int32',items:{'$ref':'d1'},maximum:'1',maxItems:3,maxLength:1,minimum:'2',minItems:4,minLength:2,multipleOf:'3',pattern:'4',type:'number',uniqueItems:true,_value:'{g1:true}'}", s.getApi());
@@ -194,11 +194,11 @@ public class HttpPartSchemaTest_ResponseHeader {
 		assertEquals(6, s.getMinLength().longValue());
 		assertEquals(7, s.getMaxItems().longValue());
 		assertEquals(8, s.getMinItems().longValue());
-		assertNull(s.getExclusiveMaximum());
-		assertNull(s.getExclusiveMinimum());
-		assertNull(s.getUniqueItems());
-		assertNull(s.getRequired());
-		assertNull(s.getSkipIfEmpty());
+		assertFalse(s.isExclusiveMaximum());
+		assertFalse(s.isExclusiveMinimum());
+		assertFalse(s.isUniqueItems());
+		assertFalse(s.isRequired());
+		assertFalse(s.isSkipIfEmpty());
 		assertObjectEquals("['e4','e5','e6']", s.getEnum());
 		assertEquals("c3\nc4", s.getDefault());
 		assertObjectEquals("{collectionFormat:'ssv','default':'c3\\nc4',description:'b3\\nb3','enum':['e4','e5','e6'],example:'f2',format:'int64',items:{'$ref':'d2'},maximum:'5',maxItems:7,maxLength:5,minimum:'6',minItems:8,minLength:6,multipleOf:'7',pattern:'8',type:'integer',_value:'{g2:true}'}", s.getApi());
@@ -298,9 +298,9 @@ public class HttpPartSchemaTest_ResponseHeader {
 		assertEquals(2, items.getMinLength().longValue());
 		assertEquals(3, items.getMaxItems().longValue());
 		assertEquals(4, items.getMinItems().longValue());
-		assertTrue(items.getExclusiveMaximum());
-		assertTrue(items.getExclusiveMinimum());
-		assertTrue(items.getUniqueItems());
+		assertTrue(items.isExclusiveMaximum());
+		assertTrue(items.isExclusiveMinimum());
+		assertTrue(items.isUniqueItems());
 		assertObjectEquals("['e1','e2']", items.getEnum());
 		assertEquals("c1\nc2", items.getDefault());
 
@@ -316,9 +316,9 @@ public class HttpPartSchemaTest_ResponseHeader {
 		assertEquals(6, items.getMinLength().longValue());
 		assertEquals(7, items.getMaxItems().longValue());
 		assertEquals(8, items.getMinItems().longValue());
-		assertNull(items.getExclusiveMaximum());
-		assertNull(items.getExclusiveMinimum());
-		assertNull(items.getUniqueItems());
+		assertFalse(items.isExclusiveMaximum());
+		assertFalse(items.isExclusiveMinimum());
+		assertFalse(items.isUniqueItems());
 		assertObjectEquals("['e3','e4']", items.getEnum());
 		assertEquals("c3\nc4", items.getDefault());
 
@@ -334,9 +334,9 @@ public class HttpPartSchemaTest_ResponseHeader {
 		assertEquals(10, items.getMinLength().longValue());
 		assertEquals(11, items.getMaxItems().longValue());
 		assertEquals(12, items.getMinItems().longValue());
-		assertTrue(items.getExclusiveMaximum());
-		assertTrue(items.getExclusiveMinimum());
-		assertTrue(items.getUniqueItems());
+		assertTrue(items.isExclusiveMaximum());
+		assertTrue(items.isExclusiveMinimum());
+		assertTrue(items.isUniqueItems());
 		assertObjectEquals("['e5','e6']", items.getEnum());
 		assertEquals("c5\nc6", items.getDefault());
 
@@ -352,9 +352,9 @@ public class HttpPartSchemaTest_ResponseHeader {
 		assertEquals(14, items.getMinLength().longValue());
 		assertEquals(15, items.getMaxItems().longValue());
 		assertEquals(16, items.getMinItems().longValue());
-		assertFalse(items.getExclusiveMaximum());
-		assertFalse(items.getExclusiveMinimum());
-		assertFalse(items.getUniqueItems());
+		assertFalse(items.isExclusiveMaximum());
+		assertFalse(items.isExclusiveMinimum());
+		assertFalse(items.isUniqueItems());
 		assertObjectEquals("['e7','e8']", items.getEnum());
 		assertEquals("c7\nc8", items.getDefault());
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/OpenApiPartParserTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/OpenApiPartParserTest.java
index 52049b9..38b97ca 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/OpenApiPartParserTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/OpenApiPartParserTest.java
@@ -174,14 +174,14 @@ public class OpenApiPartParserTest {
 		}
 
 		try {
-			s = schema().minLength(-1l).build();
+			s = schema().minLength(-2l).build();
 			fail();
 		} catch (Exception e) {
 			assertTrue(e.getMessage().contains("minLength cannot be less than zero."));
 		}
 
 		try {
-			s = schema().maxLength(-1l).build();
+			s = schema().maxLength(-2l).build();
 			fail();
 		} catch (Exception e) {
 			assertTrue(e.getMessage().contains("maxLength cannot be less than zero."));
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Schema.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Schema.java
index 2267b0a..6d470e1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Schema.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Schema.java
@@ -324,7 +324,7 @@ public @interface Schema {
 	 * 		(e.g. <js>"$L{my.localized.variable}"</js>).
 	 * </ul>
 	 */
-	int maxProperties() default -1;
+	long maxProperties() default -1;
 
 
 	/**
@@ -340,7 +340,7 @@ public @interface Schema {
 	 * 		(e.g. <js>"$L{my.localized.variable}"</js>).
 	 * </ul>
 	 */
-	int minProperties() default -1;
+	long minProperties() default -1;
 
 	/**
 	 * <mk>required</mk> field of the Swagger <a class="doclink" href="https://swagger.io/specification/v2/#schemaObject">Schema</a> object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java
index 5dd9ff8..73c6317 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java
@@ -55,7 +55,7 @@ public class HttpPartSchema {
 	final String _default;
 	final Set<String> _enum;
 	final Map<String,HttpPartSchema> properties;
-	final Boolean allowEmptyValue, exclusiveMaximum, exclusiveMinimum, required, uniqueItems, skipIfEmpty;
+	final boolean allowEmptyValue, exclusiveMaximum, exclusiveMinimum, required, uniqueItems, skipIfEmpty;
 	final CollectionFormat collectionFormat;
 	final Type type;
 	final Format format;
@@ -279,12 +279,12 @@ public class HttpPartSchema {
 		this._default = b._default;
 		this._enum = copy(b._enum);
 		this.properties = build(b.properties, b.noValidate);
-		this.allowEmptyValue = b.allowEmptyValue;
-		this.exclusiveMaximum = b.exclusiveMaximum;
-		this.exclusiveMinimum = b.exclusiveMinimum;
-		this.required = b.required;
-		this.uniqueItems = b.uniqueItems;
-		this.skipIfEmpty = b.skipIfEmpty;
+		this.allowEmptyValue = resolve(b.allowEmptyValue);
+		this.exclusiveMaximum = resolve(b.exclusiveMaximum);
+		this.exclusiveMinimum = resolve(b.exclusiveMinimum);
+		this.required = resolve(b.required);
+		this.uniqueItems = resolve(b.uniqueItems);
+		this.skipIfEmpty = resolve(b.skipIfEmpty);
 		this.collectionFormat = b.collectionFormat;
 		this.type = b.type;
 		this.format = b.format;
@@ -342,9 +342,9 @@ public class HttpPartSchema {
 			case STRING: {
 				notAllowed.appendIf(properties != null, "properties");
 				notAllowed.appendIf(additionalProperties != null, "additionalProperties");
-				notAllowed.appendIf(exclusiveMaximum != null, "exclusiveMaximum");
-				notAllowed.appendIf(exclusiveMinimum != null, "exclusiveMinimum");
-				notAllowed.appendIf(uniqueItems != null, "uniqueItems");
+				notAllowed.appendIf(exclusiveMaximum, "exclusiveMaximum");
+				notAllowed.appendIf(exclusiveMinimum, "exclusiveMinimum");
+				notAllowed.appendIf(uniqueItems, "uniqueItems");
 				notAllowed.appendIf(collectionFormat != CollectionFormat.NO_COLLECTION_FORMAT, "collectionFormat");
 				notAllowed.appendIf(items != null, "items");
 				notAllowed.appendIf(maximum != null, "maximum");
@@ -359,8 +359,8 @@ public class HttpPartSchema {
 			case ARRAY: {
 				notAllowed.appendIf(properties != null, "properties");
 				notAllowed.appendIf(additionalProperties != null, "additionalProperties");
-				notAllowed.appendIf(exclusiveMaximum != null, "exclusiveMaximum");
-				notAllowed.appendIf(exclusiveMinimum != null, "exclusiveMinimum");
+				notAllowed.appendIf(exclusiveMaximum, "exclusiveMaximum");
+				notAllowed.appendIf(exclusiveMinimum, "exclusiveMinimum");
 				notAllowed.appendIf(pattern != null, "pattern");
 				notAllowed.appendIf(maximum != null, "maximum");
 				notAllowed.appendIf(minimum != null, "minimum");
@@ -376,9 +376,9 @@ public class HttpPartSchema {
 				notAllowed.appendIf(! _enum.isEmpty(), "_enum");
 				notAllowed.appendIf(properties != null, "properties");
 				notAllowed.appendIf(additionalProperties != null, "additionalProperties");
-				notAllowed.appendIf(exclusiveMaximum != null, "exclusiveMaximum");
-				notAllowed.appendIf(exclusiveMinimum != null, "exclusiveMinimum");
-				notAllowed.appendIf(uniqueItems != null, "uniqueItems");
+				notAllowed.appendIf(exclusiveMaximum, "exclusiveMaximum");
+				notAllowed.appendIf(exclusiveMinimum, "exclusiveMinimum");
+				notAllowed.appendIf(uniqueItems, "uniqueItems");
 				notAllowed.appendIf(collectionFormat != CollectionFormat.NO_COLLECTION_FORMAT, "collectionFormat");
 				notAllowed.appendIf(pattern != null, "pattern");
 				notAllowed.appendIf(items != null, "items");
@@ -400,7 +400,7 @@ public class HttpPartSchema {
 			case INTEGER: {
 				notAllowed.appendIf(properties != null, "properties");
 				notAllowed.appendIf(additionalProperties != null, "additionalProperties");
-				notAllowed.appendIf(uniqueItems != null, "uniqueItems");
+				notAllowed.appendIf(uniqueItems, "uniqueItems");
 				notAllowed.appendIf(collectionFormat != CollectionFormat.NO_COLLECTION_FORMAT, "collectionFormat");
 				notAllowed.appendIf(pattern != null, "pattern");
 				notAllowed.appendIf(items != null, "items");
@@ -416,7 +416,7 @@ public class HttpPartSchema {
 			case NUMBER: {
 				notAllowed.appendIf(properties != null, "properties");
 				notAllowed.appendIf(additionalProperties != null, "additionalProperties");
-				notAllowed.appendIf(uniqueItems != null, "uniqueItems");
+				notAllowed.appendIf(uniqueItems, "uniqueItems");
 				notAllowed.appendIf(collectionFormat != CollectionFormat.NO_COLLECTION_FORMAT, "collectionFormat");
 				notAllowed.appendIf(pattern != null, "pattern");
 				notAllowed.appendIf(items != null, "items");
@@ -430,9 +430,9 @@ public class HttpPartSchema {
 				break;
 			}
 			case OBJECT: {
-				notAllowed.appendIf(exclusiveMaximum != null, "exclusiveMaximum");
-				notAllowed.appendIf(exclusiveMinimum != null, "exclusiveMinimum");
-				notAllowed.appendIf(uniqueItems != null, "uniqueItems");
+				notAllowed.appendIf(exclusiveMaximum, "exclusiveMaximum");
+				notAllowed.appendIf(exclusiveMinimum, "exclusiveMinimum");
+				notAllowed.appendIf(uniqueItems, "uniqueItems");
 				notAllowed.appendIf(collectionFormat != CollectionFormat.NO_COLLECTION_FORMAT, "collectionFormat");
 				notAllowed.appendIf(pattern != null, "pattern");
 				notAllowed.appendIf(items != null, "items");
@@ -454,11 +454,11 @@ public class HttpPartSchema {
 			errors.add("Attributes not allow for type='"+type+"': " + StringUtils.join(notAllowed, ","));
 		if (invalidFormat)
 			errors.add("Invalid format for type='"+type+"': '"+format+"'");
-		if (exclusiveMaximum != null && maximum == null)
+		if (exclusiveMaximum && maximum == null)
 			errors.add("Cannot specify exclusiveMaximum with maximum.");
-		if (exclusiveMinimum != null && minimum == null)
+		if (exclusiveMinimum && minimum == null)
 			errors.add("Cannot specify exclusiveMinimum with minimum.");
-		if (required != null && required && _default != null)
+		if (required && _default != null)
 			errors.add("Cannot specify a default value on a required value.");
 		if (minLength != null && maxLength != null && maxLength < minLength)
 			errors.add("maxLength cannot be less than minLength.");
@@ -923,54 +923,64 @@ public class HttpPartSchema {
 	/**
 	 * Returns the <code>exclusiveMaximum</code> field of this schema.
 	 *
-	 * @return The <code>exclusiveMaximum</code> field of this schema, or <jk>null</jk> if not specified.
+	 * @return The <code>exclusiveMaximum</code> field of this schema.
 	 * @see HttpPartSchemaBuilder#exclusiveMaximum(Boolean)
 	 */
-	public Boolean getExclusiveMaximum() {
+	public boolean isExclusiveMaximum() {
 		return exclusiveMaximum;
 	}
 
 	/**
 	 * Returns the <code>exclusiveMinimum</code> field of this schema.
 	 *
-	 * @return The <code>exclusiveMinimum</code> field of this schema, or <jk>null</jk> if not specified.
+	 * @return The <code>exclusiveMinimum</code> field of this schema.
 	 * @see HttpPartSchemaBuilder#exclusiveMinimum(Boolean)
 	 */
-	public Boolean getExclusiveMinimum() {
+	public boolean isExclusiveMinimum() {
 		return exclusiveMinimum;
 	}
 
 	/**
 	 * Returns the <code>uniqueItems</code> field of this schema.
 	 *
-	 * @return The <code>uniqueItems</code> field of this schema, or <jk>null</jk> if not specified.
+	 * @return The <code>uniqueItems</code> field of this schema.
 	 * @see HttpPartSchemaBuilder#uniqueItems(Boolean)
 	 */
-	public Boolean getUniqueItems() {
+	public boolean isUniqueItems() {
 		return uniqueItems;
 	}
 
 	/**
 	 * Returns the <code>required</code> field of this schema.
 	 *
-	 * @return The <code>required</code> field of this schema, or <jk>null</jk> if not specified.
+	 * @return The <code>required</code> field of this schema.
 	 * @see HttpPartSchemaBuilder#required(Boolean)
 	 */
-	public Boolean getRequired() {
+	public boolean isRequired() {
 		return required;
 	}
 
 	/**
 	 * Returns the <code>skipIfEmpty</code> field of this schema.
 	 *
-	 * @return The <code>skipIfEmpty</code> field of this schema, or <jk>null</jk> if not specified.
+	 * @return The <code>skipIfEmpty</code> field of this schema.
 	 * @see HttpPartSchemaBuilder#skipIfEmpty(Boolean)
 	 */
-	public Boolean getSkipIfEmpty() {
+	public boolean isSkipIfEmpty() {
 		return skipIfEmpty;
 	}
 
 	/**
+	 * Returns the <code>allowEmptyValue</code> field of this schema.
+	 *
+	 * @return The <code>skipIfEmpty</code> field of this schema.
+	 * @see HttpPartSchemaBuilder#skipIfEmpty(Boolean)
+	 */
+	public boolean isAllowEmptyValue() {
+		return allowEmptyValue;
+	}
+
+	/**
 	 * Returns the <code>enum</code> field of this schema.
 	 *
 	 * @return The <code>enum</code> field of this schema, or <jk>null</jk> if not specified.
@@ -1135,7 +1145,7 @@ public class HttpPartSchema {
 	//-----------------------------------------------------------------------------------------------------------------
 
 	private boolean isValidRequired(Object x) {
-		return x != null || required == null || ! required;
+		return x != null || ! required;
 	}
 
 	private boolean isValidMinProperties(Map<?,?> x) {
@@ -1148,29 +1158,29 @@ public class HttpPartSchema {
 
 	private boolean isValidMinimum(Number x) {
 		if (x instanceof Integer)
-			return minimum == null || x.intValue() > minimum.intValue() || (x.intValue() == minimum.intValue() && (exclusiveMinimum == null || ! exclusiveMinimum));
+			return minimum == null || x.intValue() > minimum.intValue() || (x.intValue() == minimum.intValue() && (! exclusiveMinimum));
 		if (x instanceof Short)
-			return minimum == null || x.shortValue() > minimum.shortValue() || (x.intValue() == minimum.shortValue() && (exclusiveMinimum == null || ! exclusiveMinimum));
+			return minimum == null || x.shortValue() > minimum.shortValue() || (x.intValue() == minimum.shortValue() && (! exclusiveMinimum));
 		if (x instanceof Long)
-			return minimum == null || x.longValue() > minimum.longValue() || (x.intValue() == minimum.longValue() && (exclusiveMinimum == null || ! exclusiveMinimum));
+			return minimum == null || x.longValue() > minimum.longValue() || (x.intValue() == minimum.longValue() && (! exclusiveMinimum));
 		if (x instanceof Float)
-			return minimum == null || x.floatValue() > minimum.floatValue() || (x.floatValue() == minimum.floatValue() && (exclusiveMinimum == null || ! exclusiveMinimum));
+			return minimum == null || x.floatValue() > minimum.floatValue() || (x.floatValue() == minimum.floatValue() && (! exclusiveMinimum));
 		if (x instanceof Double)
-			return minimum == null || x.doubleValue() > minimum.doubleValue() || (x.doubleValue() == minimum.doubleValue() && (exclusiveMinimum == null || ! exclusiveMinimum));
+			return minimum == null || x.doubleValue() > minimum.doubleValue() || (x.doubleValue() == minimum.doubleValue() && (! exclusiveMinimum));
 		return true;
 	}
 
 	private boolean isValidMaximum(Number x) {
 		if (x instanceof Integer)
-			return maximum == null || x.intValue() < maximum.intValue() || (x.intValue() == maximum.intValue() && (exclusiveMaximum == null || ! exclusiveMaximum));
+			return maximum == null || x.intValue() < maximum.intValue() || (x.intValue() == maximum.intValue() && (! exclusiveMaximum));
 		if (x instanceof Short)
-			return maximum == null || x.shortValue() < maximum.shortValue() || (x.intValue() == maximum.shortValue() && (exclusiveMaximum == null || ! exclusiveMaximum));
+			return maximum == null || x.shortValue() < maximum.shortValue() || (x.intValue() == maximum.shortValue() && (! exclusiveMaximum));
 		if (x instanceof Long)
-			return maximum == null || x.longValue() < maximum.longValue() || (x.intValue() == maximum.longValue() && (exclusiveMaximum == null || ! exclusiveMaximum));
+			return maximum == null || x.longValue() < maximum.longValue() || (x.intValue() == maximum.longValue() && (! exclusiveMaximum));
 		if (x instanceof Float)
-			return maximum == null || x.floatValue() < maximum.floatValue() || (x.floatValue() == maximum.floatValue() && (exclusiveMaximum == null || ! exclusiveMaximum));
+			return maximum == null || x.floatValue() < maximum.floatValue() || (x.floatValue() == maximum.floatValue() && (! exclusiveMaximum));
 		if (x instanceof Double)
-			return maximum == null || x.doubleValue() < maximum.doubleValue() || (x.doubleValue() == maximum.doubleValue() && (exclusiveMaximum == null || ! exclusiveMaximum));
+			return maximum == null || x.doubleValue() < maximum.doubleValue() || (x.doubleValue() == maximum.doubleValue() && (! exclusiveMaximum));
 		return true;
 	}
 
@@ -1189,7 +1199,7 @@ public class HttpPartSchema {
 	}
 
 	private boolean isValidAllowEmpty(String x) {
-		return (allowEmptyValue != null && allowEmptyValue) || isNotEmpty(x);
+		return allowEmptyValue || isNotEmpty(x);
 	}
 
 	private boolean isValidPattern(String x) {
@@ -1217,7 +1227,7 @@ public class HttpPartSchema {
 	}
 
 	private boolean isValidUniqueItems(Object x) {
-		if (uniqueItems != null && uniqueItems) {
+		if (uniqueItems) {
 			Set<Object> s = new HashSet<>();
 			for (int i = 0; i < Array.getLength(x); i++) {
 				Object o = Array.get(x, i);
@@ -1237,7 +1247,7 @@ public class HttpPartSchema {
 	}
 
 	private boolean isValidUniqueItems(Collection<?> x) {
-		if (uniqueItems != null && uniqueItems && ! (x instanceof Set)) {
+		if (uniqueItems && ! (x instanceof Set)) {
 			Set<Object> s = new HashSet<>();
 			for (Object o : x)
 				if (! s.add(o))
@@ -1292,6 +1302,10 @@ public class HttpPartSchema {
 	// Helper methods.
 	//-----------------------------------------------------------------------------------------------------------------
 
+	private boolean resolve(Boolean b) {
+		return b == null ? false : b;
+	}
+
 	final static Set<String> toSet(String[] s) {
 		return toSet(joinnl(s));
 	}
@@ -1319,14 +1333,6 @@ public class HttpPartSchema {
 		}
 	}
 
-	final static Long toLong(long l) {
-		return l == -1 ? null : l;
-	}
-
-	final static Boolean toBoolean(boolean b) {
-		return b == false ? null : b;
-	}
-
 	final static ObjectMap toObjectMap(String[] ss) {
 		String s = joinnl(ss);
 		if (s.isEmpty())
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchemaBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchemaBuilder.java
index 16c0dcf..f7b7388 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchemaBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchemaBuilder.java
@@ -117,8 +117,8 @@ public class HttpPartSchemaBuilder {
 
 	HttpPartSchemaBuilder apply(Body a) {
 		api = AnnotationUtils.merge(api, a);
-		required(HttpPartSchema.toBoolean(a.required()));
-		allowEmptyValue(HttpPartSchema.toBoolean(! a.required()));
+		required(a.required());
+		allowEmptyValue(! a.required());
 		serializer(a.serializer());
 		parser(a.parser());
 		apply(a.schema());
@@ -129,26 +129,26 @@ public class HttpPartSchemaBuilder {
 		api = AnnotationUtils.merge(api, a);
 		name(a.value());
 		name(a.name());
-		required(HttpPartSchema.toBoolean(a.required()));
+		required(a.required());
 		type(a.type());
 		format(a.format());
-		allowEmptyValue(HttpPartSchema.toBoolean(a.allowEmptyValue()));
+		allowEmptyValue(a.allowEmptyValue());
 		items(a.items());
 		collectionFormat(a.collectionFormat());
 		_default(joinnl(a._default()));
 		maximum(HttpPartSchema.toNumber(a.maximum()));
-		exclusiveMaximum(HttpPartSchema.toBoolean(a.exclusiveMaximum()));
+		exclusiveMaximum(a.exclusiveMaximum());
 		minimum(HttpPartSchema.toNumber(a.minimum()));
-		exclusiveMinimum(HttpPartSchema.toBoolean(a.exclusiveMinimum()));
-		maxLength(HttpPartSchema.toLong(a.maxLength()));
-		minLength(HttpPartSchema.toLong(a.minLength()));
+		exclusiveMinimum(a.exclusiveMinimum());
+		maxLength(a.maxLength());
+		minLength(a.minLength());
 		pattern(a.pattern());
-		maxItems(HttpPartSchema.toLong(a.maxItems()));
-		minItems(HttpPartSchema.toLong(a.minItems()));
-		uniqueItems(HttpPartSchema.toBoolean(a.uniqueItems()));
+		maxItems(a.maxItems());
+		minItems(a.minItems());
+		uniqueItems(a.uniqueItems());
 		_enum(HttpPartSchema.toSet(a._enum()));
 		multipleOf(HttpPartSchema.toNumber(a.multipleOf()));
-		skipIfEmpty(HttpPartSchema.toBoolean(a.skipIfEmpty()));
+		skipIfEmpty(a.skipIfEmpty());
 		parser(a.parser());
 		serializer(a.serializer());
 		return this;
@@ -165,15 +165,15 @@ public class HttpPartSchemaBuilder {
 		collectionFormat(a.collectionFormat());
 		_default(joinnl(a._default()));
 		maximum(HttpPartSchema.toNumber(a.maximum()));
-		exclusiveMaximum(HttpPartSchema.toBoolean(a.exclusiveMaximum()));
+		exclusiveMaximum(a.exclusiveMaximum());
 		minimum(HttpPartSchema.toNumber(a.minimum()));
-		exclusiveMinimum(HttpPartSchema.toBoolean(a.exclusiveMinimum()));
-		maxLength(HttpPartSchema.toLong(a.maxLength()));
-		minLength(HttpPartSchema.toLong(a.minLength()));
+		exclusiveMinimum(a.exclusiveMinimum());
+		maxLength(a.maxLength());
+		minLength(a.minLength());
 		pattern(a.pattern());
-		maxItems(HttpPartSchema.toLong(a.maxItems()));
-		minItems(HttpPartSchema.toLong(a.minItems()));
-		uniqueItems(HttpPartSchema.toBoolean(a.uniqueItems()));
+		maxItems(a.maxItems());
+		minItems(a.minItems());
+		uniqueItems(a.uniqueItems());
 		_enum(HttpPartSchema.toSet(a._enum()));
 		multipleOf(HttpPartSchema.toNumber(a.multipleOf()));
 		allowEmptyValue(false);
@@ -192,26 +192,26 @@ public class HttpPartSchemaBuilder {
 		api = AnnotationUtils.merge(api, a);
 		name(a.value());
 		name(a.name());
-		required(HttpPartSchema.toBoolean(a.required()));
+		required(a.required());
 		type(a.type());
 		format(a.format());
-		allowEmptyValue(HttpPartSchema.toBoolean(a.allowEmptyValue()));
+		allowEmptyValue(a.allowEmptyValue());
 		items(a.items());
 		collectionFormat(a.collectionFormat());
 		_default(joinnl(a._default()));
 		maximum(HttpPartSchema.toNumber(a.maximum()));
-		exclusiveMaximum(HttpPartSchema.toBoolean(a.exclusiveMaximum()));
+		exclusiveMaximum(a.exclusiveMaximum());
 		minimum(HttpPartSchema.toNumber(a.minimum()));
-		exclusiveMinimum(HttpPartSchema.toBoolean(a.exclusiveMinimum()));
-		maxLength(HttpPartSchema.toLong(a.maxLength()));
-		minLength(HttpPartSchema.toLong(a.minLength()));
+		exclusiveMinimum(a.exclusiveMinimum());
+		maxLength(a.maxLength());
+		minLength(a.minLength());
 		pattern(a.pattern());
-		maxItems(HttpPartSchema.toLong(a.maxItems()));
-		minItems(HttpPartSchema.toLong(a.minItems()));
-		uniqueItems(HttpPartSchema.toBoolean(a.uniqueItems()));
+		maxItems(a.maxItems());
+		minItems(a.minItems());
+		uniqueItems(a.uniqueItems());
 		_enum(HttpPartSchema.toSet(a._enum()));
 		multipleOf(HttpPartSchema.toNumber(a.multipleOf()));
-		skipIfEmpty(HttpPartSchema.toBoolean(a.skipIfEmpty()));
+		skipIfEmpty(a.skipIfEmpty());
 		parser(a.parser());
 		serializer(a.serializer());
 		return this;
@@ -221,26 +221,26 @@ public class HttpPartSchemaBuilder {
 		api = AnnotationUtils.merge(api, a);
 		name(a.value());
 		name(a.name());
-		required(HttpPartSchema.toBoolean(a.required()));
+		required(a.required());
 		type(a.type());
 		format(a.format());
-		allowEmptyValue(HttpPartSchema.toBoolean(a.allowEmptyValue()));
+		allowEmptyValue(a.allowEmptyValue());
 		items(a.items());
 		collectionFormat(a.collectionFormat());
 		_default(joinnl(a._default()));
 		maximum(HttpPartSchema.toNumber(a.maximum()));
-		exclusiveMaximum(HttpPartSchema.toBoolean(a.exclusiveMaximum()));
+		exclusiveMaximum(a.exclusiveMaximum());
 		minimum(HttpPartSchema.toNumber(a.minimum()));
-		exclusiveMinimum(HttpPartSchema.toBoolean(a.exclusiveMinimum()));
-		maxLength(HttpPartSchema.toLong(a.maxLength()));
-		minLength(HttpPartSchema.toLong(a.minLength()));
+		exclusiveMinimum(a.exclusiveMinimum());
+		maxLength(a.maxLength());
+		minLength(a.minLength());
 		pattern(a.pattern());
-		maxItems(HttpPartSchema.toLong(a.maxItems()));
-		minItems(HttpPartSchema.toLong(a.minItems()));
-		uniqueItems(HttpPartSchema.toBoolean(a.uniqueItems()));
+		maxItems(a.maxItems());
+		minItems(a.minItems());
+		uniqueItems(a.uniqueItems());
 		_enum(HttpPartSchema.toSet(a._enum()));
 		multipleOf(HttpPartSchema.toNumber(a.multipleOf()));
-		skipIfEmpty(HttpPartSchema.toBoolean(a.skipIfEmpty()));
+		skipIfEmpty(a.skipIfEmpty());
 		parser(a.parser());
 		serializer(a.serializer());
 		return this;
@@ -253,14 +253,14 @@ public class HttpPartSchemaBuilder {
 		type(a.type());
 		format(a.format());
 		items(a.items());
-		allowEmptyValue(HttpPartSchema.toBoolean(a.allowEmptyValue()));
+		allowEmptyValue(a.allowEmptyValue());
 		collectionFormat(a.collectionFormat());
 		maximum(HttpPartSchema.toNumber(a.maximum()));
-		exclusiveMaximum(HttpPartSchema.toBoolean(a.exclusiveMaximum()));
+		exclusiveMaximum(a.exclusiveMaximum());
 		minimum(HttpPartSchema.toNumber(a.minimum()));
-		exclusiveMinimum(HttpPartSchema.toBoolean(a.exclusiveMinimum()));
-		maxLength(HttpPartSchema.toLong(a.maxLength()));
-		minLength(HttpPartSchema.toLong(a.minLength()));
+		exclusiveMinimum(a.exclusiveMinimum());
+		maxLength(a.maxLength());
+		minLength(a.minLength());
 		pattern(a.pattern());
 		_enum(HttpPartSchema.toSet(a._enum()));
 		multipleOf(HttpPartSchema.toNumber(a.multipleOf()));
@@ -288,15 +288,15 @@ public class HttpPartSchemaBuilder {
 		collectionFormat(a.collectionFormat());
 		_default(joinnl(a._default()));
 		maximum(HttpPartSchema.toNumber(a.maximum()));
-		exclusiveMaximum(HttpPartSchema.toBoolean(a.exclusiveMaximum()));
+		exclusiveMaximum(a.exclusiveMaximum());
 		minimum(HttpPartSchema.toNumber(a.minimum()));
-		exclusiveMinimum(HttpPartSchema.toBoolean(a.exclusiveMinimum()));
-		maxLength(HttpPartSchema.toLong(a.maxLength()));
-		minLength(HttpPartSchema.toLong(a.minLength()));
+		exclusiveMinimum(a.exclusiveMinimum());
+		maxLength(a.maxLength());
+		minLength(a.minLength());
 		pattern(a.pattern());
-		maxItems(HttpPartSchema.toLong(a.maxItems()));
-		minItems(HttpPartSchema.toLong(a.minItems()));
-		uniqueItems(HttpPartSchema.toBoolean(a.uniqueItems()));
+		maxItems(a.maxItems());
+		minItems(a.minItems());
+		uniqueItems(a.uniqueItems());
 		_enum(HttpPartSchema.toSet(a._enum()));
 		multipleOf(HttpPartSchema.toNumber(a.multipleOf()));
 		return this;
@@ -310,15 +310,15 @@ public class HttpPartSchemaBuilder {
 		collectionFormat(a.collectionFormat());
 		_default(joinnl(a._default()));
 		maximum(HttpPartSchema.toNumber(a.maximum()));
-		exclusiveMaximum(HttpPartSchema.toBoolean(a.exclusiveMaximum()));
+		exclusiveMaximum(a.exclusiveMaximum());
 		minimum(HttpPartSchema.toNumber(a.minimum()));
-		exclusiveMinimum(HttpPartSchema.toBoolean(a.exclusiveMinimum()));
-		maxLength(HttpPartSchema.toLong(a.maxLength()));
-		minLength(HttpPartSchema.toLong(a.minLength()));
+		exclusiveMinimum(a.exclusiveMinimum());
+		maxLength(a.maxLength());
+		minLength(a.minLength());
 		pattern(a.pattern());
-		maxItems(HttpPartSchema.toLong(a.maxItems()));
-		minItems(HttpPartSchema.toLong(a.minItems()));
-		uniqueItems(HttpPartSchema.toBoolean(a.uniqueItems()));
+		maxItems(a.maxItems());
+		minItems(a.minItems());
+		uniqueItems(a.uniqueItems());
 		_enum(HttpPartSchema.toSet(a._enum()));
 		multipleOf(HttpPartSchema.toNumber(a.multipleOf()));
 		return this;
@@ -330,19 +330,19 @@ public class HttpPartSchemaBuilder {
 		items(a.items());
 		_default(joinnl(a._default()));
 		maximum(HttpPartSchema.toNumber(a.maximum()));
-		exclusiveMaximum(HttpPartSchema.toBoolean(a.exclusiveMaximum()));
+		exclusiveMaximum(a.exclusiveMaximum());
 		minimum(HttpPartSchema.toNumber(a.minimum()));
-		exclusiveMinimum(HttpPartSchema.toBoolean(a.exclusiveMinimum()));
-		maxLength(HttpPartSchema.toLong(a.maxLength()));
-		minLength(HttpPartSchema.toLong(a.minLength()));
+		exclusiveMinimum(a.exclusiveMinimum());
+		maxLength(a.maxLength());
+		minLength(a.minLength());
 		pattern(a.pattern());
-		maxItems(HttpPartSchema.toLong(a.maxItems()));
-		minItems(HttpPartSchema.toLong(a.minItems()));
-		uniqueItems(HttpPartSchema.toBoolean(a.uniqueItems()));
+		maxItems(a.maxItems());
+		minItems(a.minItems());
+		uniqueItems(a.uniqueItems());
 		_enum(HttpPartSchema.toSet(a._enum()));
 		multipleOf(HttpPartSchema.toNumber(a.multipleOf()));
-		maxProperties(HttpPartSchema.toLong(a.maxProperties()));
-		minProperties(HttpPartSchema.toLong(a.minProperties()));
+		maxProperties(a.maxProperties());
+		minProperties(a.minProperties());
 		properties(HttpPartSchema.toObjectMap(a.properties()));
 		additionalProperties(HttpPartSchema.toObjectMap(a.additionalProperties()));
 		return this;
@@ -475,8 +475,26 @@ public class HttpPartSchemaBuilder {
 	 * @return This object (for method chaining).
 	 */
 	public HttpPartSchemaBuilder required(Boolean value) {
-		if (value != null)
-			required = value;
+		required = resolve(value, required);
+		return this;
+	}
+
+	/**
+	 * <mk>required</mk> field.
+	 *
+	 * <p>
+	 * Determines whether the parameter is mandatory.
+	 *
+	 * <p>
+	 * Same as {@Link #required(Boolean)} but takes in a boolean value as a string.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Ignored if value is <jk>null</jk> or empty.
+	 * @return This object (for method chaining).
+	 */
+	public HttpPartSchemaBuilder required(String value) {
+		required = resolve(value, required);
 		return this;
 	}
 
@@ -659,8 +677,23 @@ public class HttpPartSchemaBuilder {
 	 * @return This object (for method chaining).
 	 */
 	public HttpPartSchemaBuilder allowEmptyValue(Boolean value) {
-		if (value != null)
-			allowEmptyValue = value;
+		allowEmptyValue = resolve(value, allowEmptyValue);
+		return this;
+	}
+
+	/**
+	 * <mk>allowEmptyValue</mk> field.
+	 *
+	 * <p>
+	 * Same as {@link #allowEmptyValue(Boolean)} but takes in a string boolean value.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Ignored if value is <jk>null</jk> or empty.
+	 * @return This object (for method chaining).
+	 */
+	public HttpPartSchemaBuilder allowEmptyValue(String value) {
+		allowEmptyValue = resolve(value, allowEmptyValue);
 		return this;
 	}
 
@@ -861,8 +894,23 @@ public class HttpPartSchemaBuilder {
 	 * @return This object (for method chaining).
 	 */
 	public HttpPartSchemaBuilder exclusiveMaximum(Boolean value) {
-		if (value != null)
-			this.exclusiveMaximum = value;
+		exclusiveMaximum = resolve(value, exclusiveMaximum);
+		return this;
+	}
+
+	/**
+	 * <mk>exclusiveMaximum</mk> field.
+	 *
+	 * <p>
+	 * Same as {@link #exclusiveMaximum(Boolean)} but takes in a string boolean value.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Ignored if value is <jk>null</jk> or empty.
+	 * @return This object (for method chaining).
+	 */
+	public HttpPartSchemaBuilder exclusiveMaximum(String value) {
+		exclusiveMaximum = resolve(value, exclusiveMaximum);
 		return this;
 	}
 
@@ -932,8 +980,23 @@ public class HttpPartSchemaBuilder {
 	 * @return This object (for method chaining).
 	 */
 	public HttpPartSchemaBuilder exclusiveMinimum(Boolean value) {
-		if (value != null)
-			this.exclusiveMinimum = value;
+		exclusiveMinimum = resolve(value, exclusiveMinimum);
+		return this;
+	}
+
+	/**
+	 * <mk>exclusiveMinimum</mk> field.
+	 *
+	 * <p>
+	 * Same as {@link #exclusiveMinimum(Boolean)} but takes in a string boolean value.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Ignored if value is <jk>null</jk> or empty.
+	 * @return This object (for method chaining).
+	 */
+	public HttpPartSchemaBuilder exclusiveMinimum(String value) {
+		exclusiveMinimum = resolve(value, exclusiveMinimum);
 		return this;
 	}
 
@@ -970,12 +1033,27 @@ public class HttpPartSchemaBuilder {
 	 *
 	 * @param value
 	 * 	The new value for this property.
-	 * 	<br>Ignored if value is <jk>null</jk>.
+	 * 	<br>Ignored if value is <jk>null</jk> or <code>-1</code>.
 	 * @return This object (for method chaining).
 	 */
 	public HttpPartSchemaBuilder maxLength(Long value) {
-		if (value != null)
-			this.maxLength = value;
+		maxLength = resolve(value, maxLength);
+		return this;
+	}
+
+	/**
+	 * <mk>maxLength</mk> field.
+	 *
+	 * <p>
+	 * Same as {@link #maxLength(Long)} but takes in a string number.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Ignored if value is <jk>null</jk> or empty.
+	 * @return This object (for method chaining).
+	 */
+	public HttpPartSchemaBuilder maxLength(String value) {
+		maxLength = resolve(value, maxLength);
 		return this;
 	}
 
@@ -1000,12 +1078,27 @@ public class HttpPartSchemaBuilder {
 	 *
 	 * @param value
 	 * 	The new value for this property.
-	 * 	<br>Ignored if value is <jk>null</jk>.
+	 * 	<br>Ignored if value is <jk>null</jk> or <code>-1</code>.
 	 * @return This object (for method chaining).
 	 */
 	public HttpPartSchemaBuilder minLength(Long value) {
-		if (value != null)
-			this.minLength = value;
+		minLength = resolve(value, minLength);
+		return this;
+	}
+
+	/**
+	 * <mk>minLength</mk> field.
+	 *
+	 * <p>
+	 * Same as {@link #minLength(Long)} but takes in a string number.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Ignored if value is <jk>null</jk> or empty.
+	 * @return This object (for method chaining).
+	 */
+	public HttpPartSchemaBuilder minLength(String value) {
+		minLength = resolve(value, minLength);
 		return this;
 	}
 
@@ -1062,12 +1155,27 @@ public class HttpPartSchemaBuilder {
 	 *
 	 * @param value
 	 * 	The new value for this property.
-	 * 	<br>Ignored if value is <jk>null</jk>.
+	 * 	<br>Ignored if value is <jk>null</jk> or <code>-1</code>.
 	 * @return This object (for method chaining).
 	 */
 	public HttpPartSchemaBuilder maxItems(Long value) {
-		if (value != null)
-			this.maxItems = value;
+		maxItems = resolve(value, maxItems);
+		return this;
+	}
+
+	/**
+	 * <mk>maxItems</mk> field.
+	 *
+	 * <p>
+	 * Same as {@link #maxItems(Long)} but takes in a string number.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Ignored if value is <jk>null</jk> or empty.
+	 * @return This object (for method chaining).
+	 */
+	public HttpPartSchemaBuilder maxItems(String value) {
+		maxItems = resolve(value, maxItems);
 		return this;
 	}
 
@@ -1091,12 +1199,27 @@ public class HttpPartSchemaBuilder {
 	 *
 	 * @param value
 	 * 	The new value for this property.
-	 * 	<br>Ignored if value is <jk>null</jk>.
+	 * 	<br>Ignored if value is <jk>null</jk> or <code>-1<code>.
 	 * @return This object (for method chaining).
 	 */
 	public HttpPartSchemaBuilder minItems(Long value) {
-		if (value != null)
-			this.minItems = value;
+		minItems = resolve(value, minItems);
+		return this;
+	}
+
+	/**
+	 * <mk>minItems</mk> field.
+	 *
+	 * <p>
+	 * Same as {@link #minItems(Long)} but takes in a string number.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Ignored if value is <jk>null</jk> or empty.
+	 * @return This object (for method chaining).
+	 */
+	public HttpPartSchemaBuilder minItems(String value) {
+		minItems = resolve(value, minItems);
 		return this;
 	}
 
@@ -1128,8 +1251,23 @@ public class HttpPartSchemaBuilder {
 	 * @return This object (for method chaining).
 	 */
 	public HttpPartSchemaBuilder uniqueItems(Boolean value) {
-		if (value != null)
-			this.uniqueItems = value;
+		uniqueItems = resolve(value, uniqueItems);
+		return this;
+	}
+
+	/**
+	 * <mk>uniqueItems</mk> field.
+	 *
+	 * <p>
+	 * Same as {@link #uniqueItems(Boolean)} but takes in a string boolean.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Ignored if value is <jk>null</jk> or empty..
+	 * @return This object (for method chaining).
+	 */
+	public HttpPartSchemaBuilder uniqueItems(String value) {
+		uniqueItems = resolve(value, uniqueItems);
 		return this;
 	}
 
@@ -1146,7 +1284,10 @@ public class HttpPartSchemaBuilder {
 	}
 
 	/**
-	 * Identifies whether an item should be skipped if it's empty.
+	 * <mk>skipIfEmpty</mk> field.
+	 *
+	 * <p>
+	 * Identifies whether an item should be skipped during serialization if it's empty.
 	 *
 	 * @param value
 	 * 	The new value for this property.
@@ -1154,8 +1295,23 @@ public class HttpPartSchemaBuilder {
 	 * @return This object (for method chaining).
 	 */
 	public HttpPartSchemaBuilder skipIfEmpty(Boolean value) {
-		if (value != null)
-			this.skipIfEmpty = value;
+		skipIfEmpty = resolve(value, skipIfEmpty);
+		return this;
+	}
+
+	/**
+	 * <mk>skipIfEmpty</mk> field.
+	 *
+	 * <p>
+	 * Same as {@link #skipIfEmpty(Boolean)} but takes in a string boolean.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Ignored if value is <jk>null</jk> or empty.
+	 * @return This object (for method chaining).
+	 */
+	public HttpPartSchemaBuilder skipIfEmpty(String value) {
+		skipIfEmpty = resolve(value, skipIfEmpty);
 		return this;
 	}
 
@@ -1252,12 +1408,27 @@ public class HttpPartSchemaBuilder {
 	 *
 	 * @param value
 	 * 	The new value for this property.
-	 * 	<br>Ignored if value is <jk>null</jk>.
+	 * 	<br>Ignored if value is <jk>null</jk> or <code>-1</code>.
 	 * @return This object (for method chaining).
 	 */
 	public HttpPartSchemaBuilder maxProperties(Long value) {
-		if (value != null && value != -1)
-			this.maxProperties = value;
+		maxProperties = resolve(value, maxProperties);
+		return this;
+	}
+
+	/**
+	 * <mk>mapProperties</mk> field.
+	 *
+	 * <p>
+	 * Same as {@link #maxProperties(Long)} but takes in a string number.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Ignored if value is <jk>null</jk> or empty.
+	 * @return This object (for method chaining).
+	 */
+	public HttpPartSchemaBuilder maxProperties(String value) {
+		maxProperties = resolve(value, maxProperties);
 		return this;
 	}
 
@@ -1276,8 +1447,23 @@ public class HttpPartSchemaBuilder {
 	 * @return This object (for method chaining).
 	 */
 	public HttpPartSchemaBuilder minProperties(Long value) {
-		if (value != null && value != -1)
-			this.minProperties = value;
+		minProperties = resolve(value, minProperties);
+		return this;
+	}
+
+	/**
+	 * <mk>minProperties</mk> field.
+	 *
+	 * <p>
+	 * Same as {@link #minProperties(Long)} but takes in a string boolean.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Ignored if value is <jk>null</jk> or empty.
+	 * @return This object (for method chaining).
+	 */
+	public HttpPartSchemaBuilder minProperties(String value) {
+		minProperties = resolve(value, minProperties);
 		return this;
 	}
 
@@ -1390,4 +1576,20 @@ public class HttpPartSchemaBuilder {
 	public HttpPartSchemaBuilder noValidate() {
 		return noValidate(true);
 	}
+
+	private Boolean resolve(String newValue, Boolean oldValue) {
+		return isEmpty(newValue) ? oldValue : Boolean.valueOf(newValue);
+	}
+
+	private Boolean resolve(Boolean newValue, Boolean oldValue) {
+		return newValue == null ? oldValue : newValue;
+	}
+
+	private Long resolve(String newValue, Long oldValue) {
+		return isEmpty(newValue) ? oldValue : Long.parseLong(newValue);
+	}
+
+	private Long resolve(Long newValue, Long oldValue) {
+		return (newValue == null || newValue == -1) ? oldValue : newValue;
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RemoteMethodArg.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RemoteMethodArg.java
index b715b85..5725950 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RemoteMethodArg.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RemoteMethodArg.java
@@ -45,7 +45,7 @@ public final class RemoteMethodArg {
 		this.serializer = newInstance(HttpPartSerializer.class, schema == null ? null : schema.getSerializer());
 		this.schema = schema;
 		this.name = schema == null ? null : schema.getName();
-		this.skipIfEmpty = schema == null || schema.getSkipIfEmpty() == null ? false : schema.getSkipIfEmpty();
+		this.skipIfEmpty = schema == null ? false : schema.isSkipIfEmpty();
 	}
 
 	RemoteMethodArg(HttpPartType partType, HttpPartSchema schema, String defaultName) {
@@ -54,7 +54,7 @@ public final class RemoteMethodArg {
 		this.serializer = newInstance(HttpPartSerializer.class, schema == null ? null : schema.getSerializer());
 		this.schema = schema;
 		this.name = StringUtils.firstNonEmpty(schema == null ? null : schema.getName(), defaultName);
-		this.skipIfEmpty = schema == null || schema.getSkipIfEmpty() == null ? false : schema.getSkipIfEmpty();
+		this.skipIfEmpty = schema == null ? false : schema.isSkipIfEmpty();
 	}
 
 	/**