protected MappingJackson2MessageConverter createJacksonConverter() { DefaultContentTypeResolver resolver = new DefaultContentTypeResolver(); resolver.setDefaultMimeType(MimeTypeUtils.APPLICATION_JSON); MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); converter.setContentTypeResolver(resolver); return converter; }
@Before public void setup() throws Exception { this.localRegistry = Mockito.mock(SimpUserRegistry.class); this.registry = new MultiServerUserRegistry(this.localRegistry); this.converter = new MappingJackson2MessageConverter(); }
@Test(expected = MessageConversionException.class) public void convertAndSendNoMatchingConverter() { MessageConverter converter = new CompositeMessageConverter( Arrays.<MessageConverter>asList(new MappingJackson2MessageConverter())); this.template.setMessageConverter(converter); this.headers.put(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.APPLICATION_XML); this.template.convertAndSend("home", "payload", new MessageHeaders(this.headers)); }
@Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); when(this.brokerChannel.send(any())).thenReturn(true); this.converter = new MappingJackson2MessageConverter(); SimpMessagingTemplate brokerTemplate = new SimpMessagingTemplate(this.brokerChannel); brokerTemplate.setMessageConverter(this.converter); this.localRegistry = mock(SimpUserRegistry.class); this.multiServerRegistry = new MultiServerUserRegistry(this.localRegistry); this.handler = new UserRegistryMessageHandler(this.multiServerRegistry, brokerTemplate, "/topic/simp-user-registry", this.taskScheduler); }
@Test public void toMessageUtf16() { MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); MimeType contentType = new MimeType("application", "json", StandardCharsets.UTF_16BE); Map<String, Object> map = new HashMap<>(); map.put(MessageHeaders.CONTENT_TYPE, contentType); MessageHeaders headers = new MessageHeaders(map); String payload = "H\u00e9llo W\u00f6rld"; Message<?> message = converter.toMessage(payload, headers); assertEquals("\"" + payload + "\"", new String((byte[]) message.getPayload(), StandardCharsets.UTF_16BE)); assertEquals(contentType, message.getHeaders().get(MessageHeaders.CONTENT_TYPE)); }
@Test // SPR-16252 public void fromMessageToList() throws Exception { MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); String payload = "[1, 2, 3, 4, 5, 6, 7, 8, 9]"; Message<?> message = MessageBuilder.withPayload(payload.getBytes(StandardCharsets.UTF_8)).build(); Method method = getClass().getDeclaredMethod("handleList", List.class); MethodParameter param = new MethodParameter(method, 0); Object actual = converter.fromMessage(message, List.class, param); assertNotNull(actual); assertEquals(Arrays.asList(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L), actual); }
@Test public void fromMessageUntyped() { MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); String payload = "{\"bytes\":\"AQI=\",\"array\":[\"Foo\",\"Bar\"]," + "\"number\":42,\"string\":\"Foo\",\"bool\":true,\"fraction\":42.0}"; Message<?> message = MessageBuilder.withPayload(payload.getBytes(StandardCharsets.UTF_8)).build(); @SuppressWarnings("unchecked") HashMap<String, Object> actual = (HashMap<String, Object>) converter.fromMessage(message, HashMap.class); assertEquals("Foo", actual.get("string")); assertEquals(42, actual.get("number")); assertEquals(42D, (Double) actual.get("fraction"), 0D); assertEquals(Arrays.asList("Foo", "Bar"), actual.get("array")); assertEquals(Boolean.TRUE, actual.get("bool")); assertEquals("AQI=", actual.get("bytes")); }
@Test(expected = MessageConversionException.class) public void fromMessageInvalidJson() { MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); String payload = "FooBar"; Message<?> message = MessageBuilder.withPayload(payload.getBytes(StandardCharsets.UTF_8)).build(); converter.fromMessage(message, MyBean.class); }
@Test public void toMessageUtf16String() { MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); converter.setSerializedPayloadClass(String.class); MimeType contentType = new MimeType("application", "json", StandardCharsets.UTF_16BE); Map<String, Object> map = new HashMap<>(); map.put(MessageHeaders.CONTENT_TYPE, contentType); MessageHeaders headers = new MessageHeaders(map); String payload = "H\u00e9llo W\u00f6rld"; Message<?> message = converter.toMessage(payload, headers); assertEquals("\"" + payload + "\"", message.getPayload()); assertEquals(contentType, message.getHeaders().get(MessageHeaders.CONTENT_TYPE)); }
@Test // SPR-16486 public void resolveWithJacksonConverter() throws Exception { Message<String> inMessage = MessageBuilder.withPayload("{\"foo\":\"bar\"}").build(); MethodParameter parameter = new MethodParameter(this.method, 5); this.resolver = new MessageMethodArgumentResolver(new MappingJackson2MessageConverter()); Object actual = this.resolver.resolveArgument(parameter, inMessage); assertTrue(actual instanceof Message); Message<?> outMessage = (Message<?>) actual; assertTrue(outMessage.getPayload() instanceof Foo); assertEquals("bar", ((Foo) outMessage.getPayload()).getFoo()); }
@Test // SPR-16486 public void fromMessageToMessageWithPojo() throws Exception { MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); String payload = "{\"string\":\"foo\"}"; Message<?> message = MessageBuilder.withPayload(payload.getBytes(StandardCharsets.UTF_8)).build(); Method method = getClass().getDeclaredMethod("handleMessage", Message.class); MethodParameter param = new MethodParameter(method, 0); Object actual = converter.fromMessage(message, MyBean.class, param); assertTrue(actual instanceof MyBean); assertEquals("foo", ((MyBean) actual).getString()); }
@Before public void setup() throws Exception { MockitoAnnotations.initMocks(this); SimpMessagingTemplate messagingTemplate = new SimpMessagingTemplate(this.messageChannel); messagingTemplate.setMessageConverter(new StringMessageConverter()); this.handler = new SubscriptionMethodReturnValueHandler(messagingTemplate); SimpMessagingTemplate jsonMessagingTemplate = new SimpMessagingTemplate(this.messageChannel); jsonMessagingTemplate.setMessageConverter(new MappingJackson2MessageConverter()); this.jsonHandler = new SubscriptionMethodReturnValueHandler(jsonMessagingTemplate); Method method = this.getClass().getDeclaredMethod("getData"); this.subscribeEventReturnType = new MethodParameter(method, -1); method = this.getClass().getDeclaredMethod("getDataAndSendTo"); this.subscribeEventSendToReturnType = new MethodParameter(method, -1); method = this.getClass().getDeclaredMethod("handle"); this.messageMappingReturnType = new MethodParameter(method, -1); method = this.getClass().getDeclaredMethod("getJsonView"); this.subscribeEventJsonViewReturnType = new MethodParameter(method, -1); }
@Test public void toMessageJsonView() throws Exception { MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); Map<String, Object> map = new HashMap<>(); Method method = getClass().getDeclaredMethod("jsonViewResponse"); MethodParameter returnType = new MethodParameter(method, -1); Message<?> message = converter.toMessage(jsonViewResponse(), new MessageHeaders(map), returnType); String actual = new String((byte[]) message.getPayload(), StandardCharsets.UTF_8); assertThat(actual, containsString("\"withView1\":\"with\"")); assertThat(actual, containsString("\"withView2\":\"with\"")); assertThat(actual, not(containsString("\"withoutView\":\"with\""))); method = getClass().getDeclaredMethod("jsonViewPayload", JacksonViewBean.class); MethodParameter param = new MethodParameter(method, 0); JacksonViewBean back = (JacksonViewBean) converter.fromMessage(message, JacksonViewBean.class, param); assertNull(back.getWithView1()); assertEquals("with", back.getWithView2()); assertNull(back.getWithoutView()); }
@Test public void fromMessageValidJsonWithUnknownProperty() { MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); String payload = "{\"string\":\"string\",\"unknownProperty\":\"value\"}"; Message<?> message = MessageBuilder.withPayload(payload.getBytes(StandardCharsets.UTF_8)).build(); MyBean myBean = (MyBean)converter.fromMessage(message, MyBean.class); assertEquals("string", myBean.getString()); }
@Test public void toMessage() { MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); MyBean payload = new MyBean(); payload.setString("Foo"); payload.setNumber(42); payload.setFraction(42F); payload.setArray(new String[]{"Foo", "Bar"}); payload.setBool(true); payload.setBytes(new byte[]{0x1, 0x2}); Message<?> message = converter.toMessage(payload, null); String actual = new String((byte[]) message.getPayload(), StandardCharsets.UTF_8); assertTrue(actual.contains("\"string\":\"Foo\"")); assertTrue(actual.contains("\"number\":42")); assertTrue(actual.contains("fraction\":42.0")); assertTrue(actual.contains("\"array\":[\"Foo\",\"Bar\"]")); assertTrue(actual.contains("\"bool\":true")); assertTrue(actual.contains("\"bytes\":\"AQI=\"")); assertEquals("Invalid content-type", new MimeType("application", "json", StandardCharsets.UTF_8), message.getHeaders().get(MessageHeaders.CONTENT_TYPE, MimeType.class)); }
@Test // SPR-12724 public void mimetypeParametrizedConstructor() { MimeType mimetype = new MimeType("application", "xml", StandardCharsets.UTF_8); MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(mimetype); assertThat(converter.getSupportedMimeTypes(), contains(mimetype)); assertFalse(converter.getObjectMapper().getDeserializationConfig() .isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)); }
@Test public void defaultConstructor() { MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); assertThat(converter.getSupportedMimeTypes(), contains(new MimeType("application", "json", StandardCharsets.UTF_8))); assertFalse(converter.getObjectMapper().getDeserializationConfig() .isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)); }
@Before public void setup() throws Exception { MockitoAnnotations.initMocks(this); SimpMessagingTemplate messagingTemplate = new SimpMessagingTemplate(this.messageChannel); messagingTemplate.setMessageConverter(new StringMessageConverter()); this.handler = new SendToMethodReturnValueHandler(messagingTemplate, true); this.handlerAnnotationNotRequired = new SendToMethodReturnValueHandler(messagingTemplate, false); SimpMessagingTemplate jsonMessagingTemplate = new SimpMessagingTemplate(this.messageChannel); jsonMessagingTemplate.setMessageConverter(new MappingJackson2MessageConverter()); this.jsonHandler = new SendToMethodReturnValueHandler(jsonMessagingTemplate, true); }
@Test // SPR-12724 public void mimetypesParametrizedConstructor() { MimeType jsonMimetype = new MimeType("application", "json", StandardCharsets.UTF_8); MimeType xmlMimetype = new MimeType("application", "xml", StandardCharsets.UTF_8); MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(jsonMimetype, xmlMimetype); assertThat(converter.getSupportedMimeTypes(), contains(jsonMimetype, xmlMimetype)); assertFalse(converter.getObjectMapper().getDeserializationConfig() .isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)); }
@Test public void fromMessage() { MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); String payload = "{" + "\"bytes\":\"AQI=\"," + "\"array\":[\"Foo\",\"Bar\"]," + "\"number\":42," + "\"string\":\"Foo\"," + "\"bool\":true," + "\"fraction\":42.0}"; Message<?> message = MessageBuilder.withPayload(payload.getBytes(StandardCharsets.UTF_8)).build(); MyBean actual = (MyBean) converter.fromMessage(message, MyBean.class); assertEquals("Foo", actual.getString()); assertEquals(42, actual.getNumber()); assertEquals(42F, actual.getFraction(), 0F); assertArrayEquals(new String[]{"Foo", "Bar"}, actual.getArray()); assertTrue(actual.isBool()); assertArrayEquals(new byte[]{0x1, 0x2}, actual.getBytes()); }