diff --git a/spring-integration-core/src/main/java/org/springframework/integration/json/JsonInboundMessageMapper.java b/spring-integration-core/src/main/java/org/springframework/integration/json/JsonInboundMessageMapper.java index cc0ca33c15..30aa010da1 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/json/JsonInboundMessageMapper.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/json/JsonInboundMessageMapper.java @@ -43,7 +43,8 @@ import org.springframework.util.Assert; */ public class JsonInboundMessageMapper implements InboundMessageMapper { - private static final String MESSAGE_FORMAT_ERROR = "JSON message is invalid. Expected a message in the format of either {\"headers\":{...},\"payload\":{...}} or {\"payload\":{...}.\"headers\":{...}} but was "; + private static final String MESSAGE_FORMAT_ERROR = "JSON message is invalid. Expected a message in the format of either " + + "{\"headers\":{...},\"payload\":{...}} or {\"payload\":{...}.\"headers\":{...}} but was "; private static final Map> DEFAULT_HEADER_TYPES = new HashMap>(); @@ -54,24 +55,31 @@ public class JsonInboundMessageMapper implements InboundMessageMapper { } - private final ObjectMapper objectMapper = new ObjectMapper(); - private final JavaType payloadType; private final Map> headerTypes = DEFAULT_HEADER_TYPES; + private volatile ObjectMapper objectMapper = new ObjectMapper(); + private volatile boolean mapToPayload = false; public JsonInboundMessageMapper(Class payloadType) { + Assert.notNull(payloadType, "payloadType must not be null"); this.payloadType = TypeFactory.type(payloadType); } public JsonInboundMessageMapper(TypeReference typeReference) { + Assert.notNull(typeReference, "typeReference must not be null"); this.payloadType = TypeFactory.type(typeReference); } + public void setObjectMapper(ObjectMapper objectMapper) { + Assert.notNull(objectMapper, "objectMapper must not be null"); + this.objectMapper = objectMapper; + } + public void setHeaderTypes(Map> headerTypes) { this.headerTypes.putAll(headerTypes); } @@ -88,7 +96,7 @@ public class JsonInboundMessageMapper implements InboundMessageMapper { } catch (JsonMappingException ex) { throw new IllegalArgumentException("Mapping of JSON message " + jsonMessage + - " directly to payload of type " + payloadType.getRawClass().getName() + " failed.", ex); + " directly to payload of type " + this.payloadType.getRawClass().getName() + " failed.", ex); } } else { diff --git a/spring-integration-core/src/main/java/org/springframework/integration/json/JsonOutboundMessageMapper.java b/spring-integration-core/src/main/java/org/springframework/integration/json/JsonOutboundMessageMapper.java index 4f8f0e6fe0..89e729048b 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/json/JsonOutboundMessageMapper.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/json/JsonOutboundMessageMapper.java @@ -22,20 +22,27 @@ import org.codehaus.jackson.map.ObjectMapper; import org.springframework.integration.Message; import org.springframework.integration.mapping.OutboundMessageMapper; +import org.springframework.util.Assert; /** * {@link OutboundMessageMapper} implementation the converts a {@link Message} to a JSON string representation. * * @author Jeremy Grelle + * @author Mark Fisher * @since 2.0 */ public class JsonOutboundMessageMapper implements OutboundMessageMapper { private volatile boolean shouldExtractPayload = false; - private final ObjectMapper objectMapper = new ObjectMapper(); + private volatile ObjectMapper objectMapper = new ObjectMapper(); + public void setObjectMapper(ObjectMapper objectMapper) { + Assert.notNull(objectMapper, "objectMapper must not be null"); + this.objectMapper = objectMapper; + } + public void setShouldExtractPayload(boolean shouldExtractPayload) { this.shouldExtractPayload = shouldExtractPayload; }