Подтвердить что ты не робот

Конструктор Jackson ObjectMapper() генерирует NoSuchMethod

Я использую образец кода Джексона для десериализации 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)

Я не понимаю его

4b9b3361

Ответ 1

Я предполагаю, что ваши Jackson JAR не синхронизированы. Класс JavaType находится в jackson-core JAR, а класс ObjectMapper находится в jackson-mapper.

Убедитесь, что они имеют одну и ту же версию.

Ответ 2

У меня была такая же проблема. Ядро ядра составляло 1,7,1, тогда как картограф составлял 1,8,1. Примечание. Чтобы исправить это для maven, я добавил исключение и вытащил нужную версию.

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

Ответ 3

Хитрость здесь заключается в том, чтобы исключить джексон из зависимостей, которые его используют.

Чтобы проверить, какие зависимости импортируют его, вы можете использовать следующую команду maven:

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

Ответ 4

В моем случае это было связано с библиотекой ярлыков, включая более старую версию 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>

Ответ 5

В моем случае это вызвало это азамоновское 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>

Ответ 6

Во время работы над 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>

Ответ 7

это 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>

Ответ 8

Да, любой, кто сталкивается с этой проблемой, он должен определенно исследовать зависимости с помощью

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>

Мне потребовалось несколько часов, чтобы проследить это, спасибо всем парням за вышеупомянутые решения, которые вдохновили меня! Следите за хорошей работой!

Ответ 9

Я столкнулся с этой проблемой при переносе моего 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

В моем случае проблема заключалась в том, что у меня было несколько версий библиотек, которые предоставляли этот класс:
  • org.codehaus.jackson: джексон-картостроитель-LGPL: банка: 1.5.0
  • org.codehaus.jackson: джексон-ядро-LGPL: банка: 1.5.0
  • org.codehaus.jackson: jackson-mapper-asl: jar: 1.8.2
  • org.codehaus.jackson: джексон-ядро-над уровнем моря: баночка: 1.8.2

Мое решение состояло в том, чтобы исключить более старые версии (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>
  • в этом случае jive зависела от более старой версии версии 1.5.0