public void handleRequest()

in function/java11/src/main/java/com/amazon/s3objectlambda/request/GetObjectHandler.java [35:75]


    public void handleRequest(S3ObjectLambdaEvent event, Context context) throws Exception {
        var userRequest = event.getUserRequest();
        var objectResponse = new ObjectResponse(S3_CLIENT, event);

        // Validate user request and return error if invalid
        var validationOutput = validateUserRequest(userRequest);
        if (validationOutput.isPresent()) {
            writeValidationFailedErrorResponse(validationOutput.get(), objectResponse);
            return;
        }

        // Read the original object from Amazon S3
        var presignedResponse = getS3ObjectResponse(event, userRequest);

        // Errors in the Amazon S3 response should be forwarded to the caller without invoking transformObject.
        if (presignedResponse.statusCode() >= 400) {
            objectResponse.writeS3GetObjectErrorResponse(presignedResponse);
            return;
        }

        var transformedObject = transformObjectResponse(presignedResponse.body().readAllBytes());
        if (transformedObject.getHasError()) {
            objectResponse.writeErrorResponse(transformedObject);
            return;
        }
        /*
        The most reliable way to handle Range or partNumber requests is to retrieve the full object from S3,
        transform the object, and then apply the requested Range or partNumber parameters to the transformed object.
        https://docs.aws.amazon.com/AmazonS3/latest/userguide/olap-writing-lambda.html#range-get-olap
        Handle range or partNumber if present in the request
        */
        var transformedObjectWithRange = applyRangeOrPartNumber(
                transformedObject.getObjectResponse(),
                userRequest);
        if (transformedObjectWithRange.getHasError()) {
            objectResponse.writeErrorResponse(transformedObjectWithRange);
            return;
        }

        objectResponse.writeObjectResponse(presignedResponse, transformedObjectWithRange.getObjectResponse());
    }