Библиотеки зависимостей AWS SQS и SES влияют друг на друга - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь использовать импорт из SES и SQS одновременно, но комбинация вызывает ошибку с методом .withBody.Я предполагаю, что это связано с зависимостями, но они в последней версии.

Ошибка: (116,54) Java: несовместимые типы: com.amazonaws.services.simpleemail.model.Body не может быть преобразованв java.lang.String

import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
import com.amazonaws.services.sqs.model.Message;
import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClientBuilder;
import com.amazonaws.services.simpleemail.model.*;

public void email(S3Event event, Person person, Boolean error) {

    ObjectMapper mapper = new ObjectMapper();
    String emailText = null;
    if (error) {
        emailText = "Error! No image in file!";
    } else {
        try {
            emailText = mapper.writeValueAsString(person);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
    String key = event.getRecords().get(0).getS3().getObject().getKey();
    AmazonSimpleEmailService client =            
AmazonSimpleEmailServiceClientBuilder.standard().withRegion(Regions.EU_WEST_1).build();
    Body body = new Body().withText(new Content().withData(emailText));
    SendEmailRequest request = new SendEmailRequest().withDestination(
        new Destination().withToAddresses(person.getEmail()))
            .withMessage(new Message()
                .withBody(new Body().withHtml(new 
Content().withCharset("UTF8").withData(emailText)))
                    .withSubject(new Content()
                        .withCharset("UTF-8").withData("Message from passport service.")))
            .withSource(person.getEmail());
    client.sendEmail(request);
}

public void getBaseCodeFromSQS() {
AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();

try {
    ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest("https://sqs.eu-  
west-1.amazonaws.com/416031944655/TISFEXP-PSS-2-QUEUE");
        List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();
        for (Message message : messages) {
            LOGGER.info("MessageId:     " + message.getMessageId());
            LOGGER.info("ReceiptHandle: " + message.getReceiptHandle());
            LOGGER.info("MD5OfBody:     " + message.getMD5OfBody());
            LOGGER.info("Body:          " + message.getBody());
            for (final Map.Entry<String, String> entry : message.getAttributes().entrySet())     
            {
                LOGGER.info("Attribute - Name:  " + entry.getKey());
                LOGGER.info("Attribute - Value: " + entry.getValue());
            }
        }
    } catch (Exception e) {
        LOGGER.error(e);
    }
}

<dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-sqs</artifactId>
        <version>1.11.634</version>
    </dependency>

    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>amazon-sqs-java-messaging-lib</artifactId>
        <version>1.0.8</version>
        <type>jar</type>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-ses</artifactId>
        <version>1.11.634</version>
    </dependency>

</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-bom</artifactId>
            <version>1.11.634</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

1 Ответ

1 голос
/ 20 сентября 2019

Существует класс Message, определенный в пакетах SES и SQS.Вы используете класс Message, определенный в пакете SQS.Вы должны использовать тот, который определен в пакете SES.

https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/sqs/model/Message.html

https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/simpleemail/model/Message.html

SendEmailRequest request = new SendEmailRequest().withDestination(
        new Destination().withToAddresses(person.getEmail()))
            .withMessage(new com.amazonaws.services.simpleemail.model.Message()
                .withBody(new Body().withHtml(new 
Content().withCharset("UTF8").withData(emailText)))
                    .withSubject(new Content()
                        .withCharset("UTF-8").withData("Message from passport service.")))
            .withSource(person.getEmail());

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...