Search code examples
javaamazon-web-servicesamazon-sqsnoclassdeffounderrorfasterxml

AWS SQS: java.lang.NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonMerge?


I am trying to a message to SQS in my Java code as follows:

public void pushToSQS(){

    String queueURL = "https://sqs.us-east-1.amazonaws.com/205135634997/myQueue.fifo";
    
    try {

        final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();

        sqs.sendMessage(new SendMessageRequest(queueURL,
                "test message"));

    } catch (final AmazonServiceException e) {
        log.error("Error: " + e.getMessage());
    }
}

However at line: final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();

I get the error:

java.lang.NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonMerge
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.annotation.JsonMerge

I have added the following to my pom.xml:

<dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-models</artifactId>
            <version>1.11.86</version>
        </dependency>

Below are all the jackson dependencies in the project: enter image description here

In mvn dependency tree I can see:

+- org.jboss.resteasy:resteasy-multipart-provider:jar:3.0.19.Final:provided
[INFO] |  +- org.jboss.resteasy:resteasy-client:jar:3.0.19.Final:provided
[INFO] |  +- org.jboss.resteasy:resteasy-jaxb-provider:jar:2.3.5.Final:provided
[INFO] |  |  \- com.sun.xml.bind:jaxb-impl:jar:2.2.5.jboss-1:provided
[INFO] |  |     +- com.sun.istack:istack-commons-runtime:jar:2.6.1:provided
[INFO] |  |     \- com.sun.xml.txw2:txw2:jar:20110809:provided
[INFO] |  +- com.sun.mail:javax.mail:jar:1.5.5:provided
[INFO] |  \- org.apache.james:apache-mime4j:jar:0.6:provided
[INFO] \- org.jboss.resteasy:resteasy-jackson2-provider:jar:3.0.19.Final:provided
[INFO]    +- com.fasterxml.jackson.core:jackson-core:jar:2.6.3:provided
[INFO]    +- com.fasterxml.jackson.core:jackson-databind:jar:2.6.3:provided
[INFO]    +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.3:provided
[INFO]    \- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.6.3:provided
[INFO]       +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.6.3:provided
[INFO]       \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.6.3:provided


[INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.9.6:compile

What is causing this error?


Solution

  • Looks like you have jackson twice. Consider this:

    +- org.jboss.resteasy:resteasy-multipart-provider:jar:3.0.19.Final:provided
    [INFO] \- org.jboss.resteasy:resteasy-jackson2-provider:jar:3.0.19.Final:provided
    [INFO]    +- com.fasterxml.jackson.core:jackson-core:jar:2.6.3:provided
    [INFO]    +- com.fasterxml.jackson.core:jackson-databind:jar:2.6.3:provided
    [INFO]    +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.3:provided
    [INFO]    \- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.6.3:provided
    [INFO]       +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.6.3:provided
    [INFO]       \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.6.3:provided
    

    and this:

    [INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.9.6:compile
    

    Please drop the top level dependency to com.fasterxml.jackson.core:jackson-databind:jar:2.9.6 and see if it works.