user_mda
user_mda

Reputation: 19418

Serialization errors due to jackson-databind version mismatch?

I am running into the following error

java.lang.NoSuchFieldError: WRITE_DURATIONS_AS_TIMESTAMPS
    at com.fasterxml.jackson.datatype.joda.ser.DurationSerializer.<init>(DurationSerializer.java:28)
    at com.fasterxml.jackson.datatype.joda.ser.DurationSerializer.<init>(DurationSerializer.java:25)
    at com.fasterxml.jackson.datatype.joda.JodaModule.<init>(JodaModule.java:45)

I checked to see what versions of jackson-datatype-joda are available. It appears that maven has excluded all version mismatches.

Any other reason this might cause serialization errors?

Upvotes: 6

Views: 9136

Answers (3)

Sannu
Sannu

Reputation: 1276

I had same error. I had included all jackson*2.7.0 libraries under WEB-INF/lib/ and i was still getting that error. I am using wildfly 8.2 and it had jackson 2.4.1 libraries under modules and somehow it was loading 2.4.1 jars from that location. So I had to manually upgrade them to 2.7.0 which fixed the issue. I was under impression that if I did not mention it to load jackson jars in deployment configuration file, it would not load wildfly jars. I guess I was wrong.

Upvotes: 0

sahil bansal
sahil bansal

Reputation: 218

I got it resolved by using following dependency as this dependency has overridden any other version used:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-joda</artifactId>
    <version>2.5.3</version>
</dependency>

Upvotes: 3

Ivan Hristov
Ivan Hristov

Reputation: 3186

The problem is that among the maven dependencies (mind that it could be a transitive one) you have incompatible versions of jackson-datatype-joda and jackson-databind. Incompatible in the sense that jackson-databind's SerializationFeature class is missing the WRITE_DURATIONS_AS_TIMESTAMPS field. To see what dependencies maven brings you can run the following command in the terminal (or you can use an IDE's maven plug to search and analyse the maven dependency tree):

mvn dependency:tree | grep databind

the outcome will most probably be something like:

[INFO] |  +- com.fasterxml.jackson.core:jackson-databind:jar:2.4.1:compile

The version of course can vary but the important thing is that the WRITE_DURATIONS_AS_TIMESTAMPS field is only available since version 2.5

You can exclude a transitive dependency like this:

<dependency>
  <groupId>group.id</groupId>
  <artifactId>artifact-id</artifactId>
  <version>${artifact.version}</version>
  <exclusions>
    <exclusion>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
    </exclusion>
  </exclusions>
</dependency>

If it's not a transitive dependency you need to update version of jackson-databind.

Upvotes: 10

Related Questions