public ReceiveMessageResponse receiveMessage()

in src/main/java/com/amazon/sqs/javamessaging/AmazonSQSExtendedClient.java [307:362]


    public ReceiveMessageResponse receiveMessage(ReceiveMessageRequest receiveMessageRequest) {
        //TODO: Clone request since it's modified in this method and will cause issues if the client reuses request object.
        if (receiveMessageRequest == null) {
            String errorMessage = "receiveMessageRequest cannot be null.";
            LOG.error(errorMessage);
            throw SdkClientException.create(errorMessage);
        }

        ReceiveMessageRequest.Builder receiveMessageRequestBuilder = receiveMessageRequest.toBuilder();
        appendUserAgent(receiveMessageRequestBuilder);

        if (!clientConfiguration.isPayloadSupportEnabled()) {
            return super.receiveMessage(receiveMessageRequestBuilder.build());
        }
        //Remove before adding to avoid any duplicates
        List<String> messageAttributeNames = new ArrayList<>(receiveMessageRequest.messageAttributeNames());
        messageAttributeNames.removeAll(RESERVED_ATTRIBUTE_NAMES);
        messageAttributeNames.addAll(RESERVED_ATTRIBUTE_NAMES);
        receiveMessageRequestBuilder.messageAttributeNames(messageAttributeNames);
        receiveMessageRequest = receiveMessageRequestBuilder.build();

        ReceiveMessageResponse receiveMessageResponse = super.receiveMessage(receiveMessageRequest);
        ReceiveMessageResponse.Builder receiveMessageResponseBuilder = receiveMessageResponse.toBuilder();

        List<Message> messages = receiveMessageResponse.messages();
        List<Message> modifiedMessages = new ArrayList<>(messages.size());
        for (Message message : messages) {
            Message.Builder messageBuilder = message.toBuilder();

            // for each received message check if they are stored in S3.
            Optional<String> largePayloadAttributeName = getReservedAttributeNameIfPresent(message.messageAttributes());
            if (largePayloadAttributeName.isPresent()) {
                String largeMessagePointer = message.body();
                largeMessagePointer = largeMessagePointer.replace("com.amazon.sqs.javamessaging.MessageS3Pointer", "software.amazon.payloadoffloading.PayloadS3Pointer");

                messageBuilder.body(payloadStore.getOriginalPayload(largeMessagePointer));

                // remove the additional attribute before returning the message
                // to user.
                Map<String, MessageAttributeValue> messageAttributes = new HashMap<>(message.messageAttributes());
                messageAttributes.keySet().removeAll(RESERVED_ATTRIBUTE_NAMES);
                messageBuilder.messageAttributes(messageAttributes);

                // Embed s3 object pointer in the receipt handle.
                String modifiedReceiptHandle = embedS3PointerInReceiptHandle(
                        message.receiptHandle(),
                        largeMessagePointer);

                messageBuilder.receiptHandle(modifiedReceiptHandle);
            }
            modifiedMessages.add(messageBuilder.build());
        }

        receiveMessageResponseBuilder.messages(modifiedMessages);
        return receiveMessageResponseBuilder.build();
    }