web-dev-qa-db-fra.com

Le constructeur Jackson ObjectMapper () lance NoSuchMethod

J'utilise un exemple de code Jackson pour désérialiser un POJO:

ObjectMapper m = new ObjectMapper();

Cette ligne renvoie une NoSuchMethodError:

Exception in thread "main" Java.lang.NoSuchMethodError: org.codehaus.jackson.type.JavaType.<init>(Ljava/lang/Class;)V
    at org.codehaus.jackson.map.type.TypeBase.<init>(TypeBase.Java:15)
    at org.codehaus.jackson.map.type.SimpleType.<init>(SimpleType.Java:45)
    at org.codehaus.jackson.map.type.SimpleType.<init>(SimpleType.Java:40)
    at org.codehaus.jackson.map.type.TypeBindings.<clinit>(TypeBindings.Java:18)
    at org.codehaus.jackson.map.type.TypeFactory._fromType(TypeFactory.Java:525)
    at org.codehaus.jackson.map.type.TypeFactory.type(TypeFactory.Java:61)
    at org.codehaus.jackson.map.ObjectMapper.<clinit>(ObjectMapper.Java:179)
    at com.me.util.ctrl.BillingJobStatus.fromJson(BillingJobStatus.Java:37)

Je ne comprends pas

23
Mojo

Je suppose que vos JAR Jackson ne sont pas synchronisés. La classe JavaType est dans le jackson-core JAR et la classe ObjectMapper est dans jackson-mapper.

Assurez-vous qu'il s'agit de la même version.

28
skaffman

J'ai eu le même problème. Le pot de base était de 1,7,1 tandis que le mappeur était de 1,8,1. Remarque: Pour résoudre ce problème pour maven, j'ai ajouté une exclusion et baissé la version appropriée.

        <exclusions>
            <exclusion>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-mapper-asl</artifactId>
            </exclusion>
        </exclusions>
5
Jeff

L'astuce consiste à exclure jackson des dépendances qui l'utilisent.

Pour vérifier les dépendances qui l'importent, vous pouvez utiliser la commande maven suivante:

mvn dependency:tree -Dincludes=org.codehaus.jackson

5
wild_nothing

Dans mon cas, c'est le sdk amazonaws qui a causé cela. L'utilisation de l'exclusion pour jackson-mapper-asl n'a pas fonctionné mais l'utilisation d'une exclusion pour core et mapper a:

    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-Java-sdk</artifactId>
        <version>1.3.13</version>
        <exclusions>
            <exclusion>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-core-asl</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-mapper-asl</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
3
user1084563

Dans mon cas, cela était dû à la bibliothèque yammer-metrics, y compris une ancienne version de jackson.

<dependency>
  <groupId>com.yammer.metrics</groupId>
  <artifactId>metrics-servlet</artifactId>
  <version>2.1.2</version>
    <exclusions>
        <exclusion>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
        </exclusion>
    </exclusions>
</dependency>
3
Pratik Khadloya

En travaillant sur Hadoop, j'ai éliminé cette erreur en définissant les exclusions suivantes

<dependency>
    <groupId>org.Apache.hadoop</groupId>
    <artifactId>hadoop-core</artifactId>
    <version>1.0.1</version>
    <exclusions>
        <exclusion>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
        </exclusion>
    </exclusions>   
</dependency>
2
Deepak Kenchamba

c'est à cause de @RequestBody utiliser différents pots pour différentes versions de ressort: si vous utilisez le ressort 4, vous devez ajouter des pots différents:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.4.3</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.4.3</version>
</dependency>

si vous utilisez le ressort 3, vous devez utiliser ce pot:

 <dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.5.0</version>
</dependency>
1
abhishek ringsia

Oui, toute personne confrontée à ce problème doit enquêter définitivement sur les dépendances avec

mvn dependency:tree -Dincludes=org.codehaus.jackson

Dans mon cas, j'avais une dépendance jackson sur Atmosphere-Socket-io:

<dependency>
        <groupId>org.atmosphere</groupId>
        <artifactId>atmosphere-socketio</artifactId>
        <version>2.2.1</version>
        <exclusions>
            <exclusion>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-mapper-lgpl</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-core-lgpl</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

Il m'a fallu plusieurs heures pour retrouver cela, merci à tous les gars pour les solutions ci-dessus qui m'ont inspiré! Continuez votre bon travail!

0
qgicup