@@ -204,18 +204,28 @@ public void setIgnorableProperties(Set<String> ignorable) {
204204 public void resolve (DeserializationContext ctxt ) throws JsonMappingException
205205 {
206206 // May need to resolve types for delegate- and/or property-based creators:
207- if (_valueInstantiator .canCreateUsingDelegate ()) {
208- JavaType delegateType = _valueInstantiator .getDelegateType (ctxt .getConfig ());
209- if (delegateType == null ) {
210- throw new IllegalArgumentException ("Invalid delegate-creator definition for " +_mapType
211- +": value instantiator (" +_valueInstantiator .getClass ().getName ()
212- +") returned true for 'canCreateUsingDelegate()', but null for 'getDelegateType()'" );
207+ if (_valueInstantiator != null ) {
208+ if (_valueInstantiator .canCreateUsingDelegate ()) {
209+ JavaType delegateType = _valueInstantiator .getDelegateType (ctxt .getConfig ());
210+ if (delegateType == null ) {
211+ throw new IllegalArgumentException ("Invalid delegate-creator definition for " +_mapType
212+ +": value instantiator (" +_valueInstantiator .getClass ().getName ()
213+ +") returned true for 'canCreateUsingDelegate()', but null for 'getDelegateType()'" );
214+ }
215+ /* Theoretically should be able to get CreatorProperty for delegate
216+ * parameter to pass; but things get tricky because DelegateCreator
217+ * may contain injectable values. So, for now, let's pass nothing.
218+ */
219+ _delegateDeserializer = findDeserializer (ctxt , delegateType , null );
220+ } else if (_valueInstantiator .canCreateUsingArrayDelegate ()) {
221+ JavaType delegateType = _valueInstantiator .getArrayDelegateType (ctxt .getConfig ());
222+ if (delegateType == null ) {
223+ throw new IllegalArgumentException ("Invalid delegate-creator definition for " +_mapType
224+ +": value instantiator (" +_valueInstantiator .getClass ().getName ()
225+ +") returned true for 'canCreateUsingDelegate()', but null for 'getArrayDelegateType()'" );
226+ }
227+ _delegateDeserializer = findDeserializer (ctxt , delegateType , null );
213228 }
214- /* Theoretically should be able to get CreatorProperty for delegate
215- * parameter to pass; but things get tricky because DelegateCreator
216- * may contain injectable values. So, for now, let's pass nothing.
217- */
218- _delegateDeserializer = findDeserializer (ctxt , delegateType , null );
219229 }
220230 if (_valueInstantiator .canCreateFromObjectWith ()) {
221231 SettableBeanProperty [] creatorProps = _valueInstantiator .getFromObjectArguments (ctxt .getConfig ());
0 commit comments