From 389a84e65ce7a2a4ddf206fb8b8bb60646c62b9a Mon Sep 17 00:00:00 2001 From: Shaun Francis Date: Fri, 13 Apr 2018 10:20:15 +0100 Subject: [PATCH] Add ObjectMapperProducer method returns ObjectMapper with JmsFactory --- CHANGELOG.md | 3 ++ pom.xml | 6 +-- utilities-core/pom.xml | 17 +++++--- .../jackson/ObjectMapperProducer.java | 39 ++++++++++++------- .../converter/ObjectMapperProducerTest.java | 17 +++++++- 5 files changed, 58 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f91ee29..ba82129 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ on [Keep a CHANGELOG](http://keepachangelog.com/). This project adheres to ## [Unreleased] +### Added +- ObjectMapperProducer method for creating and object mapper with a JmsFactory + ## [1.12.1] - 2018-03-06 ### Fixed diff --git a/pom.xml b/pom.xml index 2af1e72..22ec2ef 100644 --- a/pom.xml +++ b/pom.xml @@ -21,10 +21,10 @@ - 1.22.0 - 1.15.0 - utilities + + 1.24.0 + 1.15.0 diff --git a/utilities-core/pom.xml b/utilities-core/pom.xml index ae21667..f678563 100644 --- a/utilities-core/pom.xml +++ b/utilities-core/pom.xml @@ -56,6 +56,14 @@ javax.json javax.json-api + + org.apache.commons + commons-lang3 + + + org.slf4j + slf4j-api + @@ -95,12 +103,9 @@ test - org.apache.commons - commons-lang3 - - - org.slf4j - slf4j-api + com.fasterxml.jackson.dataformat + jackson-dataformat-yaml + test diff --git a/utilities-core/src/main/java/uk/gov/justice/services/common/converter/jackson/ObjectMapperProducer.java b/utilities-core/src/main/java/uk/gov/justice/services/common/converter/jackson/ObjectMapperProducer.java index d9c8b17..95a6fea 100644 --- a/utilities-core/src/main/java/uk/gov/justice/services/common/converter/jackson/ObjectMapperProducer.java +++ b/utilities-core/src/main/java/uk/gov/justice/services/common/converter/jackson/ObjectMapperProducer.java @@ -1,29 +1,32 @@ package uk.gov.justice.services.common.converter.jackson; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import com.fasterxml.jackson.datatype.jsr310.ser.ZonedDateTimeSerializer; -import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; -import uk.gov.justice.services.common.converter.jackson.additionalproperties.AdditionalPropertiesModule; -import uk.gov.justice.services.common.converter.jackson.jsr353.InclusionAwareJSR353Module; - -import javax.enterprise.context.ApplicationScoped; -import javax.enterprise.inject.Produces; -import java.time.ZonedDateTime; - import static com.fasterxml.jackson.annotation.JsonCreator.Mode.PROPERTIES; import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_ABSENT; import static com.fasterxml.jackson.databind.DeserializationFeature.READ_ENUMS_USING_TO_STRING; import static com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS; import static com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_WITH_ZONE_ID; -import static com.fasterxml.jackson.databind.SerializationFeature.WRITE_NULL_MAP_VALUES; import static com.fasterxml.jackson.databind.SerializationFeature.WRITE_ENUMS_USING_TO_STRING; +import static com.fasterxml.jackson.databind.SerializationFeature.WRITE_NULL_MAP_VALUES; import static java.time.ZoneOffset.UTC; import static java.time.format.DateTimeFormatter.ofPattern; import static java.util.TimeZone.getTimeZone; import static uk.gov.justice.services.common.converter.ZonedDateTimes.ISO_8601; +import uk.gov.justice.services.common.converter.jackson.additionalproperties.AdditionalPropertiesModule; +import uk.gov.justice.services.common.converter.jackson.jsr353.InclusionAwareJSR353Module; + +import java.time.ZonedDateTime; + +import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.inject.Produces; + +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.datatype.jsr310.ser.ZonedDateTimeSerializer; +import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; + /** * Produces the configured {@link ObjectMapper}. */ @@ -32,7 +35,15 @@ public class ObjectMapperProducer { @Produces public ObjectMapper objectMapper() { - return new ObjectMapper() + return configureObjectMapper(new ObjectMapper()); + } + + public ObjectMapper objectMapperWith(final JsonFactory jsonFactory) { + return configureObjectMapper(new ObjectMapper(jsonFactory)); + } + + private ObjectMapper configureObjectMapper(final ObjectMapper objectMapper) { + return objectMapper .registerModule(javaTimeModuleWithFormattedDateTime()) .registerModule(new Jdk8Module()) .registerModule(new ParameterNamesModule(PROPERTIES)) diff --git a/utilities-core/src/test/java/uk/gov/justice/services/common/converter/ObjectMapperProducerTest.java b/utilities-core/src/test/java/uk/gov/justice/services/common/converter/ObjectMapperProducerTest.java index 5ee45b2..0451e33 100644 --- a/utilities-core/src/test/java/uk/gov/justice/services/common/converter/ObjectMapperProducerTest.java +++ b/utilities-core/src/test/java/uk/gov/justice/services/common/converter/ObjectMapperProducerTest.java @@ -21,6 +21,8 @@ import javax.json.JsonValue; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import org.json.JSONObject; import org.junit.Before; import org.junit.Test; @@ -29,6 +31,9 @@ public class ObjectMapperProducerTest { private static final String JSON_OBJECT_STRING = "{\n" + " \"id\": \"861c9430-7bc6-4bf0-b549-6534394b8d65\"\n" + "}"; + private static final String YAML_AS_STRING = "---\n" + + "subscription_descriptor:\n" + + " spec_version: 1.0.0\n"; private ObjectMapper mapper; @@ -208,6 +213,16 @@ public void shouldWriteAdditionalPropertiesWithAllPropertyTypes() throws Excepti ; } + @Test + public void shouldConvertYamlToJsonObject() throws Exception { + final ObjectMapper yamlObjectMapper = new ObjectMapperProducer().objectMapperWith(new YAMLFactory()); + + final Object yamlObject = yamlObjectMapper.readValue(YAML_AS_STRING, Object.class); + final JSONObject yamlAsJsonObject = new JSONObject(mapper.writeValueAsString(yamlObject)); + + assertThat(yamlAsJsonObject.getJSONObject("subscription_descriptor").get("spec_version"), is("1.0.0")); + } + public static class DummyBeanWithSingleArgConstructor { private final String name; @@ -233,7 +248,7 @@ public int hashCode() { } } - public static enum Colour { + public enum Colour { RED("Red"), GREEN("Green"), BLUE("Blue");