@@ -172,14 +172,24 @@ public CollectionDeserializer createContextual(DeserializationContext ctxt,
172
172
{
173
173
// May need to resolve types for delegate-based creators:
174
174
JsonDeserializer <Object > delegateDeser = null ;
175
- if ((_valueInstantiator != null ) && _valueInstantiator .canCreateUsingDelegate ()) {
176
- JavaType delegateType = _valueInstantiator .getDelegateType (ctxt .getConfig ());
177
- if (delegateType == null ) {
178
- throw new IllegalArgumentException ("Invalid delegate-creator definition for " +_collectionType
179
- +": value instantiator (" +_valueInstantiator .getClass ().getName ()
180
- +") returned true for 'canCreateUsingDelegate()', but null for 'getDelegateType()'" );
175
+ if (_valueInstantiator != null ) {
176
+ if (_valueInstantiator .canCreateUsingDelegate ()) {
177
+ JavaType delegateType = _valueInstantiator .getDelegateType (ctxt .getConfig ());
178
+ if (delegateType == null ) {
179
+ throw new IllegalArgumentException ("Invalid delegate-creator definition for " +_collectionType
180
+ +": value instantiator (" +_valueInstantiator .getClass ().getName ()
181
+ +") returned true for 'canCreateUsingDelegate()', but null for 'getDelegateType()'" );
182
+ }
183
+ delegateDeser = findDeserializer (ctxt , delegateType , property );
184
+ } else if (_valueInstantiator .canCreateUsingArrayDelegate ()) {
185
+ JavaType delegateType = _valueInstantiator .getArrayDelegateType (ctxt .getConfig ());
186
+ if (delegateType == null ) {
187
+ throw new IllegalArgumentException ("Invalid array-delegate-creator definition for " +_collectionType
188
+ +": value instantiator (" +_valueInstantiator .getClass ().getName ()
189
+ +") returned true for 'canCreateUsingArrayDelegate()', but null for 'getArrayDelegateType()'" );
190
+ }
191
+ delegateDeser = findDeserializer (ctxt , delegateType , property );
181
192
}
182
- delegateDeser = findDeserializer (ctxt , delegateType , property );
183
193
}
184
194
// [databind#1043]: allow per-property allow-wrapping of single overrides:
185
195
// 11-Dec-2015, tatu: Should we pass basic `Collection.class`, or more refined? Mostly
@@ -204,7 +214,7 @@ public CollectionDeserializer createContextual(DeserializationContext ctxt,
204
214
}
205
215
return withResolved (delegateDeser , valueDeser , valueTypeDeser , unwrapSingle );
206
216
}
207
-
217
+
208
218
/*
209
219
/**********************************************************
210
220
/* ContainerDeserializerBase API
@@ -236,9 +246,9 @@ public Collection<Object> deserialize(JsonParser p, DeserializationContext ctxt)
236
246
return (Collection <Object >) _valueInstantiator .createUsingDelegate (ctxt ,
237
247
_delegateDeserializer .deserialize (p , ctxt ));
238
248
}
239
- /* [JACKSON-620]: empty String may be ok; bit tricky to check, however, since
240
- * there is also possibility of "auto-wrapping" of single-element arrays.
241
- * Hence we only accept empty String here.
249
+ /* Empty String may be ok; bit tricky to check, however, since
250
+ * there is also possibility of "auto-wrapping" of single-element arrays.
251
+ * Hence we only accept empty String here.
242
252
*/
243
253
if (p .hasToken (JsonToken .VALUE_STRING )) {
244
254
String str = p .getText ();
0 commit comments