package com.aol.micro.server.rest.jackson; import java.util.Arrays; import java.util.List; import java.util.Optional; import com.aol.cyclops2.util.ExceptionSoftener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.aol.micro.server.jackson.CoreJacksonConfigurator; import com.aol.micro.server.jackson.JacksonMapperConfigurator; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.ObjectMapper; public final class JacksonUtil { private static ObjectMapper mapper = null; private static final Logger logger = LoggerFactory.getLogger(JacksonUtil.class); private volatile static List<JacksonMapperConfigurator> jacksonConfigurers = Arrays.asList(new CoreJacksonConfigurator(Include.NON_NULL)); public static void setJacksonConfigurers(List<JacksonMapperConfigurator> jc ) { jacksonConfigurers = jc; mapper = null; getMapper(); } private synchronized static ObjectMapper createMapper() { if (mapper == null) { mapper = new ObjectMapper(); Optional.<List<JacksonMapperConfigurator>>ofNullable(jacksonConfigurers) .ifPresent(list->list.forEach(a-> a.accept(mapper))); } return mapper; } public static ObjectMapper getMapper() { if(mapper==null) return createMapper(); return mapper; } public static String serializeToJsonFailSilently(final Object data) { try { return serializeToJson(data); } catch (Exception e) { } return ""; } public static String serializeToJson(final Object data) { String jsonString = ""; if (data == null) return jsonString; try { jsonString = getMapper().writeValueAsString(data); } catch (final Exception ex) { ExceptionSoftener.throwSoftenedException(ex); } return jsonString; } public static <T> T convertFromJson(final String jsonString, final Class<T> type) { try { return getMapper().readValue(jsonString, type); } catch (final Exception ex) { ExceptionSoftener.throwSoftenedException(ex); } return null; } public static <T> T convertFromJson(final String jsonString, final JavaType type) { try { return getMapper().readValue(jsonString, type); } catch (final Exception ex) { ExceptionSoftener.throwSoftenedException(ex); } return null; } public static Object serializeToJsonLogFailure(Object value) { try { return serializeToJson(value); } catch (Exception e) { logger.error( e.getMessage(), e); } return value.toString(); } }