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
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.
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>
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
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>
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>
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>
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>
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!