|
|
|
@ -22,7 +22,8 @@ import java.util.Arrays; |
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.Map; |
|
|
|
import java.util.Map; |
|
|
|
|
|
|
|
|
|
|
|
import org.junit.Before; |
|
|
|
import com.fasterxml.jackson.databind.DeserializationFeature; |
|
|
|
|
|
|
|
import static org.hamcrest.Matchers.contains; |
|
|
|
import org.junit.Test; |
|
|
|
import org.junit.Test; |
|
|
|
|
|
|
|
|
|
|
|
import org.springframework.messaging.Message; |
|
|
|
import org.springframework.messaging.Message; |
|
|
|
@ -41,20 +42,37 @@ public class MappingJackson2MessageConverterTests { |
|
|
|
|
|
|
|
|
|
|
|
private static Charset UTF_8 = Charset.forName("UTF-8"); |
|
|
|
private static Charset UTF_8 = Charset.forName("UTF-8"); |
|
|
|
|
|
|
|
|
|
|
|
private MappingJackson2MessageConverter converter; |
|
|
|
@Test |
|
|
|
|
|
|
|
public void defaultConstructor() { |
|
|
|
|
|
|
|
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); |
|
|
|
|
|
|
|
assertThat(converter.getSupportedMimeTypes(), contains(new MimeType("application", "json", UTF_8))); |
|
|
|
|
|
|
|
assertFalse(converter.getObjectMapper().getDeserializationConfig().isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test // SPR-12724
|
|
|
|
|
|
|
|
public void mimetypeParametrizedConstructor() { |
|
|
|
|
|
|
|
MimeType mimetype = new MimeType("application", "xml", UTF_8); |
|
|
|
|
|
|
|
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(mimetype); |
|
|
|
|
|
|
|
assertThat(converter.getSupportedMimeTypes(), contains(mimetype)); |
|
|
|
|
|
|
|
assertFalse(converter.getObjectMapper().getDeserializationConfig().isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Before |
|
|
|
@Test // SPR-12724
|
|
|
|
public void setup() { |
|
|
|
public void mimetypesParametrizedConstructor() { |
|
|
|
this.converter = new MappingJackson2MessageConverter(); |
|
|
|
MimeType jsonMimetype = new MimeType("application", "json", UTF_8); |
|
|
|
|
|
|
|
MimeType xmlMimetype = new MimeType("application", "xml", UTF_8); |
|
|
|
|
|
|
|
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(Arrays.asList(jsonMimetype, xmlMimetype)); |
|
|
|
|
|
|
|
assertThat(converter.getSupportedMimeTypes(), contains(jsonMimetype, xmlMimetype)); |
|
|
|
|
|
|
|
assertFalse(converter.getObjectMapper().getDeserializationConfig().isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void fromMessage() throws Exception { |
|
|
|
public void fromMessage() throws Exception { |
|
|
|
|
|
|
|
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); |
|
|
|
String payload = "{\"bytes\":\"AQI=\",\"array\":[\"Foo\",\"Bar\"]," |
|
|
|
String payload = "{\"bytes\":\"AQI=\",\"array\":[\"Foo\",\"Bar\"]," |
|
|
|
+ "\"number\":42,\"string\":\"Foo\",\"bool\":true,\"fraction\":42.0}"; |
|
|
|
+ "\"number\":42,\"string\":\"Foo\",\"bool\":true,\"fraction\":42.0}"; |
|
|
|
Message<?> message = MessageBuilder.withPayload(payload.getBytes(UTF_8)).build(); |
|
|
|
Message<?> message = MessageBuilder.withPayload(payload.getBytes(UTF_8)).build(); |
|
|
|
MyBean actual = (MyBean) this.converter.fromMessage(message, MyBean.class); |
|
|
|
MyBean actual = (MyBean) converter.fromMessage(message, MyBean.class); |
|
|
|
|
|
|
|
|
|
|
|
assertEquals("Foo", actual.getString()); |
|
|
|
assertEquals("Foo", actual.getString()); |
|
|
|
assertEquals(42, actual.getNumber()); |
|
|
|
assertEquals(42, actual.getNumber()); |
|
|
|
@ -66,11 +84,12 @@ public class MappingJackson2MessageConverterTests { |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void fromMessageUntyped() throws Exception { |
|
|
|
public void fromMessageUntyped() throws Exception { |
|
|
|
|
|
|
|
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); |
|
|
|
String payload = "{\"bytes\":\"AQI=\",\"array\":[\"Foo\",\"Bar\"]," |
|
|
|
String payload = "{\"bytes\":\"AQI=\",\"array\":[\"Foo\",\"Bar\"]," |
|
|
|
+ "\"number\":42,\"string\":\"Foo\",\"bool\":true,\"fraction\":42.0}"; |
|
|
|
+ "\"number\":42,\"string\":\"Foo\",\"bool\":true,\"fraction\":42.0}"; |
|
|
|
Message<?> message = MessageBuilder.withPayload(payload.getBytes(UTF_8)).build(); |
|
|
|
Message<?> message = MessageBuilder.withPayload(payload.getBytes(UTF_8)).build(); |
|
|
|
@SuppressWarnings("unchecked") |
|
|
|
@SuppressWarnings("unchecked") |
|
|
|
HashMap<String, Object> actual = (HashMap<String, Object>) this.converter.fromMessage(message, HashMap.class); |
|
|
|
HashMap<String, Object> actual = (HashMap<String, Object>) converter.fromMessage(message, HashMap.class); |
|
|
|
|
|
|
|
|
|
|
|
assertEquals("Foo", actual.get("string")); |
|
|
|
assertEquals("Foo", actual.get("string")); |
|
|
|
assertEquals(42, actual.get("number")); |
|
|
|
assertEquals(42, actual.get("number")); |
|
|
|
@ -82,21 +101,24 @@ public class MappingJackson2MessageConverterTests { |
|
|
|
|
|
|
|
|
|
|
|
@Test(expected = MessageConversionException.class) |
|
|
|
@Test(expected = MessageConversionException.class) |
|
|
|
public void fromMessageInvalidJson() throws Exception { |
|
|
|
public void fromMessageInvalidJson() throws Exception { |
|
|
|
|
|
|
|
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); |
|
|
|
String payload = "FooBar"; |
|
|
|
String payload = "FooBar"; |
|
|
|
Message<?> message = MessageBuilder.withPayload(payload.getBytes(UTF_8)).build(); |
|
|
|
Message<?> message = MessageBuilder.withPayload(payload.getBytes(UTF_8)).build(); |
|
|
|
this.converter.fromMessage(message, MyBean.class); |
|
|
|
converter.fromMessage(message, MyBean.class); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void fromMessageValidJsonWithUnknownProperty() throws IOException { |
|
|
|
public void fromMessageValidJsonWithUnknownProperty() throws IOException { |
|
|
|
|
|
|
|
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); |
|
|
|
String payload = "{\"string\":\"string\",\"unknownProperty\":\"value\"}"; |
|
|
|
String payload = "{\"string\":\"string\",\"unknownProperty\":\"value\"}"; |
|
|
|
Message<?> message = MessageBuilder.withPayload(payload.getBytes(UTF_8)).build(); |
|
|
|
Message<?> message = MessageBuilder.withPayload(payload.getBytes(UTF_8)).build(); |
|
|
|
MyBean myBean = (MyBean)this.converter.fromMessage(message, MyBean.class); |
|
|
|
MyBean myBean = (MyBean)converter.fromMessage(message, MyBean.class); |
|
|
|
assertEquals("string", myBean.getString()); |
|
|
|
assertEquals("string", myBean.getString()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void toMessage() throws Exception { |
|
|
|
public void toMessage() throws Exception { |
|
|
|
|
|
|
|
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); |
|
|
|
MyBean payload = new MyBean(); |
|
|
|
MyBean payload = new MyBean(); |
|
|
|
payload.setString("Foo"); |
|
|
|
payload.setString("Foo"); |
|
|
|
payload.setNumber(42); |
|
|
|
payload.setNumber(42); |
|
|
|
@ -105,7 +127,7 @@ public class MappingJackson2MessageConverterTests { |
|
|
|
payload.setBool(true); |
|
|
|
payload.setBool(true); |
|
|
|
payload.setBytes(new byte[]{0x1, 0x2}); |
|
|
|
payload.setBytes(new byte[]{0x1, 0x2}); |
|
|
|
|
|
|
|
|
|
|
|
Message<?> message = this.converter.toMessage(payload, null); |
|
|
|
Message<?> message = converter.toMessage(payload, null); |
|
|
|
String actual = new String((byte[]) message.getPayload(), UTF_8); |
|
|
|
String actual = new String((byte[]) message.getPayload(), UTF_8); |
|
|
|
|
|
|
|
|
|
|
|
assertTrue(actual.contains("\"string\":\"Foo\"")); |
|
|
|
assertTrue(actual.contains("\"string\":\"Foo\"")); |
|
|
|
@ -120,13 +142,14 @@ public class MappingJackson2MessageConverterTests { |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void toMessageUtf16() { |
|
|
|
public void toMessageUtf16() { |
|
|
|
|
|
|
|
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); |
|
|
|
Charset utf16 = Charset.forName("UTF-16BE"); |
|
|
|
Charset utf16 = Charset.forName("UTF-16BE"); |
|
|
|
MimeType contentType = new MimeType("application", "json", utf16); |
|
|
|
MimeType contentType = new MimeType("application", "json", utf16); |
|
|
|
Map<String, Object> map = new HashMap<>(); |
|
|
|
Map<String, Object> map = new HashMap<>(); |
|
|
|
map.put(MessageHeaders.CONTENT_TYPE, contentType); |
|
|
|
map.put(MessageHeaders.CONTENT_TYPE, contentType); |
|
|
|
MessageHeaders headers = new MessageHeaders(map); |
|
|
|
MessageHeaders headers = new MessageHeaders(map); |
|
|
|
String payload = "H\u00e9llo W\u00f6rld"; |
|
|
|
String payload = "H\u00e9llo W\u00f6rld"; |
|
|
|
Message<?> message = this.converter.toMessage(payload, headers); |
|
|
|
Message<?> message = converter.toMessage(payload, headers); |
|
|
|
|
|
|
|
|
|
|
|
assertEquals("\"" + payload + "\"", new String((byte[]) message.getPayload(), utf16)); |
|
|
|
assertEquals("\"" + payload + "\"", new String((byte[]) message.getPayload(), utf16)); |
|
|
|
assertEquals(contentType, message.getHeaders().get(MessageHeaders.CONTENT_TYPE)); |
|
|
|
assertEquals(contentType, message.getHeaders().get(MessageHeaders.CONTENT_TYPE)); |
|
|
|
@ -134,7 +157,8 @@ public class MappingJackson2MessageConverterTests { |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void toMessageUtf16String() { |
|
|
|
public void toMessageUtf16String() { |
|
|
|
this.converter.setSerializedPayloadClass(String.class); |
|
|
|
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); |
|
|
|
|
|
|
|
converter.setSerializedPayloadClass(String.class); |
|
|
|
|
|
|
|
|
|
|
|
Charset utf16 = Charset.forName("UTF-16BE"); |
|
|
|
Charset utf16 = Charset.forName("UTF-16BE"); |
|
|
|
MimeType contentType = new MimeType("application", "json", utf16); |
|
|
|
MimeType contentType = new MimeType("application", "json", utf16); |
|
|
|
@ -142,7 +166,7 @@ public class MappingJackson2MessageConverterTests { |
|
|
|
map.put(MessageHeaders.CONTENT_TYPE, contentType); |
|
|
|
map.put(MessageHeaders.CONTENT_TYPE, contentType); |
|
|
|
MessageHeaders headers = new MessageHeaders(map); |
|
|
|
MessageHeaders headers = new MessageHeaders(map); |
|
|
|
String payload = "H\u00e9llo W\u00f6rld"; |
|
|
|
String payload = "H\u00e9llo W\u00f6rld"; |
|
|
|
Message<?> message = this.converter.toMessage(payload, headers); |
|
|
|
Message<?> message = converter.toMessage(payload, headers); |
|
|
|
|
|
|
|
|
|
|
|
assertEquals("\"" + payload + "\"", message.getPayload()); |
|
|
|
assertEquals("\"" + payload + "\"", message.getPayload()); |
|
|
|
assertEquals(contentType, message.getHeaders().get(MessageHeaders.CONTENT_TYPE)); |
|
|
|
assertEquals(contentType, message.getHeaders().get(MessageHeaders.CONTENT_TYPE)); |
|
|
|
|