@@ -297,6 +297,10 @@ protected Byte _parseByte(JsonParser p, DeserializationContext ctxt)
297
297
return p .getByteValue ();
298
298
case JsonTokenId .ID_START_ARRAY :
299
299
return (Byte ) _deserializeFromArray (p , ctxt );
300
+ // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
301
+ case JsonTokenId .ID_START_OBJECT :
302
+ text = ctxt .extractScalarFromObject (p , this , _valueClass );
303
+ break ;
300
304
default :
301
305
return (Byte ) ctxt .handleUnexpectedToken (getValueType (ctxt ), p );
302
306
}
@@ -379,11 +383,16 @@ protected Short _parseShort(JsonParser p, DeserializationContext ctxt)
379
383
return (Short ) getNullValue (ctxt );
380
384
case JsonTokenId .ID_NUMBER_INT :
381
385
return p .getShortValue ();
386
+ // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
387
+ case JsonTokenId .ID_START_OBJECT :
388
+ text = ctxt .extractScalarFromObject (p , this , _valueClass );
389
+ break ;
382
390
case JsonTokenId .ID_START_ARRAY :
383
391
return (Short )_deserializeFromArray (p , ctxt );
384
392
default :
385
393
return (Short ) ctxt .handleUnexpectedToken (getValueType (ctxt ), p );
386
394
}
395
+
387
396
// Rest of the processing is for coercion from String
388
397
final CoercionAction act = _checkFromStringCoercion (ctxt , text );
389
398
if (act == CoercionAction .AsNull ) {
@@ -463,11 +472,16 @@ public Character deserialize(JsonParser p, DeserializationContext ctxt)
463
472
_verifyNullForPrimitive (ctxt );
464
473
}
465
474
return (Character ) getNullValue (ctxt );
475
+ // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
476
+ case JsonTokenId .ID_START_OBJECT :
477
+ text = ctxt .extractScalarFromObject (p , this , _valueClass );
478
+ break ;
466
479
case JsonTokenId .ID_START_ARRAY :
467
480
return _deserializeFromArray (p , ctxt );
468
481
default :
469
482
return (Character ) ctxt .handleUnexpectedToken (getValueType (ctxt ), p );
470
483
}
484
+
471
485
if (text .length () == 1 ) {
472
486
return Character .valueOf (text .charAt (0 ));
473
487
}
@@ -551,6 +565,10 @@ protected final Integer _parseInteger(JsonParser p, DeserializationContext ctxt)
551
565
return p .getIntValue ();
552
566
case JsonTokenId .ID_NULL : // null fine for non-primitive
553
567
return (Integer ) getNullValue (ctxt );
568
+ // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
569
+ case JsonTokenId .ID_START_OBJECT :
570
+ text = ctxt .extractScalarFromObject (p , this , _valueClass );
571
+ break ;
554
572
case JsonTokenId .ID_START_ARRAY :
555
573
return (Integer ) _deserializeFromArray (p , ctxt );
556
574
default :
@@ -621,6 +639,10 @@ protected final Long _parseLong(JsonParser p, DeserializationContext ctxt)
621
639
return (Long ) getNullValue (ctxt );
622
640
case JsonTokenId .ID_NUMBER_INT :
623
641
return p .getLongValue ();
642
+ // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
643
+ case JsonTokenId .ID_START_OBJECT :
644
+ text = ctxt .extractScalarFromObject (p , this , _valueClass );
645
+ break ;
624
646
case JsonTokenId .ID_START_ARRAY :
625
647
return (Long ) _deserializeFromArray (p , ctxt );
626
648
default :
@@ -681,11 +703,16 @@ protected final Float _parseFloat(JsonParser p, DeserializationContext ctxt)
681
703
case JsonTokenId .ID_NUMBER_FLOAT :
682
704
case JsonTokenId .ID_NUMBER_INT : // safe coercion
683
705
return p .getFloatValue ();
706
+ // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
707
+ case JsonTokenId .ID_START_OBJECT :
708
+ text = ctxt .extractScalarFromObject (p , this , _valueClass );
709
+ break ;
684
710
case JsonTokenId .ID_START_ARRAY :
685
711
return _deserializeFromArray (p , ctxt );
686
712
default :
687
- return (Float ) ctxt .handleUnexpectedToken (_valueClass , p );
713
+ return (Float ) ctxt .handleUnexpectedToken (getValueType ( ctxt ) , p );
688
714
}
715
+
689
716
final CoercionAction act = _checkFromStringCoercion (ctxt , text );
690
717
if (act == CoercionAction .AsNull ) {
691
718
return (Float ) getNullValue (ctxt );
@@ -773,10 +800,14 @@ protected final Double _parseDouble(JsonParser p, DeserializationContext ctxt) t
773
800
case JsonTokenId .ID_NUMBER_FLOAT :
774
801
case JsonTokenId .ID_NUMBER_INT : // safe coercion
775
802
return p .getDoubleValue ();
803
+ // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
804
+ case JsonTokenId .ID_START_OBJECT :
805
+ text = ctxt .extractScalarFromObject (p , this , _valueClass );
806
+ break ;
776
807
case JsonTokenId .ID_START_ARRAY :
777
808
return _deserializeFromArray (p , ctxt );
778
809
default :
779
- return (Double ) ctxt .handleUnexpectedToken (_valueClass , p );
810
+ return (Double ) ctxt .handleUnexpectedToken (getValueType ( ctxt ) , p );
780
811
}
781
812
782
813
// Coercion from String most complicated
@@ -865,10 +896,14 @@ public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOEx
865
896
}
866
897
}
867
898
return p .getNumberValue ();
899
+ // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
900
+ case JsonTokenId .ID_START_OBJECT :
901
+ text = ctxt .extractScalarFromObject (p , this , _valueClass );
902
+ break ;
868
903
case JsonTokenId .ID_START_ARRAY :
869
904
return _deserializeFromArray (p , ctxt );
870
905
default :
871
- return ctxt .handleUnexpectedToken (_valueClass , p );
906
+ return ctxt .handleUnexpectedToken (getValueType ( ctxt ) , p );
872
907
}
873
908
874
909
// Textual values are more difficult... not parsing itself, but figuring
@@ -989,11 +1024,15 @@ public BigInteger deserialize(JsonParser p, DeserializationContext ctxt) throws
989
1024
return (BigInteger ) getEmptyValue (ctxt );
990
1025
}
991
1026
return p .getDecimalValue ().toBigInteger ();
1027
+ // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
1028
+ case JsonTokenId .ID_START_OBJECT :
1029
+ text = ctxt .extractScalarFromObject (p , this , _valueClass );
1030
+ break ;
992
1031
case JsonTokenId .ID_START_ARRAY :
993
1032
return _deserializeFromArray (p , ctxt );
994
1033
default :
995
1034
// String is ok too, can easily convert; otherwise, no can do:
996
- return (BigInteger ) ctxt .handleUnexpectedToken (_valueClass , p );
1035
+ return (BigInteger ) ctxt .handleUnexpectedToken (getValueType ( ctxt ) , p );
997
1036
}
998
1037
999
1038
final CoercionAction act = _checkFromStringCoercion (ctxt , text );
@@ -1047,10 +1086,14 @@ public BigDecimal deserialize(JsonParser p, DeserializationContext ctxt)
1047
1086
case JsonTokenId .ID_STRING :
1048
1087
text = p .getText ();
1049
1088
break ;
1089
+ // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
1090
+ case JsonTokenId .ID_START_OBJECT :
1091
+ text = ctxt .extractScalarFromObject (p , this , _valueClass );
1092
+ break ;
1050
1093
case JsonTokenId .ID_START_ARRAY :
1051
1094
return _deserializeFromArray (p , ctxt );
1052
1095
default :
1053
- return (BigDecimal ) ctxt .handleUnexpectedToken (_valueClass , p );
1096
+ return (BigDecimal ) ctxt .handleUnexpectedToken (getValueType ( ctxt ) , p );
1054
1097
}
1055
1098
1056
1099
final CoercionAction act = _checkFromStringCoercion (ctxt , text );
0 commit comments