@@ -99,7 +99,8 @@ public enum Mode {
9999 REPLACE_EMPTY_VALUE_WITH_NULL ,
100100 FORCE_ATTRIBUTE_USAGE ,
101101 DEFINE_ROOT_NAME ,
102- FORCE_ATTRIBUTE_USAGE_AND_DEFINE_ROOT_NAME
102+ FORCE_ATTRIBUTE_USAGE_AND_DEFINE_ROOT_NAME ,
103+ REPLACE_NULL_WITH_EMPTY_VALUE
103104 }
104105
105106 public U (final Iterable <T > iterable ) {
@@ -2253,6 +2254,8 @@ public static String jsonToXml(String json, Xml.XmlStringBuilder.Step identStep,
22532254 result = Xml .toXml ((Map ) object , identStep , newRootName );
22542255 } else if (mode == Mode .FORCE_ATTRIBUTE_USAGE_AND_DEFINE_ROOT_NAME ) {
22552256 result = Xml .toXml (forceAttributeUsage ((Map ) object ), identStep , newRootName );
2257+ } else if (mode == Mode .REPLACE_NULL_WITH_EMPTY_VALUE ) {
2258+ result = Xml .toXml (replaceNullWithEmptyValue ((Map ) object ), identStep , newRootName );
22562259 } else {
22572260 result = Xml .toXml ((Map ) object , identStep );
22582261 }
@@ -2496,6 +2499,33 @@ private static Object makeAttributeUsage(Object value) {
24962499 return result ;
24972500 }
24982501
2502+ @ SuppressWarnings ("unchecked" )
2503+ public static Map <String , Object > replaceNullWithEmptyValue (Map <String , Object > map ) {
2504+ Map <String , Object > outMap = newLinkedHashMap ();
2505+ for (Map .Entry <String , Object > entry : map .entrySet ()) {
2506+ outMap .put (entry .getKey (), entry .getValue () == null ? newLinkedHashMap () :
2507+ makeReplaceNullValue (entry .getValue ()));
2508+ }
2509+ return outMap ;
2510+ }
2511+
2512+ @ SuppressWarnings ("unchecked" )
2513+ private static Object makeReplaceNullValue (Object value ) {
2514+ final Object result ;
2515+ if (value instanceof List ) {
2516+ List <Object > values = newArrayList ();
2517+ for (Object item : (List ) value ) {
2518+ values .add (item instanceof Map ? replaceNullWithEmptyValue ((Map ) item ) : item );
2519+ }
2520+ result = values ;
2521+ } else if (value instanceof Map ) {
2522+ result = replaceNullWithEmptyValue ((Map ) value );
2523+ } else {
2524+ result = value ;
2525+ }
2526+ return result ;
2527+ }
2528+
24992529 public static long gcd (long value1 , long value2 ) {
25002530 if (value1 == 0 ) {
25012531 return value2 ;
0 commit comments