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 1e75ad9  Tests.
1e75ad9 is described below

commit 1e75ad92efd5dde6403caa38974e634c43ed13cb
Author: JamesBognar <[email protected]>
AuthorDate: Thu Jul 5 13:22:48 2018 -0400

    Tests.
---
 .../juneau/httppart/OpenApiPartParserTest.java     | 840 +++++++++++++++++----
 .../org/apache/juneau/testutils/TestUtils.java     |   4 +
 .../org/apache/juneau/httppart/HttpPartSchema.java |  82 +-
 .../juneau/httppart/HttpPartSchemaBuilder.java     |  27 +-
 .../apache/juneau/httppart/OpenApiPartParser.java  | 105 ++-
 .../org/apache/juneau/uon/UonParserSession.java    |   4 +-
 6 files changed, 886 insertions(+), 176 deletions(-)

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 1b5078b..6ab32fa 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
@@ -14,12 +14,14 @@ package org.apache.juneau.httppart;
 
 import static org.junit.Assert.*;
 import static org.apache.juneau.testutils.TestUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 
 import java.io.*;
 import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.internal.*;
+import org.apache.juneau.json.*;
 import org.junit.*;
 
 public class OpenApiPartParserTest {
@@ -32,13 +34,13 @@ public class OpenApiPartParserTest {
 
        @Test
        public void a01_inputValidations_nullInput() throws Exception {
-               HttpPartSchema s = HttpPartSchema.create().build();
+               HttpPartSchema s = schema().build();
                assertNull(p.parse(s, null, String.class));
 
-               s = HttpPartSchema.create().required(false).build();
+               s = schema().required(false).build();
                assertNull(p.parse(s, null, String.class));
 
-               s = HttpPartSchema.create().required().build();
+               s = schema().required().build();
                try {
                        p.parse(s, null, String.class);
                        fail();
@@ -46,7 +48,7 @@ public class OpenApiPartParserTest {
                        assertEquals("No value specified.", e.getMessage());
                }
 
-               s = HttpPartSchema.create().required(true).build();
+               s = schema().required(true).build();
                try {
                        p.parse(s, null, String.class);
                        fail();
@@ -58,13 +60,13 @@ public class OpenApiPartParserTest {
        @Test
        public void a02_inputValidations_emptyInput() throws Exception {
 
-               HttpPartSchema s = 
HttpPartSchema.create().allowEmptyValue().build();
+               HttpPartSchema s = schema().allowEmptyValue().build();
                assertEquals("", p.parse(s, "", String.class));
 
-               s = HttpPartSchema.create().allowEmptyValue().build();
+               s = schema().allowEmptyValue().build();
                assertEquals("", p.parse(s, "", String.class));
 
-               s = HttpPartSchema.create().allowEmptyValue(false).build();
+               s = schema().allowEmptyValue(false).build();
                try {
                        p.parse(s, "", String.class);
                        fail();
@@ -84,7 +86,7 @@ public class OpenApiPartParserTest {
 
        @Test
        public void a03_inputValidations_pattern() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().pattern("x.*").allowEmptyValue().build();
+               HttpPartSchema s = 
schema().pattern("x.*").allowEmptyValue().build();
                assertEquals("x", p.parse(s, "x", String.class));
                assertEquals("xx", p.parse(s, "xx", String.class));
                assertEquals(null, p.parse(s, null, String.class));
@@ -104,15 +106,15 @@ public class OpenApiPartParserTest {
                }
 
                // Blank/null patterns are ignored.
-               s = 
HttpPartSchema.create().pattern("").allowEmptyValue().build();
+               s = schema().pattern("").allowEmptyValue().build();
                assertEquals("x", p.parse(s, "x", String.class));
-               s = 
HttpPartSchema.create().pattern(null).allowEmptyValue().build();
+               s = schema().pattern(null).allowEmptyValue().build();
                assertEquals("x", p.parse(s, "x", String.class));
        }
 
        @Test
        public void a04_inputValidations_enum() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create()._enum("foo").allowEmptyValue().build();
+               HttpPartSchema s = 
schema()._enum("foo").allowEmptyValue().build();
 
                assertEquals("foo", p.parse(s, "foo", String.class));
                assertEquals(null, p.parse(s, null, String.class));
@@ -131,18 +133,18 @@ public class OpenApiPartParserTest {
                        assertEquals("Value does not match one of the expected 
values.  Must be one of the following: ['foo']", e.getMessage());
                }
 
-               s = HttpPartSchema.create()._enum((Set<String>)null).build();
+               s = schema()._enum((Set<String>)null).build();
                assertEquals("foo", p.parse(s, "foo", String.class));
-               s = 
HttpPartSchema.create()._enum((Set<String>)null).allowEmptyValue().build();
+               s = schema()._enum((Set<String>)null).allowEmptyValue().build();
                assertEquals("foo", p.parse(s, "foo", String.class));
 
-               s = HttpPartSchema.create()._enum("foo","foo").build();
+               s = schema()._enum("foo","foo").build();
                assertEquals("foo", p.parse(s, "foo", String.class));
        }
 
        @Test
        public void a05_inputValidations_minMaxLength() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().minLength(1l).maxLength(2l).allowEmptyValue().build();
+               HttpPartSchema s = 
schema().minLength(1l).maxLength(2l).allowEmptyValue().build();
 
                assertEquals(null, p.parse(s, null, String.class));
                assertEquals("1", p.parse(s, "1", String.class));
@@ -163,21 +165,21 @@ public class OpenApiPartParserTest {
                }
 
                try {
-                       s = 
HttpPartSchema.create().minLength(2l).maxLength(1l).build();
+                       s = schema().minLength(2l).maxLength(1l).build();
                        fail();
                } catch (Exception e) {
                        assertTrue(e.getMessage().contains("maxLength cannot be 
less than minLength."));
                }
 
                try {
-                       s = HttpPartSchema.create().minLength(-1l).build();
+                       s = schema().minLength(-1l).build();
                        fail();
                } catch (Exception e) {
                        assertTrue(e.getMessage().contains("minLength cannot be 
less than zero."));
                }
 
                try {
-                       s = HttpPartSchema.create().maxLength(-1l).build();
+                       s = schema().maxLength(-1l).build();
                        fail();
                } catch (Exception e) {
                        assertTrue(e.getMessage().contains("maxLength cannot be 
less than zero."));
@@ -213,23 +215,32 @@ public class OpenApiPartParserTest {
        // type = string
        
//-----------------------------------------------------------------------------------------------------------------
 
-       @Test
-       public void c01_stringType_simple() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().type("string").build();
-               assertEquals("foo", p.parse(s, "foo", String.class));
+       public static class C1 {
+               private String f;
+               public C1(byte[] b) {
+                       f = "C1-" + new String(b);
+               }
+               @Override
+               public String toString() {
+                       return f;
+               }
        }
 
-       @Test
-       public void c02_stringType_default() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().type("string")._default("x").build();
-               assertEquals("foo", p.parse(s, "foo", String.class));
-               assertEquals("x", p.parse(s, null, String.class));
+       public static class C2 {
+               private String f;
+               public C2(String s) {
+                       f = "C2-" + s;
+               }
+               @Override
+               public String toString() {
+                       return f;
+               }
        }
 
        public static class C3 {
                private String f;
-               public C3(byte[] b) {
-                       f = new String(b);
+               public C3(String[] in) {
+                       f = "C3-" + JsonSerializer.DEFAULT_LAX.toString(in);
                }
                @Override
                public String toString() {
@@ -237,39 +248,53 @@ public class OpenApiPartParserTest {
                }
        }
 
+
+       @Test
+       public void c01_stringType_simple() throws Exception {
+               HttpPartSchema s = schema("string").build();
+               assertEquals("foo", p.parse(s, "foo", String.class));
+       }
+
+       @Test
+       public void c02_stringType_default() throws Exception {
+               HttpPartSchema s = schema("string")._default("x").build();
+               assertEquals("foo", p.parse(s, "foo", String.class));
+               assertEquals("x", p.parse(s, null, String.class));
+       }
+
        @Test
        public void c03_stringType_byteFormat() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().type("string").format("byte").build();
-               String in = StringUtils.base64Encode("foo".getBytes());
+               HttpPartSchema s = schema("string", "byte").build();
+               String in = base64Encode("foo".getBytes());
                assertEquals("foo", p.parse(s, in, String.class));
                assertEquals("foo", IOUtils.read(p.parse(s, in, 
InputStream.class)));
                assertEquals("foo", IOUtils.read(p.parse(s, in, Reader.class)));
-               assertEquals("foo", p.parse(s, in, C3.class).toString());
+               assertEquals("C1-foo", p.parse(s, in, C1.class).toString());
        }
 
        @Test
        public void c04_stringType_binaryFormat() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().type("string").format("binary").build();
-               String in = StringUtils.toHex("foo".getBytes());
+               HttpPartSchema s = schema("string", "binary").build();
+               String in = toHex("foo".getBytes());
                assertEquals("foo", p.parse(s, in, String.class));
                assertEquals("foo", IOUtils.read(p.parse(s, in, 
InputStream.class)));
                assertEquals("foo", IOUtils.read(p.parse(s, in, Reader.class)));
-               assertEquals("foo", p.parse(s, in, C3.class).toString());
+               assertEquals("C1-foo", p.parse(s, in, C1.class).toString());
        }
 
        @Test
        public void c05_stringType_binarySpacedFormat() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().type("string").format("binary-spaced").build();
-               String in = StringUtils.toSpacedHex("foo".getBytes());
+               HttpPartSchema s = schema("string", "binary-spaced").build();
+               String in = toSpacedHex("foo".getBytes());
                assertEquals("foo", p.parse(s, in, String.class));
                assertEquals("foo", IOUtils.read(p.parse(s, in, 
InputStream.class)));
                assertEquals("foo", IOUtils.read(p.parse(s, in, Reader.class)));
-               assertEquals("foo", p.parse(s, in, C3.class).toString());
+               assertEquals("C1-foo", p.parse(s, in, C1.class).toString());
        }
 
        @Test
        public void c06_stringType_dateFormat() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().type("string").format("date").build();
+               HttpPartSchema s = schema("string", "date").build();
                String in = "2012-12-21";
                assertTrue(p.parse(s, in, String.class).contains("2012"));
                assertTrue(p.parse(s, in, 
Date.class).toString().contains("2012"));
@@ -279,7 +304,7 @@ public class OpenApiPartParserTest {
 
        @Test
        public void c07_stringType_dateTimeFormat() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().type("string").format("date-time").build();
+               HttpPartSchema s = schema("string", "date-time").build();
                String in = "2012-12-21T12:34:56.789";
                assertTrue(p.parse(s, in, String.class).contains("2012"));
                assertTrue(p.parse(s, in, 
Date.class).toString().contains("2012"));
@@ -287,35 +312,56 @@ public class OpenApiPartParserTest {
                assertEquals(2012, p.parse(s, in, 
GregorianCalendar.class).get(Calendar.YEAR));
        }
 
-       public static class C8 {
-               private String f;
-               public C8(String s) {
-                       f = s;
-               }
-               @Override
-               public String toString() {
-                       return f;
-               }
-       }
-
        @Test
        public void c08_stringType_uonFormat() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().type("string").format("uon").build();
+               HttpPartSchema s = schema("string", "uon").build();
                assertEquals("foo", p.parse(s, "foo", String.class));
                assertEquals("foo", p.parse(s, "'foo'", String.class));
-               assertEquals("foo", p.parse(s, "'foo'", C8.class).toString());
-               assertEquals("C8", p.parse(s, "'foo'", 
C8.class).getClass().getSimpleName());
+               assertEquals("C2-foo", p.parse(s, "'foo'", 
C2.class).toString());
                // UonPartParserTest should handle all other cases.
        }
 
        @Test
-       public void c08_stringType_noneFormat() throws Exception {
+       public void c09_stringType_noneFormat() throws Exception {
                // If no format is specified, then we should transform directly 
from a string.
-               HttpPartSchema s = 
HttpPartSchema.create().type("string").build();
+               HttpPartSchema s = schema("string").build();
                assertEquals("foo", p.parse(s, "foo", String.class));
                assertEquals("'foo'", p.parse(s, "'foo'", String.class));
-               assertEquals("foo", p.parse(s, "foo", C8.class).toString());
-               assertEquals("C8", p.parse(s, "foo", 
C8.class).getClass().getSimpleName());
+               assertEquals("C2-foo", p.parse(s, "foo", C2.class).toString());
+       }
+
+       @Test
+       public void c10_stringType_noneFormat_2d() throws Exception {
+               HttpPartSchema s = 
schema("array").items(schema("string")).build();
+               assertObjectEquals("['foo','bar']", p.parse(s, "foo,bar", 
String[].class));
+               assertObjectEquals("['foo','bar']", p.parse(s, "foo,bar", 
List.class, String.class));
+               assertObjectEquals("['foo','bar']", p.parse(s, "foo,bar", 
Object[].class));
+               assertObjectEquals("['foo','bar']", p.parse(s, "foo,bar", 
List.class, Object.class));
+               Object o = p.parse(s, "foo,bar", Object.class);
+               assertObjectEquals("['foo','bar']", o);
+               assertClass(ObjectList.class, o);
+               assertObjectEquals("['C2-foo','C2-bar']", p.parse(s, "foo,bar", 
C2[].class));
+               assertObjectEquals("['C2-foo','C2-bar']", p.parse(s, "foo,bar", 
List.class, C2.class));
+               assertEquals("C3-['foo','bar']", p.parse(s, "foo,bar", 
C3.class).toString());
+       }
+
+       @Test
+       public void c11_stringType_noneFormat_3d() throws Exception {
+               HttpPartSchema s = 
schema("array").collectionFormat("pipes").items(schema("array").items(schema("string"))).build();
+               assertObjectEquals("[['foo','bar'],['baz']]", p.parse(s, 
"foo,bar|baz", String[][].class));
+               assertObjectEquals("[['foo','bar'],['baz']]", p.parse(s, 
"foo,bar|baz", List.class, String[].class));
+               assertObjectEquals("[['foo','bar'],['baz']]", p.parse(s, 
"foo,bar|baz", List.class, List.class, String.class));
+               assertObjectEquals("[['foo','bar'],['baz']]", p.parse(s, 
"foo,bar|baz", Object[][].class));
+               assertObjectEquals("[['foo','bar'],['baz']]", p.parse(s, 
"foo,bar|baz", List.class, Object[].class));
+               assertObjectEquals("[['foo','bar'],['baz']]", p.parse(s, 
"foo,bar|baz", List.class, List.class, Object.class));
+               Object o = p.parse(s, "foo,bar|baz", Object.class);
+               assertObjectEquals("[['foo','bar'],['baz']]", o);
+               assertClass(ObjectList.class, o);
+               assertObjectEquals("[['C2-foo','C2-bar'],['C2-baz']]", 
p.parse(s, "foo,bar|baz", C2[][].class));
+               assertObjectEquals("[['C2-foo','C2-bar'],['C2-baz']]", 
p.parse(s, "foo,bar|baz", List.class, C2[].class));
+               assertObjectEquals("[['C2-foo','C2-bar'],['C2-baz']]", 
p.parse(s, "foo,bar|baz", List.class, List.class, C2.class));
+               
assertObjectEquals("['C3-[\\'foo\\',\\'bar\\']','C3-[\\'baz\\']']", p.parse(s, 
"foo,bar|baz", C3[].class));
+               
assertObjectEquals("['C3-[\\'foo\\',\\'bar\\']','C3-[\\'baz\\']']", p.parse(s, 
"foo,bar|baz", List.class, C3.class));
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
@@ -325,7 +371,7 @@ public class OpenApiPartParserTest {
        public static class D {
                private String f;
                public D(String in) {
-                       this.f = in;
+                       this.f = "D-" + in;
                }
                @Override
                public String toString() {
@@ -335,121 +381,121 @@ public class OpenApiPartParserTest {
 
        @Test
        public void d01_arrayType_collectionFormatCsv() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().type("array").collectionFormat("csv").build();
+               HttpPartSchema s = 
schema("array").collectionFormat("csv").build();
                assertObjectEquals("['foo','bar']", p.parse(s, "foo,bar", 
String[].class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo,bar", 
Object[].class));
-               assertObjectEquals("['foo','bar']", p.parse(s, "foo,bar", 
D[].class));
+               assertObjectEquals("['D-foo','D-bar']", p.parse(s, "foo,bar", 
D[].class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo,bar", 
List.class, String.class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo,bar", 
List.class, Object.class));
-               assertObjectEquals("['foo','bar']", p.parse(s, "foo,bar", 
List.class, D.class));
+               assertObjectEquals("['D-foo','D-bar']", p.parse(s, "foo,bar", 
List.class, D.class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo,bar", 
Object.class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo,bar", 
ObjectList.class));
        }
 
        @Test
        public void d02_arrayType_collectionFormatPipes() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().type("array").collectionFormat("pipes").build();
+               HttpPartSchema s = 
schema("array").collectionFormat("pipes").build();
                assertObjectEquals("['foo','bar']", p.parse(s, "foo|bar", 
String[].class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo|bar", 
Object[].class));
-               assertObjectEquals("['foo','bar']", p.parse(s, "foo|bar", 
D[].class));
+               assertObjectEquals("['D-foo','D-bar']", p.parse(s, "foo|bar", 
D[].class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo|bar", 
List.class, String.class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo|bar", 
List.class, Object.class));
-               assertObjectEquals("['foo','bar']", p.parse(s, "foo|bar", 
List.class, D.class));
+               assertObjectEquals("['D-foo','D-bar']", p.parse(s, "foo|bar", 
List.class, D.class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo|bar", 
Object.class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo|bar", 
ObjectList.class));
        }
 
        @Test
        public void d03_arrayType_collectionFormatSsv() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().type("array").collectionFormat("ssv").build();
+               HttpPartSchema s = 
schema("array").collectionFormat("ssv").build();
                assertObjectEquals("['foo','bar']", p.parse(s, "foo bar", 
String[].class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo bar", 
Object[].class));
-               assertObjectEquals("['foo','bar']", p.parse(s, "foo bar", 
D[].class));
+               assertObjectEquals("['D-foo','D-bar']", p.parse(s, "foo bar", 
D[].class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo bar", 
List.class, String.class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo bar", 
List.class, Object.class));
-               assertObjectEquals("['foo','bar']", p.parse(s, "foo bar", 
List.class, D.class));
+               assertObjectEquals("['D-foo','D-bar']", p.parse(s, "foo bar", 
List.class, D.class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo bar", 
Object.class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo bar", 
ObjectList.class));
        }
 
        @Test
        public void d04_arrayType_collectionFormatTsv() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().type("array").collectionFormat("tsv").build();
+               HttpPartSchema s = 
schema("array").collectionFormat("tsv").build();
                assertObjectEquals("['foo','bar']", p.parse(s, "foo\tbar", 
String[].class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo\tbar", 
Object[].class));
-               assertObjectEquals("['foo','bar']", p.parse(s, "foo\tbar", 
D[].class));
+               assertObjectEquals("['D-foo','D-bar']", p.parse(s, "foo\tbar", 
D[].class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo\tbar", 
List.class, String.class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo\tbar", 
List.class, Object.class));
-               assertObjectEquals("['foo','bar']", p.parse(s, "foo\tbar", 
List.class, D.class));
+               assertObjectEquals("['D-foo','D-bar']", p.parse(s, "foo\tbar", 
List.class, D.class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo\tbar", 
Object.class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo\tbar", 
ObjectList.class));
        }
 
        @Test
        public void d05_arrayType_collectionFormatUon() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().type("array").collectionFormat("uon").build();
+               HttpPartSchema s = 
schema("array").collectionFormat("uon").build();
                assertObjectEquals("['foo','bar']", p.parse(s, "@(foo,bar)", 
String[].class));
                assertObjectEquals("['foo','bar']", p.parse(s, "@(foo,bar)", 
Object[].class));
-               assertObjectEquals("['foo','bar']", p.parse(s, "@(foo,bar)", 
D[].class));
+               assertObjectEquals("['D-foo','D-bar']", p.parse(s, 
"@(foo,bar)", D[].class));
                assertObjectEquals("['foo','bar']", p.parse(s, "@(foo,bar)", 
List.class, String.class));
                assertObjectEquals("['foo','bar']", p.parse(s, "@(foo,bar)", 
List.class, Object.class));
-               assertObjectEquals("['foo','bar']", p.parse(s, "@(foo,bar)", 
List.class, D.class));
+               assertObjectEquals("['D-foo','D-bar']", p.parse(s, 
"@(foo,bar)", List.class, D.class));
                assertObjectEquals("['foo','bar']", p.parse(s, "@(foo,bar)", 
Object.class));
                assertObjectEquals("['foo','bar']", p.parse(s, "@(foo,bar)", 
ObjectList.class));
        }
 
        @Test
        public void d06a_arrayType_collectionFormatNone() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().type("array").build();
+               HttpPartSchema s = schema("array").build();
                assertObjectEquals("['foo','bar']", p.parse(s, "foo,bar", 
String[].class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo,bar", 
Object[].class));
-               assertObjectEquals("['foo','bar']", p.parse(s, "foo,bar", 
D[].class));
+               assertObjectEquals("['D-foo','D-bar']", p.parse(s, "foo,bar", 
D[].class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo,bar", 
List.class, String.class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo,bar", 
List.class, Object.class));
-               assertObjectEquals("['foo','bar']", p.parse(s, "foo,bar", 
List.class, D.class));
+               assertObjectEquals("['D-foo','D-bar']", p.parse(s, "foo,bar", 
List.class, D.class));
                assertObjectEquals("['foo','bar']", p.parse(s, "foo,bar", 
Object.class));
        }
 
        @Test
        public void d06b_arrayType_collectionFormatNone_autoDetectUon() throws 
Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().type("array").build();
+               HttpPartSchema s = schema("array").build();
                assertObjectEquals("['foo','bar']", p.parse(s, "@(foo,bar)", 
String[].class));
                assertObjectEquals("['foo','bar']", p.parse(s, "@(foo,bar)", 
Object[].class));
-               assertObjectEquals("['foo','bar']", p.parse(s, "@(foo,bar)", 
D[].class));
+               assertObjectEquals("['D-foo','D-bar']", p.parse(s, 
"@(foo,bar)", D[].class));
                assertObjectEquals("['foo','bar']", p.parse(s, "@(foo,bar)", 
List.class, String.class));
                assertObjectEquals("['foo','bar']", p.parse(s, "@(foo,bar)", 
List.class, Object.class));
-               assertObjectEquals("['foo','bar']", p.parse(s, "@(foo,bar)", 
List.class, D.class));
+               assertObjectEquals("['D-foo','D-bar']", p.parse(s, 
"@(foo,bar)", List.class, D.class));
                assertObjectEquals("['foo','bar']", p.parse(s, "@(foo,bar)", 
Object.class));
        }
 
        @Test
        public void d07_arrayType_collectionFormatMulti() throws Exception {
                // collectionFormat=multi should not do any sort of splitting.
-               HttpPartSchema s = 
HttpPartSchema.create().type("array").collectionFormat("multi").build();
+               HttpPartSchema s = 
schema("array").collectionFormat("multi").build();
                assertObjectEquals("['foo,bar']", p.parse(s, "foo,bar", 
String[].class));
                assertObjectEquals("['foo,bar']", p.parse(s, "foo,bar", 
Object[].class));
-               assertObjectEquals("['foo,bar']", p.parse(s, "foo,bar", 
D[].class));
+               assertObjectEquals("['D-foo,bar']", p.parse(s, "foo,bar", 
D[].class));
                assertObjectEquals("['foo,bar']", p.parse(s, "foo,bar", 
List.class, String.class));
                assertObjectEquals("['foo,bar']", p.parse(s, "foo,bar", 
List.class, Object.class));
-               assertObjectEquals("['foo,bar']", p.parse(s, "foo,bar", 
List.class, D.class));
+               assertObjectEquals("['D-foo,bar']", p.parse(s, "foo,bar", 
List.class, D.class));
                assertObjectEquals("['foo,bar']", p.parse(s, "foo,bar", 
Object.class));
        }
 
        @Test
        public void d08_arrayType_collectionFormatCsvAndPipes() throws 
Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().type("array").collectionFormat("pipes").items(HttpPartSchema.create().type("array").collectionFormat("csv")).build();
+               HttpPartSchema s = 
schema("array").collectionFormat("pipes").items(schema("array").collectionFormat("csv")).build();
                assertObjectEquals("[['foo','bar'],['baz','qux']]", p.parse(s, 
"foo,bar|baz,qux", String[][].class));
                assertObjectEquals("[['foo','bar'],['baz','qux']]", p.parse(s, 
"foo,bar|baz,qux", Object[][].class));
-               assertObjectEquals("[['foo','bar'],['baz','qux']]", p.parse(s, 
"foo,bar|baz,qux", D[][].class));
+               assertObjectEquals("[['D-foo','D-bar'],['D-baz','D-qux']]", 
p.parse(s, "foo,bar|baz,qux", D[][].class));
                assertObjectEquals("[['foo','bar'],['baz','qux']]", p.parse(s, 
"foo,bar|baz,qux", List.class, List.class, String.class));
                assertObjectEquals("[['foo','bar'],['baz','qux']]", p.parse(s, 
"foo,bar|baz,qux", List.class, List.class, Object.class));
-               assertObjectEquals("[['foo','bar'],['baz','qux']]", p.parse(s, 
"foo,bar|baz,qux", List.class, List.class, D.class));
+               assertObjectEquals("[['D-foo','D-bar'],['D-baz','D-qux']]", 
p.parse(s, "foo,bar|baz,qux", List.class, List.class, D.class));
                assertObjectEquals("[['foo','bar'],['baz','qux']]", p.parse(s, 
"foo,bar|baz,qux", Object.class));
        }
 
        @Test
        public void d09_arrayType_itemsInteger() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().type("array").collectionFormat("csv").items(HttpPartSchema.create().type("integer")).build();
+               HttpPartSchema s = 
schema("array").collectionFormat("csv").items(schema("integer")).build();
                assertObjectEquals("[1,2]", p.parse(s, "1,2", int[].class));
                assertObjectEquals("[1,2]", p.parse(s, "1,2", Integer[].class));
                assertObjectEquals("[1,2]", p.parse(s, "1,2", Object[].class));
@@ -462,110 +508,624 @@ public class OpenApiPartParserTest {
        // type = boolean
        
//-----------------------------------------------------------------------------------------------------------------
 
+       public static class E1 {
+               private String f;
+               public E1(Boolean in) {
+                       this.f = "E1-" + in.toString();
+               }
+               @Override
+               public String toString() {
+                       return f;
+               }
+       }
+
+       public static class E2 {
+               private String f;
+               public E2(Boolean[] in) {
+                       this.f = "E2-" + 
JsonSerializer.DEFAULT_LAX.toString(in);
+               }
+               @Override
+               public String toString() {
+                       return f;
+               }
+       }
+
        @Test
        public void e01_booleanType() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().type("boolean").build();
+               HttpPartSchema s = schema("boolean").build();
                assertEquals(true, p.parse(s, "true", boolean.class));
                assertEquals(true, p.parse(s, "true", Boolean.class));
                assertEquals(true, p.parse(s, "True", boolean.class));
                assertEquals(true, p.parse(s, "TRUE", boolean.class));
                assertEquals("true", p.parse(s, "true", String.class));
                assertEquals(true, p.parse(s, "true", Object.class));
+               assertObjectEquals("'E1-true'", p.parse(s, "true", E1.class));
        }
 
        @Test
        public void e02_booleanType_2d() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().type("array").items(HttpPartSchema.create().type("boolean")).build();
+               HttpPartSchema s = 
schema("array").items(schema("boolean")).build();
                assertObjectEquals("[true,true]", p.parse(s, "true,true", 
boolean[].class));
                assertObjectEquals("[true,true]", p.parse(s, "true,true", 
Boolean[].class));
                assertObjectEquals("[true,true]", p.parse(s, "true,true", 
List.class, Boolean.class));
-               assertObjectEquals("[true,true]", p.parse(s, "True,true", 
boolean[].class));
-               assertObjectEquals("[true,true]", p.parse(s, "TRUE,true", 
boolean[].class));
                assertObjectEquals("['true','true']", p.parse(s, "true,true", 
String[].class));
                assertObjectEquals("['true','true']", p.parse(s, "true,true", 
List.class, String.class));
                assertObjectEquals("[true,true]", p.parse(s, "true,true", 
Object[].class));
                assertObjectEquals("[true,true]", p.parse(s, "true,true", 
List.class, Object.class));
+               assertObjectEquals("['E1-true','E1-true']", p.parse(s, 
"true,true", E1[].class));
+               assertObjectEquals("['E1-true','E1-true']", p.parse(s, 
"true,true", List.class, E1.class));
+               assertObjectEquals("'E2-[true,true]'", p.parse(s, "true,true", 
E2.class));
+
+               assertObjectEquals("[true,true]", p.parse(s, "True,true", 
boolean[].class));
+               assertObjectEquals("[true,true]", p.parse(s, "TRUE,true", 
boolean[].class));
        }
 
        @Test
        public void e03_booleanType_3d() throws Exception {
-               HttpPartSchema s = 
HttpPartSchema.create().type("array").collectionFormat("pipes").items(HttpPartSchema.create().type("array").items(HttpPartSchema.create().type("boolean"))).build();
+               HttpPartSchema s = 
schema("array").collectionFormat("pipes").items(schema("array").items(schema("boolean"))).build();
                assertObjectEquals("[[true,true],[false]]", p.parse(s, 
"true,true|false", boolean[][].class));
                assertObjectEquals("[[true,true],[false]]", p.parse(s, 
"true,true|false", List.class, boolean[].class));
                assertObjectEquals("[[true,true],[false]]", p.parse(s, 
"true,true|false", Boolean[][].class));
-               assertObjectEquals("[[true,true],[false]]", p.parse(s, 
"true,true|false", List.class, List.class, Boolean.class));
                assertObjectEquals("[[true,true],[false]]", p.parse(s, 
"true,true|false", List.class, Boolean[].class));
-               assertObjectEquals("[[true,true],[false]]", p.parse(s, 
"True,true|false", boolean[][].class));
-               assertObjectEquals("[[true,true],[false]]", p.parse(s, 
"TRUE,true|false", boolean[][].class));
+               assertObjectEquals("[[true,true],[false]]", p.parse(s, 
"true,true|false", List.class, List.class, Boolean.class));
                assertObjectEquals("[['true','true'],['false']]", p.parse(s, 
"true,true|false", String[][].class));
                assertObjectEquals("[['true','true'],['false']]", p.parse(s, 
"true,true|false", List.class, List.class, String.class));
                assertObjectEquals("[['true','true'],['false']]", p.parse(s, 
"true,true|false", List.class, String[].class));
                assertObjectEquals("[[true,true],[false]]", p.parse(s, 
"true,true|false", Object[][].class));
                assertObjectEquals("[[true,true],[false]]", p.parse(s, 
"true,true|false", List.class, List.class, Object.class));
                assertObjectEquals("[[true,true],[false]]", p.parse(s, 
"true,true|false", List.class, Object[].class));
+               assertObjectEquals("[['E1-true','E1-true'],['E1-false']]", 
p.parse(s, "true,true|false", E1[][].class));
+               assertObjectEquals("[['E1-true','E1-true'],['E1-false']]", 
p.parse(s, "true,true|false", List.class, List.class, E1.class));
+               assertObjectEquals("[['E1-true','E1-true'],['E1-false']]", 
p.parse(s, "true,true|false", List.class, E1[].class));
+               assertObjectEquals("['E2-[true,true]','E2-[false]']", 
p.parse(s, "true,true|false", E2[].class));
+               assertObjectEquals("['E2-[true,true]','E2-[false]']", 
p.parse(s, "true,true|false", List.class, E2.class));
+
+               assertObjectEquals("[[true,true],[false]]", p.parse(s, 
"True,true|false", boolean[][].class));
+               assertObjectEquals("[[true,true],[false]]", p.parse(s, 
"TRUE,true|false", boolean[][].class));
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
        // type = integer
        
//-----------------------------------------------------------------------------------------------------------------
 
+       public static class F1 {
+               private String f;
+               public F1(Integer in) {
+                       this.f = "F1-" + in.toString();
+               }
+               @Override
+               public String toString() {
+                       return f;
+               }
+       }
+
+       public static class F2 {
+               private String f;
+               public F2(Integer[] in) {
+                       this.f = "F2-" + 
JsonSerializer.DEFAULT_LAX.toString(in);
+               }
+               @Override
+               public String toString() {
+                       return f;
+               }
+       }
+
+       public static class F3 {
+               private String f;
+               public F3(Long in) {
+                       this.f = "F3-" + in.toString();
+               }
+               @Override
+               public String toString() {
+                       return f;
+               }
+       }
+
+       public static class F4 {
+               private String f;
+               public F4(Long[] in) {
+                       this.f = "F4-" + 
JsonSerializer.DEFAULT_LAX.toString(in);
+               }
+               @Override
+               public String toString() {
+                       return f;
+               }
+       }
+
+       @Test
+       public void f01_integerType_int32() throws Exception {
+               HttpPartSchema s = schema("integer", "int32").build();
+               assertObjectEquals("1", p.parse(s, "1", int.class));
+               assertObjectEquals("1", p.parse(s, "1", Integer.class));
+               assertObjectEquals("1", p.parse(s, "1", short.class));
+               assertObjectEquals("1", p.parse(s, "1", Short.class));
+               assertObjectEquals("1", p.parse(s, "1", long.class));
+               assertObjectEquals("1", p.parse(s, "1", Long.class));
+               assertObjectEquals("'1'", p.parse(s, "1", String.class));
+               Object o = p.parse(s, "1", Object.class);
+               assertObjectEquals("1", o);
+               assertClass(Integer.class, o);
+               assertObjectEquals("'F1-1'", p.parse(s,  "1", F1.class));
+       }
+
+       @Test
+       public void f02_integerType_int32_2d() throws Exception {
+               HttpPartSchema s = schema("array").items(schema("integer", 
"int32")).build();
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", int[].class));
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", Integer[].class));
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", List.class, 
Integer.class));
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", short[].class));
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", Short[].class));
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", List.class, 
Short.class));
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", long[].class));
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", Long[].class));
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", List.class, 
Long.class));
+               assertObjectEquals("['1','2']", p.parse(s, "1,2", 
String[].class));
+               assertObjectEquals("['1','2']", p.parse(s, "1,2", List.class, 
String.class));
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", Object[].class));
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", List.class, 
Object.class));
+               assertObjectEquals("['F1-1','F1-2']", p.parse(s,  "1,2", 
F1[].class));
+               assertObjectEquals("['F1-1','F1-2']", p.parse(s,  "1,2", 
List.class, F1.class));
+               assertObjectEquals("'F2-[1,2]'", p.parse(s,  "1,2", F2.class));
+       }
+
+       @Test
+       public void f03_integerType_int32_3d() throws Exception {
+               HttpPartSchema s = 
schema("array").collectionFormat("pipes").items(schema("array").items(schema("integer",
 "int32"))).build();
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
int[][].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, int[].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
Integer[][].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, Integer[].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, List.class, Integer.class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
short[][].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, short[].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
Short[][].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, Short[].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, List.class, Short.class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
long[][].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, long[].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
Long[][].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, Long[].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, List.class, Long.class));
+               assertObjectEquals("[['1','2'],['3']]", p.parse(s, "1,2|3", 
String[][].class));
+               assertObjectEquals("[['1','2'],['3']]", p.parse(s, "1,2|3", 
List.class, String[].class));
+               assertObjectEquals("[['1','2'],['3']]", p.parse(s, "1,2|3", 
List.class, List.class, String.class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
Object[][].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, Object[].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, List.class, Object.class));
+               assertObjectEquals("[['F1-1','F1-2'],['F1-3']]", p.parse(s,  
"1,2|3", F1[][].class));
+               assertObjectEquals("[['F1-1','F1-2'],['F1-3']]", p.parse(s,  
"1,2|3", List.class, F1[].class));
+               assertObjectEquals("[['F1-1','F1-2'],['F1-3']]", p.parse(s,  
"1,2|3", List.class, List.class, F1.class));
+               assertObjectEquals("['F2-[1,2]','F2-[3]']", p.parse(s, "1,2|3", 
F2[].class));
+               assertObjectEquals("['F2-[1,2]','F2-[3]']", p.parse(s, "1,2|3", 
List.class, F2.class));
+       }
+
+       @Test
+       public void f04_integerType_int64() throws Exception {
+               HttpPartSchema s = schema("integer", "int64").build();
+               assertObjectEquals("1", p.parse(s, "1", int.class));
+               assertObjectEquals("1", p.parse(s, "1", Integer.class));
+               assertObjectEquals("1", p.parse(s, "1", short.class));
+               assertObjectEquals("1", p.parse(s, "1", Short.class));
+               assertObjectEquals("1", p.parse(s, "1", long.class));
+               assertObjectEquals("1", p.parse(s, "1", Long.class));
+               assertObjectEquals("'1'", p.parse(s, "1", String.class));
+               Object o = p.parse(s, "1", Object.class);
+               assertObjectEquals("1", o);
+               assertClass(Long.class, o);
+               assertObjectEquals("'F3-1'", p.parse(s,  "1", F3.class));
+       }
+
+       @Test
+       public void f05_integerType_int64_2d() throws Exception {
+               HttpPartSchema s = schema("array").items(schema("integer", 
"int64")).build();
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", int[].class));
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", Integer[].class));
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", List.class, 
Integer.class));
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", short[].class));
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", Short[].class));
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", List.class, 
Short.class));
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", long[].class));
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", Long[].class));
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", List.class, 
Long.class));
+               assertObjectEquals("['1','2']", p.parse(s, "1,2", 
String[].class));
+               assertObjectEquals("['1','2']", p.parse(s, "1,2", List.class, 
String.class));
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", Object[].class));
+               assertObjectEquals("[1,2]", p.parse(s, "1,2", List.class, 
Object.class));
+               assertObjectEquals("['F3-1','F3-2']", p.parse(s,  "1,2", 
F3[].class));
+               assertObjectEquals("['F3-1','F3-2']", p.parse(s,  "1,2", 
List.class, F3.class));
+               assertObjectEquals("'F4-[1,2]'", p.parse(s,  "1,2", F4.class));
+       }
+
+       @Test
+       public void f06_integerType_int64_3d() throws Exception {
+               HttpPartSchema s = 
schema("array").collectionFormat("pipes").items(schema("array").items(schema("integer",
 "int64"))).build();
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
int[][].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, int[].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
Integer[][].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, Integer[].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, List.class, Integer.class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
short[][].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, short[].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
Short[][].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, Short[].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, List.class, Short.class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
long[][].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, long[].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
Long[][].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, Long[].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, List.class, Long.class));
+               assertObjectEquals("[['1','2'],['3']]", p.parse(s, "1,2|3", 
String[][].class));
+               assertObjectEquals("[['1','2'],['3']]", p.parse(s, "1,2|3", 
List.class, String[].class));
+               assertObjectEquals("[['1','2'],['3']]", p.parse(s, "1,2|3", 
List.class, List.class, String.class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
Object[][].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, Object[].class));
+               assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", 
List.class, List.class, Object.class));
+               assertObjectEquals("[['F3-1','F3-2'],['F3-3']]", p.parse(s,  
"1,2|3", F3[][].class));
+               assertObjectEquals("[['F3-1','F3-2'],['F3-3']]", p.parse(s,  
"1,2|3", List.class, F3[].class));
+               assertObjectEquals("[['F3-1','F3-2'],['F3-3']]", p.parse(s,  
"1,2|3", List.class, List.class, F3.class));
+               assertObjectEquals("['F4-[1,2]','F4-[3]']", p.parse(s, "1,2|3", 
F4[].class));
+               assertObjectEquals("['F4-[1,2]','F4-[3]']", p.parse(s, "1,2|3", 
List.class, F4.class));
+       }
 
-//                             case INTEGER: {
-//                                     if (type.isObject()) {
-//                                             switch (schema.getFormat()) {
-//                                                     case INT64:
-//                                                             type = 
(ClassMeta<T>)getClassMeta(Long.class);
-//                                                             break;
-//                                                     default:
-//                                                             type = 
(ClassMeta<T>)getClassMeta(Integer.class);
-//
-//                                             }
-//                                     }
-//                                     return super.parse(partType, schema, 
in, type);
-//                             }
 
        
//-----------------------------------------------------------------------------------------------------------------
        // type = number
        
//-----------------------------------------------------------------------------------------------------------------
-//                             case NUMBER: {
-//                                     if (type.isObject()) {
-//                                             switch (schema.getFormat()) {
-//                                                     case DOUBLE:
-//                                                             type = 
(ClassMeta<T>)getClassMeta(Double.class);
-//                                                             break;
-//                                                     default:
-//                                                             type = 
(ClassMeta<T>)getClassMeta(Float.class);
-//                                             }
-//                                     }
-//                                     return super.parse(partType, schema, 
in, type);
-//                             }
+
+       public static class G1 {
+               private String f;
+               public G1(Float in) {
+                       this.f = "G1-" + in.toString();
+               }
+               @Override
+               public String toString() {
+                       return f;
+               }
+       }
+
+       public static class G2 {
+               private String f;
+               public G2(Float[] in) {
+                       this.f = "G2-" + 
JsonSerializer.DEFAULT_LAX.toString(in);
+               }
+               @Override
+               public String toString() {
+                       return f;
+               }
+       }
+
+       public static class G3 {
+               private String f;
+               public G3(Double in) {
+                       this.f = "G3-" + in.toString();
+               }
+               @Override
+               public String toString() {
+                       return f;
+               }
+       }
+
+       public static class G4 {
+               private String f;
+               public G4(Double[] in) {
+                       this.f = "G4-" + 
JsonSerializer.DEFAULT_LAX.toString(in);
+               }
+               @Override
+               public String toString() {
+                       return f;
+               }
+       }
+
+       @Test
+       public void g01_numberType_float() throws Exception {
+               HttpPartSchema s = schema("number", "float").build();
+               assertObjectEquals("1.0", p.parse(s, "1", float.class));
+               assertObjectEquals("1.0", p.parse(s, "1", Float.class));
+               assertObjectEquals("1.0", p.parse(s, "1", double.class));
+               assertObjectEquals("1.0", p.parse(s, "1", Double.class));
+               assertObjectEquals("'1'", p.parse(s, "1", String.class));
+               Object o =  p.parse(s, "1", Object.class);
+               assertObjectEquals("1.0",o);
+               assertClass(Float.class, o);
+               assertObjectEquals("'G1-1.0'", p.parse(s,  "1", G1.class));
+       }
+
+       @Test
+       public void g02_numberType_float_2d() throws Exception {
+               HttpPartSchema s = schema("array").items(schema("number", 
"float")).build();
+               assertObjectEquals("[1.0,2.0]", p.parse(s, "1,2", 
float[].class));
+               assertObjectEquals("[1.0,2.0]", p.parse(s, "1,2", 
Float[].class));
+               assertObjectEquals("[1.0,2.0]", p.parse(s, "1,2", List.class, 
Float.class));
+               assertObjectEquals("[1.0,2.0]", p.parse(s, "1,2", 
double[].class));
+               assertObjectEquals("[1.0,2.0]", p.parse(s, "1,2", 
Double[].class));
+               assertObjectEquals("[1.0,2.0]", p.parse(s, "1,2", List.class, 
Double.class));
+               assertObjectEquals("['1','2']", p.parse(s, "1,2", 
String[].class));
+               assertObjectEquals("['1','2']", p.parse(s, "1,2", List.class, 
String.class));
+               assertObjectEquals("[1.0,2.0]", p.parse(s, "1,2", 
Object[].class));
+               assertObjectEquals("[1.0,2.0]", p.parse(s, "1,2", List.class, 
Object.class));
+               assertObjectEquals("['G1-1.0','G1-2.0']", p.parse(s,  "1,2", 
G1[].class));
+               assertObjectEquals("['G1-1.0','G1-2.0']", p.parse(s,  "1,2", 
List.class, G1.class));
+               assertObjectEquals("'G2-[1.0,2.0]'", p.parse(s,  "1,2", 
G2.class));
+       }
+
+       @Test
+       public void g03_numberType_float_3d() throws Exception {
+               HttpPartSchema s = 
schema("array").collectionFormat("pipes").items(schema("array").items(schema("number",
 "float"))).build();
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
float[][].class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
List.class, float[].class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
Float[][].class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
List.class, Float[].class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
List.class, List.class, Float.class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
double[][].class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
List.class, double[].class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
Double[][].class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
List.class, Double[].class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
List.class, List.class, Double.class));
+               assertObjectEquals("[['1','2'],['3']]", p.parse(s, "1,2|3", 
String[][].class));
+               assertObjectEquals("[['1','2'],['3']]", p.parse(s, "1,2|3", 
List.class, String[].class));
+               assertObjectEquals("[['1','2'],['3']]", p.parse(s, "1,2|3", 
List.class, List.class, String.class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
Object[][].class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
List.class, Object[].class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
List.class, List.class, Object.class));
+               assertObjectEquals("[['G1-1.0','G1-2.0'],['G1-3.0']]", 
p.parse(s,  "1,2|3", G1[][].class));
+               assertObjectEquals("[['G1-1.0','G1-2.0'],['G1-3.0']]", 
p.parse(s,  "1,2|3", List.class, G1[].class));
+               assertObjectEquals("[['G1-1.0','G1-2.0'],['G1-3.0']]", 
p.parse(s,  "1,2|3", List.class, List.class, G1.class));
+               assertObjectEquals("['G2-[1.0,2.0]','G2-[3.0]']", p.parse(s, 
"1,2|3", G2[].class));
+               assertObjectEquals("['G2-[1.0,2.0]','G2-[3.0]']", p.parse(s, 
"1,2|3", List.class, G2.class));
+       }
+
+       @Test
+       public void g04_numberType_double() throws Exception {
+               HttpPartSchema s = schema("number", "double").build();
+               assertObjectEquals("1.0", p.parse(s, "1", float.class));
+               assertObjectEquals("1.0", p.parse(s, "1", Float.class));
+               assertObjectEquals("1.0", p.parse(s, "1", double.class));
+               assertObjectEquals("1.0", p.parse(s, "1", Double.class));
+               assertObjectEquals("'1'", p.parse(s, "1", String.class));
+               Object o = p.parse(s, "1", Object.class);
+               assertObjectEquals("1.0", o);
+               assertClass(Double.class, o);
+               assertObjectEquals("'G3-1.0'", p.parse(s,  "1", G3.class));
+       }
+
+       @Test
+       public void g05_numberType_double_2d() throws Exception {
+               HttpPartSchema s = schema("array").items(schema("number", 
"double")).build();
+               assertObjectEquals("[1.0,2.0]", p.parse(s, "1,2", 
float[].class));
+               assertObjectEquals("[1.0,2.0]", p.parse(s, "1,2", 
Float[].class));
+               assertObjectEquals("[1.0,2.0]", p.parse(s, "1,2", List.class, 
Float.class));
+               assertObjectEquals("[1.0,2.0]", p.parse(s, "1,2", 
double[].class));
+               assertObjectEquals("[1.0,2.0]", p.parse(s, "1,2", 
Double[].class));
+               assertObjectEquals("[1.0,2.0]", p.parse(s, "1,2", List.class, 
Double.class));
+               assertObjectEquals("['1','2']", p.parse(s, "1,2", 
String[].class));
+               assertObjectEquals("['1','2']", p.parse(s, "1,2", List.class, 
String.class));
+               assertObjectEquals("[1.0,2.0]", p.parse(s, "1,2", 
Object[].class));
+               assertObjectEquals("[1.0,2.0]", p.parse(s, "1,2", List.class, 
Object.class));
+               assertObjectEquals("['G3-1.0','G3-2.0']", p.parse(s,  "1,2", 
G3[].class));
+               assertObjectEquals("['G3-1.0','G3-2.0']", p.parse(s,  "1,2", 
List.class, G3.class));
+               assertObjectEquals("'G4-[1.0,2.0]'", p.parse(s,  "1,2", 
G4.class));
+       }
+
+       @Test
+       public void g06_numberType_double_3d() throws Exception {
+               HttpPartSchema s = 
schema("array").collectionFormat("pipes").items(schema("array").items(schema("number",
 "double"))).build();
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
float[][].class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
List.class, float[].class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
Float[][].class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
List.class, Float[].class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
List.class, List.class, Float.class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
double[][].class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
List.class, double[].class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
Double[][].class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
List.class, Double[].class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
List.class, List.class, Double.class));
+               assertObjectEquals("[['1','2'],['3']]", p.parse(s, "1,2|3", 
String[][].class));
+               assertObjectEquals("[['1','2'],['3']]", p.parse(s, "1,2|3", 
List.class, String[].class));
+               assertObjectEquals("[['1','2'],['3']]", p.parse(s, "1,2|3", 
List.class, List.class, String.class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
Object[][].class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
List.class, Object[].class));
+               assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", 
List.class, List.class, Object.class));
+               assertObjectEquals("[['G3-1.0','G3-2.0'],['G3-3.0']]", 
p.parse(s,  "1,2|3", G3[][].class));
+               assertObjectEquals("[['G3-1.0','G3-2.0'],['G3-3.0']]", 
p.parse(s,  "1,2|3", List.class, G3[].class));
+               assertObjectEquals("[['G3-1.0','G3-2.0'],['G3-3.0']]", 
p.parse(s,  "1,2|3", List.class, List.class, G3.class));
+               assertObjectEquals("['G4-[1.0,2.0]','G4-[3.0]']", p.parse(s, 
"1,2|3", G4[].class));
+               assertObjectEquals("['G4-[1.0,2.0]','G4-[3.0]']", p.parse(s, 
"1,2|3", List.class, G4.class));
+       }
+
 
        
//-----------------------------------------------------------------------------------------------------------------
        // type = object
        
//-----------------------------------------------------------------------------------------------------------------
-//                             case OBJECT: {
-//                                     if (type.isObject())
-//                                             type = 
(ClassMeta<T>)getClassMeta(ObjectMap.class);
-//                                     switch (schema.getFormat()) {
-//                                             default:
-//                                                     return 
super.parse(partType, schema, in, type);
-//                                     }
-//                             }
 
-       
//-----------------------------------------------------------------------------------------------------------------
-       // type = file
-       
//-----------------------------------------------------------------------------------------------------------------
-//                             case FILE: {
-//                                     throw new ParseException("File part not 
supported.");
-//                             }
+       public static class H1 {
+               public int f;
+       }
+
+       @Test
+       public void h01_objectType() throws Exception {
+               HttpPartSchema s = 
HttpPartSchema.create().type("object").build();
+               assertObjectEquals("{f:1}", p.parse(s, "(f=1)", H1.class));
+               assertObjectEquals("{f:1}", p.parse(s, "(f=1)", 
ObjectMap.class));
+               Object o = p.parse(s, "(f=1)", Object.class);
+               assertObjectEquals("{f:1}", o);
+               assertClass(ObjectMap.class, o);
+       }
+
+       @Test
+       public void h02_objectType_2d() throws Exception {
+               HttpPartSchema s = 
schema("array").format("uon").items(schema("object")).build();
+               assertObjectEquals("[{f:1},{f:2}]", p.parse(s, 
"@((f=1),(f=2))", H1[].class));
+               assertObjectEquals("[{f:1},{f:2}]", p.parse(s, 
"@((f=1),(f=2))", List.class, H1.class));
+               assertObjectEquals("[{f:1},{f:2}]", p.parse(s, 
"@((f=1),(f=2))", ObjectMap[].class));
+               assertObjectEquals("[{f:1},{f:2}]", p.parse(s, 
"@((f=1),(f=2))", List.class, ObjectMap.class));
+               assertObjectEquals("[{f:1},{f:2}]", p.parse(s, 
"@((f=1),(f=2))", Object[].class));
+               assertObjectEquals("[{f:1},{f:2}]", p.parse(s, 
"@((f=1),(f=2))", List.class, Object.class));
+               Object o = p.parse(s, "@((f=1),(f=2))", Object.class);
+               assertObjectEquals("[{f:1},{f:2}]", o);
+               assertClass(ObjectList.class, o);
+       }
+
+       @Test
+       public void h03_objectType_3d() throws Exception {
+               HttpPartSchema s = 
schema("array").format("uon").items(schema("array").items(schema("object"))).build();
+               assertObjectEquals("[[{f:1},{f:2}],[{f:3}]]", p.parse(s, 
"@(@((f=1),(f=2)),@((f=3)))", H1[][].class));
+               assertObjectEquals("[[{f:1},{f:2}],[{f:3}]]", p.parse(s, 
"@(@((f=1),(f=2)),@((f=3)))", List.class, H1[].class));
+               assertObjectEquals("[[{f:1},{f:2}],[{f:3}]]", p.parse(s, 
"@(@((f=1),(f=2)),@((f=3)))", List.class, List.class, H1.class));
+               assertObjectEquals("[[{f:1},{f:2}],[{f:3}]]", p.parse(s, 
"@(@((f=1),(f=2)),@((f=3)))", ObjectMap[][].class));
+               assertObjectEquals("[[{f:1},{f:2}],[{f:3}]]", p.parse(s, 
"@(@((f=1),(f=2)),@((f=3)))", List.class, ObjectMap[].class));
+               assertObjectEquals("[[{f:1},{f:2}],[{f:3}]]", p.parse(s, 
"@(@((f=1),(f=2)),@((f=3)))", List.class, List.class, ObjectMap.class));
+               assertObjectEquals("[[{f:1},{f:2}],[{f:3}]]", p.parse(s, 
"@(@((f=1),(f=2)),@((f=3)))", Object[][].class));
+               assertObjectEquals("[[{f:1},{f:2}],[{f:3}]]", p.parse(s, 
"@(@((f=1),(f=2)),@((f=3)))", List.class, Object[].class));
+               assertObjectEquals("[[{f:1},{f:2}],[{f:3}]]", p.parse(s, 
"@(@((f=1),(f=2)),@((f=3)))", List.class, List.class, Object.class));
+               Object o =  p.parse(s, "@(@((f=1),(f=2)),@((f=3)))", 
Object.class);
+               assertObjectEquals("[[{f:1},{f:2}],[{f:3}]]", o);
+               assertClass(ObjectList.class, o);
+       }
+
+       public static class H2 {
+               public Object f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, 
f12, f99;
+       }
+
+       @Test
+       public void h04_objectType_simpleProperties() throws Exception {
+               HttpPartSchema s = schema("object")
+                       .property("f1", schema("string"))
+                       .property("f2", schema("string", "byte"))
+                       .property("f4", schema("string", "date-time"))
+                       .property("f5", schema("string", "binary"))
+                       .property("f6", schema("string", "binary-spaced"))
+                       .property("f7", schema("string", "uon"))
+                       .property("f8", schema("integer"))
+                       .property("f9", schema("integer", "int64"))
+                       .property("f10", schema("number"))
+                       .property("f11", schema("number", "double"))
+                       .property("f12", schema("boolean"))
+                       .additionalProperties(schema("integer"))
+                       .build();
+
+               byte[] foob = "foo".getBytes();
+               String in = 
"(f1=foo,f2="+base64Encode(foob)+",f4=2012-12-21T12:34:56Z,f5="+toHex(foob)+",f6='"+toSpacedHex(foob)+"',f7=foo,f8=1,f9=1,f10=1,f11=1,f12=true,f99=1)";
+
+               H2 h2 = p.parse(s, in, H2.class);
+               
assertObjectEquals("{f1:'foo',f2:[102,111,111],f4:'2012-12-21T12:34:56Z',f5:[102,111,111],f6:[102,111,111],f7:'foo',f8:1,f9:1,f10:1.0,f11:1.0,f12:true,f99:1}",
 h2);
+               assertClass(String.class, h2.f1);
+               assertClass(byte[].class, h2.f2);
+               assertClass(GregorianCalendar.class, h2.f4);
+               assertClass(byte[].class, h2.f5);
+               assertClass(byte[].class, h2.f6);
+               assertClass(String.class, h2.f7);
+               assertClass(Integer.class, h2.f8);
+               assertClass(Long.class, h2.f9);
+               assertClass(Float.class, h2.f10);
+               assertClass(Double.class, h2.f11);
+               assertClass(Boolean.class, h2.f12);
+               assertClass(Integer.class, h2.f99);
+
+               ObjectMap om = p.parse(s, in, ObjectMap.class);
+               
assertObjectEquals("{f1:'foo',f2:[102,111,111],f4:'2012-12-21T12:34:56Z',f5:[102,111,111],f6:[102,111,111],f7:'foo',f8:1,f9:1,f10:1.0,f11:1.0,f12:true,f99:1}",
 om);
+               assertClass(String.class, om.get("f1"));
+               assertClass(byte[].class, om.get("f2"));
+               assertClass(GregorianCalendar.class, om.get("f4"));
+               assertClass(byte[].class, om.get("f5"));
+               assertClass(byte[].class, om.get("f6"));
+               assertClass(String.class, om.get("f7"));
+               assertClass(Integer.class, om.get("f8"));
+               assertClass(Long.class, om.get("f9"));
+               assertClass(Float.class, om.get("f10"));
+               assertClass(Double.class, om.get("f11"));
+               assertClass(Boolean.class, om.get("f12"));
+               assertClass(Integer.class, om.get("f99"));
+
+               om = (ObjectMap)p.parse(s, in, Object.class);
+               
assertObjectEquals("{f1:'foo',f2:[102,111,111],f4:'2012-12-21T12:34:56Z',f5:[102,111,111],f6:[102,111,111],f7:'foo',f8:1,f9:1,f10:1.0,f11:1.0,f12:true,f99:1}",
 om);
+               assertClass(String.class, om.get("f1"));
+               assertClass(byte[].class, om.get("f2"));
+               assertClass(GregorianCalendar.class, om.get("f4"));
+               assertClass(byte[].class, om.get("f5"));
+               assertClass(byte[].class, om.get("f6"));
+               assertClass(String.class, om.get("f7"));
+               assertClass(Integer.class, om.get("f8"));
+               assertClass(Long.class, om.get("f9"));
+               assertClass(Float.class, om.get("f10"));
+               assertClass(Double.class, om.get("f11"));
+               assertClass(Boolean.class, om.get("f12"));
+               assertClass(Integer.class, om.get("f99"));
+       }
+
+       @Test
+       public void h05_objectType_arrayProperties() throws Exception {
+               HttpPartSchema s = schema("object")
+                       .property("f1", schema("array").items(schema("string")))
+                       .property("f2", schema("array").items(schema("string", 
"byte")))
+                       .property("f4", schema("array").items(schema("string", 
"date-time")))
+                       .property("f5", schema("array").items(schema("string", 
"binary")))
+                       .property("f6", schema("array").items(schema("string", 
"binary-spaced")))
+                       .property("f7", schema("array").items(schema("string", 
"uon")))
+                       .property("f8", 
schema("array").items(schema("integer")))
+                       .property("f9", schema("array").items(schema("integer", 
"int64")))
+                       .property("f10", 
schema("array").items(schema("number")))
+                       .property("f11", schema("array").items(schema("number", 
"double")))
+                       .property("f12", 
schema("array").items(schema("boolean")))
+                       
.additionalProperties(schema("array").items(schema("integer")))
+                       .build();
+
+               byte[] foob = "foo".getBytes();
+               String in = 
"(f1=foo,f2="+base64Encode(foob)+",f4=2012-12-21T12:34:56Z,f5="+toHex(foob)+",f6='"+toSpacedHex(foob)+"',f7=foo,f8=1,f9=1,f10=1,f11=1,f12=true,f99=1)";
+
+               H2 h2 = p.parse(s, in, H2.class);
+               
assertObjectEquals("{f1:['foo'],f2:[[102,111,111]],f4:['2012-12-21T12:34:56Z'],f5:[[102,111,111]],f6:[[102,111,111]],f7:['foo'],f8:[1],f9:[1],f10:[1.0],f11:[1.0],f12:[true],f99:[1]}",
 h2);
+
+               ObjectMap om = p.parse(s, in, ObjectMap.class);
+               
assertObjectEquals("{f1:['foo'],f2:[[102,111,111]],f4:['2012-12-21T12:34:56Z'],f5:[[102,111,111]],f6:[[102,111,111]],f7:['foo'],f8:[1],f9:[1],f10:[1.0],f11:[1.0],f12:[true],f99:[1]}",
 om);
+
+               om = (ObjectMap)p.parse(s, in, Object.class);
+               
assertObjectEquals("{f1:['foo'],f2:[[102,111,111]],f4:['2012-12-21T12:34:56Z'],f5:[[102,111,111]],f6:[[102,111,111]],f7:['foo'],f8:[1],f9:[1],f10:[1.0],f11:[1.0],f12:[true],f99:[1]}",
 om);
+       }
+
+       @Test
+       public void h06_objectType_arrayProperties_pipes() throws Exception {
+               HttpPartSchema s = schema("object")
+                       .property("f1", 
schema("array").collectionFormat("pipes").items(schema("string")))
+                       .property("f2", 
schema("array").collectionFormat("pipes").items(schema("string", "byte")))
+                       .property("f4", 
schema("array").collectionFormat("pipes").items(schema("string", "date-time")))
+                       .property("f5", 
schema("array").collectionFormat("pipes").items(schema("string", "binary")))
+                       .property("f6", 
schema("array").collectionFormat("pipes").items(schema("string", 
"binary-spaced")))
+                       .property("f7", 
schema("array").collectionFormat("pipes").items(schema("string", "uon")))
+                       .property("f8", 
schema("array").collectionFormat("pipes").items(schema("integer")))
+                       .property("f9", 
schema("array").collectionFormat("pipes").items(schema("integer", "int64")))
+                       .property("f10", 
schema("array").collectionFormat("pipes").items(schema("number")))
+                       .property("f11", 
schema("array").collectionFormat("pipes").items(schema("number", "double")))
+                       .property("f12", 
schema("array").collectionFormat("pipes").items(schema("boolean")))
+                       
.additionalProperties(schema("array").collectionFormat("pipes").items(schema("integer")))
+                       .build();
+
+               byte[] foob = "foo".getBytes(), barb = "bar".getBytes();
+               String in = 
"(f1=foo|bar,f2="+base64Encode(foob)+"|"+base64Encode(barb)+",f4=2012-12-21T12:34:56Z|2012-12-21T12:34:56Z,f5="+toHex(foob)+"|"+toHex(barb)+",f6='"+toSpacedHex(foob)+"|"+toSpacedHex(barb)+"',f7=foo|bar,f8=1|2,f9=1|2,f10=1|2,f11=1|2,f12=true|true,f99=1|2)";
+
+               H2 h2 = p.parse(s, in, H2.class);
+               
assertObjectEquals("{f1:['foo','bar'],f2:[[102,111,111],[98,97,114]],f4:['2012-12-21T12:34:56Z','2012-12-21T12:34:56Z'],f5:[[102,111,111],[98,97,114]],f6:[[102,111,111],[98,97,114]],f7:['foo','bar'],f8:[1,2],f9:[1,2],f10:[1.0,2.0],f11:[1.0,2.0],f12:[true,true],f99:[1,2]}",
 h2);
+
+               ObjectMap om = p.parse(s, in, ObjectMap.class);
+               
assertObjectEquals("{f1:['foo','bar'],f2:[[102,111,111],[98,97,114]],f4:['2012-12-21T12:34:56Z','2012-12-21T12:34:56Z'],f5:[[102,111,111],[98,97,114]],f6:[[102,111,111],[98,97,114]],f7:['foo','bar'],f8:[1,2],f9:[1,2],f10:[1.0,2.0],f11:[1.0,2.0],f12:[true,true],f99:[1,2]}",
 om);
+
+               om = (ObjectMap)p.parse(s, in, Object.class);
+               
assertObjectEquals("{f1:['foo','bar'],f2:[[102,111,111],[98,97,114]],f4:['2012-12-21T12:34:56Z','2012-12-21T12:34:56Z'],f5:[[102,111,111],[98,97,114]],f6:[[102,111,111],[98,97,114]],f7:['foo','bar'],f8:[1,2],f9:[1,2],f10:[1.0,2.0],f11:[1.0,2.0],f12:[true,true],f99:[1,2]}",
 om);
+       }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // type = none
+       // Utility methods
        
//-----------------------------------------------------------------------------------------------------------------
-//                             case NONE: {
-//                                     throw new ParseException("Invalid 
type.");
-//                             }
-//                     }
-//             }
 
+       private static HttpPartSchemaBuilder schema() {
+               return HttpPartSchema.create();
+       }
+
+       private static HttpPartSchemaBuilder schema(String type) {
+               return HttpPartSchema.create(type);
+       }
+
+       private static HttpPartSchemaBuilder schema(String type, String format) 
{
+               return HttpPartSchema.create(type, format);
+       }
 }
\ No newline at end of file
diff --git 
a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/testutils/TestUtils.java
 
b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/testutils/TestUtils.java
index cd6b77b..7681e66 100644
--- 
a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/testutils/TestUtils.java
+++ 
b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/testutils/TestUtils.java
@@ -45,6 +45,7 @@ public class TestUtils {
                .ssq()
                .trimNullProperties(false)
                .addBeanTypes().addRootType()
+               .pojoSwaps(CalendarSwap.ISO8601DTZ.class, 
DateSwap.ISO8601DTPZ.class)
                .build();
 
        private static JsonSerializer jsSorted = JsonSerializer.create()
@@ -53,6 +54,7 @@ public class TestUtils {
                .sortMaps()
                .trimNullProperties(false)
                .addBeanTypes().addRootType()
+               .pojoSwaps(CalendarSwap.ISO8601DTZ.class, 
DateSwap.ISO8601DTPZ.class)
                .build();
 
 
@@ -60,6 +62,7 @@ public class TestUtils {
                .ssq()
                .pojoSwaps(IteratorSwap.class, EnumerationSwap.class)
                .addBeanTypes().addRootType()
+               .pojoSwaps(CalendarSwap.ISO8601DTZ.class, 
DateSwap.ISO8601DTPZ.class)
                .build();
 
        private static JsonSerializer js3 = JsonSerializer.create()
@@ -67,6 +70,7 @@ public class TestUtils {
                .pojoSwaps(IteratorSwap.class, EnumerationSwap.class)
                .sortProperties()
                .addBeanTypes().addRootType()
+               .pojoSwaps(CalendarSwap.ISO8601DTZ.class, 
DateSwap.ISO8601DTPZ.class)
                .build();
 
        private static final BeanSession beanSession = 
BeanContext.DEFAULT.createSession();
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 28ed7b2..212a502 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
@@ -14,6 +14,8 @@ package org.apache.juneau.httppart;
 
 import static java.util.Collections.*;
 import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.httppart.HttpPartSchema.Type.*;
+import static org.apache.juneau.httppart.HttpPartSchema.Format.*;
 
 import java.lang.annotation.*;
 import java.lang.reflect.*;
@@ -63,6 +65,7 @@ public class HttpPartSchema {
        final Long maxLength, minLength, maxItems, minItems, maxProperties, 
minProperties;
        final Class<? extends HttpPartParser> parser;
        final Class<? extends HttpPartSerializer> serializer;
+       final ClassMeta<?> parsedType;
 
        final ObjectMap api;
 
@@ -141,6 +144,27 @@ public class HttpPartSchema {
        }
 
        /**
+        * Shortcut for calling <code>create().type(type);</code>
+        *
+        * @param type The schema type value.
+        * @return A new builder.
+        */
+       public static HttpPartSchemaBuilder create(String type) {
+               return create().type(type);
+       }
+
+       /**
+        * Shortcut for calling <code>create().type(type).format(format);</code>
+        *
+        * @param type The schema type value.
+        * @param format The schema format value.
+        * @return A new builder.
+        */
+       public static HttpPartSchemaBuilder create(String type, String format) {
+               return create().type(type).format(format);
+       }
+
+       /**
         * Utility method for creating response maps from a schema.
         *
         * <p>
@@ -246,6 +270,33 @@ public class HttpPartSchema {
                this.parser = b.parser;
                this.serializer = b.serializer;
 
+               // Calculate parse type
+               Class<?> parsedType = Object.class;
+               if (type == ARRAY) {
+                       if (items != null)
+                               parsedType = 
Array.newInstance(items.parsedType.getInnerClass(), 0).getClass();
+               } else if (type == BOOLEAN) {
+                       parsedType = Boolean.class;
+               } else if (type == INTEGER) {
+                       if (format == INT64)
+                               parsedType = Long.class;
+                       else
+                               parsedType = Integer.class;
+               } else if (type == NUMBER) {
+                       if (format == DOUBLE)
+                               parsedType = Double.class;
+                       else
+                               parsedType = Float.class;
+               } else if (type == STRING) {
+                       if (format == BYTE || format == BINARY || format == 
BINARY_SPACED)
+                               parsedType = byte[].class;
+                       else if (format == DATE || format == DATE_TIME)
+                               parsedType = Calendar.class;
+                       else
+                               parsedType = String.class;
+               }
+               this.parsedType = BeanContext.DEFAULT.getClassMeta(parsedType);
+
                if (b.noValidate)
                        return;
 
@@ -395,6 +446,8 @@ public class HttpPartSchema {
                        errors.add("minProperties cannot be less than zero.");
                if (maxProperties != null && maxProperties < 0)
                        errors.add("maxProperties cannot be less than zero.");
+               if (type == ARRAY && items != null && items.getType() == OBJECT 
&& (format != UON && format != Format.NONE))
+                       errors.add("Cannot define an array of objects unless 
array format is 'uon'.");
 
                if (! errors.isEmpty())
                        throw new ContextRuntimeException("Schema specification 
errors: \n\t" + join(errors, "\n\t"));
@@ -597,6 +650,15 @@ public class HttpPartSchema {
        }
 
        /**
+        * Returns the default parsed type for this schema.
+        *
+        * @return The default parsed type for this schema.  Never 
<jk>null</jk>.
+        */
+       public ClassMeta<?> getParsedType() {
+               return parsedType;
+       }
+
+       /**
         * Returns the name of the object described by this schema, for example 
the query or form parameter name.
         *
         * @return The name, or <jk>null</jk> if not specified.
@@ -1150,7 +1212,13 @@ public class HttpPartSchema {
                return true;
        }
 
-       private HttpPartSchema getProperty(String name) {
+       /**
+        * Returns the schema information for the specified property.
+        *
+        * @param name The property name.
+        * @return The schema information for the specified property, or 
<jk>null</jk> if properties are not defined on this schema.
+        */
+       public HttpPartSchema getProperty(String name) {
                if (properties != null) {
                        HttpPartSchema schema = properties.get(name);
                        if (schema != null)
@@ -1159,6 +1227,14 @@ public class HttpPartSchema {
                return additionalProperties;
        }
 
+       /**
+        * Returns <jk>true</jk> if this schema has properties associated with 
it.
+        *
+        * @return <jk>true</jk> if this schema has properties associated with 
it.
+        */
+       public boolean hasProperties() {
+               return properties != null || additionalProperties != null;
+       }
 
        private static <T> Set<T> copy(Set<T> in) {
                return in == null ? Collections.EMPTY_SET : unmodifiableSet(new 
LinkedHashSet<>(in));
@@ -1209,10 +1285,6 @@ public class HttpPartSchema {
                }
        }
 
-//     final static Integer toInteger(int i) {
-//             return i == -1 ? null : i;
-//     }
-
        final static Long toLong(long l) {
                return l == -1 ? null : l;
        }
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 37d0a9b..e48c2e3 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
@@ -2,7 +2,7 @@
 // * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
 // * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
 // * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                
                                              * 
+// * with the License.  You may obtain a copy of the License at                
                                              *
 // *                                                                           
                                              *
 // *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
 // *                                                                           
                                              *
@@ -1274,15 +1274,26 @@ public class HttpPartSchemaBuilder {
         *      <li><a class="doclink" 
href="https://swagger.io/specification/v2/#schemaObject";>Schema</a>
         * </ul>
         *
+        * @param key
+        *      The property name.
         * @param value
         *      The new value for this property.
         *      <br>Ignored if value is <jk>null</jk>.
         * @return This object (for method chaining).
         */
-       public HttpPartSchemaBuilder properties(ObjectMap value) {
+       public HttpPartSchemaBuilder property(String key, HttpPartSchemaBuilder 
value) {
+               if ( key != null && value != null) {
+                       if (properties == null)
+                               properties = new LinkedHashMap<>();
+                       properties.put(key, value);
+               }
+               return this;
+       }
+
+       private HttpPartSchemaBuilder properties(ObjectMap value) {
                if (value != null && ! value.isEmpty())
-                       for (Map.Entry<String,Object> e : value.entrySet())
-                               properties.put(e.getKey(), 
HttpPartSchema.create().apply((ObjectMap)e.getValue()));
+               for (Map.Entry<String,Object> e : value.entrySet())
+                       property(e.getKey(), 
HttpPartSchema.create().apply((ObjectMap)e.getValue()));
                return this;
        }
 
@@ -1300,7 +1311,13 @@ public class HttpPartSchemaBuilder {
         *      <br>Ignored if value is <jk>null</jk> or empty.
         * @return This object (for method chaining).
         */
-       public HttpPartSchemaBuilder additionalProperties(ObjectMap value) {
+       public HttpPartSchemaBuilder additionalProperties(HttpPartSchemaBuilder 
value) {
+               if (value != null)
+                       additionalProperties = value;
+               return this;
+       }
+
+       private HttpPartSchemaBuilder additionalProperties(ObjectMap value) {
                if (value != null && ! value.isEmpty())
                        additionalProperties = 
HttpPartSchema.create().apply(value);
                return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/OpenApiPartParser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/OpenApiPartParser.java
index 8577740..a5e94f6 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/OpenApiPartParser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/OpenApiPartParser.java
@@ -35,10 +35,11 @@ import org.apache.juneau.parser.*;
  *             </td>
  *             <td>
  *                     <ul>
- *                             <li><code><jk>byte</jk>[]</code>
+ *                             <li><code><jk>byte</jk>[]</code> (default)
  *                             <li>{@link InputStream} - Returns a {@link 
ByteArrayInputStream}.
  *                             <li>{@link Reader} - Returns a {@link 
InputStreamReader} wrapped around a {@link ByteArrayInputStream}.
  *                             <li>{@link String} - Constructed using {@link 
String#String(byte[])}.
+ *                             <li>{@link Object} - Returns the default 
<code><jk>byte</jk>[]</code>.
  *                             <li>Any POJO transformable from a 
<code><jk>byte</jk>[]</code> (via constructors or static create methods).
  *                     </ul>
  *             </td>
@@ -51,10 +52,11 @@ import org.apache.juneau.parser.*;
  *             </td>
  *             <td>
  *                     <ul>
- *                             <li>{@link Calendar}
+ *                             <li>{@link Calendar} (default)
  *                             <li>{@link Date}
  *                             <li>{@link GregorianCalendar}
  *                             <li>{@link String} - Converted using {@link 
Calendar#toString()}.
+ *                             <li>{@link Object} - Returns the default {@link 
Calendar}.
  *                             <li>Any POJO transformable from a {@link 
Calendar} (via constructors or static create methods).
  *                     </ul>
  *             </td>
@@ -73,7 +75,8 @@ import org.apache.juneau.parser.*;
  *             <td>none specified</td>
  *             <td>
  *                     <ul>
- *                             <li>{@link String}
+ *                             <li>{@link String} (default)
+ *                             <li>{@link Object} - Returns the default {@link 
String}.
  *                             <li>Any POJO transformable from a {@link 
String} (via constructors or static create methods).
  *                     </ul>
  *             </td>
@@ -85,10 +88,11 @@ import org.apache.juneau.parser.*;
  *             </td>
  *             <td>
  *                     <ul>
+ *                             <li>{@link Boolean} (default)
  *                             <li><jk>boolean</code>
- *                             <li>{@link Boolean}
  *                             <li>{@link String}
- *                             <li>{@link Object} - Returns a {@link Boolean}.
+ *                             <li>{@link Object} - Returns the default {@link 
Boolean}.
+ *                             <li>Any POJO transformable from a {@link 
Boolean} (via constructors or static create methods).
  *                     </ul>
  *             </td>
  *     </tr>
@@ -98,7 +102,22 @@ import org.apache.juneau.parser.*;
  *                     &nbsp;
  *             </td>
  *             <td>
- *                     Arrays or Collections of anything on this list.
+ *                     <ul>
+ *                             <li>Arrays or Collections of anything on this 
list.
+ *                             <li>Any POJO transformable from arrays of the 
default types (e.g. <code>Integer[]</code>, <code>Boolean[][]</code>, etc...).
+ *                     </ul>
+ *             </td>
+ *     </tr>
+ *     <tr>
+ *             <td ><code>object</code></td>
+ *             <td>
+ *                     &nbsp;
+ *             </td>
+ *             <td>
+ *                     <ul>
+ *                             <li>Beans with properties of anything on this 
list.
+ *                             <li>Maps with string keys.
+ *                     </ul>
  *             </td>
  *     </tr>
  * </table>
@@ -140,6 +159,17 @@ public class OpenApiPartParser extends UonPartParser {
        /** Reusable instance of {@link OpenApiPartParser}. */
        public static final OpenApiPartParser DEFAULT = new 
OpenApiPartParser(PropertyStore.DEFAULT);
 
+       // Cache these for faster lookup
+       private static final BeanContext BC = BeanContext.DEFAULT;
+       private static final ClassMeta<Long> CM_Long = 
BC.getClassMeta(Long.class);
+       private static final ClassMeta<Integer> CM_Integer = 
BC.getClassMeta(Integer.class);
+       private static final ClassMeta<Double> CM_Double = 
BC.getClassMeta(Double.class);
+       private static final ClassMeta<Float> CM_Float = 
BC.getClassMeta(Float.class);
+       private static final ClassMeta<Boolean> CM_Boolean = 
BC.getClassMeta(Boolean.class);
+       private static final ClassMeta<ObjectList> CM_ObjectList = 
BC.getClassMeta(ObjectList.class);
+       private static final ClassMeta<ObjectMap> CM_ObjectMap = 
BC.getClassMeta(ObjectMap.class);
+
+       private static final HttpPartSchema DEFAULT_SCHEMA = 
HttpPartSchema.DEFAULT;
 
        
//-------------------------------------------------------------------------------------------------------------------
        // Instance
@@ -156,7 +186,7 @@ public class OpenApiPartParser extends UonPartParser {
                super(
                        ps.builder().build()
                );
-               this.schema = getProperty(OAPI_schema, HttpPartSchema.class, 
HttpPartSchema.DEFAULT);
+               this.schema = getProperty(OAPI_schema, HttpPartSchema.class, 
DEFAULT_SCHEMA);
        }
 
        @Override /* Context */
@@ -194,7 +224,7 @@ public class OpenApiPartParser extends UonPartParser {
         * @throws SchemaValidationParseException If the input or resulting 
HTTP part object fails schema validation.
         */
        public <T> T parse(HttpPartSchema schema, String in, Class<T> type) 
throws ParseException, SchemaValidationParseException {
-               return parse(null, schema, in, 
BeanContext.DEFAULT.getClassMeta(type));
+               return parse(null, schema, in, getClassMeta(type));
        }
 
        /**
@@ -213,12 +243,12 @@ public class OpenApiPartParser extends UonPartParser {
         */
        @SuppressWarnings("unchecked")
        public <T> T parse(HttpPartSchema schema, String in, 
java.lang.reflect.Type type, java.lang.reflect.Type...args) throws 
ParseException, SchemaValidationParseException {
-               return (T)parse(null, schema, in, 
BeanContext.DEFAULT.getClassMeta(type, args));
+               return (T)parse(null, schema, in, getClassMeta(type, args));
        }
 
        @Override /* HttpPartParser */
        public <T> T parse(HttpPartType partType, HttpPartSchema schema, String 
in, ClassMeta<T> type) throws ParseException, SchemaValidationParseException {
-               schema = ObjectUtils.firstNonNull(schema, this.schema, 
HttpPartSchema.DEFAULT);
+               schema = ObjectUtils.firstNonNull(schema, this.schema, 
DEFAULT_SCHEMA);
                T t = parseInner(partType, schema, in, type);
                if (t == null && type.isPrimitive())
                        t = type.getPrimitiveDefault();
@@ -271,11 +301,11 @@ public class OpenApiPartParser extends UonPartParser {
                                }
                                case ARRAY: {
                                        if (type.isObject())
-                                               type = 
(ClassMeta<T>)getClassMeta(ObjectList.class);
+                                               type = 
(ClassMeta<T>)CM_ObjectList;
 
                                        ClassMeta<?> eType = type.isObject() ? 
string() : type.getElementType();
                                        if (eType == null)
-                                               throw new ParseException("Value 
of type ARRAY cannot be converted to type {0}", type);
+                                               eType = 
schema.getParsedType().getElementType();
 
                                        String[] ss = new String[0];
                                        switch (schema.getCollectionFormat()) {
@@ -309,50 +339,77 @@ public class OpenApiPartParser extends UonPartParser {
                                        } else {
                                                o = ss;
                                        }
+                                       if 
(type.getTransform(schema.getParsedType().getInnerClass()) != null)
+                                               return toType(toType(o, 
schema.getParsedType()), type);
                                        return toType(o, type);
                                }
                                case BOOLEAN: {
                                        if (type.isObject())
-                                               type = 
(ClassMeta<T>)getClassMeta(Boolean.class);
-                                       return super.parse(partType, schema, 
toLowerCase(in), type);
+                                               type = (ClassMeta<T>)CM_Boolean;
+                                       if (type.isBoolean())
+                                               return super.parse(partType, 
schema, in, type);
+                                       return toType(super.parse(partType, 
schema, in, CM_Boolean), type);
                                }
                                case INTEGER: {
                                        if (type.isObject()) {
                                                switch (schema.getFormat()) {
                                                        case INT64:
-                                                               type = 
(ClassMeta<T>)getClassMeta(Long.class);
+                                                               type = 
(ClassMeta<T>)CM_Long;
                                                                break;
                                                        default:
-                                                               type = 
(ClassMeta<T>)getClassMeta(Integer.class);
+                                                               type = 
(ClassMeta<T>)CM_Integer;
 
                                                }
                                        }
-                                       return super.parse(partType, schema, 
in, type);
+                                       if (type.isNumber())
+                                               return super.parse(partType, 
schema, in, type);
+                                       return toType(super.parse(partType, 
schema, in, CM_Integer), type);
                                }
                                case NUMBER: {
                                        if (type.isObject()) {
                                                switch (schema.getFormat()) {
                                                        case DOUBLE:
-                                                               type = 
(ClassMeta<T>)getClassMeta(Double.class);
+                                                               type = 
(ClassMeta<T>)CM_Double;
                                                                break;
                                                        default:
-                                                               type = 
(ClassMeta<T>)getClassMeta(Float.class);
+                                                               type = 
(ClassMeta<T>)CM_Float;
                                                }
                                        }
-                                       return super.parse(partType, schema, 
in, type);
+                                       if (type.isNumber())
+                                               return super.parse(partType, 
schema, in, type);
+                                       return toType(super.parse(partType, 
schema, in, CM_Integer), type);
                                }
                                case OBJECT: {
                                        if (type.isObject())
-                                               type = 
(ClassMeta<T>)getClassMeta(ObjectMap.class);
-                                       switch (schema.getFormat()) {
-                                               default:
-                                                       return 
super.parse(partType, schema, in, type);
+                                               type = 
(ClassMeta<T>)CM_ObjectMap;
+                                       if (schema.hasProperties() && 
type.isMapOrBean()) {
+                                               try {
+                                                       if (type.isBean()) {
+                                                               BeanMap<T> m = 
BC.createBeanSession().newBeanMap(type.getInnerClass());
+                                                               for 
(Map.Entry<String,Object> e : parse(partType, DEFAULT_SCHEMA, in, 
CM_ObjectMap).entrySet()) {
+                                                                       String 
key = e.getKey();
+                                                                       
BeanPropertyMeta bpm = m.getPropertyMeta(key);
+                                                                       
m.put(key, parse(partType, schema.getProperty(key), asString(e.getValue()), bpm 
== null ? object() : bpm.getClassMeta()));
+                                                               }
+                                                               return 
m.getBean();
+                                                       }
+                                                       Map<String,Object> m = 
(Map<String,Object>)type.newInstance();
+                                                       for 
(Map.Entry<String,Object> e : parse(partType, DEFAULT_SCHEMA, in, 
CM_ObjectMap).entrySet()) {
+                                                               String key = 
e.getKey();
+                                                               m.put(key, 
parse(partType, schema.getProperty(key), asString(e.getValue()), object()));
+                                                       }
+                                                       return (T)m;
+                                               } catch (Exception e1) {
+                                                       throw new 
ParseException(e1, "Could not instantiate type ''{0}''.", type);
+                                               }
                                        }
+                                       return super.parse(partType, schema, 
in, type);
                                }
                                case FILE: {
                                        throw new ParseException("File part not 
supported.");
                                }
                                case NONE: {
+                                       // This should never be returned by 
HttpPartSchema.getType(ClassMeta).
                                        throw new ParseException("Invalid 
type.");
                                }
                        }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
index 33e37ba..6915c06 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
@@ -731,9 +731,9 @@ public class UonParserSession extends ReaderParserSession {
                String s = parseString(r, false);
                if (s == null || s.equals("null"))
                        return null;
-               if (s.equals("true"))
+               if (s.equalsIgnoreCase("true"))
                        return true;
-               if (s.equals("false"))
+               if (s.equalsIgnoreCase("false"))
                        return false;
                throw new ParseException(this, "Unrecognized syntax for 
boolean.  ''{0}''.", s);
        }

Reply via email to