@@ -301,7 +301,11 @@ protected Byte _parseByte(JsonParser p, DeserializationContext ctxt)
301301 // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
302302 case JsonTokenId .ID_START_OBJECT :
303303 text = ctxt .extractScalarFromObject (p , this , _valueClass );
304- break ;
304+ // 17-May-2025, tatu: [databind#4656] need to check for `null`
305+ if (text != null ) {
306+ break ;
307+ }
308+ // fall through
305309 default :
306310 return (Byte ) ctxt .handleUnexpectedToken (getValueType (ctxt ), p );
307311 }
@@ -384,12 +388,16 @@ protected Short _parseShort(JsonParser p, DeserializationContext ctxt)
384388 return (Short ) getNullValue (ctxt );
385389 case JsonTokenId .ID_NUMBER_INT :
386390 return p .getShortValue ();
391+ case JsonTokenId .ID_START_ARRAY :
392+ return (Short )_deserializeFromArray (p , ctxt );
387393 // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
388394 case JsonTokenId .ID_START_OBJECT :
395+ // 17-May-2025, tatu: [databind#4656] need to check for `null`
389396 text = ctxt .extractScalarFromObject (p , this , _valueClass );
390- break ;
391- case JsonTokenId .ID_START_ARRAY :
392- return (Short )_deserializeFromArray (p , ctxt );
397+ if (text != null ) {
398+ break ;
399+ }
400+ // fall through
393401 default :
394402 return (Short ) ctxt .handleUnexpectedToken (getValueType (ctxt ), p );
395403 }
@@ -474,12 +482,16 @@ public Character deserialize(JsonParser p, DeserializationContext ctxt)
474482 _verifyNullForPrimitive (ctxt );
475483 }
476484 return (Character ) getNullValue (ctxt );
485+ case JsonTokenId .ID_START_ARRAY :
486+ return _deserializeFromArray (p , ctxt );
477487 // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
478488 case JsonTokenId .ID_START_OBJECT :
479489 text = ctxt .extractScalarFromObject (p , this , _valueClass );
480- break ;
481- case JsonTokenId .ID_START_ARRAY :
482- return _deserializeFromArray (p , ctxt );
490+ // 17-May-2025, tatu: [databind#4656] need to check for `null`
491+ if (text != null ) {
492+ break ;
493+ }
494+ // fall through
483495 default :
484496 return (Character ) ctxt .handleUnexpectedToken (getValueType (ctxt ), p );
485497 }
@@ -622,12 +634,16 @@ protected final Float _parseFloat(JsonParser p, DeserializationContext ctxt)
622634 // fall through to coerce
623635 case JsonTokenId .ID_NUMBER_FLOAT :
624636 return p .getFloatValue ();
637+ case JsonTokenId .ID_START_ARRAY :
638+ return _deserializeFromArray (p , ctxt );
625639 // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
626640 case JsonTokenId .ID_START_OBJECT :
627641 text = ctxt .extractScalarFromObject (p , this , _valueClass );
628- break ;
629- case JsonTokenId .ID_START_ARRAY :
630- return _deserializeFromArray (p , ctxt );
642+ // 17-May-2025, tatu: [databind#4656] need to check for `null`
643+ if (text != null ) {
644+ break ;
645+ }
646+ // fall through
631647 default :
632648 return (Float ) ctxt .handleUnexpectedToken (getValueType (ctxt ), p );
633649 }
@@ -723,12 +739,16 @@ protected final Double _parseDouble(JsonParser p, DeserializationContext ctxt) t
723739 // fall through to coerce
724740 case JsonTokenId .ID_NUMBER_FLOAT : // safe coercion
725741 return p .getDoubleValue ();
742+ case JsonTokenId .ID_START_ARRAY :
743+ return _deserializeFromArray (p , ctxt );
726744 // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
727745 case JsonTokenId .ID_START_OBJECT :
728746 text = ctxt .extractScalarFromObject (p , this , _valueClass );
729- break ;
730- case JsonTokenId .ID_START_ARRAY :
731- return _deserializeFromArray (p , ctxt );
747+ // 17-May-2025, tatu: [databind#4656] need to check for `null`
748+ if (text != null ) {
749+ break ;
750+ }
751+ // fall through
732752 default :
733753 return (Double ) ctxt .handleUnexpectedToken (getValueType (ctxt ), p );
734754 }
@@ -816,12 +836,16 @@ public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOEx
816836 }
817837 }
818838 return p .getNumberValue ();
839+ case JsonTokenId .ID_START_ARRAY :
840+ return _deserializeFromArray (p , ctxt );
819841 // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
820842 case JsonTokenId .ID_START_OBJECT :
821843 text = ctxt .extractScalarFromObject (p , this , _valueClass );
822- break ;
823- case JsonTokenId .ID_START_ARRAY :
824- return _deserializeFromArray (p , ctxt );
844+ // 17-May-2025, tatu: [databind#4656] need to check for `null`
845+ if (text != null ) {
846+ break ;
847+ }
848+ // fall through
825849 default :
826850 return ctxt .handleUnexpectedToken (getValueType (ctxt ), p );
827851 }
@@ -951,12 +975,16 @@ public BigInteger deserialize(JsonParser p, DeserializationContext ctxt) throws
951975 final BigDecimal bd = p .getDecimalValue ();
952976 p .streamReadConstraints ().validateBigIntegerScale (bd .scale ());
953977 return bd .toBigInteger ();
978+ case JsonTokenId .ID_START_ARRAY :
979+ return _deserializeFromArray (p , ctxt );
954980 // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
955981 case JsonTokenId .ID_START_OBJECT :
956982 text = ctxt .extractScalarFromObject (p , this , _valueClass );
957- break ;
958- case JsonTokenId .ID_START_ARRAY :
959- return _deserializeFromArray (p , ctxt );
983+ // 17-May-2025, tatu: [databind#4656] need to check for `null`
984+ if (text != null ) {
985+ break ;
986+ }
987+ // fall through
960988 default :
961989 // String is ok too, can easily convert; otherwise, no can do:
962990 return (BigInteger ) ctxt .handleUnexpectedToken (getValueType (ctxt ), p );
@@ -1024,12 +1052,16 @@ public BigDecimal deserialize(JsonParser p, DeserializationContext ctxt)
10241052 case JsonTokenId .ID_STRING :
10251053 text = p .getText ();
10261054 break ;
1055+ case JsonTokenId .ID_START_ARRAY :
1056+ return _deserializeFromArray (p , ctxt );
10271057 // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
10281058 case JsonTokenId .ID_START_OBJECT :
10291059 text = ctxt .extractScalarFromObject (p , this , _valueClass );
1030- break ;
1031- case JsonTokenId .ID_START_ARRAY :
1032- return _deserializeFromArray (p , ctxt );
1060+ // 17-May-2025, tatu: [databind#4656] need to check for `null`
1061+ if (text != null ) {
1062+ break ;
1063+ }
1064+ // fall through
10331065 default :
10341066 return (BigDecimal ) ctxt .handleUnexpectedToken (getValueType (ctxt ), p );
10351067 }
0 commit comments