diff --git a/json/pom.xml b/json/pom.xml index e19c8f024..4bba03765 100644 --- a/json/pom.xml +++ b/json/pom.xml @@ -56,6 +56,18 @@ com.fasterxml.jackson.core jackson-databind + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + + + com.fasterxml.jackson.datatype + jackson-datatype-joda + + + com.fasterxml.jackson.datatype + jackson-datatype-jdk8 + com.fasterxml.jackson.module jackson-module-kotlin @@ -64,6 +76,10 @@ com.fasterxml.jackson.module jackson-module-guice + + com.fasterxml.jackson.module + jackson-module-parameter-names + org.threeten diff --git a/json/src/main/kotlin/com/trib3/json/ObjectMapperProvider.kt b/json/src/main/kotlin/com/trib3/json/ObjectMapperProvider.kt index e57fe48e4..745bc08c3 100644 --- a/json/src/main/kotlin/com/trib3/json/ObjectMapperProvider.kt +++ b/json/src/main/kotlin/com/trib3/json/ObjectMapperProvider.kt @@ -6,12 +6,20 @@ import com.fasterxml.jackson.databind.DeserializationFeature import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.SerializationFeature import com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module +import com.fasterxml.jackson.datatype.joda.JodaModule +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import com.fasterxml.jackson.module.guice.GuiceAnnotationIntrospector import com.fasterxml.jackson.module.guice.GuiceInjectableValues import com.fasterxml.jackson.module.kotlin.registerKotlinModule +import com.fasterxml.jackson.module.paramnames.ParameterNamesModule import com.google.inject.Injector import com.trib3.json.ObjectMapperProvider.Companion.OBJECT_MAPPER_MIXINS import com.trib3.json.jackson.ThreeTenExtraModule +import io.dropwizard.jackson.AnnotationSensitivePropertyNamingStrategy +import io.dropwizard.jackson.CaffeineModule +import io.dropwizard.jackson.FuzzyEnumModule +import io.dropwizard.jackson.GuavaExtrasModule import io.dropwizard.jackson.Jackson import java.util.concurrent.TimeUnit import javax.inject.Inject @@ -45,8 +53,20 @@ class ObjectMapperProvider @Inject constructor( } override fun get(): ObjectMapper { - val mapper = Jackson.newObjectMapper() - mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + // Start with a minimal mapper, then register everything from Jackson.newObjectMapper() + // EXCEPT blackbird due to a race condition issue: + // https://github.com/FasterXML/jackson-modules-base/issues/169 + val mapper = Jackson.newMinimalObjectMapper() + mapper.registerModule(GuavaExtrasModule()) + mapper.registerModule(CaffeineModule()) + mapper.registerModule(JodaModule()) + mapper.registerModule(FuzzyEnumModule()) + mapper.registerModule(ParameterNamesModule()) + mapper.registerModule(Jdk8Module()) + mapper.registerModule(JavaTimeModule()) + mapper.propertyNamingStrategy = AnnotationSensitivePropertyNamingStrategy() + + // additional leakycauldron configuration: mapper.disable(DeserializationFeature.FAIL_ON_MISSING_EXTERNAL_TYPE_ID_PROPERTY) mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) mapper.registerKotlinModule() diff --git a/parent-pom/pom.xml b/parent-pom/pom.xml index e08f35c7b..1644e37e0 100644 --- a/parent-pom/pom.xml +++ b/parent-pom/pom.xml @@ -60,7 +60,7 @@ 0.4.2 1.20.0 1.6.21 - 2.0.29 + 2.1.0 0.5.1 4.2.9 2.0.8 @@ -290,6 +290,10 @@ org.glassfish.hk2.external jakarta.inject + + jakarta.inject + jakarta.inject-api + javax.validation validation-api @@ -310,6 +314,10 @@ org.glassfish.hk2.external jakarta.inject + + jakarta.inject + jakarta.inject-api + @@ -330,6 +338,10 @@ org.glassfish.hk2.external jakarta.inject + + jakarta.inject + jakarta.inject-api + javax.xml.bind jaxb-api @@ -1307,6 +1319,8 @@ org.apache.logging.log4j:log4j-core com.google.inject.extensions:guice-multibindings com.authzee.kotlinguice4:* + + jakarta.inject:jakarta.inject-api javax.xml.bind:jaxb-api javax.annotation:javax.annotation-api