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 300bf06  Replace SERIALIZER_trimNullProperties with 
SERIALIZER_keepNullProperties.
300bf06 is described below

commit 300bf06f1c82d9984a00c1463ebd41d5c2149d29
Author: JamesBognar <[email protected]>
AuthorDate: Thu Apr 9 14:35:27 2020 -0400

    Replace SERIALIZER_trimNullProperties with
    SERIALIZER_keepNullProperties.
---
 .../test/java/org/apache/juneau/BeanMapTest.java   |  6 +-
 .../java/org/apache/juneau/DynaBeanComboTest.java  |  2 +-
 .../juneau/SerializerPropertiesComboTest.java      | 33 +++++++++++
 .../a/rttests/RoundTripLargeObjectsTest.java       | 18 +++---
 .../org/apache/juneau/a/rttests/RoundTripTest.java | 38 ++++++------
 .../java/org/apache/juneau/html/CommonTest.java    |  6 +-
 .../java/org/apache/juneau/jena/CommonTest.java    |  4 +-
 .../java/org/apache/juneau/json/CommonTest.java    |  6 +-
 .../test/java/org/apache/juneau/json/JsonTest.java |  6 +-
 .../juneau/serializer/ReaderObjectComboTest.java   |  2 +-
 .../serializer/SerializerConfigAnnotationTest.java | 12 ++--
 .../org/apache/juneau/testutils/TestUtils.java     |  4 +-
 .../juneau/transforms/BeanDictionaryComboTest.java |  2 +-
 .../apache/juneau/transforms/BuilderComboTest.java |  2 +-
 .../transforms/ByteArrayBase64SwapComboTest.java   |  2 +-
 .../java/org/apache/juneau/uon/Common_UonTest.java |  4 +-
 .../juneau/urlencoding/Common_UrlEncodingTest.java |  4 +-
 .../java/org/apache/juneau/xml/CommonTest.java     |  4 +-
 .../java/org/apache/juneau/xml/XmlContentTest.java |  8 +--
 .../test/java/org/apache/juneau/xml/XmlTest.java   |  8 +--
 .../apache/juneau/jena/RdfSerializerBuilder.java   | 16 ++++-
 .../apache/juneau/jena/RdfSerializerSession.java   |  4 +-
 .../src/main/java/org/apache/juneau/BeanMap.java   | 12 ++--
 .../apache/juneau/csv/CsvSerializerBuilder.java    | 16 ++++-
 .../juneau/html/HtmlDocSerializerBuilder.java      | 16 ++++-
 .../juneau/html/HtmlSchemaSerializerBuilder.java   | 16 ++++-
 .../apache/juneau/html/HtmlSerializerBuilder.java  | 16 ++++-
 .../apache/juneau/html/HtmlSerializerSession.java  |  2 +-
 .../html/HtmlStrippedDocSerializerBuilder.java     | 16 ++++-
 .../apache/juneau/jso/JsoSerializerBuilder.java    | 16 ++++-
 .../juneau/json/JsonSchemaSerializerBuilder.java   |  2 +-
 .../apache/juneau/json/JsonSerializerBuilder.java  | 16 ++++-
 .../apache/juneau/json/JsonSerializerSession.java  |  2 +-
 .../juneau/json/SimpleJsonSerializerBuilder.java   | 16 ++++-
 .../juneau/msgpack/MsgPackSerializerBuilder.java   | 16 ++++-
 .../juneau/msgpack/MsgPackSerializerSession.java   |  8 +--
 .../juneau/oapi/OpenApiSerializerBuilder.java      | 16 ++++-
 .../juneau/oapi/OpenApiSerializerSession.java      |  2 +-
 .../plaintext/PlainTextSerializerBuilder.java      | 16 ++++-
 .../serializer/OutputStreamSerializerBuilder.java  | 16 ++++-
 .../org/apache/juneau/serializer/Serializer.java   | 69 +++++++++++++++++++---
 .../juneau/serializer/SerializerBuilder.java       | 41 +++++++++++++
 .../juneau/serializer/SerializerGroupBuilder.java  | 37 ++++++++++++
 .../juneau/serializer/SerializerSession.java       | 14 ++---
 .../juneau/serializer/WriterSerializerBuilder.java | 16 ++++-
 .../serializer/annotation/SerializerConfig.java    | 32 ++++++++++
 .../annotation/SerializerConfigApply.java          |  3 +
 .../juneau/soap/SoapXmlSerializerBuilder.java      | 16 ++++-
 .../apache/juneau/uon/UonSerializerBuilder.java    | 16 ++++-
 .../apache/juneau/uon/UonSerializerSession.java    |  2 +-
 .../urlencoding/UrlEncodingSerializerBuilder.java  | 16 ++++-
 .../urlencoding/UrlEncodingSerializerSession.java  |  2 +-
 .../apache/juneau/xml/XmlSerializerBuilder.java    | 16 ++++-
 .../apache/juneau/xml/XmlSerializerSession.java    |  6 +-
 .../examples/core/xml/XmlConfigurationExample.java |  2 +-
 .../org/apache/juneau/examples/rest/TestUtils.java |  4 +-
 .../apache/juneau/rest/client2/RestClientTest.java | 41 +++++++++++--
 .../juneau/rest/client2/RestClientBuilder.java     | 39 ++++++++++++
 .../apache/juneau/rest/mock2/MockRestClient.java   | 16 ++++-
 59 files changed, 649 insertions(+), 150 deletions(-)

diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/BeanMapTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/BeanMapTest.java
index 707dd43..2aa5732 100755
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/BeanMapTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/BeanMapTest.java
@@ -2068,16 +2068,16 @@ public class BeanMapTest {
                Z z = new Z();
                BeanMap<Z> bm = 
BeanContext.DEFAULT.createSession().toBeanMap(z);
 
-               Iterator i = bm.getValues(true).iterator();
+               Iterator i = bm.getValues(false).iterator();
                assertFalse(i.hasNext());
 
                z.b = "";
-               i = bm.getValues(true).iterator();
+               i = bm.getValues(false).iterator();
                assertTrue(i.hasNext());
                i.next();
                assertFalse(i.hasNext());
 
-               i = bm.getValues(false).iterator();
+               i = bm.getValues(true).iterator();
                assertTrue(i.hasNext());
                i.next();
                assertTrue(i.hasNext());
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/DynaBeanComboTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/DynaBeanComboTest.java
index 25aff7f..45a7677 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/DynaBeanComboTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/DynaBeanComboTest.java
@@ -251,7 +251,7 @@ public class DynaBeanComboTest extends ComboRoundTripTest {
 
        @Override
        protected Serializer applySettings(Serializer s) throws Exception {
-               return s.builder().trimNullProperties(false).build();
+               return s.builder().keepNullProperties().build();
        }
 
        @Override
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/SerializerPropertiesComboTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/SerializerPropertiesComboTest.java
index 0fe0272..03467d8 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/SerializerPropertiesComboTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/SerializerPropertiesComboTest.java
@@ -48,6 +48,10 @@ public class SerializerPropertiesComboTest extends 
ComboRoundTripTest {
                public OMap f2 = OMap.of();
        }
 
+       public static class T7 {
+               public String f;
+       }
+
        @Parameterized.Parameters
        public static Collection<Object[]> getParameters() {
                return Arrays.asList(new Object[][] {
@@ -254,6 +258,35 @@ public class SerializerPropertiesComboTest extends 
ComboRoundTripTest {
                                )
                                .properties(OMap.of(SERIALIZER_trimEmptyMaps, 
true))
                        },
+                       {       /* 7 */
+                               new ComboInput<>(
+                                       "SERIALIZER_keepNullProperties",
+                                       T7.class,
+                                       new T7(),
+                                       /* Json */              "{f:null}",
+                                       /* JsonT */             "{f:null}",
+                                       /* JsonR */             "{\n\tf: 
null\n}",
+                                       /* Xml */               "<object><f 
_type='null'/></object>",
+                                       /* XmlT */              "<object><f 
t='null'/></object>",
+                                       /* XmlR */              "<object>\n\t<f 
_type='null'/>\n</object>\n",
+                                       /* XmlNs */             "<object><f 
_type='null'/></object>",
+                                       /* Html */              
"<table><tr><td>f</td><td><null/></td></tr></table>",
+                                       /* HtmlT */             
"<table><tr><td>f</td><td><null/></td></tr></table>",
+                                       /* HtmlR */             
"<table>\n\t<tr>\n\t\t<td>f</td>\n\t\t<td><null/></td>\n\t</tr>\n</table>\n",
+                                       /* Uon */               "(f=null)",
+                                       /* UonT */              "(f=null)",
+                                       /* UonR */              
"(\n\tf=null\n)",
+                                       /* UrlEnc */    "f=null",
+                                       /* UrlEncT */   "f=null",
+                                       /* UrlEncR */   "f=null",
+                                       /* MsgPack */   "81A166C0",
+                                       /* MsgPackT */  "81A166C0",
+                                       /* RdfXml */    
"<rdf:RDF>\n<rdf:Description>\n<jp:f 
rdf:resource='http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'/>\n</rdf:Description>\n</rdf:RDF>\n",
+                                       /* RdfXmlT */   
"<rdf:RDF>\n<rdf:Description>\n<jp:f 
rdf:resource='http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'/>\n</rdf:Description>\n</rdf:RDF>\n",
+                                       /* RdfXmlR */   "<rdf:RDF>\n  
<rdf:Description>\n    <jp:f 
rdf:resource='http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'/>\n  
</rdf:Description>\n</rdf:RDF>\n"
+                               )
+                               
.properties(OMap.of(SERIALIZER_keepNullProperties, true))
+                       },
                });
        }
 
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripLargeObjectsTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripLargeObjectsTest.java
index af718ef..cfc5e3a 100755
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripLargeObjectsTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripLargeObjectsTest.java
@@ -49,55 +49,55 @@ public class RoundTripLargeObjectsTest extends 
RoundTripTest {
                        // Full round-trip testing
                        { /* 0 */
                                "Json DEFAULT",
-                               
JsonSerializer.create().trimNullProperties(false),
+                               JsonSerializer.create().keepNullProperties(),
                                JsonParser.create(),
                                0
                        },
                        { /* 1 */
                                "SimpleJson DEFAULT",
-                               
JsonSerializer.create().ssq().trimNullProperties(false),
+                               
JsonSerializer.create().ssq().keepNullProperties(),
                                JsonParser.create(),
                                0
                        },
                        { /* 2 */
                                "Json DEFAULT_SQ",
-                               
JsonSerializer.create().ssq().trimNullProperties(false),
+                               
JsonSerializer.create().ssq().keepNullProperties(),
                                JsonParser.create(),
                                0
                        },
                        { /* 3 */
                                "Xml DEFAULT w/namespaces,validation",
-                               
XmlSerializer.create().sq().ns().trimNullProperties(false).addNamespaceUrisToRoot().useWhitespace(),
+                               
XmlSerializer.create().sq().ns().keepNullProperties().addNamespaceUrisToRoot().useWhitespace(),
                                XmlParser.create(),
                                CHECK_XML_WHITESPACE | VALIDATE_XML
                        },
                        { /* 4 */
                                "Xml DEFAULT wo/namespaces,validation",
-                               
XmlSerializer.create().sq().trimNullProperties(false),
+                               
XmlSerializer.create().sq().keepNullProperties(),
                                XmlParser.create(),
                                CHECK_XML_WHITESPACE
                        },
                        { /* 5 */
                                "Html",
-                               
HtmlSerializer.create().trimNullProperties(false),
+                               HtmlSerializer.create().keepNullProperties(),
                                HtmlParser.create(),
                                CHECK_XML_WHITESPACE
                        },
                        { /* 6 */
                                "UrlEncoding",
-                               
UrlEncodingSerializer.create().trimNullProperties(false),
+                               
UrlEncodingSerializer.create().keepNullProperties(),
                                UrlEncodingParser.create(),
                                0
                        },
                        { /* 7 */
                                "Uon",
-                               
UonSerializer.create().trimNullProperties(false),
+                               UonSerializer.create().keepNullProperties(),
                                UonParser.create(),
                                0
                        },
                        { /* 8 */
                                "MsgPack",
-                               
MsgPackSerializer.create().trimNullProperties(false),
+                               MsgPackSerializer.create().keepNullProperties(),
                                MsgPackParser.create(),
                                0
                        },
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java
index 0974ec4..1362570 100755
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java
@@ -50,43 +50,43 @@ public abstract class RoundTripTest {
                        // Full round-trip testing
                        { /* 0 */
                                "Json - default",
-                               
JsonSerializer.create().trimNullProperties(false).addBeanTypes().addRootType(),
+                               
JsonSerializer.create().keepNullProperties().addBeanTypes().addRootType(),
                                JsonParser.create(),
                                0
                        },
                        { /* 1 */
                                "Json - lax",
-                               
JsonSerializer.create().ssq().trimNullProperties(false).addBeanTypes().addRootType(),
+                               
JsonSerializer.create().ssq().keepNullProperties().addBeanTypes().addRootType(),
                                JsonParser.create(),
                                0
                        },
                        { /* 2 */
                                "Json - lax, readable",
-                               
JsonSerializer.create().ssq().ws().trimNullProperties(false).addBeanTypes().addRootType(),
+                               
JsonSerializer.create().ssq().ws().keepNullProperties().addBeanTypes().addRootType(),
                                JsonParser.create(),
                                0
                        },
                        { /* 3 */
                                "Xml - namespaces, validation, readable",
-                               
XmlSerializer.create().ns().sq().trimNullProperties(false).addNamespaceUrisToRoot().useWhitespace().addBeanTypes().addRootType(),
+                               
XmlSerializer.create().ns().sq().keepNullProperties().addNamespaceUrisToRoot().useWhitespace().addBeanTypes().addRootType(),
                                XmlParser.create(),
                                CHECK_XML_WHITESPACE | VALIDATE_XML
                        },
                        { /* 4 */
                                "Xml - no namespaces, validation",
-                               
XmlSerializer.create().sq().trimNullProperties(false).addBeanTypes().addRootType(),
+                               
XmlSerializer.create().sq().keepNullProperties().addBeanTypes().addRootType(),
                                XmlParser.create(),
                                CHECK_XML_WHITESPACE
                        },
                        { /* 5 */
                                "Html - default",
-                               
HtmlSerializer.create().trimNullProperties(false).addBeanTypes().addRootType(),
+                               
HtmlSerializer.create().keepNullProperties().addBeanTypes().addRootType(),
                                HtmlParser.create(),
                                CHECK_XML_WHITESPACE
                        },
                        { /* 6 */
                                "Html - readable",
-                               
HtmlSerializer.create().sq().ws().trimNullProperties(false).addBeanTypes().addRootType(),
+                               
HtmlSerializer.create().sq().ws().keepNullProperties().addBeanTypes().addRootType(),
                                HtmlParser.create(),
                                CHECK_XML_WHITESPACE
                        },
@@ -98,31 +98,31 @@ public abstract class RoundTripTest {
                        },
                        { /* 8 */
                                "Uon - default",
-                               
UonSerializer.create().trimNullProperties(false).addBeanTypes().addRootType(),
+                               
UonSerializer.create().keepNullProperties().addBeanTypes().addRootType(),
                                UonParser.create(),
                                0
                        },
                        { /* 9 */
                                "Uon - readable",
-                               
UonSerializer.create().ws().trimNullProperties(false).addBeanTypes().addRootType(),
+                               
UonSerializer.create().ws().keepNullProperties().addBeanTypes().addRootType(),
                                UonParser.create(),
                                0
                        },
                        { /* 10 */
                                "Uon - encoded",
-                               
UonSerializer.create().encoding().trimNullProperties(false).addBeanTypes().addRootType(),
+                               
UonSerializer.create().encoding().keepNullProperties().addBeanTypes().addRootType(),
                                UonParser.create().decoding(),
                                0
                        },
                        { /* 11 */
                                "UrlEncoding - default",
-                               
UrlEncodingSerializer.create().trimNullProperties(false).addBeanTypes().addRootType(),
+                               
UrlEncodingSerializer.create().keepNullProperties().addBeanTypes().addRootType(),
                                UrlEncodingParser.create(),
                                0
                        },
                        { /* 12 */
                                "UrlEncoding - readable",
-                               
UrlEncodingSerializer.create().ws().trimNullProperties(false).addBeanTypes().addRootType(),
+                               
UrlEncodingSerializer.create().ws().keepNullProperties().addBeanTypes().addRootType(),
                                UrlEncodingParser.create(),
                                0
                        },
@@ -134,37 +134,37 @@ public abstract class RoundTripTest {
                        },
                        { /* 14 */
                                "Rdf.Xml",
-                               
RdfXmlSerializer.create().trimNullProperties(false).addLiteralTypes().addBeanTypes().addRootType(),
+                               
RdfXmlSerializer.create().keepNullProperties().addLiteralTypes().addBeanTypes().addRootType(),
                                RdfXmlParser.create(),
                                0
                        },
                        { /* 15 */
                                "Rdf.XmlAbbrev",
-                               
RdfXmlAbbrevSerializer.create().trimNullProperties(false).addLiteralTypes().addBeanTypes().addRootType(),
+                               
RdfXmlAbbrevSerializer.create().keepNullProperties().addLiteralTypes().addBeanTypes().addRootType(),
                                RdfXmlParser.create(),
                                0
                        },
                        { /* 16 */
                                "Rdf.Turtle",
-                               
TurtleSerializer.create().trimNullProperties(false).addLiteralTypes().addBeanTypes().addRootType(),
+                               
TurtleSerializer.create().keepNullProperties().addLiteralTypes().addBeanTypes().addRootType(),
                                TurtleParser.create(),
                                0
                        },
                        { /* 17 */
                                "Rdf.NTriple",
-                               
NTripleSerializer.create().trimNullProperties(false).addLiteralTypes().addBeanTypes().addRootType(),
+                               
NTripleSerializer.create().keepNullProperties().addLiteralTypes().addBeanTypes().addRootType(),
                                NTripleParser.create(),
                                0
                        },
                        { /* 18 */
                                "Rdf.N3",
-                               
N3Serializer.create().trimNullProperties(false).addLiteralTypes().addBeanTypes().addRootType(),
+                               
N3Serializer.create().keepNullProperties().addLiteralTypes().addBeanTypes().addRootType(),
                                N3Parser.create(),
                                0
                        },
                        { /* 19 */
                                "MsgPack",
-                               
MsgPackSerializer.create().trimNullProperties(false).addBeanTypes().addRootType(),
+                               
MsgPackSerializer.create().keepNullProperties().addBeanTypes().addRootType(),
                                MsgPackParser.create(),
                                0
                        },
@@ -172,7 +172,7 @@ public abstract class RoundTripTest {
                        // Validation testing only
                        { /* 20 */
                                "Json schema",
-                               
JsonSchemaSerializer.create().trimNullProperties(false).addBeanTypes().addRootType(),
+                               
JsonSchemaSerializer.create().keepNullProperties().addBeanTypes().addRootType(),
                                null,
                                RETURN_ORIGINAL_OBJECT
                        },
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/CommonTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/CommonTest.java
index cf3df4c..d72fb00 100755
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/CommonTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/CommonTest.java
@@ -36,13 +36,13 @@ public class CommonTest {
                HtmlParser p = HtmlParser.DEFAULT;
                A t1 = A.create(), t2;
 
-               s.trimNullProperties(false);
+               s.keepNullProperties();
                String r = s.build().serialize(t1);
                
assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>s1</td><td><null/></td></tr><tr><td>s2</td><td>s2</td></tr></table>",
 r);
                t2 = p.parse(r, A.class);
                assertEqualObjects(t1, t2);
 
-               s.trimNullProperties(true);
+               s.keepNullProperties(false);
                r = s.build().serialize(t1);
                
assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>s2</td><td>s2</td></tr></table>",
 r);
                t2 = p.parse(r, A.class);
@@ -439,7 +439,7 @@ public class CommonTest {
        
//====================================================================================================
        @Test
        public void testBasicBean() throws Exception {
-               WriterSerializer s = 
HtmlSerializer.create().sq().trimNullProperties(false).sortProperties().addKeyValueTableHeaders().build();
+               WriterSerializer s = 
HtmlSerializer.create().sq().keepNullProperties().sortProperties().addKeyValueTableHeaders().build();
 
                J a = new J();
                a.setF1("J");
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/jena/CommonTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/jena/CommonTest.java
index 799f700..f7a9275 100755
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/jena/CommonTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/jena/CommonTest.java
@@ -50,13 +50,13 @@ public class CommonTest {
                RdfParser p = RdfXmlParser.DEFAULT;
                A t1 = A.create(), t2;
 
-               s.trimNullProperties(false);
+               s.keepNullProperties();
                String r = s.build().serialize(t1);
                assertEquals("<rdf:Description><jp:s1 
rdf:resource='http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'/><jp:s2>s2</jp:s2></rdf:Description>",
 strip(r));
                t2 = p.parse(r, A.class);
                assertEqualObjects(t1, t2);
 
-               s.trimNullProperties(true);
+               s.keepNullProperties(false);
                r = s.build().serialize(t1);
                
assertEquals("<rdf:Description><jp:s2>s2</jp:s2></rdf:Description>", strip(r));
                t2 = p.parse(r, A.class);
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/json/CommonTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/json/CommonTest.java
index f931230..7579b26 100755
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/json/CommonTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/json/CommonTest.java
@@ -35,13 +35,13 @@ public class CommonTest {
                JsonParser p = JsonParser.DEFAULT;
                A t1 = A.create(), t2;
 
-               s.trimNullProperties(false);
+               s.keepNullProperties();
                String r = s.build().serialize(t1);
                assertEquals("{s1:null,s2:'s2'}", r);
                t2 = p.parse(r, A.class);
                assertEqualObjects(t1, t2);
 
-               s.trimNullProperties(true);
+               s.keepNullProperties(false);
                r = s.build().serialize(t1);
                assertEquals("{s2:'s2'}", r);
                t2 = p.parse(r, A.class);
@@ -316,7 +316,7 @@ public class CommonTest {
        
//====================================================================================================
        @Test
        public void testBasicBean() throws Exception {
-               JsonSerializer s = 
JsonSerializer.create().ssq().trimNullProperties(false).sortProperties().build();
+               JsonSerializer s = 
JsonSerializer.create().ssq().keepNullProperties().sortProperties().build();
 
                J a = new J();
                a.setF1("J");
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/json/JsonTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/json/JsonTest.java
index 8da607a..3385b1b 100755
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/json/JsonTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/json/JsonTest.java
@@ -33,8 +33,8 @@ public class JsonTest {
                Map<String,Object> m = new LinkedHashMap<>();
                List<Object> l = new LinkedList<>();
 
-               WriterSerializer s1 = 
JsonSerializer.create().ssq().trimNullProperties(false).build();
-               WriterSerializer s2 = 
JsonSerializer.create().simple().trimNullProperties(false).build();
+               WriterSerializer s1 = 
JsonSerializer.create().ssq().keepNullProperties().build();
+               WriterSerializer s2 = 
JsonSerializer.create().simple().keepNullProperties().build();
                String r;
 
                // Null keys and values
@@ -109,7 +109,7 @@ public class JsonTest {
        
//====================================================================================================
        @Test
        public void testBackslashesInStrings() throws Exception {
-               JsonSerializer s = 
JsonSerializer.create().simple().trimNullProperties(false).build();
+               JsonSerializer s = 
JsonSerializer.create().simple().keepNullProperties().build();
                String r, r2;
 
                // [\\]
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/serializer/ReaderObjectComboTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/serializer/ReaderObjectComboTest.java
index 8ad4677..f58dd38 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/serializer/ReaderObjectComboTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/serializer/ReaderObjectComboTest.java
@@ -338,7 +338,7 @@ public class ReaderObjectComboTest extends 
ComboSerializeTest {
 
        @Override
        protected Serializer applySettings(Serializer s) throws Exception {
-               return s.builder().trimNullProperties(false).build();
+               return s.builder().keepNullProperties().build();
        }
 
        public static class BeanWithReaderField {
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/serializer/SerializerConfigAnnotationTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/serializer/SerializerConfigAnnotationTest.java
index bb824f4..7b89bba 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/serializer/SerializerConfigAnnotationTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/serializer/SerializerConfigAnnotationTest.java
@@ -86,7 +86,7 @@ public class SerializerConfigAnnotationTest {
                check("true", x.isSortMaps());
                check("true", x.isTrimEmptyCollections());
                check("true", x.isTrimEmptyMaps());
-               check("true", x.isTrimNullProperties());
+               check("false", x.isKeepNullProperties());
                check("true", x.isTrimStrings());
                
check("{absoluteAuthority:'/',absoluteContextRoot:'/',absolutePathInfo:'/',absolutePathInfoParent:'/',absoluteServletPath:'/',absoluteServletPathParent:'/',rootRelativeContextRoot:'/',rootRelativePathInfo:'/',rootRelativePathInfoParent:'/',rootRelativeServletPath:'/',rootRelativeServletPathParent:'/'}",
 x.getUriContext());
                check("RESOURCE", x.getUriRelativity());
@@ -106,7 +106,7 @@ public class SerializerConfigAnnotationTest {
                check("true", x.isSortMaps());
                check("true", x.isTrimEmptyCollections());
                check("true", x.isTrimEmptyMaps());
-               check("true", x.isTrimNullProperties());
+               check("false", x.isKeepNullProperties());
                check("true", x.isTrimStrings());
                
check("{absoluteAuthority:'/',absoluteContextRoot:'/',absolutePathInfo:'/',absolutePathInfoParent:'/',absoluteServletPath:'/',absoluteServletPathParent:'/',rootRelativeContextRoot:'/',rootRelativePathInfo:'/',rootRelativePathInfoParent:'/',rootRelativeServletPath:'/',rootRelativeServletPathParent:'/'}",
 x.getUriContext());
                check("RESOURCE", x.getUriRelativity());
@@ -134,7 +134,7 @@ public class SerializerConfigAnnotationTest {
                check("false", x.isSortMaps());
                check("false", x.isTrimEmptyCollections());
                check("false", x.isTrimEmptyMaps());
-               check("true", x.isTrimNullProperties());
+               check("false", x.isKeepNullProperties());
                check("false", x.isTrimStrings());
                
check("{absoluteAuthority:'/',absoluteContextRoot:'/',absolutePathInfo:'/',absolutePathInfoParent:'/',absoluteServletPath:'/',absoluteServletPathParent:'/',rootRelativeContextRoot:'/',rootRelativePathInfo:'/',rootRelativePathInfoParent:'/',rootRelativeServletPath:'/',rootRelativeServletPathParent:'/'}",
 x.getUriContext());
                check("RESOURCE", x.getUriRelativity());
@@ -154,7 +154,7 @@ public class SerializerConfigAnnotationTest {
                check("false", x.isSortMaps());
                check("false", x.isTrimEmptyCollections());
                check("false", x.isTrimEmptyMaps());
-               check("true", x.isTrimNullProperties());
+               check("false", x.isKeepNullProperties());
                check("false", x.isTrimStrings());
                
check("{absoluteAuthority:'/',absoluteContextRoot:'/',absolutePathInfo:'/',absolutePathInfoParent:'/',absoluteServletPath:'/',absoluteServletPathParent:'/',rootRelativeContextRoot:'/',rootRelativePathInfo:'/',rootRelativePathInfoParent:'/',rootRelativeServletPath:'/',rootRelativeServletPathParent:'/'}",
 x.getUriContext());
                check("RESOURCE", x.getUriRelativity());
@@ -181,7 +181,7 @@ public class SerializerConfigAnnotationTest {
                check("false", x.isSortMaps());
                check("false", x.isTrimEmptyCollections());
                check("false", x.isTrimEmptyMaps());
-               check("true", x.isTrimNullProperties());
+               check("false", x.isKeepNullProperties());
                check("false", x.isTrimStrings());
                
check("{absoluteAuthority:'/',absoluteContextRoot:'/',absolutePathInfo:'/',absolutePathInfoParent:'/',absoluteServletPath:'/',absoluteServletPathParent:'/',rootRelativeContextRoot:'/',rootRelativePathInfo:'/',rootRelativePathInfoParent:'/',rootRelativeServletPath:'/',rootRelativeServletPathParent:'/'}",
 x.getUriContext());
                check("RESOURCE", x.getUriRelativity());
@@ -201,7 +201,7 @@ public class SerializerConfigAnnotationTest {
                check("false", x.isSortMaps());
                check("false", x.isTrimEmptyCollections());
                check("false", x.isTrimEmptyMaps());
-               check("true", x.isTrimNullProperties());
+               check("false", x.isKeepNullProperties());
                check("false", x.isTrimStrings());
                
check("{absoluteAuthority:'/',absoluteContextRoot:'/',absolutePathInfo:'/',absolutePathInfoParent:'/',absoluteServletPath:'/',absoluteServletPathParent:'/',rootRelativeContextRoot:'/',rootRelativePathInfo:'/',rootRelativePathInfoParent:'/',rootRelativeServletPath:'/',rootRelativeServletPathParent:'/'}",
 x.getUriContext());
                check("RESOURCE", x.getUriRelativity());
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/testutils/TestUtils.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/testutils/TestUtils.java
index 76f1487..a2fd5a2 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/testutils/TestUtils.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/testutils/TestUtils.java
@@ -37,7 +37,7 @@ public class TestUtils {
 
        private static JsonSerializer js = JsonSerializer.create()
                .ssq()
-               .trimNullProperties(false)
+               .keepNullProperties()
                .addBeanTypes().addRootType()
                .build();
 
@@ -45,7 +45,7 @@ public class TestUtils {
                .ssq()
                .sortCollections()
                .sortMaps()
-               .trimNullProperties(false)
+               .keepNullProperties()
                .addBeanTypes().addRootType()
                .build();
 
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/transforms/BeanDictionaryComboTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/transforms/BeanDictionaryComboTest.java
index aacf72a..34a9a06 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/transforms/BeanDictionaryComboTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/transforms/BeanDictionaryComboTest.java
@@ -856,7 +856,7 @@ public class BeanDictionaryComboTest extends 
ComboRoundTripTest {
 
        @Override
        protected Serializer applySettings(Serializer s) throws Exception {
-               return s.builder().trimNullProperties(false).build();
+               return s.builder().keepNullProperties().build();
        }
 
        @Override
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/transforms/BuilderComboTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/transforms/BuilderComboTest.java
index 9e3b905..4963da7 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/transforms/BuilderComboTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/transforms/BuilderComboTest.java
@@ -250,7 +250,7 @@ public class BuilderComboTest extends ComboRoundTripTest {
 
        @Override
        protected Serializer applySettings(Serializer s) throws Exception {
-               return s.builder().trimNullProperties(false).build();
+               return s.builder().keepNullProperties().build();
        }
 
        @Override
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/transforms/ByteArrayBase64SwapComboTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/transforms/ByteArrayBase64SwapComboTest.java
index 2d49601..2bd6de9 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/transforms/ByteArrayBase64SwapComboTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/transforms/ByteArrayBase64SwapComboTest.java
@@ -417,7 +417,7 @@ public class ByteArrayBase64SwapComboTest extends 
ComboRoundTripTest {
 
        @Override
        protected Serializer applySettings(Serializer s) throws Exception {
-               return 
s.builder().pojoSwaps(ByteArraySwap.Base64.class).trimNullProperties(false).build();
+               return 
s.builder().pojoSwaps(ByteArraySwap.Base64.class).keepNullProperties().build();
        }
 
        @Override
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/uon/Common_UonTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/uon/Common_UonTest.java
index 227bff5..063f76e 100755
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/uon/Common_UonTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/uon/Common_UonTest.java
@@ -36,13 +36,13 @@ public class Common_UonTest {
                UonSerializerBuilder s = UonSerializer.create().encoding();
                A t1 = A.create(), t2;
 
-               s.trimNullProperties(false);
+               s.keepNullProperties();
                String r = s.build().serialize(t1);
                assertEquals("(s1=null,s2=s2)", r);
                t2 = pe.parse(r, A.class);
                assertEqualObjects(t1, t2);
 
-               s.trimNullProperties(true);
+               s.keepNullProperties(false);
                r = s.build().serialize(t1);
                assertEquals("(s2=s2)", r);
                t2 = p.parse(r, A.class);
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/urlencoding/Common_UrlEncodingTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/urlencoding/Common_UrlEncodingTest.java
index f67f025..b4aef7c 100755
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/urlencoding/Common_UrlEncodingTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/urlencoding/Common_UrlEncodingTest.java
@@ -35,13 +35,13 @@ public class Common_UrlEncodingTest {
                UrlEncodingSerializerBuilder s = UrlEncodingSerializer.create();
                A t1 = A.create(), t2;
 
-               s.trimNullProperties(false);
+               s.keepNullProperties();
                String r = s.build().serialize(t1);
                assertEquals("s1=null&s2=s2", r);
                t2 = p.parse(r, A.class);
                assertEqualObjects(t1, t2);
 
-               s.trimNullProperties(true);
+               s.keepNullProperties(false);
                r = s.build().serialize(t1);
                assertEquals("s2=s2", r);
                t2 = p.parse(r, A.class);
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/xml/CommonTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/xml/CommonTest.java
index 007b804..2cdca2a 100755
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/xml/CommonTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/xml/CommonTest.java
@@ -39,13 +39,13 @@ public class CommonTest {
                XmlParser p = XmlParser.DEFAULT;
                A t1 = A.create(), t2;
 
-               s.trimNullProperties(false);
+               s.keepNullProperties();
                String r = s.build().serialize(t1);
                assertEquals("<object><s1 _type='null'/><s2>s2</s2></object>", 
r);
                t2 = p.parse(r, A.class);
                assertEqualObjects(t1, t2);
 
-               s.trimNullProperties(true);
+               s.keepNullProperties(false);
                r = s.build().serialize(t1);
                assertEquals("<object><s2>s2</s2></object>", r);
                t2 = p.parse(r, A.class);
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/xml/XmlContentTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/xml/XmlContentTest.java
index 9b5dcbf..0aac523 100755
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/xml/XmlContentTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/xml/XmlContentTest.java
@@ -31,8 +31,8 @@ public class XmlContentTest {
        @Test
        public void testContentFormat() throws Exception {
                A t = A.newInstance(), t2;
-               XmlSerializer s1 = 
XmlSerializer.DEFAULT_SQ.builder().trimNullProperties(false).build(),
-                       s2 = 
XmlSerializer.create().sq().ws().enableNamespaces(false).trimNullProperties(false).build();
+               XmlSerializer s1 = 
XmlSerializer.DEFAULT_SQ.builder().keepNullProperties().build(),
+                       s2 = 
XmlSerializer.create().sq().ws().enableNamespaces(false).keepNullProperties().build();
                XmlParser p = XmlParser.DEFAULT;
                WriterSerializerSession session;
                String r;
@@ -139,8 +139,8 @@ public class XmlContentTest {
        @Test
        public void testXmlMixed() throws Exception {
                B t = B.newInstance(), t2;
-               XmlSerializer s1 = 
XmlSerializer.DEFAULT_SQ.builder().trimNullProperties(false).build(),
-                       s2 = 
XmlSerializer.create().sq().ws().enableNamespaces(false).trimNullProperties(false).build();
+               XmlSerializer s1 = 
XmlSerializer.DEFAULT_SQ.builder().keepNullProperties().build(),
+                       s2 = 
XmlSerializer.create().sq().ws().enableNamespaces(false).keepNullProperties().build();
                XmlParser p = XmlParser.DEFAULT;
                WriterSerializerSession session;
                String r;
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/xml/XmlTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/xml/XmlTest.java
index 2f177be..f3ff02c 100755
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/xml/XmlTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/xml/XmlTest.java
@@ -77,12 +77,12 @@ public class XmlTest {
                        +"</object>\n";
 
                OMap m = (OMap) XmlParser.DEFAULT.parse(xml1, Object.class);
-               String json2 = 
JsonSerializer.create().simple().ws().trimNullProperties(false).build().serialize(m);
+               String json2 = 
JsonSerializer.create().simple().ws().keepNullProperties().build().serialize(m);
                assertEquals(json1, json2);
 
                m = (OMap) JsonParser.DEFAULT.parse(json1, Object.class);
                String xml2 = XmlSerializer.create().sq().ws()
-                       .trimNullProperties(false)
+                       .keepNullProperties()
                        .build()
                        .serialize(m);
                assertEquals(xml1, xml2);
@@ -136,7 +136,7 @@ public class XmlTest {
                String r = XmlSerializer.create().ns().sq().ws()
                        .addNamespaceUrisToRoot()
                        .defaultNamespace("http://www.apache.org";)
-                       .trimNullProperties(false)
+                       .keepNullProperties()
                        .build()
                        .serialize(m);
                assertEquals(xml1, r);
@@ -358,7 +358,7 @@ public class XmlTest {
                String r = null;
                r = s.build().serialize(t);
                assertEquals("<object f1='1' f2='2' f3='3'/>", r);
-               
s.enableNamespaces(true).addNamespaceUrisToRoot().autoDetectNamespaces(true).trimNullProperties(false);
+               
s.enableNamespaces(true).addNamespaceUrisToRoot().autoDetectNamespaces(true).keepNullProperties();
                t.f1 = 4; t.f2 = 5; t.f3 = 6;
                r = s.build().serialize(t);
                assertEquals("<object xmlns='http://www.apache.org/2013/Juneau' 
xmlns:bar='http://bar' xmlns:foo='http://foo' xmlns:baz='http://baz' bar:f1='4' 
foo:f2='5' baz:f3='6'/>", r);
diff --git 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
index fcedc7a..ec9040a 100644
--- 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
@@ -1690,13 +1690,25 @@ public class RdfSerializerBuilder extends 
WriterSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public RdfSerializerBuilder dontTrimNullProperties() {
                super.dontTrimNullProperties();
                return this;
        }
 
        @Override /* GENERATED - SerializerBuilder */
+       public RdfSerializerBuilder keepNullProperties() {
+               super.keepNullProperties();
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
+       public RdfSerializerBuilder keepNullProperties(boolean value) {
+               super.keepNullProperties(value);
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
        public RdfSerializerBuilder listener(Class<? extends 
org.apache.juneau.serializer.SerializerListener> value) {
                super.listener(value);
                return this;
@@ -1750,7 +1762,7 @@ public class RdfSerializerBuilder extends 
WriterSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public RdfSerializerBuilder trimNullProperties(boolean value) {
                super.trimNullProperties(value);
                return this;
diff --git 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
index ca86dd0..9f1a715 100644
--- 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
+++ 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
@@ -196,7 +196,7 @@ public final class RdfSerializerSession extends 
WriterSerializerSession {
 
                if (o == null || sType.isChar() && ((Character)o).charValue() 
== 0) {
                        if (bpm != null) {
-                               if (! isTrimNullProperties()) {
+                               if (isKeepNullProperties()) {
                                        n = m.createResource(RDF_NIL);
                                }
                        } else {
@@ -310,7 +310,7 @@ public final class RdfSerializerSession extends 
WriterSerializerSession {
        }
 
        private void serializeBeanMap(BeanMap<?> m, Resource r, String 
typeName) throws IOException, SerializeException {
-               List<BeanPropertyValue> l = m.getValues(isTrimNullProperties(), 
typeName != null ? createBeanTypeNameProperty(m, typeName) : null);
+               List<BeanPropertyValue> l = m.getValues(isKeepNullProperties(), 
typeName != null ? createBeanTypeNameProperty(m, typeName) : null);
                Collections.reverse(l);
                for (BeanPropertyValue bpv : l) {
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
index 04e02ec..d623756 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
@@ -464,16 +464,16 @@ public class BeanMap<T> extends 
AbstractMap<String,Object> implements Delegate<T
         * <p>
         * This allows a snapshot of all values to be grabbed from a bean in 
one call.
         *
-        * @param ignoreNulls
-        *      Don't return properties whose values are null.
+        * @param keepNulls
+        *      Also return properties whose values are null.
         * @param prependVals
         *      Additional bean property values to prepended to this list.
         *      Any <jk>null</jk> values in this list will be ignored.
         * @return The list of all bean property values.
         */
-       public List<BeanPropertyValue> getValues(final boolean ignoreNulls, 
BeanPropertyValue...prependVals) {
+       public List<BeanPropertyValue> getValues(boolean keepNulls, 
BeanPropertyValue...prependVals) {
                Collection<BeanPropertyMeta> properties = getProperties();
-               int capacity = (ignoreNulls && properties.size() > 10) ? 10 : 
properties.size() + prependVals.length;
+               int capacity = ((! keepNulls) && properties.size() > 10) ? 10 : 
properties.size() + prependVals.length;
                List<BeanPropertyValue> l = new ArrayList<>(capacity);
                for (BeanPropertyValue v : prependVals)
                        if (v != null)
@@ -486,13 +486,13 @@ public class BeanMap<T> extends 
AbstractMap<String,Object> implements Delegate<T
                                                if (dynaMap != null) {
                                                        for (String pName : 
bpm.getDynaMap(bean).keySet()) {
                                                                Object val = 
bpm.get(this, pName);
-                                                               if (val != null 
|| ! ignoreNulls)
+                                                               if (val != null 
|| keepNulls)
                                                                        
l.add(new BeanPropertyValue(bpm, pName, val, null));
                                                        }
                                                }
                                        } else {
                                                Object val = bpm.get(this, 
null);
-                                               if (val != null || ! 
ignoreNulls)
+                                               if (val != null || keepNulls)
                                                        l.add(new 
BeanPropertyValue(bpm, bpm.getName(), val, null));
                                        }
                                } catch (Error e) {
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java
index da5c437..edaa35e 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java
@@ -811,13 +811,25 @@ public class CsvSerializerBuilder extends 
WriterSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public CsvSerializerBuilder dontTrimNullProperties() {
                super.dontTrimNullProperties();
                return this;
        }
 
        @Override /* GENERATED - SerializerBuilder */
+       public CsvSerializerBuilder keepNullProperties() {
+               super.keepNullProperties();
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
+       public CsvSerializerBuilder keepNullProperties(boolean value) {
+               super.keepNullProperties(value);
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
        public CsvSerializerBuilder listener(Class<? extends 
org.apache.juneau.serializer.SerializerListener> value) {
                super.listener(value);
                return this;
@@ -871,7 +883,7 @@ public class CsvSerializerBuilder extends 
WriterSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public CsvSerializerBuilder trimNullProperties(boolean value) {
                super.trimNullProperties(value);
                return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
index 90d7708..87ae567 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
@@ -1337,13 +1337,25 @@ public class HtmlDocSerializerBuilder extends 
HtmlStrippedDocSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public HtmlDocSerializerBuilder dontTrimNullProperties() {
                super.dontTrimNullProperties();
                return this;
        }
 
        @Override /* GENERATED - SerializerBuilder */
+       public HtmlDocSerializerBuilder keepNullProperties() {
+               super.keepNullProperties();
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
+       public HtmlDocSerializerBuilder keepNullProperties(boolean value) {
+               super.keepNullProperties(value);
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
        public HtmlDocSerializerBuilder listener(Class<? extends 
org.apache.juneau.serializer.SerializerListener> value) {
                super.listener(value);
                return this;
@@ -1397,7 +1409,7 @@ public class HtmlDocSerializerBuilder extends 
HtmlStrippedDocSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public HtmlDocSerializerBuilder trimNullProperties(boolean value) {
                super.trimNullProperties(value);
                return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
index 487fb6f..bc3ea60 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
@@ -1052,13 +1052,25 @@ public class HtmlSchemaSerializerBuilder extends 
HtmlSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public HtmlSchemaSerializerBuilder dontTrimNullProperties() {
                super.dontTrimNullProperties();
                return this;
        }
 
        @Override /* GENERATED - SerializerBuilder */
+       public HtmlSchemaSerializerBuilder keepNullProperties() {
+               super.keepNullProperties();
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
+       public HtmlSchemaSerializerBuilder keepNullProperties(boolean value) {
+               super.keepNullProperties(value);
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
        public HtmlSchemaSerializerBuilder listener(Class<? extends 
org.apache.juneau.serializer.SerializerListener> value) {
                super.listener(value);
                return this;
@@ -1112,7 +1124,7 @@ public class HtmlSchemaSerializerBuilder extends 
HtmlSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public HtmlSchemaSerializerBuilder trimNullProperties(boolean value) {
                super.trimNullProperties(value);
                return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
index 4338bb7..20b2d8b 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
@@ -985,13 +985,25 @@ public class HtmlSerializerBuilder extends 
XmlSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public HtmlSerializerBuilder dontTrimNullProperties() {
                super.dontTrimNullProperties();
                return this;
        }
 
        @Override /* GENERATED - SerializerBuilder */
+       public HtmlSerializerBuilder keepNullProperties() {
+               super.keepNullProperties();
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
+       public HtmlSerializerBuilder keepNullProperties(boolean value) {
+               super.keepNullProperties(value);
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
        public HtmlSerializerBuilder listener(Class<? extends 
org.apache.juneau.serializer.SerializerListener> value) {
                super.listener(value);
                return this;
@@ -1045,7 +1057,7 @@ public class HtmlSerializerBuilder extends 
XmlSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public HtmlSerializerBuilder trimNullProperties(boolean value) {
                super.trimNullProperties(value);
                return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
index 84d8b27..e617660 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
@@ -476,7 +476,7 @@ public class HtmlSerializerSession extends 
XmlSerializerSession {
                        out.ie(i+1).eTag("tr").nl(i+1);
                }
 
-               for (BeanPropertyValue p : m.getValues(isTrimNullProperties())) 
{
+               for (BeanPropertyValue p : m.getValues(isKeepNullProperties())) 
{
                        BeanPropertyMeta pMeta = p.getMeta();
                        ClassMeta<?> cMeta = p.getClassMeta();
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
index 0e3d93b..a58259a 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
@@ -811,13 +811,25 @@ public class HtmlStrippedDocSerializerBuilder extends 
HtmlSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public HtmlStrippedDocSerializerBuilder dontTrimNullProperties() {
                super.dontTrimNullProperties();
                return this;
        }
 
        @Override /* GENERATED - SerializerBuilder */
+       public HtmlStrippedDocSerializerBuilder keepNullProperties() {
+               super.keepNullProperties();
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
+       public HtmlStrippedDocSerializerBuilder keepNullProperties(boolean 
value) {
+               super.keepNullProperties(value);
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
        public HtmlStrippedDocSerializerBuilder listener(Class<? extends 
org.apache.juneau.serializer.SerializerListener> value) {
                super.listener(value);
                return this;
@@ -871,7 +883,7 @@ public class HtmlStrippedDocSerializerBuilder extends 
HtmlSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public HtmlStrippedDocSerializerBuilder trimNullProperties(boolean 
value) {
                super.trimNullProperties(value);
                return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
index 127e699..ef90fc2 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
@@ -810,13 +810,25 @@ public class JsoSerializerBuilder extends 
OutputStreamSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public JsoSerializerBuilder dontTrimNullProperties() {
                super.dontTrimNullProperties();
                return this;
        }
 
        @Override /* GENERATED - SerializerBuilder */
+       public JsoSerializerBuilder keepNullProperties() {
+               super.keepNullProperties();
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
+       public JsoSerializerBuilder keepNullProperties(boolean value) {
+               super.keepNullProperties(value);
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
        public JsoSerializerBuilder listener(Class<? extends 
org.apache.juneau.serializer.SerializerListener> value) {
                super.listener(value);
                return this;
@@ -870,7 +882,7 @@ public class JsoSerializerBuilder extends 
OutputStreamSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public JsoSerializerBuilder trimNullProperties(boolean value) {
                super.trimNullProperties(value);
                return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java
index 6366b3c..e728f99 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java
@@ -473,7 +473,7 @@ public class JsonSchemaSerializerBuilder extends 
JsonSerializerBuilder {
                return this;
        }
 
-       @Override /* SerializerBuilder */
+       @Deprecated @Override /* SerializerBuilder */
        public JsonSchemaSerializerBuilder trimNullProperties(boolean value) {
                super.trimNullProperties(value);
                return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java
index c84fb11..e25b230 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java
@@ -907,13 +907,25 @@ public class JsonSerializerBuilder extends 
WriterSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public JsonSerializerBuilder dontTrimNullProperties() {
                super.dontTrimNullProperties();
                return this;
        }
 
        @Override /* GENERATED - SerializerBuilder */
+       public JsonSerializerBuilder keepNullProperties() {
+               super.keepNullProperties();
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
+       public JsonSerializerBuilder keepNullProperties(boolean value) {
+               super.keepNullProperties(value);
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
        public JsonSerializerBuilder listener(Class<? extends 
org.apache.juneau.serializer.SerializerListener> value) {
                super.listener(value);
                return this;
@@ -967,7 +979,7 @@ public class JsonSerializerBuilder extends 
WriterSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public JsonSerializerBuilder trimNullProperties(boolean value) {
                super.trimNullProperties(value);
                return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerSession.java
index 3327eb4..8e9acf1 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerSession.java
@@ -204,7 +204,7 @@ public class JsonSerializerSession extends 
WriterSerializerSession {
                out.append('{');
 
                boolean addComma = false;
-               for (BeanPropertyValue p : m.getValues(isTrimNullProperties(), 
typeName != null ? createBeanTypeNameProperty(m, typeName) : null)) {
+               for (BeanPropertyValue p : m.getValues(isKeepNullProperties(), 
typeName != null ? createBeanTypeNameProperty(m, typeName) : null)) {
                        BeanPropertyMeta pMeta = p.getMeta();
                        if (pMeta.canRead()) {
                                ClassMeta<?> cMeta = p.getClassMeta();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializerBuilder.java
index 4f39417..e563835 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializerBuilder.java
@@ -810,13 +810,25 @@ public class SimpleJsonSerializerBuilder extends 
JsonSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public SimpleJsonSerializerBuilder dontTrimNullProperties() {
                super.dontTrimNullProperties();
                return this;
        }
 
        @Override /* GENERATED - SerializerBuilder */
+       public SimpleJsonSerializerBuilder keepNullProperties() {
+               super.keepNullProperties();
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
+       public SimpleJsonSerializerBuilder keepNullProperties(boolean value) {
+               super.keepNullProperties(value);
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
        public SimpleJsonSerializerBuilder listener(Class<? extends 
org.apache.juneau.serializer.SerializerListener> value) {
                super.listener(value);
                return this;
@@ -870,7 +882,7 @@ public class SimpleJsonSerializerBuilder extends 
JsonSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public SimpleJsonSerializerBuilder trimNullProperties(boolean value) {
                super.trimNullProperties(value);
                return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
index 17a79ec..14548bb 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
@@ -810,13 +810,25 @@ public class MsgPackSerializerBuilder extends 
OutputStreamSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public MsgPackSerializerBuilder dontTrimNullProperties() {
                super.dontTrimNullProperties();
                return this;
        }
 
        @Override /* GENERATED - SerializerBuilder */
+       public MsgPackSerializerBuilder keepNullProperties() {
+               super.keepNullProperties();
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
+       public MsgPackSerializerBuilder keepNullProperties(boolean value) {
+               super.keepNullProperties(value);
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
        public MsgPackSerializerBuilder listener(Class<? extends 
org.apache.juneau.serializer.SerializerListener> value) {
                super.listener(value);
                return this;
@@ -870,7 +882,7 @@ public class MsgPackSerializerBuilder extends 
OutputStreamSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public MsgPackSerializerBuilder trimNullProperties(boolean value) {
                super.trimNullProperties(value);
                return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java
index a6e38f0..898c0f2 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java
@@ -171,14 +171,14 @@ public final class MsgPackSerializerSession extends 
OutputStreamSerializerSessio
 
        private void serializeBeanMap(MsgPackOutputStream out, final BeanMap<?> 
m, String typeName) throws IOException, SerializeException {
 
-               List<BeanPropertyValue> values = 
m.getValues(isTrimNullProperties(), typeName != null ? 
createBeanTypeNameProperty(m, typeName) : null);
+               List<BeanPropertyValue> values = 
m.getValues(isKeepNullProperties(), typeName != null ? 
createBeanTypeNameProperty(m, typeName) : null);
 
                int size = values.size();
                for (BeanPropertyValue p : values) {
                        if (p.getThrown() != null)
                                size--;
                        // Must handle the case where recursion occurs and 
property is not serialized.
-                       if (isTrimNullProperties() && willRecurse(p))
+                       if ((! isKeepNullProperties()) && willRecurse(p))
                                size--;
                }
 
@@ -193,7 +193,7 @@ public final class MsgPackSerializerSession extends 
OutputStreamSerializerSessio
                                Throwable t = p.getThrown();
                                if (t != null) {
                                        onBeanGetterException(pMeta, t);
-                               } else if (isTrimNullProperties() && 
willRecurse(p)) {
+                               } else if ((! isKeepNullProperties()) && 
willRecurse(p)) {
                                        /* Ignored */
                                } else {
                                        serializeAnything(out, key, null, null, 
null);
@@ -202,7 +202,7 @@ public final class MsgPackSerializerSession extends 
OutputStreamSerializerSessio
                        }
                }
        }
-       
+
        private boolean willRecurse(BeanPropertyValue v) throws 
SerializeException {
                ClassMeta<?> aType = push2(v.getName(), v.getValue(), 
v.getClassMeta());
                 if (aType != null)
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java
index fab35d1..2da8131 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java
@@ -811,13 +811,25 @@ public class OpenApiSerializerBuilder extends 
UonSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public OpenApiSerializerBuilder dontTrimNullProperties() {
                super.dontTrimNullProperties();
                return this;
        }
 
        @Override /* GENERATED - SerializerBuilder */
+       public OpenApiSerializerBuilder keepNullProperties() {
+               super.keepNullProperties();
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
+       public OpenApiSerializerBuilder keepNullProperties(boolean value) {
+               super.keepNullProperties(value);
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
        public OpenApiSerializerBuilder listener(Class<? extends 
org.apache.juneau.serializer.SerializerListener> value) {
                super.listener(value);
                return this;
@@ -871,7 +883,7 @@ public class OpenApiSerializerBuilder extends 
UonSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public OpenApiSerializerBuilder trimNullProperties(boolean value) {
                super.trimNullProperties(value);
                return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerSession.java
index 0115419..8d7453d 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerSession.java
@@ -221,7 +221,7 @@ public class OpenApiSerializerSession extends 
UonSerializerSession {
                        s = DEFAULT_SCHEMA;
                OMap m = new OMap();
                if (type.isBean()) {
-                       for (BeanPropertyValue p : 
toBeanMap(o).getValues(isTrimNullProperties())) {
+                       for (BeanPropertyValue p : 
toBeanMap(o).getValues(isKeepNullProperties())) {
                                if (p.getMeta().canRead()) {
                                        Throwable t = p.getThrown();
                                        if (t == null)
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
index e360e5f..132682e 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
@@ -811,13 +811,25 @@ public class PlainTextSerializerBuilder extends 
WriterSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public PlainTextSerializerBuilder dontTrimNullProperties() {
                super.dontTrimNullProperties();
                return this;
        }
 
        @Override /* GENERATED - SerializerBuilder */
+       public PlainTextSerializerBuilder keepNullProperties() {
+               super.keepNullProperties();
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
+       public PlainTextSerializerBuilder keepNullProperties(boolean value) {
+               super.keepNullProperties(value);
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
        public PlainTextSerializerBuilder listener(Class<? extends 
org.apache.juneau.serializer.SerializerListener> value) {
                super.listener(value);
                return this;
@@ -871,7 +883,7 @@ public class PlainTextSerializerBuilder extends 
WriterSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public PlainTextSerializerBuilder trimNullProperties(boolean value) {
                super.trimNullProperties(value);
                return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java
index 7783027..5926481 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java
@@ -849,13 +849,25 @@ public class OutputStreamSerializerBuilder extends 
SerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public OutputStreamSerializerBuilder dontTrimNullProperties() {
                super.dontTrimNullProperties();
                return this;
        }
 
        @Override /* GENERATED - SerializerBuilder */
+       public OutputStreamSerializerBuilder keepNullProperties() {
+               super.keepNullProperties();
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
+       public OutputStreamSerializerBuilder keepNullProperties(boolean value) {
+               super.keepNullProperties(value);
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
        public OutputStreamSerializerBuilder listener(Class<? extends 
org.apache.juneau.serializer.SerializerListener> value) {
                super.listener(value);
                return this;
@@ -909,7 +921,7 @@ public class OutputStreamSerializerBuilder extends 
SerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public OutputStreamSerializerBuilder trimNullProperties(boolean value) {
                super.trimNullProperties(value);
                return this;
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 10e866d..a00159d 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
@@ -247,6 +247,57 @@ public abstract class Serializer extends 
BeanTraverseContext {
        public static final String SERIALIZER_listener = PREFIX + ".listener.c";
 
        /**
+        * Configuration property:  Don't trim null bean property values.
+        *
+        * <h5 class='section'>Property:</h5>
+        * <ul class='spaced-list'>
+        *      <li><b>ID:</b>  {@link 
org.apache.juneau.serializer.Serializer#SERIALIZER_keepNullProperties 
SERIALIZER_keepNullProperties}
+        *      <li><b>Name:</b>  <js>"Serializer.keepNullProperties.b"</js>
+        *      <li><b>Data type:</b>  <jk>boolean</jk>
+        *      <li><b>System property:</b>  
<c>Serializer.keepNullProperties</c>
+        *      <li><b>Environment variable:</b>  
<c>SERIALIZER_KEEPNULLPROPERTIES</c>
+        *      <li><b>Default:</b>  <jk>false</jk>
+        *      <li><b>Session property:</b>  <jk>false</jk>
+        *      <li><b>Annotations:</b>
+        *              <ul>
+        *                      <li class='ja'>{@link 
org.apache.juneau.serializer.annotation.SerializerConfig#keepNullProperties()}
+        *              </ul>
+        *      <li><b>Methods:</b>
+        *              <ul>
+        *                      <li class='jm'>{@link 
org.apache.juneau.serializer.SerializerBuilder#keepNullProperties()}
+        *                      <li class='jm'>{@link 
org.apache.juneau.serializer.SerializerBuilder#keepNullProperties(boolean)}
+        *              </ul>
+        * </ul>
+        *
+        * <h5 class='section'>Description:</h5>
+        * <p>
+        * If <jk>true</jk>, null bean values will be serialized to the output.
+        *
+        * <p>
+        * Note that not enabling this setting has the following effects on 
parsing:
+        * <ul class='spaced-list'>
+        *      <li>
+        *              Map entries with <jk>null</jk> values will be lost.
+        * </ul>
+        *
+        * <h5 class='section'>Example:</h5>
+        * <p class='bcode w800'>
+        *      <jc>// Create a serializer that serializes null properties.</jc>
+        *      WriterSerializer s = JsonSerializer
+        *              .<jsm>create</jsm>()
+        *              .keepNullProperties(<jk>true</jk>)
+        *              .build();
+        *
+        *      <jc>// Same, but use property.</jc>
+        *      WriterSerializer s = JsonSerializer
+        *              .<jsm>create</jsm>()
+        *              .set(<jsf>SERIALIZER_keepNullProperties</jsf>, 
<jk>true</jk>)
+        *              .build();
+        * </p>
+        */
+       public static final String SERIALIZER_keepNullProperties = PREFIX + 
".keepNullProperties.b";
+
+       /**
         * Configuration property:  Sort arrays and collections alphabetically.
         *
         * <h5 class='section'>Property:</h5>
@@ -495,7 +546,9 @@ public abstract class Serializer extends 
BeanTraverseContext {
         *              .set(<jsf>SERIALIZER_trimNullProperties</jsf>, 
<jk>false</jk>)
         *              .build();
         * </p>
+        * @deprecated Use {@link #SERIALIZER_keepNullProperties}
         */
+       @Deprecated
        public static final String SERIALIZER_trimNullProperties = PREFIX + 
".trimNullProperties.b";
 
        /**
@@ -744,7 +797,7 @@ public abstract class Serializer extends 
BeanTraverseContext {
 
        private final boolean
                addBeanTypes,
-               trimNullProperties,
+               keepNullProperties,
                trimEmptyCollections,
                trimEmptyMaps,
                trimStrings,
@@ -790,7 +843,7 @@ public abstract class Serializer extends 
BeanTraverseContext {
                super(ps);
 
                addBeanTypes = getBooleanProperty(SERIALIZER_addBeanTypes, 
false);
-               trimNullProperties = 
getBooleanProperty(SERIALIZER_trimNullProperties, true);
+               keepNullProperties = 
getBooleanProperty(SERIALIZER_keepNullProperties, ! 
getBooleanProperty(SERIALIZER_trimNullProperties, true));
                trimEmptyCollections = 
getBooleanProperty(SERIALIZER_trimEmptyCollections, false);
                trimEmptyMaps = getBooleanProperty(SERIALIZER_trimEmptyMaps, 
false);
                trimStrings = getBooleanProperty(SERIALIZER_trimStrings, false);
@@ -1055,14 +1108,14 @@ public abstract class Serializer extends 
BeanTraverseContext {
        }
 
        /**
-        * Configuration property:  Trim null bean property values.
+        * Configuration property:  Don't trim null bean property values.
         *
-        * @see #SERIALIZER_trimNullProperties
+        * @see #SERIALIZER_keepNullProperties
         * @return
-        *      <jk>true</jk> if null bean values are not serialized to the 
output.
+        *      <jk>true</jk> if null bean values are serialized to the output.
         */
-       protected final boolean isTrimNullProperties() {
-               return trimNullProperties;
+       protected final boolean isKeepNullProperties() {
+               return keepNullProperties;
        }
 
        /**
@@ -1118,7 +1171,7 @@ public abstract class Serializer extends 
BeanTraverseContext {
                return super.toMap()
                        .a("Serializer", new DefaultFilteringOMap()
                                .a("addBeanTypes", addBeanTypes)
-                               .a("trimNullProperties", trimNullProperties)
+                               .a("keepNullProperties", keepNullProperties)
                                .a("trimEmptyCollections", trimEmptyCollections)
                                .a("trimEmptyMaps", trimEmptyMaps)
                                .a("trimStrings", trimStrings)
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
index 9f0b9db..76e6557 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
@@ -126,6 +126,43 @@ public class SerializerBuilder extends BeanTraverseBuilder 
{
        }
 
        /**
+        * Configuration property:  Don't trim null bean property values.
+        *
+        * <p>
+        * If <jk>true</jk>, null bean values will be serialized to the output.
+        *
+        * <ul class='seealso'>
+        *      <li class='jf'>{@link Serializer#SERIALIZER_keepNullProperties}
+        * </ul>
+        *
+        * @param value
+        *      The new value for this property.
+        *      <br>The default is <jk>false</jk>.
+        * @return This object (for method chaining).
+        */
+       @ConfigurationProperty
+       public SerializerBuilder keepNullProperties(boolean value) {
+               return set(SERIALIZER_keepNullProperties, value);
+       }
+
+       /**
+        * Configuration property:  Don't trim null bean property values.
+        *
+        * <p>
+        * When enabled, null bean values will be serialized to the output.
+        *
+        * <ul class='seealso'>
+        *      <li class='jf'>{@link Serializer#SERIALIZER_keepNullProperties}
+        * </ul>
+        *
+        * @return This object (for method chaining).
+        */
+       @ConfigurationProperty
+       public SerializerBuilder keepNullProperties() {
+               return set(SERIALIZER_keepNullProperties, true);
+       }
+
+       /**
         * Configuration property:  Serializer listener.
         *
         * <p>
@@ -306,7 +343,9 @@ public class SerializerBuilder extends BeanTraverseBuilder {
         *      The new value for this property.
         *      <br>The default is <jk>true</jk>.
         * @return This object (for method chaining).
+        * @deprecated Use {@link #keepNullProperties(boolean)}
         */
+       @Deprecated
        @ConfigurationProperty
        public SerializerBuilder trimNullProperties(boolean value) {
                return set(SERIALIZER_trimNullProperties, value);
@@ -323,7 +362,9 @@ public class SerializerBuilder extends BeanTraverseBuilder {
         * </ul>
         *
         * @return This object (for method chaining).
+        * @deprecated Use {@link #keepNullProperties()}
         */
+       @Deprecated
        @ConfigurationProperty
        public SerializerBuilder dontTrimNullProperties() {
                return set(SERIALIZER_trimNullProperties, false);
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java
index ef91bb1..640137a 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java
@@ -207,6 +207,41 @@ public class SerializerGroupBuilder extends 
BeanTraverseBuilder {
        }
 
        /**
+        * Configuration property:  Don't trim null bean property values.
+        *
+        * <p>
+        * If <jk>true</jk>, null bean values will be serialized to the output.
+        *
+        * <ul class='seealso'>
+        *      <li class='jf'>{@link Serializer#SERIALIZER_keepNullProperties}
+        * </ul>
+        *
+        * @param value
+        *      The new value for this property.
+        *      <br>The default is <jk>false</jk>.
+        * @return This object (for method chaining).
+        */
+       public SerializerGroupBuilder keepNullProperties(boolean value) {
+               return set(SERIALIZER_keepNullProperties, value);
+       }
+
+       /**
+        * Configuration property:  Don't trim null bean property values.
+        *
+        * <p>
+        * When enabled, null bean values will be serialized to the output.
+        *
+        * <ul class='seealso'>
+        *      <li class='jf'>{@link Serializer#SERIALIZER_keepNullProperties}
+        * </ul>
+        *
+        * @return This object (for method chaining).
+        */
+       public SerializerGroupBuilder keepNullProperties() {
+               return set(SERIALIZER_keepNullProperties, true);
+       }
+
+       /**
         * Configuration property:  Serializer listener.
         *
         * <p>
@@ -372,7 +407,9 @@ public class SerializerGroupBuilder extends 
BeanTraverseBuilder {
         *      The new value for this property.
         *      <br>The default is <jk>true</jk>.
         * @return This object (for method chaining).
+        * @deprecated Use {@link #keepNullProperties(boolean)}
         */
+       @Deprecated
        public SerializerGroupBuilder trimNullProperties(boolean value) {
                return set(SERIALIZER_trimNullProperties, value);
        }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
index 19fc8a2..cdc7bf9 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
@@ -327,7 +327,7 @@ public abstract class SerializerSession extends 
BeanTraverseSession {
         */
        public final boolean canIgnoreValue(ClassMeta<?> cm, String attrName, 
Object value) throws SerializeException {
 
-               if (isTrimNullProperties() && value == null)
+               if (value == null && ! isKeepNullProperties())
                        return true;
 
                if (value == null)
@@ -355,7 +355,7 @@ public abstract class SerializerSession extends 
BeanTraverseSession {
                }
 
                try {
-                       if (isTrimNullProperties() && (willRecurse(attrName, 
value, cm) || willExceedDepth()))
+                       if ((! isKeepNullProperties()) && 
(willRecurse(attrName, value, cm) || willExceedDepth()))
                                return true;
                } catch (BeanRecursionException e) {
                        throw new SerializeException(e);
@@ -753,14 +753,14 @@ public abstract class SerializerSession extends 
BeanTraverseSession {
        }
 
        /**
-        * Configuration property:  Trim null bean property values.
+        * Configuration property:  Don't trim null bean property values.
         *
-        * @see Serializer#SERIALIZER_trimNullProperties
+        * @see Serializer#SERIALIZER_keepNullProperties
         * @return
-        *      <jk>true</jk> if null bean values are not serialized to the 
output.
+        *      <jk>true</jk> if null bean values are serialized to the output.
         */
-       protected final boolean isTrimNullProperties() {
-               return ctx.isTrimNullProperties();
+       protected final boolean isKeepNullProperties() {
+               return ctx.isKeepNullProperties();
        }
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java
index a957233..1cf054d 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java
@@ -964,13 +964,25 @@ public class WriterSerializerBuilder extends 
SerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public WriterSerializerBuilder dontTrimNullProperties() {
                super.dontTrimNullProperties();
                return this;
        }
 
        @Override /* GENERATED - SerializerBuilder */
+       public WriterSerializerBuilder keepNullProperties() {
+               super.keepNullProperties();
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
+       public WriterSerializerBuilder keepNullProperties(boolean value) {
+               super.keepNullProperties(value);
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
        public WriterSerializerBuilder listener(Class<? extends 
org.apache.juneau.serializer.SerializerListener> value) {
                super.listener(value);
                return this;
@@ -1024,7 +1036,7 @@ public class WriterSerializerBuilder extends 
SerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public WriterSerializerBuilder trimNullProperties(boolean value) {
                super.trimNullProperties(value);
                return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/annotation/SerializerConfig.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/annotation/SerializerConfig.java
index f3975d6..1af9aa1 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/annotation/SerializerConfig.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/annotation/SerializerConfig.java
@@ -147,6 +147,36 @@ public @interface SerializerConfig {
        String addRootType() default "";
 
        /**
+        * Configuration property:  Don't trim null bean property values.
+        *
+        * <p>
+        * If <js>"true"</js>, null bean values will be serialized to the 
output.
+        *
+        * <p>
+        * Note that not enabling this setting has the following effects on 
parsing:
+        * <ul class='spaced-list'>
+        *      <li>
+        *              Map entries with <jk>null</jk> values will be lost.
+        * </ul>
+        *
+        * <ul class='notes'>
+        *      <li>
+        *              Possible values:
+        *              <ul>
+        *                      <li><js>"true"</js>
+        *                      <li><js>"false"</js> (default)
+        *              </ul>
+        *      <li>
+        *              Supports {@doc DefaultSvlVariables} (e.g. 
<js>"$C{myConfigVar}"</js>).
+        * </ul>
+        *
+        * <ul class='seealso'>
+        *      <li class='jf'>{@link Serializer#SERIALIZER_keepNullProperties}
+        * </ul>
+        */
+       String keepNullProperties() default "";
+
+       /**
         * Configuration property:  Serializer listener.
         *
         * <p>
@@ -299,7 +329,9 @@ public @interface SerializerConfig {
         * <ul class='seealso'>
         *      <li class='jf'>{@link Serializer#SERIALIZER_trimNullProperties}
         * </ul>
+        * @deprecated Use {@link #keepNullProperties()}
         */
+       @Deprecated
        String trimNullProperties() default "";
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/annotation/SerializerConfigApply.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/annotation/SerializerConfigApply.java
index 8460e9d..9b0718a 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/annotation/SerializerConfigApply.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/annotation/SerializerConfigApply.java
@@ -38,6 +38,7 @@ public class SerializerConfigApply extends 
ConfigApply<SerializerConfig> {
                super(c, r);
        }
 
+       @SuppressWarnings("deprecation")
        @Override
        public void apply(AnnotationInfo<SerializerConfig> ai, 
PropertyStoreBuilder psb) {
                SerializerConfig a = ai.getAnnotation();
@@ -45,6 +46,8 @@ public class SerializerConfigApply extends 
ConfigApply<SerializerConfig> {
                        psb.set(SERIALIZER_addBeanTypes, 
bool(a.addBeanTypes()));
                if (! a.addRootType().isEmpty())
                        psb.set(SERIALIZER_addRootType, bool(a.addRootType()));
+               if (! a.keepNullProperties().isEmpty())
+                       psb.set(SERIALIZER_keepNullProperties, 
bool(a.keepNullProperties()));
                if (a.listener() != SerializerListener.Null.class)
                        psb.set(SERIALIZER_listener, a.listener());
                if (! a.sortCollections().isEmpty())
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
index b5b6be3..1ef2500 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
@@ -831,13 +831,25 @@ public class SoapXmlSerializerBuilder extends 
XmlSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public SoapXmlSerializerBuilder dontTrimNullProperties() {
                super.dontTrimNullProperties();
                return this;
        }
 
        @Override /* GENERATED - SerializerBuilder */
+       public SoapXmlSerializerBuilder keepNullProperties() {
+               super.keepNullProperties();
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
+       public SoapXmlSerializerBuilder keepNullProperties(boolean value) {
+               super.keepNullProperties(value);
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
        public SoapXmlSerializerBuilder listener(Class<? extends 
org.apache.juneau.serializer.SerializerListener> value) {
                super.listener(value);
                return this;
@@ -891,7 +903,7 @@ public class SoapXmlSerializerBuilder extends 
XmlSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public SoapXmlSerializerBuilder trimNullProperties(boolean value) {
                super.trimNullProperties(value);
                return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java
index 6444d0f..e5070ee 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java
@@ -908,13 +908,25 @@ public class UonSerializerBuilder extends 
WriterSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public UonSerializerBuilder dontTrimNullProperties() {
                super.dontTrimNullProperties();
                return this;
        }
 
        @Override /* GENERATED - SerializerBuilder */
+       public UonSerializerBuilder keepNullProperties() {
+               super.keepNullProperties();
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
+       public UonSerializerBuilder keepNullProperties(boolean value) {
+               super.keepNullProperties(value);
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
        public UonSerializerBuilder listener(Class<? extends 
org.apache.juneau.serializer.SerializerListener> value) {
                super.listener(value);
                return this;
@@ -968,7 +980,7 @@ public class UonSerializerBuilder extends 
WriterSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public UonSerializerBuilder trimNullProperties(boolean value) {
                super.trimNullProperties(value);
                return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerSession.java
index 040d994..507aa32 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerSession.java
@@ -211,7 +211,7 @@ public class UonSerializerSession extends 
WriterSerializerSession implements Htt
 
                boolean addComma = false;
 
-               for (BeanPropertyValue p : m.getValues(isTrimNullProperties(), 
typeName != null ? createBeanTypeNameProperty(m, typeName) : null)) {
+               for (BeanPropertyValue p : m.getValues(isKeepNullProperties(), 
typeName != null ? createBeanTypeNameProperty(m, typeName) : null)) {
                        BeanPropertyMeta pMeta = p.getMeta();
                        if (pMeta.canRead()) {
                                ClassMeta<?> cMeta = p.getClassMeta();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
index 1d7ea35..4394277 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
@@ -852,13 +852,25 @@ public class UrlEncodingSerializerBuilder extends 
UonSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public UrlEncodingSerializerBuilder dontTrimNullProperties() {
                super.dontTrimNullProperties();
                return this;
        }
 
        @Override /* GENERATED - SerializerBuilder */
+       public UrlEncodingSerializerBuilder keepNullProperties() {
+               super.keepNullProperties();
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
+       public UrlEncodingSerializerBuilder keepNullProperties(boolean value) {
+               super.keepNullProperties(value);
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
        public UrlEncodingSerializerBuilder listener(Class<? extends 
org.apache.juneau.serializer.SerializerListener> value) {
                super.listener(value);
                return this;
@@ -912,7 +924,7 @@ public class UrlEncodingSerializerBuilder extends 
UonSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public UrlEncodingSerializerBuilder trimNullProperties(boolean value) {
                super.trimNullProperties(value);
                return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
index 02333f5..5767ebf 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
@@ -215,7 +215,7 @@ public class UrlEncodingSerializerSession extends 
UonSerializerSession {
        private SerializerWriter serializeBeanMap(UonWriter out, BeanMap<?> m, 
String typeName) throws IOException, SerializeException {
                boolean addAmp = false;
 
-               for (BeanPropertyValue p : m.getValues(isTrimNullProperties(), 
typeName != null ? createBeanTypeNameProperty(m, typeName) : null)) {
+               for (BeanPropertyValue p : m.getValues(isKeepNullProperties(), 
typeName != null ? createBeanTypeNameProperty(m, typeName) : null)) {
                        BeanPropertyMeta pMeta = p.getMeta();
                        if (pMeta.canRead()) {
                                ClassMeta<?> cMeta = p.getClassMeta();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
index fddd963..f38555d 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
@@ -1042,13 +1042,25 @@ public class XmlSerializerBuilder extends 
WriterSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public XmlSerializerBuilder dontTrimNullProperties() {
                super.dontTrimNullProperties();
                return this;
        }
 
        @Override /* GENERATED - SerializerBuilder */
+       public XmlSerializerBuilder keepNullProperties() {
+               super.keepNullProperties();
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
+       public XmlSerializerBuilder keepNullProperties(boolean value) {
+               super.keepNullProperties(value);
+               return this;
+       }
+
+       @Override /* GENERATED - SerializerBuilder */
        public XmlSerializerBuilder listener(Class<? extends 
org.apache.juneau.serializer.SerializerListener> value) {
                super.listener(value);
                return this;
@@ -1102,7 +1114,7 @@ public class XmlSerializerBuilder extends 
WriterSerializerBuilder {
                return this;
        }
 
-       @Override /* GENERATED - SerializerBuilder */
+       @Deprecated @Override /* GENERATED - SerializerBuilder */
        public XmlSerializerBuilder trimNullProperties(boolean value) {
                super.trimNullProperties(value);
                return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
index 36e0864..3595a5f 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
@@ -207,7 +207,7 @@ public class XmlSerializerSession extends 
WriterSerializerSession {
                                        findNsfMappings(o2);
                        }
                        if (bm != null) {
-                               for (BeanPropertyValue p : 
bm.getValues(isTrimNullProperties())) {
+                               for (BeanPropertyValue p : 
bm.getValues(isKeepNullProperties())) {
 
                                        Namespace ns = 
getXmlBeanPropertyMeta(p.getMeta()).getNamespace();
                                        if (ns != null && ns.uri != null)
@@ -547,7 +547,7 @@ public class XmlSerializerSession extends 
WriterSerializerSession {
                boolean hasChildren = false;
                BeanMeta<?> bm = m.getMeta();
 
-               List<BeanPropertyValue> lp = 
m.getValues(isTrimNullProperties());
+               List<BeanPropertyValue> lp = 
m.getValues(isKeepNullProperties());
 
                XmlBeanMeta xbm = getXmlBeanMeta(bm);
 
@@ -587,7 +587,7 @@ public class XmlSerializerSession extends 
WriterSerializerSession {
                                        } else if (n.equals(attrsProperty)) {
                                                if (value instanceof BeanMap) {
                                                        BeanMap<?> bm2 = 
(BeanMap)value;
-                                                       for (BeanPropertyValue 
p2 : bm2.getValues(true)) {
+                                                       for (BeanPropertyValue 
p2 : bm2.getValues(false)) {
                                                                String key2 = 
p2.getName();
                                                                Object value2 = 
p2.getValue();
                                                                Throwable t2 = 
p2.getThrown();
diff --git 
a/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/xml/XmlConfigurationExample.java
 
b/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/xml/XmlConfigurationExample.java
index dd22e92..2b0d06b 100644
--- 
a/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/xml/XmlConfigurationExample.java
+++ 
b/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/xml/XmlConfigurationExample.java
@@ -70,7 +70,7 @@ public class XmlConfigurationExample {
 
                //Produces
                //<object><id>a</id></object>
-               String nullescaped = 
XmlSerializer.create().trimNullProperties(true).build().serialize(nPojo);
+               String nullescaped = 
XmlSerializer.create().keepNullProperties(false).build().serialize(nPojo);
                // the output will have trimmed null properties.
                System.out.println(nullescaped);
 
diff --git 
a/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/TestUtils.java
 
b/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/TestUtils.java
index 3a12445..836c3ff 100644
--- 
a/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/TestUtils.java
+++ 
b/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/TestUtils.java
@@ -36,14 +36,14 @@ public class TestUtils {
 
        private static JsonSerializer js = JsonSerializer.create()
                .ssq()
-               .trimNullProperties(false)
+               .keepNullProperties()
                .build();
 
        private static JsonSerializer jsSorted = JsonSerializer.create()
                .ssq()
                .sortCollections()
                .sortMaps()
-               .trimNullProperties(false)
+               .keepNullProperties()
                .build();
 
 
diff --git 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientTest.java
 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientTest.java
index 9aa5ce4..4651a5f 100644
--- 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientTest.java
+++ 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientTest.java
@@ -2415,10 +2415,43 @@ public class RestClientTest {
 
        }
 
-//     @Test
-//     public void l20_serializer_trimNullPropertiesBoolean() throws Exception 
{ fail(); }
-////   public RestClientBuilder trimNullProperties(boolean value) {
-//
+       public static class L20 {
+               public String f;
+       }
+
+       @Test
+       public void l20_serializer_trimNullPropertiesBoolean() throws Exception 
{
+               L20 x = new L20();
+
+               MockRestClient
+                       .create(A.class)
+                       .simpleJson()
+                       .keepNullProperties()
+                       .build()
+                       .post("/echoBody", x)
+                       .run()
+                       .getBody().assertValue("{f:null}");
+
+               MockRestClient
+                       .create(A.class)
+                       .simpleJson()
+                       .keepNullProperties(true)
+                       .build()
+                       .post("/echoBody", x)
+                       .run()
+                       .getBody().assertValue("{f:null}");
+
+               MockRestClient
+                       .create(A.class)
+                       .simpleJson()
+                       .keepNullProperties(false)
+                       .build()
+                       .post("/echoBody", x)
+                       .run()
+                       .getBody().assertValue("{}");
+       }
+//     public RestClientBuilder trimNullProperties(boolean value) {
+
 //     @Test
 //     public void l21_serializer_trimStringsSBoolean() throws Exception { 
fail(); }
 ////   public RestClientBuilder trimStringsS(boolean value) {
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClientBuilder.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClientBuilder.java
index 95edbfc..81bc1ec 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClientBuilder.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClientBuilder.java
@@ -2082,6 +2082,43 @@ public class RestClientBuilder extends 
BeanContextBuilder {
        }
 
        /**
+        * Configuration property:  Don't trim null bean property values.
+        *
+        * <p>
+        * If <jk>true</jk>, null bean values will be serialized to the output.
+        *
+        * <ul class='seealso'>
+        *      <li class='jf'>{@link Serializer#SERIALIZER_keepNullProperties}
+        * </ul>
+        *
+        * @param value
+        *      The new value for this property.
+        *      <br>The default is <jk>false</jk>.
+        * @return This object (for method chaining).
+        */
+       @ConfigurationProperty
+       public RestClientBuilder keepNullProperties(boolean value) {
+               return set(SERIALIZER_keepNullProperties, value);
+       }
+
+       /**
+        * Configuration property:  Don't trim null bean property values.
+        *
+        * <p>
+        * When enabled, null bean values will be serialized to the output.
+        *
+        * <ul class='seealso'>
+        *      <li class='jf'>{@link Serializer#SERIALIZER_keepNullProperties}
+        * </ul>
+        *
+        * @return This object (for method chaining).
+        */
+       @ConfigurationProperty
+       public RestClientBuilder keepNullProperties() {
+               return set(SERIALIZER_keepNullProperties, true);
+       }
+
+       /**
         * Configuration property:  Serializer listener.
         *
         * <p>
@@ -2282,7 +2319,9 @@ public class RestClientBuilder extends BeanContextBuilder 
{
         *      The new value for this property.
         *      <br>The default is <jk>true</jk>.
         * @return This object (for method chaining).
+        * @deprecated Use {@link #keepNullProperties(boolean)}
         */
+       @Deprecated
        @ConfigurationProperty
        public RestClientBuilder trimNullProperties(boolean value) {
                return set(SERIALIZER_trimNullProperties, value);
diff --git 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRestClient.java
 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRestClient.java
index dd9d1ad..5641b38 100644
--- 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRestClient.java
+++ 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRestClient.java
@@ -1155,7 +1155,7 @@ public class MockRestClient extends RestClientBuilder {
 
        @Override /* GENERATED - RestClientBuilder */
        @SuppressWarnings("unchecked")
-       public MockRestClient interceptors(java.lang.Class<? extends 
org.apache.juneau.rest.client2.RestCallInterceptor>...values) throws Exception {
+       public MockRestClient interceptors(java.lang.Class<? extends 
org.apache.juneau.rest.client2.RestCallInterceptor>...values) throws Exception{
                super.interceptors(values);
                return this;
        }
@@ -1185,6 +1185,18 @@ public class MockRestClient extends RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
+       public MockRestClient keepNullProperties() {
+               super.keepNullProperties();
+               return this;
+       }
+
+       @Override /* GENERATED - RestClientBuilder */
+       public MockRestClient keepNullProperties(boolean value) {
+               super.keepNullProperties(value);
+               return this;
+       }
+
+       @Override /* GENERATED - RestClientBuilder */
        public MockRestClient leakDetection() {
                super.leakDetection();
                return this;
@@ -1510,7 +1522,7 @@ public class MockRestClient extends RestClientBuilder {
                return this;
        }
 
-       @Override /* GENERATED - RestClientBuilder */
+       @Deprecated @Override /* GENERATED - RestClientBuilder */
        public MockRestClient trimNullProperties(boolean value) {
                super.trimNullProperties(value);
                return this;

Reply via email to