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 412a045  Tests.
412a045 is described below

commit 412a0454b43733c6703991e6fd906d751a46c4b0
Author: JamesBognar <[email protected]>
AuthorDate: Sat Jul 7 21:13:16 2018 -0400

    Tests.
---
 .../juneau/httppart/OpenApiPartParserTest.java     |  54 ++-
 .../juneau/httppart/OpenApiPartSerializerTest.java | 366 +++++++++++----------
 .../juneau/httppart/OpenApiPartSerializer.java     |  95 +++++-
 .../org/apache/juneau/serializer/Serializer.java   | 108 ++++++
 4 files changed, 423 insertions(+), 200 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 0f32fbb..757d87d 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
@@ -213,6 +213,26 @@ public class OpenApiPartParserTest {
                assertEquals(0, p.parse(null, null, byte.class).intValue());
        }
 
+       @Test
+       public void b02_primitiveDefaults_nullKeyword() throws Exception {
+               assertEquals(null, p.parse(null, "null", Boolean.class));
+               assertEquals(false, p.parse(null, "null", boolean.class));
+               assertEquals(null, p.parse(null, "null", Character.class));
+               assertEquals("\0", p.parse(null, "null", 
char.class).toString());
+               assertEquals(null, p.parse(null, "null", Short.class));
+               assertEquals(0, p.parse(null, "null", short.class).intValue());
+               assertEquals(null, p.parse(null, "null", Integer.class));
+               assertEquals(0, p.parse(null, "null", int.class).intValue());
+               assertEquals(null, p.parse(null, "null", Long.class));
+               assertEquals(0, p.parse(null, "null", long.class).intValue());
+               assertEquals(null, p.parse(null, "null", Float.class));
+               assertEquals(0, p.parse(null, "null", float.class).intValue());
+               assertEquals(null, p.parse(null, "null", Double.class));
+               assertEquals(0, p.parse(null, "null", double.class).intValue());
+               assertEquals(null, p.parse(null, "null", Byte.class));
+               assertEquals(0, p.parse(null, "null", byte.class).intValue());
+       }
+
        
//-----------------------------------------------------------------------------------------------------------------
        // type = string
        
//-----------------------------------------------------------------------------------------------------------------
@@ -526,14 +546,36 @@ public class OpenApiPartParserTest {
        }
 
        @Test
-       public void d09_arrayType_itemsInteger() throws Exception {
+       public void d09_arrayType_itemsBoolean() throws Exception {
+               HttpPartSchema s = 
schema("array").collectionFormat("csv").items(schema("boolean")).build();
+               assertObjectEquals("[true,false]", p.parse(s, "true,false", 
boolean[].class));
+               assertObjectEquals("[true,false,null]", p.parse(s, 
"true,false,null", Boolean[].class));
+               assertObjectEquals("[true,false,null]", p.parse(s, 
"true,false,null", Object[].class));
+               assertObjectEquals("[true,false,null]", p.parse(s, 
"true,false,null", List.class, Boolean.class));
+               assertObjectEquals("[true,false,null]", p.parse(s, 
"true,false,null", List.class, Object.class));
+               assertObjectEquals("[true,false,null]", p.parse(s, 
"true,false,null", Object.class));
+       }
+
+       @Test
+       public void d10_arrayType_itemsInteger() throws Exception {
                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));
-               assertObjectEquals("[1,2]", p.parse(s, "1,2", List.class, 
Integer.class));
-               assertObjectEquals("[1,2]", p.parse(s, "1,2", List.class, 
Object.class));
-               assertObjectEquals("[1,2]", p.parse(s, "1,2", Object.class));
+               assertObjectEquals("[1,2,null]", p.parse(s, "1,2,null", 
Integer[].class));
+               assertObjectEquals("[1,2,null]", p.parse(s, "1,2,null", 
Object[].class));
+               assertObjectEquals("[1,2,null]", p.parse(s, "1,2,null", 
List.class, Integer.class));
+               assertObjectEquals("[1,2,null]", p.parse(s, "1,2,null", 
List.class, Object.class));
+               assertObjectEquals("[1,2,null]", p.parse(s, "1,2,null", 
Object.class));
+       }
+
+       @Test
+       public void d11_arrayType_itemsFloat() throws Exception {
+               HttpPartSchema s = 
schema("array").collectionFormat("csv").items(schema("number")).build();
+               assertObjectEquals("[1.0,2.0]", p.parse(s, "1.0,2.0", 
float[].class));
+               assertObjectEquals("[1.0,2.0,null]", p.parse(s, "1.0,2.0,null", 
Float[].class));
+               assertObjectEquals("[1.0,2.0,null]", p.parse(s, "1.0,2.0,null", 
Object[].class));
+               assertObjectEquals("[1.0,2.0,null]", p.parse(s, "1.0,2.0,null", 
List.class, Float.class));
+               assertObjectEquals("[1.0,2.0,null]", p.parse(s, "1.0,2.0,null", 
List.class, Object.class));
+               assertObjectEquals("[1.0,2.0,null]", p.parse(s, "1.0,2.0,null", 
Object.class));
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
diff --git 
a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/OpenApiPartSerializerTest.java
 
b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/OpenApiPartSerializerTest.java
index 0179ea2..a7eef07 100644
--- 
a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/OpenApiPartSerializerTest.java
+++ 
b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/OpenApiPartSerializerTest.java
@@ -406,7 +406,7 @@ public class OpenApiPartSerializerTest {
 
        @Test
        public void d05_arrayType_collectionFormatUon() throws Exception {
-               HttpPartSchema ps = 
schema("array").collectionFormat("uon").build();
+               HttpPartSchema ps = schema("array","uon").build();
                assertEquals("@(foo,bar,'null',null)", s.serialize(ps, new 
String[]{"foo","bar","null",null}));
                assertEquals("@(foo,bar,'null',null)", s.serialize(ps, new 
Object[]{"foo","bar","null",null}));
                assertEquals("@(foo,bar,'null',null)", s.serialize(ps, new 
D[]{new D("foo"),new D("bar"),new D("null"),null}));
@@ -897,185 +897,191 @@ public class OpenApiPartSerializerTest {
        }
 
 
-//     
//-----------------------------------------------------------------------------------------------------------------
-//     // type = object
-//     
//-----------------------------------------------------------------------------------------------------------------
-//
-//     public static class H1 {
-//             public int f;
-//     }
-//
-//     @Test
-//     public void h01_objectType() throws Exception {
-//             HttpPartSchema ps = 
HttpPartSchema.create().type("object").build();
-//             assertEquals("{f:1}", s.serialize(ps, "(f=1)", H1.class));
-//             assertEquals("{f:1}", s.serialize(ps, "(f=1)", 
ObjectMap.class));
-//             Object o = s.serialize(ps, "(f=1)", Object.class);
-//             assertEquals("{f:1}", o);
-//             assertClass(ObjectMap.class, o);
-//     }
-//
-//     @Test
-//     public void h02_objectType_2d() throws Exception {
-//             HttpPartSchema ps = 
schema("array").format("uon").items(schema("object")).build();
-//             assertEquals("[{f:1},{f:2}]", s.serialize(ps, "@((f=1),(f=2))", 
H1[].class));
-//             assertEquals("[{f:1},{f:2}]", s.serialize(ps, "@((f=1),(f=2))", 
List.class, H1.class));
-//             assertEquals("[{f:1},{f:2}]", s.serialize(ps, "@((f=1),(f=2))", 
ObjectMap[].class));
-//             assertEquals("[{f:1},{f:2}]", s.serialize(ps, "@((f=1),(f=2))", 
List.class, ObjectMap.class));
-//             assertEquals("[{f:1},{f:2}]", s.serialize(ps, "@((f=1),(f=2))", 
Object[].class));
-//             assertEquals("[{f:1},{f:2}]", s.serialize(ps, "@((f=1),(f=2))", 
List.class, Object.class));
-//             Object o = s.serialize(ps, "@((f=1),(f=2))", Object.class);
-//             assertEquals("[{f:1},{f:2}]", o);
-//             assertClass(ObjectList.class, o);
-//     }
-//
-//     @Test
-//     public void h03_objectType_3d() throws Exception {
-//             HttpPartSchema ps = 
schema("array").format("uon").items(schema("array").items(schema("object"))).build();
-//             assertEquals("[[{f:1},{f:2}],[{f:3}]]", s.serialize(ps, 
"@(@((f=1),(f=2)),@((f=3)))", H1[][].class));
-//             assertEquals("[[{f:1},{f:2}],[{f:3}]]", s.serialize(ps, 
"@(@((f=1),(f=2)),@((f=3)))", List.class, H1[].class));
-//             assertEquals("[[{f:1},{f:2}],[{f:3}]]", s.serialize(ps, 
"@(@((f=1),(f=2)),@((f=3)))", List.class, List.class, H1.class));
-//             assertEquals("[[{f:1},{f:2}],[{f:3}]]", s.serialize(ps, 
"@(@((f=1),(f=2)),@((f=3)))", ObjectMap[][].class));
-//             assertEquals("[[{f:1},{f:2}],[{f:3}]]", s.serialize(ps, 
"@(@((f=1),(f=2)),@((f=3)))", List.class, ObjectMap[].class));
-//             assertEquals("[[{f:1},{f:2}],[{f:3}]]", s.serialize(ps, 
"@(@((f=1),(f=2)),@((f=3)))", List.class, List.class, ObjectMap.class));
-//             assertEquals("[[{f:1},{f:2}],[{f:3}]]", s.serialize(ps, 
"@(@((f=1),(f=2)),@((f=3)))", Object[][].class));
-//             assertEquals("[[{f:1},{f:2}],[{f:3}]]", s.serialize(ps, 
"@(@((f=1),(f=2)),@((f=3)))", List.class, Object[].class));
-//             assertEquals("[[{f:1},{f:2}],[{f:3}]]", s.serialize(ps, 
"@(@((f=1),(f=2)),@((f=3)))", List.class, List.class, Object.class));
-//             Object o =  s.serialize(ps, "@(@((f=1),(f=2)),@((f=3)))", 
Object.class);
-//             assertEquals("[[{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 ps = 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 = s.serialize(ps, in, H2.class);
-//             
assertEquals("{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 = s.serialize(ps, in, ObjectMap.class);
-//             
assertEquals("{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)s.serialize(ps, in, Object.class);
-//             
assertEquals("{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 ps = 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 = s.serialize(ps, in, H2.class);
-//             
assertEquals("{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 = s.serialize(ps, in, ObjectMap.class);
-//             
assertEquals("{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)s.serialize(ps, in, Object.class);
-//             
assertEquals("{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 ps = 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 = s.serialize(ps, in, H2.class);
-//             
assertEquals("{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 = s.serialize(ps, in, ObjectMap.class);
-//             
assertEquals("{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)s.serialize(ps, in, Object.class);
-//             
assertEquals("{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 = object
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       public static class H1 {
+               public String f1;
+               public Integer f2;
+               public Boolean f3;
+               public H1(String f1, Integer f2, Boolean f3) {
+                       this.f1 = f1;
+                       this.f2 = f2;
+                       this.f3 = f3;
+               }
+       }
+
+       @Test
+       public void h01_objectType() throws Exception {
+               HttpPartSchema ps = schema("object").build();
+               assertEquals("(f1='1',f2=2,f3=true)", s.serialize(ps, new 
H1("1",2,true)));
+               assertEquals("()", s.serialize(ps, new H1(null,null,null)));
+               assertEquals("(f1='1',f2=2,f3=true)", s.serialize(ps, new 
ObjectMap("{f1:'1',f2:2,f3:true}")));
+               assertEquals("(f1=null,f2=null,f3=null)", s.serialize(ps, new 
ObjectMap("{f1:null,f2:null,f3:null}")));
+               assertEquals("null", s.serialize(ps, null));
+       }
+
+       @Test
+       public void h02_objectType_uon() throws Exception {
+               HttpPartSchema ps = schema("object","uon").build();
+               assertEquals("(f1='1',f2=2,f3=true)", s.serialize(ps, new 
H1("1",2,true)));
+               assertEquals("()", s.serialize(ps, new H1(null,null,null)));
+               assertEquals("(f1='1',f2=2,f3=true)", s.serialize(ps, new 
ObjectMap("{f1:'1',f2:2,f3:true}")));
+               assertEquals("(f1=null,f2=null,f3=null)", s.serialize(ps, new 
ObjectMap("{f1:null,f2:null,f3:null}")));
+               assertEquals("null", s.serialize(ps, null));
+       }
+
+       @Test
+       public void h03_objectType_2d() throws Exception {
+               HttpPartSchema ps = 
schema("array").items(schema("object")).build();
+               assertEquals("(f1='1'\\,f2=2\\,f3=true),(),null", 
s.serialize(ps, new H1[]{new H1("1",2,true),new H1(null,null,null),null}));
+               assertEquals("(f1='1'\\,f2=2\\,f3=true),(),null", 
s.serialize(ps, AList.create(new H1("1",2,true),new H1(null,null,null),null)));
+               
assertEquals("(f1='1'\\,f2=2\\,f3=true),(f1=null\\,f2=null\\,f3=null),null", 
s.serialize(ps, new ObjectMap[]{new ObjectMap("{f1:'1',f2:2,f3:true}"),new 
ObjectMap("{f1:null,f2:null,f3:null}"),null}));
+               
assertEquals("(f1='1'\\,f2=2\\,f3=true),(f1=null\\,f2=null\\,f3=null),null", 
s.serialize(ps, AList.create(new ObjectMap("{f1:'1',f2:2,f3:true}"),new 
ObjectMap("{f1:null,f2:null,f3:null}"),null)));
+               
assertEquals("(f1='1'\\,f2=2\\,f3=true),(f1='1'\\,f2=2\\,f3=true),null", 
s.serialize(ps, new Object[]{new H1("1",2,true),new 
ObjectMap("{f1:'1',f2:2,f3:true}"),null}));
+               
assertEquals("(f1='1'\\,f2=2\\,f3=true),(f1='1'\\,f2=2\\,f3=true),null", 
s.serialize(ps, AList.create(new H1("1",2,true),new 
ObjectMap("{f1:'1',f2:2,f3:true}"),null)));
+       }
+
+       @Test
+       public void h03_objectType_2d_pipes() throws Exception {
+               HttpPartSchema ps = 
schema("array").collectionFormat("pipes").items(schema("object")).build();
+               assertEquals("(f1='1',f2=2,f3=true)|()|null", s.serialize(ps, 
new H1[]{new H1("1",2,true),new H1(null,null,null),null}));
+               assertEquals("(f1='1',f2=2,f3=true)|()|null", s.serialize(ps, 
AList.create(new H1("1",2,true),new H1(null,null,null),null)));
+               
assertEquals("(f1='1',f2=2,f3=true)|(f1=null,f2=null,f3=null)|null", 
s.serialize(ps, new ObjectMap[]{new ObjectMap("{f1:'1',f2:2,f3:true}"),new 
ObjectMap("{f1:null,f2:null,f3:null}"),null}));
+               
assertEquals("(f1='1',f2=2,f3=true)|(f1=null,f2=null,f3=null)|null", 
s.serialize(ps, AList.create(new ObjectMap("{f1:'1',f2:2,f3:true}"),new 
ObjectMap("{f1:null,f2:null,f3:null}"),null)));
+               
assertEquals("(f1='1',f2=2,f3=true)|(f1='1',f2=2,f3=true)|null", 
s.serialize(ps, new Object[]{new H1("1",2,true),new 
ObjectMap("{f1:'1',f2:2,f3:true}"),null}));
+               
assertEquals("(f1='1',f2=2,f3=true)|(f1='1',f2=2,f3=true)|null", 
s.serialize(ps, AList.create(new H1("1",2,true),new 
ObjectMap("{f1:'1',f2:2,f3:true}"),null)));
+       }
+
+       @Test
+       public void h04_objectType_2d_uon() throws Exception {
+               HttpPartSchema ps = 
schema("array","uon").items(schema("object")).build();
+               assertEquals("@((f1='1',f2=2,f3=true),(),null)", 
s.serialize(ps, new H1[]{new H1("1",2,true),new H1(null,null,null),null}));
+               assertEquals("@((f1='1',f2=2,f3=true),(),null)", 
s.serialize(ps, AList.create(new H1("1",2,true),new H1(null,null,null),null)));
+               
assertEquals("@((f1='1',f2=2,f3=true),(f1=null,f2=null,f3=null),null)", 
s.serialize(ps, new ObjectMap[]{new ObjectMap("{f1:'1',f2:2,f3:true}"),new 
ObjectMap("{f1:null,f2:null,f3:null}"),null}));
+               
assertEquals("@((f1='1',f2=2,f3=true),(f1=null,f2=null,f3=null),null)", 
s.serialize(ps, AList.create(new ObjectMap("{f1:'1',f2:2,f3:true}"),new 
ObjectMap("{f1:null,f2:null,f3:null}"),null)));
+               
assertEquals("@((f1='1',f2=2,f3=true),(f1='1',f2=2,f3=true),null)", 
s.serialize(ps, new Object[]{new H1("1",2,true),new 
ObjectMap("{f1:'1',f2:2,f3:true}"),null}));
+               
assertEquals("@((f1='1',f2=2,f3=true),(f1='1',f2=2,f3=true),null)", 
s.serialize(ps, AList.create(new H1("1",2,true),new 
ObjectMap("{f1:'1',f2:2,f3:true}"),null)));
+       }
+
+       @Test
+       public void h03_objectType_3d() throws Exception {
+               HttpPartSchema ps = 
schema("array").items(schema("array").items(schema("object"))).build();
+               
assertEquals("(f1='1'\\\\\\,f2=2\\\\\\,f3=true)\\,(f1=x\\\\\\,f2=3\\\\\\,f3=false),()\\,null,null",
 s.serialize(ps, new H1[][]{{new H1("1",2,true),new H1("x",3,false)},{new 
H1(null,null,null),null},null}));
+               
assertEquals("(f1='1'\\\\\\,f2=2\\\\\\,f3=true)\\,(f1=x\\\\\\,f2=3\\\\\\,f3=false),()\\,null,null",
 s.serialize(ps, AList.create(new H1[]{new H1("1",2,true),new 
H1("x",3,false)},new H1[]{new H1(null,null,null),null},null)));
+               
assertEquals("(f1='1'\\\\\\,f2=2\\\\\\,f3=true)\\,(f1=x\\\\\\,f2=3\\\\\\,f3=false),()\\,null,null",
 s.serialize(ps, AList.create(AList.create(new H1("1",2,true),new 
H1("x",3,false)),AList.create(new H1(null,null,null),null),null)));
+               
assertEquals("(f1='1'\\\\\\,f2=2\\\\\\,f3=true)\\,(f1=x\\\\\\,f2=4\\\\\\,f3=false),(f1=null\\\\\\,f2=null\\\\\\,f3=null)\\,null,null",
 s.serialize(ps, new ObjectMap[][]{{new ObjectMap("{f1:'1',f2:2,f3:true}"),new 
ObjectMap("{f1:'x',f2:4,f3:false}")},{new 
ObjectMap("{f1:null,f2:null,f3:null}"),null},null}));
+               
assertEquals("(f1='1'\\\\\\,f2=2\\\\\\,f3=true)\\,(f1=x\\\\\\,f2=4\\\\\\,f3=false),(f1=null\\\\\\,f2=null\\\\\\,f3=null)\\,null,null",
 s.serialize(ps, AList.create(new ObjectMap[]{new 
ObjectMap("{f1:'1',f2:2,f3:true}"),new ObjectMap("{f1:'x',f2:4,f3:false}")},new 
ObjectMap[]{new ObjectMap("{f1:null,f2:null,f3:null}"),null},null)));
+               
assertEquals("(f1='1'\\\\\\,f2=2\\\\\\,f3=true)\\,(f1=x\\\\\\,f2=4\\\\\\,f3=false),(f1=null\\\\\\,f2=null\\\\\\,f3=null)\\,null,null",
 s.serialize(ps, AList.create(AList.create(new 
ObjectMap("{f1:'1',f2:2,f3:true}"),new 
ObjectMap("{f1:'x',f2:4,f3:false}")),AList.create(new 
ObjectMap("{f1:null,f2:null,f3:null}"),null),null)));
+               
assertEquals("(f1='1'\\\\\\,f2=2\\\\\\,f3=true)\\,(f1='1'\\\\\\,f2=2\\\\\\,f3=true),()\\,(f1=null\\\\\\,f2=null\\\\\\,f3=null)\\,null,null",
 s.serialize(ps, new Object[][]{{new H1("1",2,true),new 
ObjectMap("{f1:'1',f2:2,f3:true}")},{new H1(null,null,null),new 
ObjectMap("{f1:null,f2:null,f3:null}"),null},null}));
+               
assertEquals("(f1='1'\\\\\\,f2=2\\\\\\,f3=true)\\,(f1='1'\\\\\\,f2=2\\\\\\,f3=true),()\\,(f1=null\\\\\\,f2=null\\\\\\,f3=null)\\,null,null",
 s.serialize(ps, AList.create(new Object[]{new H1("1",2,true),new 
ObjectMap("{f1:'1',f2:2,f3:true}")},new Object[]{new H1(null,null,null),new 
ObjectMap("{f1:null,f2:null,f3:null}"),null},null)));
+               
assertEquals("(f1='1'\\\\\\,f2=2\\\\\\,f3=true)\\,(f1='1'\\\\\\,f2=2\\\\\\,f3=true),()\\,(f1=null\\\\\\,f2=null\\\\\\,f3=null)\\,null,null",
 s.serialize(ps, AList.create(AList.create(new H1("1",2,true),new 
ObjectMap("{f1:'1',f2:2,f3:true}")),AList.create(new H1(null,null,null),new 
ObjectMap("{f1:null,f2:null,f3:null}"),null),null)));
+       }
+
+       @Test
+       public void h03_objectType_3d_ssvAndPipes() throws Exception {
+               HttpPartSchema ps = 
schema("array").collectionFormat("ssv").items(schema("array").collectionFormat("pipes").items(schema("object"))).build();
+               assertEquals("(f1='1',f2=2,f3=true)|(f1=x,f2=3,f3=false) 
()|null null", s.serialize(ps, new H1[][]{{new H1("1",2,true),new 
H1("x",3,false)},{new H1(null,null,null),null},null}));
+               assertEquals("(f1='1',f2=2,f3=true)|(f1=x,f2=3,f3=false) 
()|null null", s.serialize(ps, AList.create(new H1[]{new H1("1",2,true),new 
H1("x",3,false)},new H1[]{new H1(null,null,null),null},null)));
+               assertEquals("(f1='1',f2=2,f3=true)|(f1=x,f2=3,f3=false) 
()|null null", s.serialize(ps, AList.create(AList.create(new H1("1",2,true),new 
H1("x",3,false)),AList.create(new H1(null,null,null),null),null)));
+               assertEquals("(f1='1',f2=2,f3=true)|(f1=x,f2=4,f3=false) 
(f1=null,f2=null,f3=null)|null null", s.serialize(ps, new ObjectMap[][]{{new 
ObjectMap("{f1:'1',f2:2,f3:true}"),new 
ObjectMap("{f1:'x',f2:4,f3:false}")},{new 
ObjectMap("{f1:null,f2:null,f3:null}"),null},null}));
+               assertEquals("(f1='1',f2=2,f3=true)|(f1=x,f2=4,f3=false) 
(f1=null,f2=null,f3=null)|null null", s.serialize(ps, AList.create(new 
ObjectMap[]{new ObjectMap("{f1:'1',f2:2,f3:true}"),new 
ObjectMap("{f1:'x',f2:4,f3:false}")},new ObjectMap[]{new 
ObjectMap("{f1:null,f2:null,f3:null}"),null},null)));
+               assertEquals("(f1='1',f2=2,f3=true)|(f1=x,f2=4,f3=false) 
(f1=null,f2=null,f3=null)|null null", s.serialize(ps, 
AList.create(AList.create(new ObjectMap("{f1:'1',f2:2,f3:true}"),new 
ObjectMap("{f1:'x',f2:4,f3:false}")),AList.create(new 
ObjectMap("{f1:null,f2:null,f3:null}"),null),null)));
+               assertEquals("(f1='1',f2=2,f3=true)|(f1='1',f2=2,f3=true) 
()|(f1=null,f2=null,f3=null)|null null", s.serialize(ps, new Object[][]{{new 
H1("1",2,true),new ObjectMap("{f1:'1',f2:2,f3:true}")},{new 
H1(null,null,null),new ObjectMap("{f1:null,f2:null,f3:null}"),null},null}));
+               assertEquals("(f1='1',f2=2,f3=true)|(f1='1',f2=2,f3=true) 
()|(f1=null,f2=null,f3=null)|null null", s.serialize(ps, AList.create(new 
Object[]{new H1("1",2,true),new ObjectMap("{f1:'1',f2:2,f3:true}")},new 
Object[]{new H1(null,null,null),new 
ObjectMap("{f1:null,f2:null,f3:null}"),null},null)));
+               assertEquals("(f1='1',f2=2,f3=true)|(f1='1',f2=2,f3=true) 
()|(f1=null,f2=null,f3=null)|null null", s.serialize(ps, 
AList.create(AList.create(new H1("1",2,true),new 
ObjectMap("{f1:'1',f2:2,f3:true}")),AList.create(new H1(null,null,null),new 
ObjectMap("{f1:null,f2:null,f3:null}"),null),null)));
+       }
+
+       @Test
+       public void h03_objectType_3d_uon() throws Exception {
+               HttpPartSchema ps = 
schema("array","uon").items(schema("array").items(schema("object"))).build();
+               
assertEquals("@(@((f1='1',f2=2,f3=true),(f1=x,f2=3,f3=false)),@((),null),null)",
 s.serialize(ps, new H1[][]{{new H1("1",2,true),new H1("x",3,false)},{new 
H1(null,null,null),null},null}));
+               
assertEquals("@(@((f1='1',f2=2,f3=true),(f1=x,f2=3,f3=false)),@((),null),null)",
 s.serialize(ps, AList.create(new H1[]{new H1("1",2,true),new 
H1("x",3,false)},new H1[]{new H1(null,null,null),null},null)));
+               
assertEquals("@(@((f1='1',f2=2,f3=true),(f1=x,f2=3,f3=false)),@((),null),null)",
 s.serialize(ps, AList.create(AList.create(new H1("1",2,true),new 
H1("x",3,false)),AList.create(new H1(null,null,null),null),null)));
+               
assertEquals("@(@((f1='1',f2=2,f3=true),(f1=x,f2=4,f3=false)),@((f1=null,f2=null,f3=null),null),null)",
 s.serialize(ps, new ObjectMap[][]{{new ObjectMap("{f1:'1',f2:2,f3:true}"),new 
ObjectMap("{f1:'x',f2:4,f3:false}")},{new 
ObjectMap("{f1:null,f2:null,f3:null}"),null},null}));
+               
assertEquals("@(@((f1='1',f2=2,f3=true),(f1=x,f2=4,f3=false)),@((f1=null,f2=null,f3=null),null),null)",
 s.serialize(ps, AList.create(new ObjectMap[]{new 
ObjectMap("{f1:'1',f2:2,f3:true}"),new ObjectMap("{f1:'x',f2:4,f3:false}")},new 
ObjectMap[]{new ObjectMap("{f1:null,f2:null,f3:null}"),null},null)));
+               
assertEquals("@(@((f1='1',f2=2,f3=true),(f1=x,f2=4,f3=false)),@((f1=null,f2=null,f3=null),null),null)",
 s.serialize(ps, AList.create(AList.create(new 
ObjectMap("{f1:'1',f2:2,f3:true}"),new 
ObjectMap("{f1:'x',f2:4,f3:false}")),AList.create(new 
ObjectMap("{f1:null,f2:null,f3:null}"),null),null)));
+               
assertEquals("@(@((f1='1',f2=2,f3=true),(f1='1',f2=2,f3=true)),@((),(f1=null,f2=null,f3=null),null),null)",
 s.serialize(ps, new Object[][]{{new H1("1",2,true),new 
ObjectMap("{f1:'1',f2:2,f3:true}")},{new H1(null,null,null),new 
ObjectMap("{f1:null,f2:null,f3:null}"),null},null}));
+               
assertEquals("@(@((f1='1',f2=2,f3=true),(f1='1',f2=2,f3=true)),@((),(f1=null,f2=null,f3=null),null),null)",
 s.serialize(ps, AList.create(new Object[]{new H1("1",2,true),new 
ObjectMap("{f1:'1',f2:2,f3:true}")},new Object[]{new H1(null,null,null),new 
ObjectMap("{f1:null,f2:null,f3:null}"),null},null)));
+               
assertEquals("@(@((f1='1',f2=2,f3=true),(f1='1',f2=2,f3=true)),@((),(f1=null,f2=null,f3=null),null),null)",
 s.serialize(ps, AList.create(AList.create(new H1("1",2,true),new 
ObjectMap("{f1:'1',f2:2,f3:true}")),AList.create(new H1(null,null,null),new 
ObjectMap("{f1:null,f2:null,f3:null}"),null),null)));
+       }
+
+       public static class H2 {
+               public Object f1, f2, f4, f5, f6, f7, f8, f9, f10, f11, f12, 
f99;
+               public H2(Object f1, Object f2, Object f4, Object f5, Object 
f6, Object f7, Object f8, Object f9, Object f10, Object f11, Object f12, Object 
f99) {
+                       this.f1 = f1;
+                       this.f2 = f2;
+                       this.f4 = f4;
+                       this.f5 = f5;
+                       this.f6 = f6;
+                       this.f7 = f7;
+                       this.f8 = f8;
+                       this.f9 = f9;
+                       this.f10 = f10;
+                       this.f11 = f11;
+                       this.f12 = f12;
+                       this.f99 = f99;
+               }
+       }
+
+       @Test
+       public void h04_objectType_simpleProperties() throws Exception {
+               HttpPartSchema ps = 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();
+
+               assertEquals(
+                       
"(f1=foo,f2=Zm9v,f4=2012-12-21T12:34:56Z,f5=666F6F,f6='66 6F 
6F',f7=foo,f8=1,f9=2,f10=1.0,f11=1.0,f12=true,f99=1)",
+                       s.serialize(ps, new 
H2("foo",foob,parseIsoCalendar("2012-12-21T12:34:56Z"),foob,foob,"foo",1,2,1.0,1.0,true,1))
+               );
+               assertEquals("()", s.serialize(ps, new 
H2(null,null,null,null,null,null,null,null,null,null,null,null)));
+               assertEquals("null", s.serialize(ps, null));
+               assertEquals(
+                       
"(f1=foo,f2=Zm9v,f4=2012-12-21T12:34:56Z,f5=666F6F,f6='66 6F 
6F',f7=foo,f8=1,f9=2,f10=1.0,f11=1.0,f12=true,f99=1)",
+                       s.serialize(ps, new 
ObjectMap().append("f1","foo").append("f2",foob).append("f4",parseIsoCalendar("2012-12-21T12:34:56Z")).append("f5",foob).append("f6",foob).append("f7","foo").append("f8",1).append("f9",2).append("f10",1.0).append("f11",1.0).append("f12",true).append("f99",1))
+               );
+       }
+
+       @Test
+       public void h05_objectType_arrayProperties() throws Exception {
+               HttpPartSchema ps = 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();
+
+               assertEquals(
+                       
"(f1=@('a,b',null),f2=@(Zm9v,null),f4=@(2012-12-21T12:34:56Z,null),f5=@(666F6F,null),f6=@('66
 6F 
6F',null),f7=@(a,b,null),f8=@(1,2,null),f9=@(3,4,null),f10=@(1.0,2.0,null),f11=@(3.0,4.0,null),f12=@(true,false,null),f99=@(1,x,null))",
+                       s.serialize(ps, new H2(new String[]{"a,b",null},new 
byte[][]{foob,null},new 
Calendar[]{parseIsoCalendar("2012-12-21T12:34:56Z"),null},new 
byte[][]{foob,null},new byte[][]{foob,null},new String[]{"a","b",null},new 
Integer[]{1,2,null},new Integer[]{3,4,null},new Float[]{1f,2f,null},new 
Float[]{3f,4f,null},new Boolean[]{true,false,null},new Object[]{1,"x",null}))
+               );
+
+       }
+
        
//-----------------------------------------------------------------------------------------------------------------
        // Utility methods
        
//-----------------------------------------------------------------------------------------------------------------
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/OpenApiPartSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/OpenApiPartSerializer.java
index bc14088..f7a8993 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/OpenApiPartSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/OpenApiPartSerializer.java
@@ -142,7 +142,6 @@ public class OpenApiPartSerializer extends 
UonPartSerializer {
        }
 
        @Override /* PartSerializer */
-       @SuppressWarnings("rawtypes")
        public String serialize(HttpPartType partType, HttpPartSchema schema, 
Object value) throws SerializeException, SchemaValidationException {
 
                schema = ObjectUtils.firstNonNull(schema, this.schema, 
DEFAULT_SCHEMA);
@@ -183,8 +182,8 @@ public class OpenApiPartSerializer extends 
UonPartSerializer {
 
                        } else if (t == ARRAY) {
 
-                               if (cf == HttpPartSchema.CollectionFormat.UON)
-                                       out = super.serialize(partType, null, 
value);
+                               if (f == HttpPartSchema.Format.UON)
+                                       out = super.serialize(partType, null, 
toList(partType, type, value, schema));
                                else {
                                        List<String> l = new ArrayList<>();
 
@@ -238,20 +237,12 @@ public class OpenApiPartSerializer extends 
UonPartSerializer {
 
                        } else if (t == OBJECT) {
 
-                               if (cf == HttpPartSchema.CollectionFormat.UON) {
+                               if (f == HttpPartSchema.Format.UON) {
                                        out = super.serialize(partType, null, 
value);
                                } else if (schema.hasProperties() && 
type.isMapOrBean()) {
-                                       ObjectMap m = new ObjectMap();
-                                       if (type.isBean()) {
-                                               for (Map.Entry<String,Object> e 
: BC.createBeanSession().toBeanMap(value).entrySet())
-                                                       m.put(e.getKey(), 
serialize(partType, schema.getProperty(e.getKey()), e.getValue()));
-                                       } else {
-                                               for (Map.Entry e : 
(Set<Map.Entry>)((Map)value).entrySet())
-                                                       
m.put(asString(e.getKey()), serialize(partType, 
schema.getProperty(asString(e.getKey())), e.getValue()));
-                                       }
-                                       out = super.serialize(m);
+                                       out = super.serialize(partType, null, 
toMap(partType, type, value, schema));
                                } else {
-                                       out = super.serialize(partType, schema, 
value);
+                                       out = super.serialize(partType, null, 
value);
                                }
 
                        } else if (t == FILE) {
@@ -271,6 +262,82 @@ public class OpenApiPartSerializer extends 
UonPartSerializer {
                return out;
        }
 
+       @SuppressWarnings("rawtypes")
+       private ObjectMap toMap(HttpPartType partType, ClassMeta<?> type, 
Object o, HttpPartSchema s) throws SerializeException, 
SchemaValidationException {
+               if (s == null)
+                       s = DEFAULT_SCHEMA;
+               ObjectMap m = new ObjectMap();
+               if (type.isBean()) {
+                       for (BeanPropertyValue p : 
bs.toBeanMap(o).getValues(isTrimNulls())) {
+                               if (p.getMeta().canRead()) {
+                                       Throwable t = p.getThrown();
+                                       if (t == null)
+                                               m.put(p.getName(), 
toObject(partType, p.getValue(), s.getProperty(p.getName())));
+                               }
+                       }
+               } else {
+                       for (Map.Entry e : (Set<Map.Entry>)((Map)o).entrySet())
+                               m.put(asString(e.getKey()), toObject(partType, 
e.getValue(), s.getProperty(asString(e.getKey()))));
+               }
+               return m;
+       }
+
+       private ObjectList toList(HttpPartType partType, ClassMeta<?> type, 
Object o, HttpPartSchema s) throws SerializeException, 
SchemaValidationException {
+               if (s == null)
+                       s = DEFAULT_SCHEMA;
+               ObjectList l = new ObjectList();
+               HttpPartSchema items = s.getItems();
+               if (type.isArray()) {
+                       for (int i = 0; i < Array.getLength(o); i++)
+                               l.add(toObject(partType, Array.get(o, i), 
items));
+               } else if (type.isCollection()) {
+                       for (Object o2 : (Collection<?>)o)
+                               l.add(toObject(partType, o2, items));
+               } else {
+                       l.add(toObject(partType, o, items));
+               }
+               return l;
+       }
+
+       private Object toObject(HttpPartType partType, Object o, HttpPartSchema 
s) throws SerializeException, SchemaValidationException {
+               if (o == null)
+                       return null;
+               if (s == null)
+                       s = DEFAULT_SCHEMA;
+               HttpPartSchema.Type t = s.getType();
+               HttpPartSchema.Format f = s.getFormat();
+               HttpPartSchema.CollectionFormat cf = s.getCollectionFormat();
+
+               if (t == STRING) {
+                       if (f == BYTE)
+                               return base64Encode(toType(o, CM_ByteArray));
+                       if (f == BINARY)
+                               return toHex(toType(o, CM_ByteArray));
+                       if (f == BINARY_SPACED)
+                               return toSpacedHex(toType(o, CM_ByteArray));
+                       if (f == DATE)
+                               return toIsoDate(toType(o, CM_Calendar));
+                       if (f == DATE_TIME)
+                               return toIsoDateTime(toType(o, CM_Calendar));
+                       return o;
+               } else if (t == ARRAY) {
+                       ObjectList l = toList(partType, 
getClassMetaForObject(o), o, s);
+                       if (cf == CSV)
+                               return joine(l, ',');
+                       if (cf == PIPES)
+                               return joine(l, '|');
+                       if (cf == SSV)
+                               return join(l, ' ');
+                       if (cf == TSV)
+                               return join(l, '\t');
+                       return l;
+               } else if (t == OBJECT) {
+                       return toMap(partType, getClassMetaForObject(o), o, s);
+               }
+
+               return o;
+       }
+
        private <T> T toType(Object in, ClassMeta<T> type) throws 
SerializeException {
                try {
                        return bs.convertToType(in, type);
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/Serializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/Serializer.java
index 71b0819..34a4d7c 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/Serializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/Serializer.java
@@ -1025,6 +1025,114 @@ public abstract class Serializer extends BeanContext {
        
//--------------------------------------------------------------------------------
 
        /**
+        * Returns the {@link Serializer#SERIALIZER_maxDepth} setting value for 
this session.
+        *
+        * @return The {@link Serializer#SERIALIZER_maxDepth} setting value for 
this session.
+        */
+       public final int getMaxDepth() {
+               return maxDepth;
+       }
+
+       /**
+        * Returns the {@link Serializer#SERIALIZER_initialDepth} setting value 
for this session.
+        *
+        * @return The {@link Serializer#SERIALIZER_initialDepth} setting value 
for this session.
+        */
+       public final int getInitialDepth() {
+               return initialDepth;
+       }
+
+       /**
+        * Returns the {@link Serializer#SERIALIZER_detectRecursions} setting 
value for this session.
+        *
+        * @return The {@link Serializer#SERIALIZER_detectRecursions} setting 
value for this session.
+        */
+       public final boolean isDetectRecursions() {
+               return detectRecursions;
+       }
+
+       /**
+        * Returns the {@link Serializer#SERIALIZER_ignoreRecursions} setting 
value for this session.
+        *
+        * @return The {@link Serializer#SERIALIZER_ignoreRecursions} setting 
value for this session.
+        */
+       public final boolean isIgnoreRecursions() {
+               return ignoreRecursions;
+       }
+
+       /**
+        * Returns the {@link Serializer#SERIALIZER_addBeanTypes} setting value 
for this session.
+        *
+        * @return The {@link Serializer#SERIALIZER_addBeanTypes} setting value 
for this session.
+        */
+       public boolean isAddBeanTypes() {
+               return addBeanTypes;
+       }
+
+       /**
+        * Returns the {@link Serializer#SERIALIZER_addRootType} setting value 
for this session.
+        *
+        * @return The {@link Serializer#SERIALIZER_addRootType} setting value 
for this session.
+        */
+       public boolean isAddRootType() {
+               return addRootType;
+       }
+
+       /**
+        * Returns the {@link Serializer#SERIALIZER_trimNullProperties} setting 
value for this session.
+        *
+        * @return The {@link Serializer#SERIALIZER_trimNullProperties} setting 
value for this session.
+        */
+       public final boolean isTrimNulls() {
+               return trimNulls;
+       }
+
+       /**
+        * Returns the {@link Serializer#SERIALIZER_trimEmptyCollections} 
setting value for this session.
+        *
+        * @return The {@link Serializer#SERIALIZER_trimEmptyCollections} 
setting value for this session.
+        */
+       public final boolean isTrimEmptyCollections() {
+               return trimEmptyCollections;
+       }
+
+       /**
+        * Returns the {@link Serializer#SERIALIZER_trimEmptyMaps} setting 
value for this session.
+        *
+        * @return The {@link Serializer#SERIALIZER_trimEmptyMaps} setting 
value for this session.
+        */
+       public final boolean isTrimEmptyMaps() {
+               return trimEmptyMaps;
+       }
+
+       /**
+        * Returns the {@link Serializer#SERIALIZER_trimStrings} setting value 
for this session.
+        *
+        * @return The {@link Serializer#SERIALIZER_trimStrings} setting value 
for this session.
+        */
+       public boolean isTrimStrings() {
+               return trimStrings;
+       }
+
+       /**
+        * Returns the {@link Serializer#SERIALIZER_sortCollections} setting 
value for this session.
+        *
+        * @return The {@link Serializer#SERIALIZER_sortCollections} setting 
value for this session.
+        */
+       public final boolean isSortCollections() {
+               return sortCollections;
+       }
+
+       /**
+        * Returns the {@link Serializer#SERIALIZER_sortMaps} setting value for 
this session.
+        *
+        * @return The {@link Serializer#SERIALIZER_sortMaps} setting value for 
this session.
+        */
+       public final boolean isSortMaps() {
+               return sortMaps;
+       }
+
+       /**
         * Returns the media types handled based on the value of the 
<code>accept</code> parameter passed into the constructor.
         *
         * <p>

Reply via email to