1 package com.fasterxml.jackson.databind.deser.impl; 2 3 import com.fasterxml.jackson.databind.*; 4 import com.fasterxml.jackson.databind.deser.NullValueProvider; 5 import com.fasterxml.jackson.databind.exc.InvalidNullException; 6 import com.fasterxml.jackson.databind.util.AccessPattern; 7 8 /** 9 * Simple {@link NullValueProvider} that will always throw a 10 * {@link InvalidNullException} when a null is encountered. 11 */ 12 public class NullsConstantProvider 13 implements NullValueProvider, java.io.Serializable 14 { 15 private static final long serialVersionUID = 1L; 16 17 private final static NullsConstantProvider SKIPPER = new NullsConstantProvider(null); 18 19 private final static NullsConstantProvider NULLER = new NullsConstantProvider(null); 20 21 protected final Object _nullValue; 22 23 protected final AccessPattern _access; 24 NullsConstantProvider(Object nvl)25 protected NullsConstantProvider(Object nvl) { 26 _nullValue = nvl; 27 _access = (_nullValue == null) ? AccessPattern.ALWAYS_NULL 28 : AccessPattern.CONSTANT; 29 } 30 31 /** 32 * Static accessor for a stateless instance used as marker, to indicate 33 * that all input `null` values should be skipped (ignored), so that 34 * no corresponding property value is set (with POJOs), and no content 35 * values (array/Collection elements, Map entries) are added. 36 */ skipper()37 public static NullsConstantProvider skipper() { 38 return SKIPPER; 39 } 40 nuller()41 public static NullsConstantProvider nuller() { 42 return NULLER; 43 } 44 forValue(Object nvl)45 public static NullsConstantProvider forValue(Object nvl) { 46 if (nvl == null) { 47 return NULLER; 48 } 49 return new NullsConstantProvider(nvl); 50 } 51 52 /** 53 * Utility method that can be used to check if given null value provider 54 * is "skipper", marker provider that means that all input `null`s should 55 * be skipped (ignored), instead of converted 56 */ isSkipper(NullValueProvider p)57 public static boolean isSkipper(NullValueProvider p) { 58 return (p == SKIPPER); 59 } 60 61 /** 62 * Utility method that can be used to check if given null value provider 63 * is "nuller", no-operation provider that will always simply return 64 * Java `null` for any and all input `null`s. 65 */ isNuller(NullValueProvider p)66 public static boolean isNuller(NullValueProvider p) { 67 return (p == NULLER); 68 } 69 70 @Override getNullAccessPattern()71 public AccessPattern getNullAccessPattern() { 72 return _access; 73 } 74 75 @Override getNullValue(DeserializationContext ctxt)76 public Object getNullValue(DeserializationContext ctxt) { 77 return _nullValue; 78 } 79 } 80