1
1
/*
2
- * Copyright 2002-2016 the original author or authors.
2
+ * Copyright 2002-2019 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
@@ -599,25 +599,32 @@ public <T extends ObjectMapper> T build() {
599
599
public void configure (ObjectMapper objectMapper ) {
600
600
Assert .notNull (objectMapper , "ObjectMapper must not be null" );
601
601
602
+ Map <Object , Module > modulesToRegister = new LinkedHashMap <Object , Module >();
602
603
if (this .findModulesViaServiceLoader ) {
603
604
// Jackson 2.2+
604
- objectMapper .registerModules (ObjectMapper .findModules (this .moduleClassLoader ));
605
+ for (Module module : ObjectMapper .findModules (this .moduleClassLoader )) {
606
+ modulesToRegister .put (module .getTypeId (), module );
607
+ }
605
608
}
606
609
else if (this .findWellKnownModules ) {
607
- registerWellKnownModulesIfAvailable (objectMapper );
610
+ registerWellKnownModulesIfAvailable (modulesToRegister );
608
611
}
609
612
610
613
if (this .modules != null ) {
611
614
for (Module module : this .modules ) {
612
- // Using Jackson 2.0+ registerModule method, not Jackson 2.2+ registerModules
613
- objectMapper .registerModule (module );
615
+ modulesToRegister .put (module .getTypeId (), module );
614
616
}
615
617
}
616
618
if (this .moduleClasses != null ) {
617
- for (Class <? extends Module > module : this .moduleClasses ) {
618
- objectMapper .registerModule (BeanUtils .instantiate (module ));
619
+ for (Class <? extends Module > moduleClass : this .moduleClasses ) {
620
+ Module module = BeanUtils .instantiateClass (moduleClass );
621
+ modulesToRegister .put (module .getTypeId (), module );
619
622
}
620
623
}
624
+ // Using Jackson 2.0+ registerModule method, not Jackson 2.2+ registerModules
625
+ for (Module module : modulesToRegister .values ()) {
626
+ objectMapper .registerModule (module );
627
+ }
621
628
622
629
if (this .dateFormat != null ) {
623
630
objectMapper .setDateFormat (this .dateFormat );
@@ -719,13 +726,14 @@ else if (feature instanceof MapperFeature) {
719
726
}
720
727
721
728
@ SuppressWarnings ("unchecked" )
722
- private void registerWellKnownModulesIfAvailable (ObjectMapper objectMapper ) {
729
+ private void registerWellKnownModulesIfAvailable (Map < Object , Module > modulesToRegister ) {
723
730
// Java 7 java.nio.file.Path class present?
724
731
if (ClassUtils .isPresent ("java.nio.file.Path" , this .moduleClassLoader )) {
725
732
try {
726
- Class <? extends Module > jdk7Module = (Class <? extends Module >)
733
+ Class <? extends Module > jdk7ModuleClass = (Class <? extends Module >)
727
734
ClassUtils .forName ("com.fasterxml.jackson.datatype.jdk7.Jdk7Module" , this .moduleClassLoader );
728
- objectMapper .registerModule (BeanUtils .instantiateClass (jdk7Module ));
735
+ Module jdk7Module = BeanUtils .instantiateClass (jdk7ModuleClass );
736
+ modulesToRegister .put (jdk7Module .getTypeId (), jdk7Module );
729
737
}
730
738
catch (ClassNotFoundException ex ) {
731
739
// jackson-datatype-jdk7 not available
@@ -735,9 +743,10 @@ private void registerWellKnownModulesIfAvailable(ObjectMapper objectMapper) {
735
743
// Java 8 java.util.Optional class present?
736
744
if (ClassUtils .isPresent ("java.util.Optional" , this .moduleClassLoader )) {
737
745
try {
738
- Class <? extends Module > jdk8Module = (Class <? extends Module >)
746
+ Class <? extends Module > jdk8ModuleClass = (Class <? extends Module >)
739
747
ClassUtils .forName ("com.fasterxml.jackson.datatype.jdk8.Jdk8Module" , this .moduleClassLoader );
740
- objectMapper .registerModule (BeanUtils .instantiateClass (jdk8Module ));
748
+ Module jdk8Module = BeanUtils .instantiateClass (jdk8ModuleClass );
749
+ modulesToRegister .put (jdk8Module .getTypeId (), jdk8Module );
741
750
}
742
751
catch (ClassNotFoundException ex ) {
743
752
// jackson-datatype-jdk8 not available
@@ -747,9 +756,10 @@ private void registerWellKnownModulesIfAvailable(ObjectMapper objectMapper) {
747
756
// Java 8 java.time package present?
748
757
if (ClassUtils .isPresent ("java.time.LocalDate" , this .moduleClassLoader )) {
749
758
try {
750
- Class <? extends Module > javaTimeModule = (Class <? extends Module >)
759
+ Class <? extends Module > javaTimeModuleClass = (Class <? extends Module >)
751
760
ClassUtils .forName ("com.fasterxml.jackson.datatype.jsr310.JavaTimeModule" , this .moduleClassLoader );
752
- objectMapper .registerModule (BeanUtils .instantiateClass (javaTimeModule ));
761
+ Module javaTimeModule = BeanUtils .instantiateClass (javaTimeModuleClass );
762
+ modulesToRegister .put (javaTimeModule .getTypeId (), javaTimeModule );
753
763
}
754
764
catch (ClassNotFoundException ex ) {
755
765
// jackson-datatype-jsr310 not available
@@ -759,9 +769,10 @@ private void registerWellKnownModulesIfAvailable(ObjectMapper objectMapper) {
759
769
// Joda-Time present?
760
770
if (ClassUtils .isPresent ("org.joda.time.LocalDate" , this .moduleClassLoader )) {
761
771
try {
762
- Class <? extends Module > jodaModule = (Class <? extends Module >)
772
+ Class <? extends Module > jodaModuleClass = (Class <? extends Module >)
763
773
ClassUtils .forName ("com.fasterxml.jackson.datatype.joda.JodaModule" , this .moduleClassLoader );
764
- objectMapper .registerModule (BeanUtils .instantiateClass (jodaModule ));
774
+ Module jodaModule = BeanUtils .instantiateClass (jodaModuleClass );
775
+ modulesToRegister .put (jodaModule .getTypeId (), jodaModule );
765
776
}
766
777
catch (ClassNotFoundException ex ) {
767
778
// jackson-datatype-joda not available
@@ -771,9 +782,10 @@ private void registerWellKnownModulesIfAvailable(ObjectMapper objectMapper) {
771
782
// Kotlin present?
772
783
if (ClassUtils .isPresent ("kotlin.Unit" , this .moduleClassLoader )) {
773
784
try {
774
- Class <? extends Module > kotlinModule = (Class <? extends Module >)
785
+ Class <? extends Module > kotlinModuleClass = (Class <? extends Module >)
775
786
ClassUtils .forName ("com.fasterxml.jackson.module.kotlin.KotlinModule" , this .moduleClassLoader );
776
- objectMapper .registerModule (BeanUtils .instantiateClass (kotlinModule ));
787
+ Module kotlinModule = BeanUtils .instantiateClass (kotlinModuleClass );
788
+ modulesToRegister .put (kotlinModule .getTypeId (), kotlinModule );
777
789
}
778
790
catch (ClassNotFoundException ex ) {
779
791
// jackson-module-kotlin not available
0 commit comments