Bằng Rikimaru
Bằng Rikimaru

Reputation: 1595

Cannot use XmlMapper (Jackson-dataformat-xml) in Spring boot, error: requiresPropertyOrdering()Z

I've used Spring Boot version 1.5.2 with Maven default pom.xml

...
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.2.RELEASE</version>
</parent>
...

Because Spring Boot does not have XmlMapper from Maven: jackson-dataformat-xml, so I added this dependency in pom.xml

    <dependency>
      <groupId>com.fasterxml.jackson.dataformat</groupId>
      <artifactId>jackson-dataformat-xml</artifactId>
      <version>2.8.7</version>
    </dependency>

and check the Jackson dependencies for project, all of them have same version 2.8.7 (newest).

    mvn dependency:tree -Dincludes=com.fasterxml.jackson.core
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.10:tree (default-cli) @ demo ---
[INFO] com.example:demo:jar:0.0.1-SNAPSHOT
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:1.5.2.RELEASE:compile
[INFO] |  \- com.fasterxml.jackson.core:jackson-databind:jar:2.8.7:compile
[INFO] +- com.fasterxml.jackson.dataformat:jackson-dataformat-xml:jar:2.8.7:compile
[INFO] |  \- com.fasterxml.jackson.core:jackson-core:jar:2.8.7:compile
[INFO] \- com.fasterxml.jackson.core:jackson-annotations:jar:2.8.7:compile

And when I run the application, it cannot start as there is an error in Spring Boot for NoSuchMethod found.

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.web.filter.OrderedHttpPutFormContentFilter]: Factory method 'httpPutFormContentFilter' threw exception; nested exception is java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    ... 26 common frames omitted
Caused by: java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z
    at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:564) ~[jackson-databind-2.8.7.jar:2.8.7]
    at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:474) ~[jackson-databind-2.8.7.jar:2.8.7]
    at org.springframework.http.converter.json.Jackson2ObjectMapperBuilder.build(Jackson2ObjectMapperBuilder.java:588) ~[spring-web-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.<init>(MappingJackson2HttpMessageConverter.java:57) ~[spring-web-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter.<init>(AllEncompassingFormHttpMessageConverter.java:61) ~[spring-web-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.web.filter.HttpPutFormContentFilter.<init>(HttpPutFormContentFilter.java:63) ~[spring-web-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.boot.web.filter.OrderedHttpPutFormContentFilter.<init>(OrderedHttpPutFormContentFilter.java:29) ~[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]

Any idea for this problem? I want to use XmlMapper from Jackson library to deserialize/serialize XML string to object and vice-versa (not from the HTTPRequest but internally).

Here is the full pom.xml for Maven https://pastebin.com/LMujJY7e

Upvotes: 0

Views: 20176

Answers (3)

Arindam Dutta
Arindam Dutta

Reputation: 21

So in my case it was a yaml depndency

  <dependency>
      <groupId>com.fasterxml.jackson.dataformat</groupId>
      <artifactId>jackson-dataformat-yaml</artifactId>
      <version>2.8.7</version>  // change to latest version bro
    </dependency>

and I changed to

  <dependency>
      <groupId>com.fasterxml.jackson.dataformat</groupId>
      <artifactId>jackson-dataformat-xml</artifactId>
      <version>2.8.7</version>   // change to latest version bro  
    </dependency>

// change to latest version bro -> you can change to latest version by looking into the maven website

Upvotes: 0

Ragas
Ragas

Reputation: 147

Please try updating the jackson bom version in parent pom file as 2.10.4. This resolved the issue for me.

<jackson-bom.version>2.10.4</jackson-bom.version>

Upvotes: 0

Alexey Sviridov
Alexey Sviridov

Reputation: 3510

I think you have run into a problem of version compatibility of dependencies.

I use spring boot 1.5.2 with jackson-dataformat-xml without any problems.

This is part of my build.gradle

ext {
    springBootVersion = '1.5.2.RELEASE'
}

compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.8.5'

hope it helps

Upvotes: 4

Related Questions