From fc5eb2b1282243ff04e60154ce36d3cf69886c7e Mon Sep 17 00:00:00 2001 From: Marcos Passos Date: Sat, 24 Aug 2019 15:45:09 -0300 Subject: [PATCH 1/2] Add support for module bundles --- .../fasterxml/jackson/databind/Module.java | 10 +++++ .../jackson/databind/ObjectMapper.java | 3 ++ .../jackson/databind/ObjectMapperTest.java | 38 +++++++++++++++++++ 3 files changed, 51 insertions(+) diff --git a/src/main/java/com/fasterxml/jackson/databind/Module.java b/src/main/java/com/fasterxml/jackson/databind/Module.java index 5884e6b3b5..fc892bc5fc 100644 --- a/src/main/java/com/fasterxml/jackson/databind/Module.java +++ b/src/main/java/com/fasterxml/jackson/databind/Module.java @@ -15,6 +15,7 @@ import com.fasterxml.jackson.databind.ser.Serializers; import com.fasterxml.jackson.databind.type.TypeFactory; import com.fasterxml.jackson.databind.type.TypeModifier; +import java.util.Collections; /** * Simple interface for extensions that can be registered with {@link ObjectMapper} @@ -73,6 +74,15 @@ public Object getTypeId() { * using callback methods passed-in context object exposes. */ public abstract void setupModule(SetupContext context); + + /** + * Returns the list of dependent modules. + * + * It is called to let modules register other modules as dependencies. + */ + public Iterable getDependencies() { + return Collections.emptyList(); + } /* /********************************************************** diff --git a/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java b/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java index 9900a2b6e2..0403909b07 100644 --- a/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java +++ b/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java @@ -941,6 +941,9 @@ public void setNamingStrategy(PropertyNamingStrategy naming) { setPropertyNamingStrategy(naming); } }); + + registerModules(module.getDependencies()); + return this; } diff --git a/src/test/java/com/fasterxml/jackson/databind/ObjectMapperTest.java b/src/test/java/com/fasterxml/jackson/databind/ObjectMapperTest.java index a2e6d19f4e..35ad33a045 100644 --- a/src/test/java/com/fasterxml/jackson/databind/ObjectMapperTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/ObjectMapperTest.java @@ -1,5 +1,6 @@ package com.fasterxml.jackson.databind; +import com.fasterxml.jackson.databind.module.SimpleModule; import java.io.*; import java.util.*; @@ -410,4 +411,41 @@ public void testDataInputViaMapper() throws Exception .readTree(input); assertNotNull(n); } + + public void testRegisterDependentModules() { + ObjectMapper objectMapper = new ObjectMapper(); + + final SimpleModule secondModule = new SimpleModule() { + @Override + public Object getTypeId() { + return "second"; + } + }; + + final SimpleModule thirdModule = new SimpleModule() { + @Override + public Object getTypeId() { + return "third"; + } + }; + + final SimpleModule firstModule = new SimpleModule() { + @Override + public Iterable getDependencies() { + return Arrays.asList(secondModule, thirdModule); + } + + @Override + public Object getTypeId() { + return "first"; + } + }; + + objectMapper.registerModule(firstModule); + + assertEquals( + new HashSet<>(Arrays.asList("first", "second", "third")), + objectMapper.getRegisteredModuleIds() + ); + } } From e2c9d096aa1f2f9d8db86e00221a2abf85f7c3de Mon Sep 17 00:00:00 2001 From: Marcos Passos Date: Tue, 27 Aug 2019 14:58:20 -0300 Subject: [PATCH 2/2] Fix minor issues --- src/main/java/com/fasterxml/jackson/databind/Module.java | 2 ++ .../java/com/fasterxml/jackson/databind/ObjectMapper.java | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/fasterxml/jackson/databind/Module.java b/src/main/java/com/fasterxml/jackson/databind/Module.java index fc892bc5fc..d34bfc8ed6 100644 --- a/src/main/java/com/fasterxml/jackson/databind/Module.java +++ b/src/main/java/com/fasterxml/jackson/databind/Module.java @@ -79,6 +79,8 @@ public Object getTypeId() { * Returns the list of dependent modules. * * It is called to let modules register other modules as dependencies. + * + * @since 2.10 */ public Iterable getDependencies() { return Collections.emptyList(); diff --git a/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java b/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java index 0403909b07..045d51edcc 100644 --- a/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java +++ b/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java @@ -776,6 +776,8 @@ public ObjectMapper registerModule(Module module) throw new IllegalArgumentException("Module without defined version"); } + registerModules(module.getDependencies()); + // And then call registration module.setupModule(new Module.SetupContext() { @@ -942,8 +944,6 @@ public void setNamingStrategy(PropertyNamingStrategy naming) { } }); - registerModules(module.getDependencies()); - return this; }