Ответ 1
Я предполагаю, что ваши Jackson JAR не синхронизированы. Класс JavaType
находится в jackson-core
JAR, а класс ObjectMapper
находится в jackson-mapper
.
Убедитесь, что они имеют одну и ту же версию.
Я использую образец кода Джексона для десериализации POJO:
ObjectMapper m = new ObjectMapper();
Эта строка генерирует 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)
Я не понимаю его
Я предполагаю, что ваши Jackson JAR не синхронизированы. Класс JavaType
находится в jackson-core
JAR, а класс ObjectMapper
находится в jackson-mapper
.
Убедитесь, что они имеют одну и ту же версию.
У меня была такая же проблема. Ядро ядра составляло 1,7,1, тогда как картограф составлял 1,8,1. Примечание. Чтобы исправить это для maven, я добавил исключение и вытащил нужную версию.
<exclusions>
<exclusion>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
</exclusion>
</exclusions>
Хитрость здесь заключается в том, чтобы исключить джексон из зависимостей, которые его используют.
Чтобы проверить, какие зависимости импортируют его, вы можете использовать следующую команду maven:
mvn dependency:tree -Dincludes=org.codehaus.jackson
В моем случае это было связано с библиотекой ярлыков, включая более старую версию 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>
В моем случае это вызвало это азамоновское sdk. Использование только исключения для jackson-mapper-asl не сработало, но с использованием исключения для ядра и картографа:
<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>
Во время работы над Hadoop я устранил эту ошибку, установив следующие исключения
<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>
это beacuse @RequestBody использует разные банки для разных версий spring: если использовать spring 4, чем добавлять разные банки:
<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>
если использование spring 3 должно использовать эту банку:
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.5.0</version>
</dependency>
Да, любой, кто сталкивается с этой проблемой, он должен определенно исследовать зависимости с помощью
mvn dependency:tree -Dincludes=org.codehaus.jackson
В моем случае у меня была зависимость Джексона от 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>
Мне потребовалось несколько часов, чтобы проследить это, спасибо всем парням за вышеупомянутые решения, которые вдохновили меня! Следите за хорошей работой!
Я столкнулся с этой проблемой при переносе моего WebApp из Tomcat 6 в Tomcat 8. На Tomcat6 и Tomcat7 мой WebApp начнется просто отлично, но на Tomcat8 я получаю это исключение (кажется, что T6 и T7 загружают классы по алфавиту, но T8 не делает - fooobar.com/info/198717/...).
Проблема заключалась в том, что у меня было 2 версии класса
org.codehaus.jackson.map.ObjectMapperКак ответил @wild_nothing, я проверил зависимость дерева, чтобы отобразить все зависимости от org.codehaus.jackson
Мое решение состояло в том, чтобы исключить более старые версии (1.5.0) и оставить версию 1.8.2
<dependency>
<groupId>cfm.foo</groupId>
<artifactId>jive</artifactId>
<exclusions>
<exclusion>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-lgpl</artifactId>
</exclusion>
<exclusion>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-lgpl</artifactId>
</exclusion>
</exclusions>
</dependency>