66import org .reactivecommons .api .domain .Command ;
77import org .reactivecommons .api .domain .DomainEvent ;
88import org .reactivecommons .async .api .AsyncQuery ;
9- import org .reactivecommons .async .rabbit .RabbitMessage ;
109import org .reactivecommons .async .commons .communications .Message ;
1110import org .reactivecommons .async .commons .converters .MessageConverter ;
1211import org .reactivecommons .async .commons .exceptions .MessageConversionException ;
12+ import org .reactivecommons .async .rabbit .RabbitMessage ;
1313
1414import java .io .IOException ;
15+ import java .io .UnsupportedEncodingException ;
1516import java .nio .charset .Charset ;
17+ import java .nio .charset .StandardCharsets ;
1618
1719public class JacksonMessageConverter implements MessageConverter {
1820 private static final String ENCODING = Charset .defaultCharset ().name ();
@@ -28,7 +30,7 @@ public JacksonMessageConverter(ObjectMapper objectMapper) {
2830 @ Override
2931 public <T > AsyncQuery <T > readAsyncQuery (Message message , Class <T > bodyClass ) {
3032 try {
31- final AsyncQueryJson asyncQueryJson = objectMapper . readValue (message . getBody () , AsyncQueryJson .class );
33+ final AsyncQueryJson asyncQueryJson = readValue (message , AsyncQueryJson .class );
3234 final T value = objectMapper .treeToValue (asyncQueryJson .getQueryData (), bodyClass );
3335 return new AsyncQuery <>(asyncQueryJson .getResource (), value );
3436 } catch (IOException e ) {
@@ -39,7 +41,7 @@ public <T> AsyncQuery<T> readAsyncQuery(Message message, Class<T> bodyClass) {
3941 @ Override
4042 public <T > DomainEvent <T > readDomainEvent (Message message , Class <T > bodyClass ) {
4143 try {
42- final DomainEventJson domainEventJson = objectMapper . readValue (message . getBody () , DomainEventJson .class );
44+ final DomainEventJson domainEventJson = readValue (message , DomainEventJson .class );
4345 final T value = objectMapper .treeToValue (domainEventJson .getData (), bodyClass );
4446 return new DomainEvent <>(domainEventJson .getName (), domainEventJson .getEventId (), value );
4547 } catch (IOException e ) {
@@ -50,7 +52,7 @@ public <T> DomainEvent<T> readDomainEvent(Message message, Class<T> bodyClass) {
5052 @ Override
5153 public <T > Command <T > readCommand (Message message , Class <T > bodyClass ) {
5254 try {
53- final CommandJson commandJson = objectMapper . readValue (message . getBody () , CommandJson .class );
55+ final CommandJson commandJson = readValue (message , CommandJson .class );
5456 final T value = objectMapper .treeToValue (commandJson .getData (), bodyClass );
5557 return new Command <>(commandJson .getName (), commandJson .getCommandId (), value );
5658 } catch (IOException e ) {
@@ -61,7 +63,9 @@ public <T> Command<T> readCommand(Message message, Class<T> bodyClass) {
6163 @ Override
6264 public <T > T readValue (Message message , Class <T > valueClass ) {
6365 try {
64- return objectMapper .readValue (message .getBody (), valueClass );
66+ byte [] utf8Body = ensureEncoding (message .getBody (), message .getProperties ().getContentEncoding (),
67+ StandardCharsets .UTF_8 .name ());
68+ return objectMapper .readValue (utf8Body , valueClass );
6569 } catch (IOException e ) {
6670 throw new MessageConversionException ("Failed to convert Message content" , e );
6771 }
@@ -71,21 +75,21 @@ public <T> T readValue(Message message, Class<T> valueClass) {
7175 @ SuppressWarnings ("unchecked" )
7276 public <T > Command <T > readCommandStructure (Message message ) {
7377 final CommandJson commandJson = readValue (message , CommandJson .class );
74- return new Command <>(commandJson .getName (), commandJson .getCommandId (), (T )commandJson .getData ());
78+ return new Command <>(commandJson .getName (), commandJson .getCommandId (), (T ) commandJson .getData ());
7579 }
7680
7781 @ Override
7882 @ SuppressWarnings ("unchecked" )
7983 public <T > DomainEvent <T > readDomainEventStructure (Message message ) {
8084 final DomainEventJson eventJson = readValue (message , DomainEventJson .class );
81- return new DomainEvent <>(eventJson .getName (), eventJson .getEventId (), (T )eventJson .getData ());
85+ return new DomainEvent <>(eventJson .getName (), eventJson .getEventId (), (T ) eventJson .getData ());
8286 }
8387
8488 @ Override
8589 @ SuppressWarnings ("unchecked" )
8690 public <T > AsyncQuery <T > readAsyncQueryStructure (Message message ) {
8791 final AsyncQueryJson asyncQueryJson = readValue (message , AsyncQueryJson .class );
88- return new AsyncQuery <>(asyncQueryJson .getResource (), (T )asyncQueryJson .getQueryData ());
92+ return new AsyncQuery <>(asyncQueryJson .getResource (), (T ) asyncQueryJson .getQueryData ());
8993 }
9094
9195 @ Override
@@ -94,8 +98,7 @@ public Message toMessage(Object object) {
9498 try {
9599 String jsonString = this .objectMapper .writeValueAsString (object );
96100 bytes = jsonString .getBytes (ENCODING );
97- }
98- catch (IOException e ) {
101+ } catch (IOException e ) {
99102 throw new MessageConversionException ("Failed to convert Message content" , e );
100103 }
101104 RabbitMessage .RabbitMessageProperties props = new RabbitMessage .RabbitMessageProperties ();
@@ -105,6 +108,14 @@ public Message toMessage(Object object) {
105108 return new RabbitMessage (bytes , props );
106109 }
107110
111+ private byte [] ensureEncoding (byte [] data , String fromEncoding , String toEncoding )
112+ throws UnsupportedEncodingException {
113+ if (fromEncoding .equalsIgnoreCase (toEncoding )) {
114+ return data ;
115+ }
116+ return new String (data , fromEncoding ).getBytes (toEncoding );
117+ }
118+
108119 @ Data
109120 private static class AsyncQueryJson {
110121 private String resource ;
0 commit comments