Конструктор Jackson ObjectMapper () выбрасывает NoSuchMethod - PullRequest
23 голосов
/ 23 февраля 2011

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

Я не понимаю

Ответы [ 9 ]

28 голосов
/ 23 февраля 2011

Полагаю, ваши JAR-файлы Джексона не синхронизированы. Класс JavaType находится в jackson-core JAR, а класс ObjectMapper находится в jackson-mapper.

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

5 голосов
/ 28 мая 2014

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

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

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

5 голосов
/ 23 июня 2011

У меня была такая же проблема.Основной сосуд был 1.7.1, а картограф - 1.8.1.Примечание: чтобы исправить это для maven, я добавил исключение и вытащил нужную версию.

        <exclusions>
            <exclusion>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-mapper-asl</artifactId>
            </exclusion>
        </exclusions>
3 голосов
/ 26 февраля 2013

В моем случае это был amazonaws sdk, который вызвал это. Использование только исключения для jackson-mapper-asl не сработало, но использование исключения для core и mapper сделало:

    <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 голосов
/ 15 февраля 2013

В моем случае это было связано с библиотекой yammer-метрик, включая более старую версию Джексона.

<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>
2 голосов
/ 03 сентября 2012

Работая над 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>
1 голос
/ 15 октября 2015

из-за @RequestBody используют разные банки для разных весенних версий: при использовании пружины 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>

при использовании пружины 3 необходимо использовать эту банку:

 <dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.5.0</version>
</dependency>
0 голосов
/ 31 марта 2017

Я столкнулся с этой проблемой при переносе моего WebApp с Tomcat 6 на Tomcat 8. На Tomcat6 и Tomcat7 мое WebApp запустилось бы нормально, но на Tomcat8 я получил бы это исключение (кажется, что T6 и T7 загружают классы по алфавиту, но T8 не't - https://stackoverflow.com/a/26642798/1864614).

Проблема заключалась в том, что у меня было 2 версии класса

org.codehaus.jackson.map.ObjectMapper
В ответ на @wild_nothing я проверил дерево зависимостей, чтобы вывести список всех зависимостей на org.codehaus.джексон
В моем случае проблема заключалась в том, что у меня было несколько версий библиотек, предоставляющих этот класс:
  • org.codehaus.jackson: jackson-mapper-lgpl: jar: 1.5.0
  • org.codehaus.jackson: jackson-core-lgpl: jar: 1.5.0
  • org.codehaus.jackson: jackson-mapper-asl: jar: 1.8.2
  • org.codehaus.jackson: jackson-core-asl: jar: 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
0 голосов
/ 24 марта 2015

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

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>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...