Class Not found errors in dependencies for AWS simple email services

49 views Asked by At

I am using Java. I am using an "assume role" for sending email. When the below code is deployed, a NoClassDefFoundError is thrown.

\[2024-01-08 09:57:14,179\] ERROR {org.apache.synapse.config.xml.ClassMediatorFactory} - Error in instantiating class : org.capgemini.ciap.core.CoreJSONPayloadUtils 
java.lang.NoClassDefFoundError: software/amazon/awssdk/auth/credentials/AwsCredentialsProvider 
at java.base/java.lang.Class.getDeclaredConstructors0(Native Method) 
at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3137) 
at java.base/java.lang.Class.getConstructor0(Class.java:3342) 
at java.base/java.lang.Class.newInstance(Class.java:556) 
at org.apache.synapse.config.xml.ClassMediatorFactory.createSpecificMediator(ClassMediatorFactory.java:110)

This is my java code.

    import software.amazon.awssdk.auth.credentials.*;
    import software.amazon.awssdk.regions.Region;
    import software.amazon.awssdk.services.ses.SesClient;
    import software.amazon.awssdk.services.ses.model.*;
    import software.amazon.awssdk.services.sts.StsClient;
    import software.amazon.awssdk.services.sts.model.AssumeRoleRequest;
    import software.amazon.awssdk.services.sts.model.StsException;
    import software.amazon.awssdk.services.sts.model.AssumeRoleResponse;


    import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
    import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
    import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
    import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
    import software.amazon.awssdk.services.sts.model.Credentials;




    @SuppressWarnings("deprecation")
    static void awsMailService(MessageContext context) {

    context.setProperty("ERROR_CODE", "");
    log.info("inside SendSESMail Java class");

    
    log.info(">> AWS_ROLE_ARN: " + context.getProperty("AWS_ROLE_ARN"));
    log.info(">> AWS_ROLE_SESSION_NAME: " + context.getProperty("AWS_ROLE_SESSION_NAME"));
    log.info(">> AWS_WEB_IDENTITY_TOKEN_FILE: " +   context.getProperty("AWS_WEB_IDENTITY_TOKEN_FILE"));


    try {

        String roleArn = context.getProperty("AWS_ROLE_ARN").toString();
        String roleSessionName = context.getProperty("AWS_ROLE_SESSION_NAME").toString();
        
        
        Region region = Region.US_EAST_1;

        
        StsClient stsClient = StsClient.builder()
            .region(region)
            .credentialsProvider(ProfileCredentialsProvider.create())
            .build();


        Credentials myCreds = assumeGivenRole(stsClient, roleArn, roleSessionName);

        AwsSessionCredentials awsCreds = AwsSessionCredentials.create(myCreds.accessKeyId(), myCreds.secretAccessKey(), roleSessionName);

        
        SesClient sesClient = SesClient.builder()
            .region(region)
            .credentialsProvider(StaticCredentialsProvider.create(awsCreds))
            .build();

        
        String sender = "xxx.com";
        String recipient = "xxxx";

        
        Content subject = Content.builder().data("Test Email").build();
        Content body = Content.builder().data("This is a test email").build();
        Body emailBody = Body.builder().text(body).build();
        Message message = Message.builder().subject(subject).body(emailBody).build();

        
        SendEmailRequest sendEmailRequest = SendEmailRequest.builder()
            .source(sender)
            .destination(Destination.builder().toAddresses(recipient).build())
            .message(message)
            .build();

        SendEmailResponse sendEmailResponse = sesClient.sendEmail(sendEmailRequest);

        
        System.out.println("Email sent! Message ID: " + sendEmailResponse.messageId());
    } catch (Throwable th) {
        log.error("The email was not sent. Error message in java code: ", th);
        context.setProperty("ERROR_CODE", "500");
        context.setProperty("ERROR_MESSAGE", th.getMessage());
        context.setProperty("ERROR_DETAIL", "Error in java code: awsMailService");
    }

    }

    public static Credentials assumeGivenRole(StsClient stsClient, String roleArn, String        roleSessionName) {
    AssumeRoleRequest roleRequest = AssumeRoleRequest.builder()
        .roleArn(roleArn)
        .roleSessionName(roleSessionName)
        .build();

    AssumeRoleResponse roleResponse = stsClient.assumeRole(roleRequest);
    Credentials myCreds = roleResponse.credentials();

    return myCreds;
    }
0

There are 0 answers