Skip to content

Commit b866731

Browse files
committed
ensure utf-8 charset from senders
1 parent e6f587a commit b866731

File tree

2 files changed

+5
-35
lines changed

2 files changed

+5
-35
lines changed

async/async-rabbit/src/main/java/org/reactivecommons/async/rabbit/converters/json/JacksonMessageConverter.java

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,9 @@
1212
import org.reactivecommons.async.rabbit.RabbitMessage;
1313

1414
import java.io.IOException;
15-
import java.io.UnsupportedEncodingException;
16-
import java.nio.charset.Charset;
1715
import java.nio.charset.StandardCharsets;
1816

1917
public class JacksonMessageConverter implements MessageConverter {
20-
private static final String ENCODING = Charset.defaultCharset().name();
2118
private static final String CONTENT_TYPE = "application/json";
2219

2320
private final ObjectMapper objectMapper;
@@ -63,9 +60,7 @@ public <T> Command<T> readCommand(Message message, Class<T> bodyClass) {
6360
@Override
6461
public <T> T readValue(Message message, Class<T> valueClass) {
6562
try {
66-
byte[] utf8Body = ensureEncoding(message.getBody(), message.getProperties().getContentEncoding(),
67-
StandardCharsets.UTF_8.name());
68-
return objectMapper.readValue(utf8Body, valueClass);
63+
return objectMapper.readValue(message.getBody(), valueClass);
6964
} catch (IOException e) {
7065
throw new MessageConversionException("Failed to convert Message content", e);
7166
}
@@ -97,25 +92,17 @@ public Message toMessage(Object object) {
9792
byte[] bytes;
9893
try {
9994
String jsonString = this.objectMapper.writeValueAsString(object);
100-
bytes = jsonString.getBytes(ENCODING);
95+
bytes = jsonString.getBytes(StandardCharsets.UTF_8);
10196
} catch (IOException e) {
10297
throw new MessageConversionException("Failed to convert Message content", e);
10398
}
10499
RabbitMessage.RabbitMessageProperties props = new RabbitMessage.RabbitMessageProperties();
105100
props.setContentType(CONTENT_TYPE);
106-
props.setContentEncoding(ENCODING);
101+
props.setContentEncoding(StandardCharsets.UTF_8.name());
107102
props.setContentLength(bytes.length);
108103
return new RabbitMessage(bytes, props);
109104
}
110105

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-
119106
@Data
120107
private static class AsyncQueryJson {
121108
private String resource;

async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/converters/json/JacksonMessageConverterTest.java

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
import org.reactivecommons.api.domain.DomainEvent;
88
import org.reactivecommons.async.api.AsyncQuery;
99
import org.reactivecommons.async.commons.communications.Message;
10-
import org.reactivecommons.async.commons.exceptions.MessageConversionException;
11-
import org.reactivecommons.async.rabbit.RabbitMessage;
1210

1311
import java.io.IOException;
1412
import java.util.Date;
@@ -93,11 +91,11 @@ void shouldConvertToQueryStructure() {
9391
}
9492

9593
@Test
96-
void shouldNotFailWhenOriginCharsetIsNotUTF8() {
94+
void shouldNotFailWithTilde() {
9795
// Arrange
9896
final String name = "example with word containing tilde áéíóúñ";
9997
final SampleClass data = new SampleClass("35", name, new Date());
100-
final Message message = sampleEncodedMessage(new AsyncQuery<>("query.name", data), "windows-1252");
98+
final Message message = converter.toMessage(new AsyncQuery<>("query.name", data));
10199
// Act
102100
final AsyncQuery<Object> query = converter.readAsyncQueryStructure(message);
103101
// Assert
@@ -107,19 +105,4 @@ void shouldNotFailWhenOriginCharsetIsNotUTF8() {
107105
assertThat(jsonNode.findValue("name").asText()).isEqualTo(name);
108106
}
109107

110-
private Message sampleEncodedMessage(Object object, String encoding) {
111-
byte[] bytes;
112-
try {
113-
String jsonString = this.objectMapper.writeValueAsString(object);
114-
bytes = jsonString.getBytes(encoding);
115-
} catch (IOException e) {
116-
throw new MessageConversionException("Failed to convert Message content", e);
117-
}
118-
RabbitMessage.RabbitMessageProperties props = new RabbitMessage.RabbitMessageProperties();
119-
props.setContentType("application/json");
120-
props.setContentEncoding(encoding);
121-
props.setContentLength(bytes.length);
122-
return new RabbitMessage(bytes, props);
123-
}
124-
125108
}

0 commit comments

Comments
 (0)