@ -22,7 +22,8 @@ import java.util.Arrays;
@@ -22,7 +22,8 @@ import java.util.Arrays;
import java.util.HashMap ;
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.springframework.messaging.Message ;
@ -41,20 +42,37 @@ public class MappingJackson2MessageConverterTests {
@@ -41,20 +42,37 @@ public class MappingJackson2MessageConverterTests {
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
public void setup ( ) {
this . converter = new MappingJackson2MessageConverter ( ) ;
@Test // SPR-12724
public void mimetypesParametrizedConstructor ( ) {
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
public void fromMessage ( ) throws Exception {
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 ( 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 ( 42 , actual . getNumber ( ) ) ;
@ -66,11 +84,12 @@ public class MappingJackson2MessageConverterTests {
@@ -66,11 +84,12 @@ public class MappingJackson2MessageConverterTests {
@Test
public void fromMessageUntyped ( ) throws Exception {
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 ( UTF_8 ) ) . build ( ) ;
@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 ( 42 , actual . get ( "number" ) ) ;
@ -82,21 +101,24 @@ public class MappingJackson2MessageConverterTests {
@@ -82,21 +101,24 @@ public class MappingJackson2MessageConverterTests {
@Test ( expected = MessageConversionException . class )
public void fromMessageInvalidJson ( ) throws Exception {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter ( ) ;
String payload = "FooBar" ;
Message < ? > message = MessageBuilder . withPayload ( payload . getBytes ( UTF_8 ) ) . build ( ) ;
this . converter . fromMessage ( message , MyBean . class ) ;
converter . fromMessage ( message , MyBean . class ) ;
}
@Test
public void fromMessageValidJsonWithUnknownProperty ( ) throws IOException {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter ( ) ;
String payload = "{\"string\":\"string\",\"unknownProperty\":\"value\"}" ;
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 ( ) ) ;
}
@Test
public void toMessage ( ) throws Exception {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter ( ) ;
MyBean payload = new MyBean ( ) ;
payload . setString ( "Foo" ) ;
payload . setNumber ( 42 ) ;
@ -105,7 +127,7 @@ public class MappingJackson2MessageConverterTests {
@@ -105,7 +127,7 @@ public class MappingJackson2MessageConverterTests {
payload . setBool ( true ) ;
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 ) ;
assertTrue ( actual . contains ( "\"string\":\"Foo\"" ) ) ;
@ -120,13 +142,14 @@ public class MappingJackson2MessageConverterTests {
@@ -120,13 +142,14 @@ public class MappingJackson2MessageConverterTests {
@Test
public void toMessageUtf16 ( ) {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter ( ) ;
Charset utf16 = Charset . forName ( "UTF-16BE" ) ;
MimeType contentType = new MimeType ( "application" , "json" , utf16 ) ;
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 = this . converter . toMessage ( payload , headers ) ;
Message < ? > message = converter . toMessage ( payload , headers ) ;
assertEquals ( "\"" + payload + "\"" , new String ( ( byte [ ] ) message . getPayload ( ) , utf16 ) ) ;
assertEquals ( contentType , message . getHeaders ( ) . get ( MessageHeaders . CONTENT_TYPE ) ) ;
@ -134,7 +157,8 @@ public class MappingJackson2MessageConverterTests {
@@ -134,7 +157,8 @@ public class MappingJackson2MessageConverterTests {
@Test
public void toMessageUtf16String ( ) {
this . converter . setSerializedPayloadClass ( String . class ) ;
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter ( ) ;
converter . setSerializedPayloadClass ( String . class ) ;
Charset utf16 = Charset . forName ( "UTF-16BE" ) ;
MimeType contentType = new MimeType ( "application" , "json" , utf16 ) ;
@ -142,7 +166,7 @@ public class MappingJackson2MessageConverterTests {
@@ -142,7 +166,7 @@ public class MappingJackson2MessageConverterTests {
map . put ( MessageHeaders . CONTENT_TYPE , contentType ) ;
MessageHeaders headers = new MessageHeaders ( map ) ;
String payload = "H\u00e9llo W\u00f6rld" ;
Message < ? > message = this . converter . toMessage ( payload , headers ) ;
Message < ? > message = converter . toMessage ( payload , headers ) ;
assertEquals ( "\"" + payload + "\"" , message . getPayload ( ) ) ;
assertEquals ( contentType , message . getHeaders ( ) . get ( MessageHeaders . CONTENT_TYPE ) ) ;