FasterXML / FasterXML/jackson-modules-base

Guice7 Module usage with XmlMapper and JsonMapper concurrently

Open
#265 4 comments 0 reactions 0 assignees View on GitHub
2.19 pr-welcome
Dominant language
Java
Stars
180
Forks
80
Avg merge
3h 26m
Merged PRs (30d)
1

Description

I've an application where I need to use the XmlMapper and JsonMapper in the same global guice injector. Therefore I need a way to distinguish between those two mappers. I know of two options here: (1) I could make use of `@Named("xml")` and ObjectMapper superclass to distinguish between them. Yet, (2) I like to use the type safe variant by defining the relevant subclasses (JsonMapper, XmlMapper) with Guice. I decided to go with the second route as this allows me to make use of type checking and has a generally easier Guice interfacing.

Unfortunately, in combination with Guice7 Module this requires to do the following messy initialization:

```Java
final var jsonKey = (Key) Key.get(JsonMapper.class).ofType((Type) JsonMapper.class);
final var jsonMapper = JsonMapper.builder()
.addModule(new JavaTimeModule())
.build();
final var xmlKey = (Key) Key.get(XmlMapper.class).ofType((Type) XmlMapper.class);
final var xmlMapper = XmlMapper.builder()
.addModule(new JavaTimeModule())
.build();
Guice.createInjector(
new ObjectMapperModule(jsonKey).withObjectMapper(jsonMapper),
new ObjectMapperModule(xmlKey)..withObjectMapper(xmlMapper));
```

Since the `new ObjectMapperModule(jsonKey)` constructor only allows keys of type `Key` without subclass types it forces me to do ugly type and casting Magic. Therefore I propose to add a constructor to `ObjectMapperModule` with a definition like `Key`:

```Java
public ObjectMapperModule(Key objectMapperKey)
{
...
}
```

Which would lead to the following API:

```Java
var injector = Guice.createInjector(new ObjectMapperModule(Key.get(XmlMapper.class)).withObjectMapper(xmlMapper));
XmlMapper mapper = injector.getInstance(XmlMapper.class);
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.