You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2021/01/16 00:24:42 UTC

[juneau] branch master updated: Code cleanup.

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 92d656d  Code cleanup.
92d656d is described below

commit 92d656d07929585f5b6a75dee2d81e6452af50d4
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Fri Jan 15 19:24:17 2021 -0500

    Code cleanup.
---
 .../jena/annotation/RdfConfigAnnotation.java       | 104 ++++++-----------
 .../main/java/org/apache/juneau/ConfigApply.java   |  17 +--
 .../juneau/annotation/BeanConfigAnnotation.java    | 127 ++++++++-------------
 .../html/annotation/HtmlConfigAnnotation.java      |  19 ++-
 .../html/annotation/HtmlDocConfigAnnotation.java   |  49 +++-----
 .../json/annotation/JsonConfigAnnotation.java      |  12 +-
 .../annotation/JsonSchemaConfigAnnotation.java     |  22 ++--
 .../annotation/MsgPackConfigAnnotation.java        |   3 +-
 .../oapi/annotation/OpenApiConfigAnnotation.java   |   6 +-
 .../parser/annotation/ParserConfigAnnotation.java  |  28 ++---
 .../annotation/SerializerConfigAnnotation.java     |  59 ++++------
 .../soap/annotation/SoapXmlConfigAnnotation.java   |   3 +-
 .../juneau/uon/annotation/UonConfigAnnotation.java |  15 +--
 .../juneau/xml/annotation/XmlConfigAnnotation.java |  33 ++----
 .../juneau/rest/annotation/RestAnnotation.java     |  46 +-------
 .../rest/annotation/RestMethodAnnotation.java      |  40 ++-----
 16 files changed, 183 insertions(+), 400 deletions(-)

diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/annotation/RdfConfigAnnotation.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/annotation/RdfConfigAnnotation.java
index 8b3e888..ecd802a 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/annotation/RdfConfigAnnotation.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/annotation/RdfConfigAnnotation.java
@@ -43,76 +43,40 @@ public class RdfConfigAnnotation {
 		@Override
 		public void apply(AnnotationInfo<RdfConfig> ai, PropertyStoreBuilder psb, VarResolverSession vr) {
 			RdfConfig a = ai.getAnnotation();
-			if (! a.language().isEmpty())
-				psb.set(RDF_language, string(a.language()));
-			if (! a.juneauNs().isEmpty())
-				psb.set(RDF_juneauNs, string(a.juneauNs()));
-			if (! a.juneauBpNs().isEmpty())
-				psb.set(RDF_juneauBpNs, string(a.juneauBpNs()));
-			if (! a.disableUseXmlNamespaces().isEmpty())
-				psb.set(RDF_disableUseXmlNamespaces, bool(a.disableUseXmlNamespaces()));
-			if (! a.arp_iriRules().isEmpty())
-				psb.set(RDF_arp_iriRules, string(a.arp_iriRules()));
-			if (! a.arp_errorMode().isEmpty())
-				psb.set(RDF_arp_errorMode, string(a.arp_errorMode()));
-			if (! a.arp_embedding().isEmpty())
-				psb.set(RDF_arp_embedding, bool(a.arp_embedding()));
-			if (! a.rdfxml_xmlBase().isEmpty())
-				psb.set(RDF_rdfxml_xmlBase, string(a.rdfxml_xmlBase()));
-			if (! a.rdfxml_longId().isEmpty())
-				psb.set(RDF_rdfxml_longId, bool(a.rdfxml_longId()));
-			if (! a.rdfxml_allowBadUris().isEmpty())
-				psb.set(RDF_rdfxml_allowBadUris, bool(a.rdfxml_allowBadUris()));
-			if (! a.rdfxml_relativeUris().isEmpty())
-				psb.set(RDF_rdfxml_relativeUris, string(a.rdfxml_relativeUris()));
-			if (! a.rdfxml_showXmlDeclaration().isEmpty())
-				psb.set(RDF_rdfxml_showXmlDeclaration, string(a.rdfxml_showXmlDeclaration()));
-			if (! a.rdfxml_disableShowDoctypeDeclaration().isEmpty())
-				psb.set(RDF_rdfxml_disableShowDoctypeDeclaration, bool(a.rdfxml_disableShowDoctypeDeclaration()));
-			if (! a.rdfxml_tab().isEmpty())
-				psb.set(RDF_rdfxml_tab, integer(a.rdfxml_tab(), "rdfxml_tab"));
-			if (! a.rdfxml_attributeQuoteChar().isEmpty())
-				psb.set(RDF_rdfxml_attributeQuoteChar, string(a.rdfxml_attributeQuoteChar()));
-			if (! a.rdfxml_blockRules().isEmpty())
-				psb.set(RDF_rdfxml_blockRules, string(a.rdfxml_blockRules()));
-			if (! a.n3_minGap().isEmpty())
-				psb.set(RDF_n3_minGap, integer(a.n3_minGap(), "n3_minGap"));
-			if (! a.n3_disableObjectLists().isEmpty())
-				psb.set(RDF_n3_disableObjectLists, bool(a.n3_disableObjectLists()));
-			if (! a.n3_subjectColumn().isEmpty())
-				psb.set(RDF_n3_subjectColumn, integer(a.n3_subjectColumn(), "n3_subjectColumn"));
-			if (! a.n3_propertyColumn().isEmpty())
-				psb.set(RDF_n3_propertyColumn, integer(a.n3_propertyColumn(), "n3_propertyColumn"));
-			if (! a.n3_indentProperty().isEmpty())
-				psb.set(RDF_n3_indentProperty, integer(a.n3_indentProperty(), "n3_indentProperty"));
-			if (! a.n3_widePropertyLen().isEmpty())
-				psb.set(RDF_n3_widePropertyLen, integer(a.n3_widePropertyLen(), "n3_widePropertyLen"));
-			if (! a.n3_disableAbbrevBaseUri().isEmpty())
-				psb.set(RDF_n3_disableAbbrevBaseUri, bool(a.n3_disableAbbrevBaseUri()));
-			if (! a.n3_disableUsePropertySymbols().isEmpty())
-				psb.set(RDF_n3_disableUsePropertySymbols, bool(a.n3_disableUsePropertySymbols()));
-			if (! a.n3_disableUseTripleQuotedStrings().isEmpty())
-				psb.set(RDF_n3_disableUseTripleQuotedStrings, bool(a.n3_disableUseTripleQuotedStrings()));
-			if (! a.n3_disableUseDoubles().isEmpty())
-				psb.set(RDF_n3_disableUseDoubles, bool(a.n3_disableUseDoubles()));
-			if (! a.collectionFormat().isEmpty())
-				psb.set(RDF_collectionFormat, string(a.collectionFormat()));
-			if (! a.looseCollections().isEmpty())
-				psb.set(RDF_looseCollections, bool(a.looseCollections()));
-
-			if (! a.addBeanTypes().isEmpty())
-				psb.set(RDF_addBeanTypes, bool(a.addBeanTypes()));
-			if (! a.addLiteralTypes().isEmpty())
-				psb.set(RDF_addLiteralTypes, bool(a.addLiteralTypes()));
-			if (! a.addRootProperty().isEmpty())
-				psb.set(RDF_addRootProperty, bool(a.addRootProperty()));
-			if (! a.disableAutoDetectNamespaces().isEmpty())
-				psb.set(RDF_disableAutoDetectNamespaces, bool(a.disableAutoDetectNamespaces()));
-			if (a.namespaces().length > 0)
-				psb.set(RDF_namespaces, stringList(a.namespaces()));
-
-			if (! a.trimWhitespace().isEmpty())
-				psb.set(RDF_trimWhitespace, bool(a.trimWhitespace()));
+			psb.setIfNotEmpty(RDF_language, string(a.language()));
+			psb.setIfNotEmpty(RDF_juneauNs, string(a.juneauNs()));
+			psb.setIfNotEmpty(RDF_juneauBpNs, string(a.juneauBpNs()));
+			psb.setIfNotEmpty(RDF_disableUseXmlNamespaces, bool(a.disableUseXmlNamespaces()));
+			psb.setIfNotEmpty(RDF_arp_iriRules, string(a.arp_iriRules()));
+			psb.setIfNotEmpty(RDF_arp_errorMode, string(a.arp_errorMode()));
+			psb.setIfNotEmpty(RDF_arp_embedding, bool(a.arp_embedding()));
+			psb.setIfNotEmpty(RDF_rdfxml_xmlBase, string(a.rdfxml_xmlBase()));
+			psb.setIfNotEmpty(RDF_rdfxml_longId, bool(a.rdfxml_longId()));
+			psb.setIfNotEmpty(RDF_rdfxml_allowBadUris, bool(a.rdfxml_allowBadUris()));
+			psb.setIfNotEmpty(RDF_rdfxml_relativeUris, string(a.rdfxml_relativeUris()));
+			psb.setIfNotEmpty(RDF_rdfxml_showXmlDeclaration, string(a.rdfxml_showXmlDeclaration()));
+			psb.setIfNotEmpty(RDF_rdfxml_disableShowDoctypeDeclaration, bool(a.rdfxml_disableShowDoctypeDeclaration()));
+			psb.setIfNotEmpty(RDF_rdfxml_tab, integer(a.rdfxml_tab(), "rdfxml_tab"));
+			psb.setIfNotEmpty(RDF_rdfxml_attributeQuoteChar, string(a.rdfxml_attributeQuoteChar()));
+			psb.setIfNotEmpty(RDF_rdfxml_blockRules, string(a.rdfxml_blockRules()));
+			psb.setIfNotEmpty(RDF_n3_minGap, integer(a.n3_minGap(), "n3_minGap"));
+			psb.setIfNotEmpty(RDF_n3_disableObjectLists, bool(a.n3_disableObjectLists()));
+			psb.setIfNotEmpty(RDF_n3_subjectColumn, integer(a.n3_subjectColumn(), "n3_subjectColumn"));
+			psb.setIfNotEmpty(RDF_n3_propertyColumn, integer(a.n3_propertyColumn(), "n3_propertyColumn"));
+			psb.setIfNotEmpty(RDF_n3_indentProperty, integer(a.n3_indentProperty(), "n3_indentProperty"));
+			psb.setIfNotEmpty(RDF_n3_widePropertyLen, integer(a.n3_widePropertyLen(), "n3_widePropertyLen"));
+			psb.setIfNotEmpty(RDF_n3_disableAbbrevBaseUri, bool(a.n3_disableAbbrevBaseUri()));
+			psb.setIfNotEmpty(RDF_n3_disableUsePropertySymbols, bool(a.n3_disableUsePropertySymbols()));
+			psb.setIfNotEmpty(RDF_n3_disableUseTripleQuotedStrings, bool(a.n3_disableUseTripleQuotedStrings()));
+			psb.setIfNotEmpty(RDF_n3_disableUseDoubles, bool(a.n3_disableUseDoubles()));
+			psb.setIfNotEmpty(RDF_collectionFormat, string(a.collectionFormat()));
+			psb.setIfNotEmpty(RDF_looseCollections, bool(a.looseCollections()));
+			psb.setIfNotEmpty(RDF_addBeanTypes, bool(a.addBeanTypes()));
+			psb.setIfNotEmpty(RDF_addLiteralTypes, bool(a.addLiteralTypes()));
+			psb.setIfNotEmpty(RDF_addRootProperty, bool(a.addRootProperty()));
+			psb.setIfNotEmpty(RDF_disableAutoDetectNamespaces, bool(a.disableAutoDetectNamespaces()));
+			psb.setIfNotEmpty(RDF_namespaces, stringList(a.namespaces()));
+			psb.setIfNotEmpty(RDF_trimWhitespace, bool(a.trimWhitespace()));
 		}
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ConfigApply.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ConfigApply.java
index 4badf6c..ea395e9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ConfigApply.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ConfigApply.java
@@ -62,7 +62,8 @@ public abstract class ConfigApply<T extends Annotation> {
 	 * @return The resolved string.
 	 */
 	protected String string(String in) {
-		return vr.resolve(in);
+		in = vr.resolve(in);
+		return isEmpty(in) ? null : in;
 	}
 
 	/**
@@ -132,10 +133,8 @@ public abstract class ConfigApply<T extends Annotation> {
 	 * @return The resolved boolean.
 	 */
 	public Boolean bool(String in) {
-		in = vr.resolve(in);
-		if (isEmpty(in))
-			return null;
-		return Boolean.parseBoolean(in);
+		in = string(in);
+		return in == null ? null : Boolean.parseBoolean(in);
 	}
 
 	/**
@@ -145,9 +144,10 @@ public abstract class ConfigApply<T extends Annotation> {
 	 * @param loc The annotation field name.
 	 * @return The resolved int.
 	 */
-	protected int integer(String in, String loc) {
+	protected Integer integer(String in, String loc) {
 		try {
-			return Integer.parseInt(vr.resolve(in));
+			in = string(in);
+			return in == null ? null : Integer.parseInt(in);
 		} catch (NumberFormatException e) {
 			throw new ConfigException("Invalid syntax for integer on annotation @{0}({1}): {2}", c.getSimpleName(), loc, in);
 		}
@@ -162,7 +162,8 @@ public abstract class ConfigApply<T extends Annotation> {
 	 */
 	protected Visibility visibility(String in, String loc) {
 		try {
-			return Visibility.valueOf(vr.resolve(in));
+			in = string(in);
+			return in == null ? null : Visibility.valueOf(in);
 		} catch (IllegalArgumentException e) {
 			throw new ConfigException("Invalid syntax for visibility on annotation @{0}({1}): {2}", c.getSimpleName(), loc, in);
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
index 01b9a63..cdb2d27 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
@@ -14,6 +14,7 @@ package org.apache.juneau.annotation;
 
 import static org.apache.juneau.BeanContext.*;
 import static org.apache.juneau.BeanTraverseContext.*;
+import static java.util.Arrays.*;
 
 import java.util.*;
 
@@ -46,96 +47,60 @@ public class BeanConfigAnnotation {
 		public void apply(AnnotationInfo<BeanConfig> ai, PropertyStoreBuilder psb, VarResolverSession vr) {
 			BeanConfig a = ai.getAnnotation();
 
-			if (! a.beanClassVisibility().isEmpty())
-				psb.set(BEAN_beanClassVisibility, visibility(a.beanClassVisibility(), "beanClassVisibility"));
-			if (! a.beanConstructorVisibility().isEmpty())
-				psb.set(BEAN_beanConstructorVisibility, visibility(a.beanConstructorVisibility(), "beanConstructorVisibility"));
-			if (a.dictionary().length != 0)
-				psb.prependTo(BEAN_beanDictionary, a.dictionary());
-			if (a.dictionary_replace().length != 0)
-				psb.set(BEAN_beanDictionary, a.dictionary_replace());
-			if (! a.beanFieldVisibility().isEmpty())
-				psb.set(BEAN_beanFieldVisibility, visibility(a.beanFieldVisibility(), "beanFieldVisibility"));
-			if (! a.beanMapPutReturnsOldValue().isEmpty())
-				psb.set(BEAN_beanMapPutReturnsOldValue, bool(a.beanMapPutReturnsOldValue()));
-			if (! a.beanMethodVisibility().isEmpty())
-				psb.set(BEAN_beanMethodVisibility, visibility(a.beanMethodVisibility(), "beanMethodVisibility"));
-			if (! a.beansRequireDefaultConstructor().isEmpty())
-				psb.set(BEAN_beansRequireDefaultConstructor, bool(a.beansRequireDefaultConstructor()));
-			if (! a.beansRequireSerializable().isEmpty())
-				psb.set(BEAN_beansRequireSerializable, bool(a.beansRequireSerializable()));
-			if (! a.beansRequireSettersForGetters().isEmpty())
-				psb.set(BEAN_beansRequireSettersForGetters, bool(a.beansRequireSettersForGetters()));
-			if (! a.disableBeansRequireSomeProperties().isEmpty())
-				psb.set(BEAN_disableBeansRequireSomeProperties, bool(a.disableBeansRequireSomeProperties()));
-			if (! a.typePropertyName().isEmpty())
-				psb.set(BEAN_typePropertyName, string(a.typePropertyName()));
-			if (! a.debug().isEmpty())
-				psb.set(CONTEXT_debug, bool(a.debug()));
-			if (! a.findFluentSetters().isEmpty())
-				psb.set(BEAN_findFluentSetters, bool(a.findFluentSetters()));
-			if (! a.ignoreInvocationExceptionsOnGetters().isEmpty())
-				psb.set(BEAN_ignoreInvocationExceptionsOnGetters, bool(a.ignoreInvocationExceptionsOnGetters()));
-			if (! a.ignoreInvocationExceptionsOnSetters().isEmpty())
-				psb.set(BEAN_ignoreInvocationExceptionsOnSetters, bool(a.ignoreInvocationExceptionsOnSetters()));
-			if (! a.disableIgnoreMissingSetters().isEmpty())
-				psb.set(BEAN_disableIgnoreMissingSetters, bool(a.disableIgnoreMissingSetters()));
-			if (! a.disableIgnoreTransientFields().isEmpty())
-				psb.set(BEAN_disableIgnoreTransientFields, bool(a.disableIgnoreTransientFields()));
-			if (! a.ignoreUnknownBeanProperties().isEmpty())
-				psb.set(BEAN_ignoreUnknownBeanProperties, bool(a.ignoreUnknownBeanProperties()));
-			if (! a.disableIgnoreUnknownNullBeanProperties().isEmpty())
-				psb.set(BEAN_disableIgnoreUnknownNullBeanProperties, bool(a.disableIgnoreUnknownNullBeanProperties()));
-			for (Class<?> c : a.interfaces())
-				psb.prependTo(BEAN_annotations, BeanAnnotation.create(c).interfaceClass(c).build());
-			if (! a.locale().isEmpty())
-				psb.set(CONTEXT_locale, locale(a.locale()));
-			if (! a.mediaType().isEmpty())
-				psb.set(CONTEXT_mediaType, mediaType(a.mediaType()));
-			if (a.notBeanClasses().length != 0)
-				psb.addTo(BEAN_notBeanClasses, a.notBeanClasses());
-			if (a.notBeanClasses_replace().length != 0)
-				psb.set(BEAN_notBeanClasses, a.notBeanClasses_replace());
-			if (a.notBeanPackages().length != 0)
-				psb.addTo(BEAN_notBeanPackages, stringList(a.notBeanPackages()));
-			if (a.notBeanPackages_replace().length != 0)
-				psb.set(BEAN_notBeanPackages, stringList(a.notBeanPackages_replace()));
-			if (a.propertyNamer() != PropertyNamer.Null.class)
-				psb.set(BEAN_propertyNamer, a.propertyNamer());
-			if (! a.sortProperties().isEmpty())
-				psb.set(BEAN_sortProperties, bool(a.sortProperties()));
-			if (a.swaps().length != 0)
-				psb.prependTo(BEAN_swaps, a.swaps());
-			if (a.swaps_replace().length != 0)
-				psb.set(BEAN_swaps, a.swaps_replace());
-			if (! a.timeZone().isEmpty())
-				psb.set(CONTEXT_timeZone, timeZone(a.timeZone()));
-			if (! a.useEnumNames().isEmpty())
-				psb.set(BEAN_useEnumNames, bool(a.useEnumNames()));
-			if (! a.disableInterfaceProxies().isEmpty())
-				psb.set(BEAN_disableInterfaceProxies, bool(a.disableInterfaceProxies()));
-			if (! a.useJavaBeanIntrospector().isEmpty())
-				psb.set(BEAN_useJavaBeanIntrospector, bool(a.useJavaBeanIntrospector()));
-			if (! a.detectRecursions().isEmpty())
-				psb.set(BEANTRAVERSE_detectRecursions, bool(a.detectRecursions()));
-			if (! a.ignoreRecursions().isEmpty())
-				psb.set(BEANTRAVERSE_ignoreRecursions, bool(a.ignoreRecursions()));
-			if (! a.initialDepth().isEmpty())
-				psb.set(BEANTRAVERSE_initialDepth, integer(a.initialDepth(), "initialDepth"));
-			if (! a.maxDepth().isEmpty())
-				psb.set(BEANTRAVERSE_maxDepth, integer(a.maxDepth(), "maxDepth"));
+			psb.setIfNotEmpty(BEAN_beanClassVisibility, visibility(a.beanClassVisibility(), "beanClassVisibility"));
+			psb.setIfNotEmpty(BEAN_beanConstructorVisibility, visibility(a.beanConstructorVisibility(), "beanConstructorVisibility"));
+			psb.prependTo(BEAN_beanDictionary, a.dictionary());
+			psb.setIfNotEmpty(BEAN_beanDictionary, a.dictionary_replace());
+			psb.setIfNotEmpty(BEAN_beanFieldVisibility, visibility(a.beanFieldVisibility(), "beanFieldVisibility"));
+			psb.setIfNotEmpty(BEAN_beanMapPutReturnsOldValue, bool(a.beanMapPutReturnsOldValue()));
+			psb.setIfNotEmpty(BEAN_beanMethodVisibility, visibility(a.beanMethodVisibility(), "beanMethodVisibility"));
+			psb.setIfNotEmpty(BEAN_beansRequireDefaultConstructor, bool(a.beansRequireDefaultConstructor()));
+			psb.setIfNotEmpty(BEAN_beansRequireSerializable, bool(a.beansRequireSerializable()));
+			psb.setIfNotEmpty(BEAN_beansRequireSettersForGetters, bool(a.beansRequireSettersForGetters()));
+			psb.setIfNotEmpty(BEAN_disableBeansRequireSomeProperties, bool(a.disableBeansRequireSomeProperties()));
+			psb.setIfNotEmpty(BEAN_typePropertyName, string(a.typePropertyName()));
+			psb.setIfNotEmpty(CONTEXT_debug, bool(a.debug()));
+			psb.setIfNotEmpty(BEAN_findFluentSetters, bool(a.findFluentSetters()));
+			psb.setIfNotEmpty(BEAN_ignoreInvocationExceptionsOnGetters, bool(a.ignoreInvocationExceptionsOnGetters()));
+			psb.setIfNotEmpty(BEAN_ignoreInvocationExceptionsOnSetters, bool(a.ignoreInvocationExceptionsOnSetters()));
+			psb.setIfNotEmpty(BEAN_disableIgnoreMissingSetters, bool(a.disableIgnoreMissingSetters()));
+			psb.setIfNotEmpty(BEAN_disableIgnoreTransientFields, bool(a.disableIgnoreTransientFields()));
+			psb.setIfNotEmpty(BEAN_ignoreUnknownBeanProperties, bool(a.ignoreUnknownBeanProperties()));
+			psb.setIfNotEmpty(BEAN_disableIgnoreUnknownNullBeanProperties, bool(a.disableIgnoreUnknownNullBeanProperties()));
+			asList(a.interfaces()).stream().map(x -> BeanAnnotation.create(x).interfaceClass(x).build()).forEach(x -> psb.prependTo(BEAN_annotations, x));
+			psb.setIfNotEmpty(CONTEXT_locale, locale(a.locale()));
+			psb.setIfNotEmpty(CONTEXT_mediaType, mediaType(a.mediaType()));
+			psb.setIfNotEmpty(BEAN_notBeanClasses, a.notBeanClasses());
+			psb.setIfNotEmpty(BEAN_notBeanClasses, a.notBeanClasses_replace());
+			psb.addTo(BEAN_notBeanPackages, stringList(a.notBeanPackages()));
+			psb.setIfNotEmpty(BEAN_notBeanPackages, stringList(a.notBeanPackages_replace()));
+			psb.setIf(a.propertyNamer() != PropertyNamer.Null.class, BEAN_propertyNamer, a.propertyNamer());
+			psb.setIfNotEmpty(BEAN_sortProperties, bool(a.sortProperties()));
+			psb.prependTo(BEAN_swaps, a.swaps());
+			psb.setIfNotEmpty(BEAN_swaps, a.swaps_replace());
+			psb.setIfNotEmpty(CONTEXT_timeZone, timeZone(a.timeZone()));
+			psb.setIfNotEmpty(BEAN_useEnumNames, bool(a.useEnumNames()));
+			psb.setIfNotEmpty(BEAN_disableInterfaceProxies, bool(a.disableInterfaceProxies()));
+			psb.setIfNotEmpty(BEAN_useJavaBeanIntrospector, bool(a.useJavaBeanIntrospector()));
+			psb.setIfNotEmpty(BEANTRAVERSE_detectRecursions, bool(a.detectRecursions()));
+			psb.setIfNotEmpty(BEANTRAVERSE_ignoreRecursions, bool(a.ignoreRecursions()));
+			psb.setIfNotEmpty(BEANTRAVERSE_initialDepth, integer(a.initialDepth(), "initialDepth"));
+			psb.setIfNotEmpty(BEANTRAVERSE_maxDepth, integer(a.maxDepth(), "maxDepth"));
 		}
 
 		private Locale locale(String in) {
-			return Locale.forLanguageTag(string(in));
+			in = string(in);
+			return in == null ? null : Locale.forLanguageTag(in);
 		}
 
 		private MediaType mediaType(String in) {
-			return MediaType.of(string(in));
+			in = string(in);
+			return in == null ? null : MediaType.of(in);
 		}
 
 		private TimeZone timeZone(String in) {
-			return TimeZone.getTimeZone(string(in));
+			in = string(in);
+			return in == null ? null : TimeZone.getTimeZone(in);
 		}
 	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlConfigAnnotation.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlConfigAnnotation.java
index 0e22bd1..ed7f0f8 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlConfigAnnotation.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlConfigAnnotation.java
@@ -41,18 +41,13 @@ public class HtmlConfigAnnotation {
 		@Override
 		public void apply(AnnotationInfo<HtmlConfig> ai, PropertyStoreBuilder psb, VarResolverSession vr) {
 			HtmlConfig a = ai.getAnnotation();
-			if (! a.addBeanTypes().isEmpty())
-				psb.set(HTML_addBeanTypes, bool(a.addBeanTypes()));
-			if (! a.addKeyValueTableHeaders().isEmpty())
-				psb.set(HTML_addKeyValueTableHeaders, bool(a.addKeyValueTableHeaders()));
-			if (! a.disableDetectLabelParameters().isEmpty())
-				psb.set(HTML_disableDetectLabelParameters, bool(a.disableDetectLabelParameters()));
-			if (! a.disableDetectLinksInStrings().isEmpty())
-				psb.set(HTML_disableDetectLinksInStrings, bool(a.disableDetectLinksInStrings()));
-			if (! a.labelParameter().isEmpty())
-				psb.set(HTML_labelParameter, string(a.labelParameter()));
-			if (! a.uriAnchorText().isEmpty())
-				psb.set(HTML_uriAnchorText, string(a.uriAnchorText()));
+
+			psb.setIfNotEmpty(HTML_addBeanTypes, bool(a.addBeanTypes()));
+			psb.setIfNotEmpty(HTML_addKeyValueTableHeaders, bool(a.addKeyValueTableHeaders()));
+			psb.setIfNotEmpty(HTML_disableDetectLabelParameters, bool(a.disableDetectLabelParameters()));
+			psb.setIfNotEmpty(HTML_disableDetectLinksInStrings, bool(a.disableDetectLinksInStrings()));
+			psb.setIfNotEmpty(HTML_labelParameter, string(a.labelParameter()));
+			psb.setIfNotEmpty(HTML_uriAnchorText, string(a.uriAnchorText()));
 		}
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlDocConfigAnnotation.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlDocConfigAnnotation.java
index 5e09173..fabf0a4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlDocConfigAnnotation.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlDocConfigAnnotation.java
@@ -14,6 +14,7 @@ package org.apache.juneau.html.annotation;
 
 import static org.apache.juneau.html.HtmlDocSerializer.*;
 import static org.apache.juneau.internal.StringUtils.*;
+import static java.util.Arrays.*;
 
 import java.util.regex.*;
 
@@ -46,39 +47,21 @@ public class HtmlDocConfigAnnotation {
 		@Override
 		public void apply(AnnotationInfo<HtmlDocConfig> ai, PropertyStoreBuilder psb, VarResolverSession vr) {
 			HtmlDocConfig a = ai.getAnnotation();
-			if (a.aside().length > 0)
-				psb.set(HTMLDOC_aside, resolveList(a.aside(), psb.peek(String[].class, HTMLDOC_aside)));
-			if (! "DEFAULT".equalsIgnoreCase(a.asideFloat()))
-				psb.set(HTMLDOC_asideFloat, a.asideFloat().toUpperCase());
-			if (a.footer().length > 0)
-				psb.set(HTMLDOC_footer, resolveList(a.footer(), psb.peek(String[].class, HTMLDOC_footer)));
-			if (a.head().length > 0)
-				psb.set(HTMLDOC_head, resolveList(a.head(), psb.peek(String[].class, HTMLDOC_head)));
-			if (a.header().length > 0)
-				psb.set(HTMLDOC_header, resolveList(a.header(), psb.peek(String[].class, HTMLDOC_header)));
-			if (a.nav().length > 0)
-				psb.set(HTMLDOC_nav, resolveList(a.nav(), psb.peek(String[].class, HTMLDOC_nav)));
-			if (a.navlinks().length > 0)
-				psb.set(HTMLDOC_navlinks, resolveLinks(a.navlinks(), psb.peek(String[].class, HTMLDOC_navlinks)));
-			if (! a.noResultsMessage().isEmpty())
-				psb.set(HTMLDOC_noResultsMessage, string(a.noResultsMessage()));
-			if (! a.nowrap().isEmpty())
-				psb.set(HTMLDOC_nowrap, bool(a.nowrap()));
-			if (a.script().length > 0)
-				psb.set(HTMLDOC_script, resolveList(a.script(), psb.peek(String[].class, HTMLDOC_script)));
-			if (a.style().length > 0)
-				psb.set(HTMLDOC_style, resolveList(a.style(), psb.peek(String[].class, HTMLDOC_style)));
-			if (a.stylesheet().length > 0)
-				psb.set(HTMLDOC_stylesheet, resolveList(a.stylesheet(), psb.peek(String[].class, HTMLDOC_stylesheet)));
-			if (a.template() != HtmlDocTemplate.Null.class)
-				psb.set(HTMLDOC_template, a.template());
-			for (Class<? extends HtmlWidget> w : a.widgets()) {
-				try {
-					psb.prependTo(HTMLDOC_widgets, w.newInstance());
-				} catch (Exception e) {
-					e.printStackTrace();
-				}
-			}
+
+			psb.setIf(a.aside().length > 0, HTMLDOC_aside, resolveList(a.aside(), psb.peek(String[].class, HTMLDOC_aside)));
+			psb.setIf(! "DEFAULT".equalsIgnoreCase(a.asideFloat()), HTMLDOC_asideFloat, a.asideFloat().toUpperCase());
+			psb.setIf(a.footer().length > 0, HTMLDOC_footer, resolveList(a.footer(), psb.peek(String[].class, HTMLDOC_footer)));
+			psb.setIf(a.head().length > 0, HTMLDOC_head, resolveList(a.head(), psb.peek(String[].class, HTMLDOC_head)));
+			psb.setIf(a.header().length > 0, HTMLDOC_header, resolveList(a.header(), psb.peek(String[].class, HTMLDOC_header)));
+			psb.setIf(a.nav().length > 0, HTMLDOC_nav, resolveList(a.nav(), psb.peek(String[].class, HTMLDOC_nav)));
+			psb.setIf(a.navlinks().length > 0, HTMLDOC_navlinks, resolveLinks(a.navlinks(), psb.peek(String[].class, HTMLDOC_navlinks)));
+			psb.setIfNotEmpty(HTMLDOC_noResultsMessage, string(a.noResultsMessage()));
+			psb.setIfNotEmpty(HTMLDOC_nowrap, bool(a.nowrap()));
+			psb.setIf(a.script().length > 0, HTMLDOC_script, resolveList(a.script(), psb.peek(String[].class, HTMLDOC_script)));
+			psb.setIf(a.style().length > 0, HTMLDOC_style, resolveList(a.style(), psb.peek(String[].class, HTMLDOC_style)));
+			psb.setIf(a.stylesheet().length > 0, HTMLDOC_stylesheet, resolveList(a.stylesheet(), psb.peek(String[].class, HTMLDOC_stylesheet)));
+			psb.setIf(a.template() != HtmlDocTemplate.Null.class, HTMLDOC_template, a.template());
+			asList(a.widgets()).stream().forEach(x -> psb.prependTo(HTMLDOC_widgets, x));
 		}
 
 		private static final Pattern INDEXED_LINK_PATTERN = Pattern.compile("(?s)(\\S*)\\[(\\d+)\\]\\:(.*)");
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/annotation/JsonConfigAnnotation.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/annotation/JsonConfigAnnotation.java
index 11aa5d7..2823ab2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/annotation/JsonConfigAnnotation.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/annotation/JsonConfigAnnotation.java
@@ -42,15 +42,11 @@ public class JsonConfigAnnotation {
 		@Override
 		public void apply(AnnotationInfo<JsonConfig> ai, PropertyStoreBuilder psb, VarResolverSession vr) {
 			JsonConfig a = ai.getAnnotation();
-			if (! a.addBeanTypes().isEmpty())
-				psb.set(JSON_addBeanTypes, bool(a.addBeanTypes()));
-			if (! a.escapeSolidus().isEmpty())
-				psb.set(JSON_escapeSolidus, bool(a.escapeSolidus()));
-			if (! a.simpleMode().isEmpty())
-				psb.set(JSON_simpleMode, bool(a.simpleMode()));
 
-			if (! a.validateEnd().isEmpty())
-				psb.set(JSON_validateEnd, bool(a.validateEnd()));
+			psb.setIfNotEmpty(JSON_addBeanTypes, bool(a.addBeanTypes()));
+			psb.setIfNotEmpty(JSON_escapeSolidus, bool(a.escapeSolidus()));
+			psb.setIfNotEmpty(JSON_simpleMode, bool(a.simpleMode()));
+			psb.setIfNotEmpty(JSON_validateEnd, bool(a.validateEnd()));
 		}
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/JsonSchemaConfigAnnotation.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/JsonSchemaConfigAnnotation.java
index bfc51e6..ba88948 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/JsonSchemaConfigAnnotation.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/JsonSchemaConfigAnnotation.java
@@ -42,20 +42,14 @@ public class JsonSchemaConfigAnnotation {
 		@Override
 		public void apply(AnnotationInfo<JsonSchemaConfig> ai, PropertyStoreBuilder psb, VarResolverSession vr) {
 			JsonSchemaConfig a = ai.getAnnotation();
-			if (! a.addDescriptionsTo().isEmpty())
-				psb.set(JSONSCHEMA_addDescriptionsTo, string(a.addDescriptionsTo()));
-			if (! a.addExamplesTo().isEmpty())
-				psb.set(JSONSCHEMA_addExamplesTo, string(a.addExamplesTo()));
-			if (! a.allowNestedDescriptions().isEmpty())
-				psb.set(JSONSCHEMA_allowNestedDescriptions, bool(a.allowNestedDescriptions()));
-			if (! a.allowNestedExamples().isEmpty())
-				psb.set(JSONSCHEMA_allowNestedExamples, bool(a.allowNestedExamples()));
-			if (a.beanDefMapper() != BeanDefMapper.Null.class)
-				psb.set(JSONSCHEMA_beanDefMapper, a.beanDefMapper());
-			if (! a.ignoreTypes().isEmpty())
-				psb.set(JSONSCHEMA_ignoreTypes, string(a.ignoreTypes()));
-			if (! a.useBeanDefs().isEmpty())
-				psb.set(JSONSCHEMA_useBeanDefs, bool(a.useBeanDefs()));
+
+			psb.setIfNotEmpty(JSONSCHEMA_addDescriptionsTo, string(a.addDescriptionsTo()));
+			psb.setIfNotEmpty(JSONSCHEMA_addExamplesTo, string(a.addExamplesTo()));
+			psb.setIfNotEmpty(JSONSCHEMA_allowNestedDescriptions, bool(a.allowNestedDescriptions()));
+			psb.setIfNotEmpty(JSONSCHEMA_allowNestedExamples, bool(a.allowNestedExamples()));
+			psb.setIf(a.beanDefMapper() != BeanDefMapper.Null.class, JSONSCHEMA_beanDefMapper, a.beanDefMapper());
+			psb.setIfNotEmpty(JSONSCHEMA_ignoreTypes, string(a.ignoreTypes()));
+			psb.setIfNotEmpty(JSONSCHEMA_useBeanDefs, bool(a.useBeanDefs()));
 		}
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/annotation/MsgPackConfigAnnotation.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/annotation/MsgPackConfigAnnotation.java
index bc54d3c..fb6e9aa 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/annotation/MsgPackConfigAnnotation.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/annotation/MsgPackConfigAnnotation.java
@@ -42,8 +42,7 @@ public class MsgPackConfigAnnotation {
 		public void apply(AnnotationInfo<MsgPackConfig> ai, PropertyStoreBuilder psb, VarResolverSession vr) {
 			MsgPackConfig a = ai.getAnnotation();
 
-			if (! a.addBeanTypes().isEmpty())
-				psb.set(MSGPACK_addBeanTypes, bool(a.addBeanTypes()));
+			psb.setIfNotEmpty(MSGPACK_addBeanTypes, bool(a.addBeanTypes()));
 		}
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/annotation/OpenApiConfigAnnotation.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/annotation/OpenApiConfigAnnotation.java
index bf51a95..c39b5bf 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/annotation/OpenApiConfigAnnotation.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/annotation/OpenApiConfigAnnotation.java
@@ -42,10 +42,8 @@ public class OpenApiConfigAnnotation {
 		public void apply(AnnotationInfo<OpenApiConfig> ai, PropertyStoreBuilder psb, VarResolverSession vr) {
 			OpenApiConfig a = ai.getAnnotation();
 
-			if (! a.format().isEmpty())
-				psb.set(OAPI_format, string(a.format()));
-			if (! a.collectionFormat().isEmpty())
-				psb.set(OAPI_collectionFormat, string(a.collectionFormat()));
+			psb.setIfNotEmpty(OAPI_format, string(a.format()));
+			psb.setIfNotEmpty(OAPI_collectionFormat, string(a.collectionFormat()));
 		}
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/annotation/ParserConfigAnnotation.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/annotation/ParserConfigAnnotation.java
index b538ac8..0718413 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/annotation/ParserConfigAnnotation.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/annotation/ParserConfigAnnotation.java
@@ -45,26 +45,16 @@ public class ParserConfigAnnotation {
 		@Override
 		public void apply(AnnotationInfo<ParserConfig> ai, PropertyStoreBuilder psb, VarResolverSession vr) {
 			ParserConfig a = ai.getAnnotation();
-			if (! a.autoCloseStreams().isEmpty())
-				psb.set(PARSER_autoCloseStreams, bool(a.autoCloseStreams()));
-			if (! a.debugOutputLines().isEmpty())
-				psb.set(PARSER_debugOutputLines, integer(a.debugOutputLines(), "debugOutputLines"));
-			if (a.listener() != ParserListener.Null.class)
-				psb.set(PARSER_listener, a.listener());
-			if (! a.strict().isEmpty())
-				psb.set(PARSER_strict, bool(a.strict()));
-			if (! a.trimStrings().isEmpty())
-				psb.set(PARSER_trimStrings, bool(a.trimStrings()));
-			if (! a.unbuffered().isEmpty())
-				psb.set(PARSER_unbuffered, bool(a.unbuffered()));
 
-			if (! a.binaryFormat().isEmpty())
-				psb.set(ISPARSER_binaryFormat, string(a.binaryFormat()));
-
-			if (! a.fileCharset().isEmpty())
-				psb.set(RPARSER_fileCharset, charset(a.fileCharset()));
-			if (! a.streamCharset().isEmpty())
-				psb.set(RPARSER_streamCharset, charset(a.streamCharset()));
+			psb.setIfNotEmpty(PARSER_autoCloseStreams, bool(a.autoCloseStreams()));
+			psb.setIfNotEmpty(PARSER_debugOutputLines, integer(a.debugOutputLines(), "debugOutputLines"));
+			psb.setIf(a.listener() != ParserListener.Null.class, PARSER_listener, a.listener());
+			psb.setIfNotEmpty(PARSER_strict, bool(a.strict()));
+			psb.setIfNotEmpty(PARSER_trimStrings, bool(a.trimStrings()));
+			psb.setIfNotEmpty(PARSER_unbuffered, bool(a.unbuffered()));
+			psb.setIfNotEmpty(ISPARSER_binaryFormat, string(a.binaryFormat()));
+			psb.setIfNotEmpty(RPARSER_fileCharset, charset(a.fileCharset()));
+			psb.setIfNotEmpty(RPARSER_streamCharset, charset(a.streamCharset()));
 		}
 
 		private Object charset(String in) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/annotation/SerializerConfigAnnotation.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/annotation/SerializerConfigAnnotation.java
index e07961b..b4f2e23 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/annotation/SerializerConfigAnnotation.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/annotation/SerializerConfigAnnotation.java
@@ -45,44 +45,25 @@ public class SerializerConfigAnnotation {
 		@Override
 		public void apply(AnnotationInfo<SerializerConfig> ai, PropertyStoreBuilder psb, VarResolverSession vr) {
 			SerializerConfig a = ai.getAnnotation();
-			if (! a.addBeanTypes().isEmpty())
-				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())
-				psb.set(SERIALIZER_sortCollections, bool(a.sortCollections()));
-			if (! a.sortMaps().isEmpty())
-				psb.set(SERIALIZER_sortMaps, bool(a.sortMaps()));
-			if (! a.trimEmptyCollections().isEmpty())
-				psb.set(SERIALIZER_trimEmptyCollections, bool(a.trimEmptyCollections()));
-			if (! a.trimEmptyMaps().isEmpty())
-				psb.set(SERIALIZER_trimEmptyMaps, bool(a.trimEmptyMaps()));
-			if (! a.trimStrings().isEmpty())
-				psb.set(SERIALIZER_trimStrings, bool(a.trimStrings()));
-			if (! a.uriContext().isEmpty())
-				psb.set(SERIALIZER_uriContext, string(a.uriContext()));
-			if (! a.uriRelativity().isEmpty())
-				psb.set(SERIALIZER_uriRelativity, string(a.uriRelativity()));
-			if (! a.uriResolution().isEmpty())
-				psb.set(SERIALIZER_uriResolution, string(a.uriResolution()));
 
-			if (! a.binaryFormat().isEmpty())
-				psb.set(OSSERIALIZER_binaryFormat, string(a.binaryFormat()));
-
-			if (! a.fileCharset().isEmpty())
-				psb.set(WSERIALIZER_fileCharset, charset(a.fileCharset()));
-			if (! a.maxIndent().isEmpty())
-				psb.set(WSERIALIZER_maxIndent, integer(a.maxIndent(), "maxIndent"));
-			if (! a.quoteChar().isEmpty())
-				psb.set(WSERIALIZER_quoteChar, character(a.quoteChar(), "quoteChar"));
-			if (! a.streamCharset().isEmpty())
-				psb.set(WSERIALIZER_streamCharset, charset(a.streamCharset()));
-			if (! a.useWhitespace().isEmpty())
-				psb.set(WSERIALIZER_useWhitespace, bool(a.useWhitespace()));
+			psb.setIfNotEmpty(SERIALIZER_addBeanTypes, bool(a.addBeanTypes()));
+			psb.setIfNotEmpty(SERIALIZER_addRootType, bool(a.addRootType()));
+			psb.setIfNotEmpty(SERIALIZER_keepNullProperties, bool(a.keepNullProperties()));
+			psb.setIf(a.listener() != SerializerListener.Null.class, SERIALIZER_listener, a.listener());
+			psb.setIfNotEmpty(SERIALIZER_sortCollections, bool(a.sortCollections()));
+			psb.setIfNotEmpty(SERIALIZER_sortMaps, bool(a.sortMaps()));
+			psb.setIfNotEmpty(SERIALIZER_trimEmptyCollections, bool(a.trimEmptyCollections()));
+			psb.setIfNotEmpty(SERIALIZER_trimEmptyMaps, bool(a.trimEmptyMaps()));
+			psb.setIfNotEmpty(SERIALIZER_trimStrings, bool(a.trimStrings()));
+			psb.setIfNotEmpty(SERIALIZER_uriContext, string(a.uriContext()));
+			psb.setIfNotEmpty(SERIALIZER_uriRelativity, string(a.uriRelativity()));
+			psb.setIfNotEmpty(SERIALIZER_uriResolution, string(a.uriResolution()));
+			psb.setIfNotEmpty(OSSERIALIZER_binaryFormat, string(a.binaryFormat()));
+			psb.setIfNotEmpty(WSERIALIZER_fileCharset, charset(a.fileCharset()));
+			psb.setIfNotEmpty(WSERIALIZER_maxIndent, integer(a.maxIndent(), "maxIndent"));
+			psb.setIfNotEmpty(WSERIALIZER_quoteChar, character(a.quoteChar(), "quoteChar"));
+			psb.setIfNotEmpty(WSERIALIZER_streamCharset, charset(a.streamCharset()));
+			psb.setIfNotEmpty(WSERIALIZER_useWhitespace, bool(a.useWhitespace()));
 		}
 
 		private Object charset(String in) {
@@ -92,8 +73,10 @@ public class SerializerConfigAnnotation {
 			return s;
 		}
 
-		private char character(String in, String loc) {
+		private Character character(String in, String loc) {
 			String s = string(in);
+			if (s == null)
+				return null;
 			if (s.length() != 1)
 				throw new ConfigException("Invalid syntax for character on annotation @{0}({1}): {2}", "SerializerConfig", loc, in);
 			return s.charAt(0);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/annotation/SoapXmlConfigAnnotation.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/annotation/SoapXmlConfigAnnotation.java
index d440cec..90473f1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/annotation/SoapXmlConfigAnnotation.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/annotation/SoapXmlConfigAnnotation.java
@@ -42,8 +42,7 @@ public class SoapXmlConfigAnnotation {
 		public void apply(AnnotationInfo<SoapXmlConfig> ai, PropertyStoreBuilder psb, VarResolverSession vr) {
 			SoapXmlConfig a = ai.getAnnotation();
 
-			if (! a.soapAction().isEmpty())
-				psb.set(SOAPXML_SOAPAction, string(a.soapAction()));
+			psb.setIfNotEmpty(SOAPXML_SOAPAction, string(a.soapAction()));
 		}
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/annotation/UonConfigAnnotation.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/annotation/UonConfigAnnotation.java
index 2aaa7d1..f0c0c10 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/annotation/UonConfigAnnotation.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/annotation/UonConfigAnnotation.java
@@ -42,17 +42,12 @@ public class UonConfigAnnotation {
 		@Override
 		public void apply(AnnotationInfo<UonConfig> ai, PropertyStoreBuilder psb, VarResolverSession vr) {
 			UonConfig a = ai.getAnnotation();
-			if (! a.addBeanTypes().isEmpty())
-				psb.set(UON_addBeanTypes, bool(a.addBeanTypes()));
-			if (! a.encoding().isEmpty())
-				psb.set(UON_encoding, bool(a.encoding()));
-			if (! a.paramFormat().isEmpty())
-				psb.set(UON_paramFormat, string(a.paramFormat()));
 
-			if (! a.decoding().isEmpty())
-				psb.set(UON_decoding, bool(a.decoding()));
-			if (! a.validateEnd().isEmpty())
-				psb.set(UON_validateEnd, bool(a.validateEnd()));
+			psb.setIfNotEmpty(UON_addBeanTypes, bool(a.addBeanTypes()));
+			psb.setIfNotEmpty(UON_encoding, bool(a.encoding()));
+			psb.setIfNotEmpty(UON_paramFormat, string(a.paramFormat()));
+			psb.setIfNotEmpty(UON_decoding, bool(a.decoding()));
+			psb.setIfNotEmpty(UON_validateEnd, bool(a.validateEnd()));
 		}
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/annotation/XmlConfigAnnotation.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/annotation/XmlConfigAnnotation.java
index 3509d25..e194459 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/annotation/XmlConfigAnnotation.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/annotation/XmlConfigAnnotation.java
@@ -43,29 +43,18 @@ public class XmlConfigAnnotation {
 		@Override
 		public void apply(AnnotationInfo<XmlConfig> ai, PropertyStoreBuilder psb, VarResolverSession vr) {
 			XmlConfig a = ai.getAnnotation();
-			if (! a.addBeanTypes().isEmpty())
-				psb.set(XML_addBeanTypes, bool(a.addBeanTypes()));
-			if (! a.addNamespaceUrisToRoot().isEmpty())
-				psb.set(XML_addNamespaceUrisToRoot, bool(a.addNamespaceUrisToRoot()));
-			if (! a.disableAutoDetectNamespaces().isEmpty())
-				psb.set(XML_disableAutoDetectNamespaces, bool(a.disableAutoDetectNamespaces()));
-			if (! a.defaultNamespace().isEmpty())
-				psb.set(XML_defaultNamespace, string(a.defaultNamespace()));
-			if (! a.enableNamespaces().isEmpty())
-				psb.set(XML_enableNamespaces, bool(a.enableNamespaces()));
-			if (a.namespaces().length > 0)
-				psb.set(XML_namespaces, Namespace.createArray(stringList(a.namespaces())));
 
-			if (a.eventAllocator() != XmlEventAllocator.Null.class)
-				psb.set(XML_eventAllocator, a.eventAllocator());
-			if (! a.preserveRootElement().isEmpty())
-				psb.set(XML_preserveRootElement, bool(a.preserveRootElement()));
-			if (a.reporter() != XmlReporter.Null.class)
-				psb.set(XML_reporter, a.reporter());
-			if (a.resolver() != XmlResolver.Null.class)
-				psb.set(XML_resolver, a.resolver());
-			if (! a.validating().isEmpty())
-				psb.set(XML_validating, bool(a.validating()));
+			psb.setIfNotEmpty(XML_addBeanTypes, bool(a.addBeanTypes()));
+			psb.setIfNotEmpty(XML_addNamespaceUrisToRoot, bool(a.addNamespaceUrisToRoot()));
+			psb.setIfNotEmpty(XML_disableAutoDetectNamespaces, bool(a.disableAutoDetectNamespaces()));
+			psb.setIfNotEmpty(XML_defaultNamespace, string(a.defaultNamespace()));
+			psb.setIfNotEmpty(XML_enableNamespaces, bool(a.enableNamespaces()));
+			psb.setIf(a.namespaces().length > 0, XML_namespaces, Namespace.createArray(stringList(a.namespaces())));
+			psb.setIf(a.eventAllocator() != XmlEventAllocator.Null.class, XML_eventAllocator, a.eventAllocator());
+			psb.setIfNotEmpty(XML_preserveRootElement, bool(a.preserveRootElement()));
+			psb.setIf(a.reporter() != XmlReporter.Null.class, XML_reporter, a.reporter());
+			psb.setIf(a.resolver() != XmlResolver.Null.class, XML_resolver, a.resolver());
+			psb.setIfNotEmpty(XML_validating, bool(a.validating()));
 		}
 	}
 }
\ No newline at end of file
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
index e12383c..7a1a8d0 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
@@ -968,88 +968,46 @@ public class RestAnnotation {
 			Rest a = ai.getAnnotation();
 			ClassInfo c = ai.getClassOn();
 
-			if (a.serializers().length > 0)
-				psb.set(REST_serializers, merge(ConverterUtils.toType(psb.peek(REST_serializers), Object[].class), a.serializers()));
-
-			if (a.parsers().length > 0)
-				psb.set(REST_parsers, merge(ConverterUtils.toType(psb.peek(REST_parsers), Object[].class), a.parsers()));
-
+			psb.set(REST_serializers, merge(ConverterUtils.toType(psb.peek(REST_serializers), Object[].class), a.serializers()));
+			psb.set(REST_parsers, merge(ConverterUtils.toType(psb.peek(REST_parsers), Object[].class), a.parsers()));
 			psb.setIf(a.partSerializer() != HttpPartSerializer.Null.class, REST_partSerializer, a.partSerializer());
-
 			psb.setIf(a.partParser() != HttpPartParser.Null.class, REST_partParser, a.partParser());
-
 			psb.prependTo(REST_encoders, a.encoders());
-
 			psb.setIfNotEmpty(REST_produces, stringList(a.produces()));
-
 			psb.setIfNotEmpty(REST_consumes, stringList(a.consumes()));
-
 			stringStream(a.defaultRequestAttributes()).map(x -> BasicNamedAttribute.ofPair(x)).forEach(x -> psb.appendTo(REST_defaultRequestAttributes, x));
-
 			stringStream(a.defaultRequestHeaders()).map(x -> BasicHeader.ofPair(x)).forEach(x -> psb.appendTo(REST_defaultRequestHeaders, x));
-
 			stringStream(a.defaultResponseHeaders()).map(x -> BasicHeader.ofPair(x)).forEach(x -> psb.appendTo(REST_defaultResponseHeaders, x));
-
 			psb.appendToIfNotEmpty(REST_defaultRequestHeaders, Accept.of(string(a.defaultAccept())));
-
 			psb.appendToIfNotEmpty(REST_defaultRequestHeaders, ContentType.of(string(a.defaultContentType())));
-
 			psb.prependTo(REST_responseHandlers, a.responseHandlers());
-
 			psb.prependTo(REST_converters, a.converters());
-
 			psb.prependTo(REST_guards, reverse(a.guards()));
-
 			psb.prependTo(REST_children, a.children());
-
 			psb.prependTo(REST_paramResolvers, a.paramResolvers());
-
 			psb.setIf(a.context() != RestContext.Null.class, REST_context, a.context());
-
 			psb.setIfNotEmpty(REST_uriContext, string(a.uriContext()));
-
 			psb.setIfNotEmpty(REST_uriAuthority, string(a.uriAuthority()));
-
 			psb.setIfNotEmpty(REST_uriRelativity, string(a.uriRelativity()));
-
 			psb.setIfNotEmpty(REST_uriResolution, string(a.uriResolution()));
-
 			psb.prependTo(REST_messages, Tuple2.of(c.inner(), string(a.messages())));
-
 			psb.setIf(a.fileFinder() != FileFinder.Null.class, REST_fileFinder, a.fileFinder());
-
 			psb.setIf(a.staticFiles() != StaticFiles.Null.class, REST_staticFiles, a.staticFiles());
-
 			psb.setIfNotEmpty(REST_path, trimLeadingSlash(string(a.path())));
-
 			psb.setIfNotEmpty(REST_clientVersionHeader, string(a.clientVersionHeader()));
-
 			psb.setIf(a.beanFactory() != BeanFactory.Null.class, REST_beanFactory, a.beanFactory());
-
 			psb.setIf(a.callLogger() != RestLogger.Null.class, REST_callLogger, a.callLogger());
-
 			psb.setIf(a.infoProvider() != RestInfoProvider.Null.class, REST_infoProvider, a.infoProvider());
-
 			psb.setIfNotEmpty(REST_disableAllowBodyParam, bool(a.disableAllowBodyParam()));
-
 			psb.setIfNotEmpty(REST_allowedHeaderParams, string(a.allowedHeaderParams()));
-
 			psb.setIfNotEmpty(REST_allowedMethodHeaders, string(a.allowedMethodHeaders()));
-
 			psb.setIfNotEmpty(REST_allowedMethodParams, string(a.allowedMethodParams()));
-
 			psb.setIfNotEmpty(REST_renderResponseStackTraces, bool(a.renderResponseStackTraces()));
-
 			psb.setIfNotEmpty(REST_defaultCharset, string(a.defaultCharset()));
-
 			psb.setIfNotEmpty(REST_maxInput, string(a.maxInput()));
-
 			psb.setIfNotEmpty(REST_debug, string(a.debug()));
-
 			psb.setIfNotEmpty(REST_debugOn, string(a.debugOn()));
-
 			cdStream(a.rolesDeclared()).forEach(x -> psb.addTo(REST_rolesDeclared, x));
-
 			psb.addToIfNotEmpty(REST_roleGuard, string(a.roleGuard()));
 		}
 
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethodAnnotation.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethodAnnotation.java
index bfd9034..e7f899f 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethodAnnotation.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethodAnnotation.java
@@ -612,55 +612,33 @@ public class RestMethodAnnotation {
 		public void apply(AnnotationInfo<RestMethod> ai, PropertyStoreBuilder psb, VarResolverSession vr) {
 			RestMethod a = ai.getAnnotation();
 
-			if (a.serializers().length > 0)
-				psb.set(REST_serializers, merge(ConverterUtils.toType(psb.peek(REST_serializers), Object[].class), a.serializers()));
-
-			if (a.parsers().length > 0)
-				psb.set(REST_parsers, merge(ConverterUtils.toType(psb.peek(REST_parsers), Object[].class), a.parsers()));
-
-			if (a.encoders().length > 0)
-				psb.set(REST_encoders, merge(ConverterUtils.toType(psb.peek(REST_encoders), Object[].class), a.encoders()));
-
+			psb.set(REST_serializers, merge(ConverterUtils.toType(psb.peek(REST_serializers), Object[].class), a.serializers()));
+			psb.set(REST_parsers, merge(ConverterUtils.toType(psb.peek(REST_parsers), Object[].class), a.parsers()));
+			psb.set(REST_encoders, merge(ConverterUtils.toType(psb.peek(REST_encoders), Object[].class), a.encoders()));
 			psb.setIfNotEmpty(REST_produces, stringList(a.produces()));
-
 			psb.setIfNotEmpty(REST_consumes, stringList(a.consumes()));
-
 			stringStream(a.defaultRequestHeaders()).map(x -> BasicHeader.ofPair(x)).forEach(x -> psb.appendTo(RESTMETHOD_defaultRequestHeaders, x));
-
 			stringStream(a.defaultResponseHeaders()).map(x -> BasicHeader.ofPair(x)).forEach(x -> psb.appendTo(RESTMETHOD_defaultResponseHeaders, x));
-
 			stringStream(a.defaultRequestAttributes()).map(x -> BasicNamedAttribute.ofPair(x)).forEach(x -> psb.appendTo(RESTMETHOD_defaultRequestAttributes, x));
-
 			stringStream(a.defaultQuery()).map(x -> BasicNameValuePair.ofPair(x)).forEach(x -> psb.appendTo(RESTMETHOD_defaultQuery, x));
-
 			stringStream(a.defaultFormData()).map(x -> BasicNameValuePair.ofPair(x)).forEach(x -> psb.appendTo(RESTMETHOD_defaultFormData, x));
-
 			psb.appendToIfNotEmpty(REST_defaultRequestHeaders, Accept.of(string(a.defaultAccept())));
-
 			psb.appendToIfNotEmpty(REST_defaultRequestHeaders, ContentType.of(string(a.defaultContentType())));
-
 			psb.prependTo(REST_converters, a.converters());
-
 			psb.prependTo(REST_guards, reverse(a.guards()));
-
 			psb.prependTo(RESTMETHOD_matchers, a.matchers());
-
 			psb.setIfNotEmpty(RESTMETHOD_clientVersion, a.clientVersion());
-
 			psb.setIfNotEmpty(REST_defaultCharset, string(a.defaultCharset()));
-
 			psb.setIfNotEmpty(REST_maxInput, string(a.maxInput()));
-
 			stringStream(a.path()).forEach(x -> psb.prependTo(RESTMETHOD_path, x));
-
 			cdStream(a.rolesDeclared()).forEach(x -> psb.addTo(REST_rolesDeclared, x));
-
 			psb.addToIfNotEmpty(REST_roleGuard, string(a.roleGuard()));
-
 			psb.setIfNotEmpty(RESTMETHOD_httpMethod, string(a.method()));
+			psb.setIf(a.priority() != 0, RESTMETHOD_priority, a.priority());
+			psb.setIfNotEmpty(RESTMETHOD_debug, string(a.debug()));
 
-			if (! a.value().isEmpty()) {
-				String v = string(a.value()).trim();
+			String v = StringUtils.trim(string(a.value()));
+			if (v != null) {
 				int i = v.indexOf(' ');
 				if (i == -1) {
 					psb.set(RESTMETHOD_httpMethod, v);
@@ -669,10 +647,6 @@ public class RestMethodAnnotation {
 					psb.prependTo(RESTMETHOD_path,  v.substring(i).trim());
 				}
 			}
-
-			psb.setIf(a.priority() != 0, RESTMETHOD_priority, a.priority());
-
-			psb.setIfNotEmpty(RESTMETHOD_debug, string(a.debug()));
 		}
 	}