private Optional fetchDlqUrl()

in powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/internal/BatchContext.java [175:200]


    private Optional<String> fetchDlqUrl(Map<SQSMessage, Exception> nonRetryableMessageToException) {
        return nonRetryableMessageToException.keySet().stream()
                .findFirst()
                .map(sqsMessage -> QUEUE_ARN_TO_DLQ_URL_MAPPING.computeIfAbsent(sqsMessage.getEventSourceArn(), sourceArn -> {
                    String queueUrl = url(sourceArn);

                    GetQueueAttributesResponse queueAttributes = client.getQueueAttributes(GetQueueAttributesRequest.builder()
                            .attributeNames(QueueAttributeName.REDRIVE_POLICY)
                            .queueUrl(queueUrl)
                            .build());

                    return ofNullable(queueAttributes.attributes().get(QueueAttributeName.REDRIVE_POLICY))
                            .map(policy -> {
                                try {
                                    return SqsUtils.objectMapper().readTree(policy);
                                } catch (JsonProcessingException e) {
                                    LOG.debug("Unable to parse Re drive policy for queue {}. Even if DLQ exists, failed messages will be send back to main queue.", queueUrl, e);
                                    return null;
                                }
                            })
                            .map(node -> node.get("deadLetterTargetArn"))
                            .map(JsonNode::asText)
                            .map(this::url)
                            .orElse(null);
                }));
    }