@@ -1482,7 +1482,9 @@ protected Object deserializeFromObjectId(JsonParser p, DeserializationContext ct
1482
1482
protected Object deserializeFromObjectUsingNonDefault (JsonParser p ,
1483
1483
DeserializationContext ctxt ) throws IOException
1484
1484
{
1485
- final JsonDeserializer <Object > delegateDeser = _delegateDeserializer ();
1485
+ // 02-Jul-2024, tatu: [databind#4602] Need to tweak regular and "array" delegating
1486
+ // Creator handling
1487
+ final JsonDeserializer <Object > delegateDeser = _delegateDeserializer (p );
1486
1488
if (delegateDeser != null ) {
1487
1489
final Object bean = _valueInstantiator .createUsingDelegate (ctxt ,
1488
1490
delegateDeser .deserialize (p , ctxt ));
@@ -1505,7 +1507,7 @@ protected Object deserializeFromObjectUsingNonDefault(JsonParser p,
1505
1507
// 01-May-2022, tatu: [databind#3417] special handling for (Graal) native images
1506
1508
if (NativeImageUtil .needsReflectionConfiguration (raw )) {
1507
1509
return ctxt .handleMissingInstantiator (raw , null , p ,
1508
- "cannot deserialize from Object value (no delegate- or property-based Creator): this appears to be a native image, in which case you may need to configure reflection for the class that is to be deserialized" );
1510
+ "cannot deserialize from Object value (no delegate- or property-based Creator): this appears to be a native image, in which case you may need to configure reflection for the class that is to be deserialized" );
1509
1511
}
1510
1512
return ctxt .handleMissingInstantiator (raw , getValueInstantiator (), p ,
1511
1513
"cannot deserialize from Object value (no delegate- or property-based Creator)" );
@@ -1710,6 +1712,30 @@ protected final JsonDeserializer<Object> _delegateDeserializer() {
1710
1712
return deser ;
1711
1713
}
1712
1714
1715
+ /**
1716
+ * Alternate to {@link #_delegateDeserializer()} which will only consider
1717
+ * {@code _arrayDelegateDeserializer} if given {@link JsonParser} points to
1718
+ * {@link JsonToken#START_ARRAY} token.
1719
+ *
1720
+ * @since 2.18
1721
+ */
1722
+ protected final JsonDeserializer <Object > _delegateDeserializer (JsonParser p ) {
1723
+ if (_delegateDeserializer == null ) {
1724
+ // Note! Will not call `JsonParser.isExpectedArrayToken()` as that could
1725
+ // "transform" `JsonToken.START_OBJECT` into `JsonToken.START_ARRAY` and
1726
+ // here there is no strong expectation of Array value
1727
+ if (_arrayDelegateDeserializer != null ) {
1728
+ // Alas, need bit elaborate logic: either JSON Array, OR no
1729
+ // Properties-based Creator
1730
+ if (p .hasToken (JsonToken .START_ARRAY )
1731
+ || (_propertyBasedCreator == null )) {
1732
+ return _arrayDelegateDeserializer ;
1733
+ }
1734
+ }
1735
+ }
1736
+ return _delegateDeserializer ;
1737
+ }
1738
+
1713
1739
/*
1714
1740
/**********************************************************
1715
1741
/* Overridable helper methods
0 commit comments