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