简体   繁体   English

AWS SQS 和 SES 依赖库相互影响

[英]AWS SQS and SES dependency libraries effect each other

I'm trying to use imports from SES and SQS at the same time but the combination causes an error to be thrown with the.withBody method.我正在尝试同时使用来自 SES 和 SQS 的导入,但是这种组合会导致使用 .withBody 方法引发错误。 I'm guessing it's to do with the dependencies but they are at the latest version.我猜这与依赖关系有关,但它们是最新版本。

Error:(116,54) java:incompatible types:com.amazonaws.services.simpleemail.model.Body cannot be converted to java.lang.String Error:(116,54) java:incompatible types:com.amazonaws.services.simpleemail.model.Body cannot be converted to 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>

There is a Message class defined in both SES and SQS packages. SES 和 SQS 包中都定义了一条消息 class。 You are using the Message class defined in the SQS package.您正在使用 SQS package 中定义的消息 class。 You should use the one defined in SES package instead.您应该改用 SES package 中定义的那个。

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/sqs/model/Message.html

https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/simpleemail/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());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM