in core/protocols/aws-json-protocol/src/main/java/software/amazon/awssdk/protocols/json/internal/unmarshall/JsonUnmarshallingParser.java [265:316]
private Object simpleValueFor(
SdkField<?> field,
MarshallingKnownType knownType,
JsonUnmarshallerContext context,
JsonParser parser,
JsonToken lookAhead
) throws IOException {
if (lookAhead == JsonToken.VALUE_NULL) {
return null;
}
switch (knownType) {
case INTEGER:
expect(lookAhead, JsonToken.VALUE_NUMBER_INT);
return parser.getIntValue();
case LONG:
expect(lookAhead, JsonToken.VALUE_NUMBER_INT);
return parser.getLongValue();
case SHORT:
expect(lookAhead, JsonToken.VALUE_NUMBER_INT);
return parser.getShortValue();
case BYTE:
expect(lookAhead, JsonToken.VALUE_NUMBER_INT);
return parser.getByteValue();
case FLOAT:
expect(lookAhead, JsonToken.VALUE_NUMBER_INT, JsonToken.VALUE_NUMBER_FLOAT);
return parser.getFloatValue();
case DOUBLE:
expect(lookAhead, JsonToken.VALUE_NUMBER_INT, JsonToken.VALUE_NUMBER_FLOAT);
return parser.getDoubleValue();
case BIG_DECIMAL:
expect(lookAhead, JsonToken.VALUE_NUMBER_INT, JsonToken.VALUE_NUMBER_FLOAT);
return parser.getDecimalValue();
case BOOLEAN:
expect(lookAhead, JsonToken.VALUE_FALSE, JsonToken.VALUE_TRUE);
return parser.getBooleanValue();
case INSTANT:
return instantValueFor(field, parser, context, lookAhead);
case STRING:
// At least one protocol tests expects a floating number
// to be parsed as string, so we can't assert that:
// expect(lookAhead, JsonToken.VALUE_STRING);
return parser.getText();
case SDK_BYTES:
if (lookAhead == JsonToken.VALUE_EMBEDDED_OBJECT) {
return SdkBytes.fromByteArray((byte[]) parser.getEmbeddedObject());
}
expect(lookAhead, JsonToken.VALUE_STRING);
return SdkBytes.fromByteArray(BinaryUtils.fromBase64(parser.getText()));
default:
throw new JsonParseException("unexpected token, expecting token for: " + knownType + ", got: " + lookAhead);
}
}