Revise encoding steps towards use of JDK Charset and StandardCharsets

Issue: SPR-14492
This commit is contained in:
Juergen Hoeller
2016-07-19 23:43:05 +02:00
parent 79d30d8c8a
commit 99be15f58b
95 changed files with 480 additions and 569 deletions

View File

@@ -22,6 +22,7 @@ import java.io.StringWriter;
import java.io.Writer;
import java.lang.reflect.Type;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.concurrent.atomic.AtomicReference;
@@ -70,7 +71,7 @@ public class MappingJackson2MessageConverter extends AbstractMessageConverter {
* the {@code application/json} MIME type with {@code UTF-8} character set.
*/
public MappingJackson2MessageConverter() {
super(new MimeType("application", "json", Charset.forName("UTF-8")));
super(new MimeType("application", "json", StandardCharsets.UTF_8));
initObjectMapper();
}

View File

@@ -17,6 +17,7 @@
package org.springframework.messaging.converter;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageHeaders;
@@ -35,7 +36,7 @@ public class StringMessageConverter extends AbstractMessageConverter {
public StringMessageConverter() {
this(Charset.forName("UTF-8"));
this(StandardCharsets.UTF_8);
}
public StringMessageConverter(Charset defaultCharset) {

View File

@@ -19,6 +19,7 @@ package org.springframework.messaging.simp.stomp;
import java.io.ByteArrayOutputStream;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@@ -47,13 +48,10 @@ import org.springframework.util.MultiValueMap;
*/
public class StompDecoder {
static final Charset UTF8_CHARSET = Charset.forName("UTF-8");
static final byte[] HEARTBEAT_PAYLOAD = new byte[] {'\n'};
private static final Log logger = LogFactory.getLog(StompDecoder.class);
private MessageHeaderInitializer headerInitializer;
@@ -202,7 +200,7 @@ public class StompDecoder {
while (buffer.remaining() > 0 && !tryConsumeEndOfLine(buffer)) {
command.write(buffer.get());
}
return new String(command.toByteArray(), UTF8_CHARSET);
return new String(command.toByteArray(), StandardCharsets.UTF_8);
}
private void readHeaders(ByteBuffer buffer, StompHeaderAccessor headerAccessor) {
@@ -217,7 +215,7 @@ public class StompDecoder {
headerStream.write(buffer.get());
}
if (headerStream.size() > 0 && headerComplete) {
String header = new String(headerStream.toByteArray(), UTF8_CHARSET);
String header = new String(headerStream.toByteArray(), StandardCharsets.UTF_8);
int colonIndex = header.indexOf(':');
if (colonIndex <= 0) {
if (buffer.remaining() > 0) {

View File

@@ -19,6 +19,7 @@ package org.springframework.messaging.simp.stomp;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -81,7 +82,7 @@ public final class StompEncoder {
else {
StompCommand command = StompHeaderAccessor.getCommand(headers);
Assert.notNull(command, "Missing STOMP command: " + headers);
output.write(command.toString().getBytes(StompDecoder.UTF8_CHARSET));
output.write(command.toString().getBytes(StandardCharsets.UTF_8));
output.write(LF);
writeHeaders(command, headers, payload, output);
output.write(LF);
@@ -132,15 +133,15 @@ public final class StompEncoder {
}
if (command.requiresContentLength()) {
int contentLength = payload.length;
output.write("content-length:".getBytes(StompDecoder.UTF8_CHARSET));
output.write(Integer.toString(contentLength).getBytes(StompDecoder.UTF8_CHARSET));
output.write("content-length:".getBytes(StandardCharsets.UTF_8));
output.write(Integer.toString(contentLength).getBytes(StandardCharsets.UTF_8));
output.write(LF);
}
}
private byte[] encodeHeaderString(String input, boolean escape) {
String inputToUse = (escape ? escape(input) : input);
return inputToUse.getBytes(StompDecoder.UTF8_CHARSET);
return inputToUse.getBytes(StandardCharsets.UTF_8);
}
/**

View File

@@ -17,6 +17,7 @@
package org.springframework.messaging.simp.stomp;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -441,7 +442,7 @@ public class StompHeaderAccessor extends SimpMessageHeaderAccessor {
return contentType;
}
Charset charset = getContentType().getCharset();
charset = (charset != null ? charset : StompDecoder.UTF8_CHARSET);
charset = (charset != null ? charset : StandardCharsets.UTF_8);
return (bytes.length < 80) ?
contentType + " payload=" + new String(bytes, charset) :
contentType + " payload=" + new String(Arrays.copyOf(bytes, 80), charset) + "...(truncated)";

View File

@@ -17,6 +17,7 @@
package org.springframework.messaging.support;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -115,7 +116,7 @@ import org.springframework.util.StringUtils;
*/
public class MessageHeaderAccessor {
public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
private static final MimeType[] READABLE_MIME_TYPES = new MimeType[] {
MimeTypeUtils.APPLICATION_JSON, MimeTypeUtils.APPLICATION_XML,

View File

@@ -19,6 +19,7 @@ package org.springframework.messaging.converter;
import java.io.IOException;
import java.lang.reflect.Method;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
@@ -44,19 +45,16 @@ import static org.junit.Assert.*;
*/
public class MappingJackson2MessageConverterTests {
private static Charset UTF_8 = Charset.forName("UTF-8");
@Test
public void defaultConstructor() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
assertThat(converter.getSupportedMimeTypes(), contains(new MimeType("application", "json", UTF_8)));
assertThat(converter.getSupportedMimeTypes(), contains(new MimeType("application", "json", StandardCharsets.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);
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));
@@ -64,8 +62,8 @@ public class MappingJackson2MessageConverterTests {
@Test // SPR-12724
public void mimetypesParametrizedConstructor() {
MimeType jsonMimetype = new MimeType("application", "json", UTF_8);
MimeType xmlMimetype = new MimeType("application", "xml", UTF_8);
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));
@@ -75,7 +73,7 @@ public class MappingJackson2MessageConverterTests {
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();
Message<?> message = MessageBuilder.withPayload(payload.getBytes(StandardCharsets.UTF_8)).build();
MyBean actual = (MyBean) converter.fromMessage(message, MyBean.class);
assertEquals("Foo", actual.getString());
@@ -91,7 +89,7 @@ public class MappingJackson2MessageConverterTests {
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();
Message<?> message = MessageBuilder.withPayload(payload.getBytes(StandardCharsets.UTF_8)).build();
@SuppressWarnings("unchecked")
HashMap<String, Object> actual = (HashMap<String, Object>) converter.fromMessage(message, HashMap.class);
@@ -107,7 +105,7 @@ public class MappingJackson2MessageConverterTests {
public void fromMessageInvalidJson() throws Exception {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
String payload = "FooBar";
Message<?> message = MessageBuilder.withPayload(payload.getBytes(UTF_8)).build();
Message<?> message = MessageBuilder.withPayload(payload.getBytes(StandardCharsets.UTF_8)).build();
converter.fromMessage(message, MyBean.class);
}
@@ -115,7 +113,7 @@ public class MappingJackson2MessageConverterTests {
public void fromMessageValidJsonWithUnknownProperty() throws IOException {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
String payload = "{\"string\":\"string\",\"unknownProperty\":\"value\"}";
Message<?> message = MessageBuilder.withPayload(payload.getBytes(UTF_8)).build();
Message<?> message = MessageBuilder.withPayload(payload.getBytes(StandardCharsets.UTF_8)).build();
MyBean myBean = (MyBean)converter.fromMessage(message, MyBean.class);
assertEquals("string", myBean.getString());
}
@@ -132,7 +130,7 @@ public class MappingJackson2MessageConverterTests {
payload.setBytes(new byte[]{0x1, 0x2});
Message<?> message = converter.toMessage(payload, null);
String actual = new String((byte[]) message.getPayload(), UTF_8);
String actual = new String((byte[]) message.getPayload(), StandardCharsets.UTF_8);
assertTrue(actual.contains("\"string\":\"Foo\""));
assertTrue(actual.contains("\"number\":42"));
@@ -140,7 +138,7 @@ public class MappingJackson2MessageConverterTests {
assertTrue(actual.contains("\"array\":[\"Foo\",\"Bar\"]"));
assertTrue(actual.contains("\"bool\":true"));
assertTrue(actual.contains("\"bytes\":\"AQI=\""));
assertEquals("Invalid content-type", new MimeType("application", "json", UTF_8),
assertEquals("Invalid content-type", new MimeType("application", "json", StandardCharsets.UTF_8),
message.getHeaders().get(MessageHeaders.CONTENT_TYPE, MimeType.class));
}
@@ -184,7 +182,7 @@ public class MappingJackson2MessageConverterTests {
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(), UTF_8);
String actual = new String((byte[]) message.getPayload(), StandardCharsets.UTF_8);
assertThat(actual, containsString("\"withView1\":\"with\""));
assertThat(actual, containsString("\"withView2\":\"with\""));

View File

@@ -17,7 +17,7 @@
package org.springframework.messaging.converter;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import javax.xml.bind.annotation.XmlRootElement;
import org.junit.Before;
@@ -27,17 +27,15 @@ import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
import static org.junit.Assert.*;
import static org.custommonkey.xmlunit.XMLAssert.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/**
* @author Arjen Poutsma
*/
public class MarshallingMessageConverterTests {
private static Charset UTF_8 = Charset.forName("UTF-8");
private MarshallingMessageConverter converter;
@@ -50,10 +48,11 @@ public class MarshallingMessageConverterTests {
this.converter = new MarshallingMessageConverter(marshaller);
}
@Test
public void fromMessage() throws Exception {
String payload = "<myBean><name>Foo</name></myBean>";
Message<?> message = MessageBuilder.withPayload(payload.getBytes(UTF_8)).build();
Message<?> message = MessageBuilder.withPayload(payload.getBytes(StandardCharsets.UTF_8)).build();
MyBean actual = (MyBean) this.converter.fromMessage(message, MyBean.class);
assertNotNull(actual);
@@ -63,14 +62,14 @@ public class MarshallingMessageConverterTests {
@Test(expected = MessageConversionException.class)
public void fromMessageInvalidXml() throws Exception {
String payload = "<myBean><name>Foo</name><myBean>";
Message<?> message = MessageBuilder.withPayload(payload.getBytes(UTF_8)).build();
Message<?> message = MessageBuilder.withPayload(payload.getBytes(StandardCharsets.UTF_8)).build();
this.converter.fromMessage(message, MyBean.class);
}
@Test(expected = MessageConversionException.class)
public void fromMessageValidXmlWithUnknownProperty() throws IOException {
String payload = "<myBean><age>42</age><myBean>";
Message<?> message = MessageBuilder.withPayload(payload.getBytes(UTF_8)).build();
Message<?> message = MessageBuilder.withPayload(payload.getBytes(StandardCharsets.UTF_8)).build();
this.converter.fromMessage(message, MyBean.class);
}
@@ -81,7 +80,7 @@ public class MarshallingMessageConverterTests {
Message<?> message = this.converter.toMessage(payload, null);
assertNotNull(message);
String actual = new String((byte[]) message.getPayload(), UTF_8);
String actual = new String((byte[]) message.getPayload(), StandardCharsets.UTF_8);
assertXMLEqual("<myBean><name>Foo</name></myBean>", actual);
}

View File

@@ -17,6 +17,7 @@
package org.springframework.messaging.converter;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
@@ -73,16 +74,13 @@ public class StringMessageConverterTests {
String payload = "H\u00e9llo W\u00f6rld";
Message<byte[]> message = MessageBuilder.withPayload(payload.getBytes(iso88591))
.setHeader(MessageHeaders.CONTENT_TYPE, new MimeType("text", "plain", iso88591)).build();
assertEquals(payload, this.converter.fromMessage(message, String.class));
}
@Test
public void fromMessageDefaultCharset() {
Charset utf8 = Charset.forName("UTF-8");
String payload = "H\u00e9llo W\u00f6rld";
Message<byte[]> message = MessageBuilder.withPayload(payload.getBytes(utf8)).build();
Message<byte[]> message = MessageBuilder.withPayload(payload.getBytes(StandardCharsets.UTF_8)).build();
assertEquals(payload, this.converter.fromMessage(message, String.class));
}

View File

@@ -16,7 +16,7 @@
package org.springframework.messaging.core;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
@@ -141,7 +141,7 @@ public class MessageSendingTemplateTests {
MessageHeaders actual = this.template.message.getHeaders();
assertSame(messageHeaders, actual);
assertEquals(new MimeType("text", "plain", Charset.forName("UTF-8")), actual.get(MessageHeaders.CONTENT_TYPE));
assertEquals(new MimeType("text", "plain", StandardCharsets.UTF_8), actual.get(MessageHeaders.CONTENT_TYPE));
assertEquals("bar", actual.get("foo"));
}

View File

@@ -68,7 +68,7 @@ import static org.springframework.messaging.support.MessageHeaderAccessor.*;
*/
public class SendToMethodReturnValueHandlerTests {
private static final MimeType MIME_TYPE = new MimeType("text", "plain", Charset.forName("UTF-8"));
private static final MimeType MIME_TYPE = new MimeType("text", "plain", StandardCharsets.UTF_8);
private static final String PAYLOAD = "payload";

View File

@@ -57,7 +57,7 @@ import static org.mockito.BDDMockito.*;
*/
public class SubscriptionMethodReturnValueHandlerTests {
public static final MimeType MIME_TYPE = new MimeType("text", "plain", Charset.forName("UTF-8"));
public static final MimeType MIME_TYPE = new MimeType("text", "plain", StandardCharsets.UTF_8);
private static final String PAYLOAD = "payload";

View File

@@ -18,6 +18,7 @@ package org.springframework.messaging.simp.stomp;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.List;
@@ -205,7 +206,7 @@ public class BufferingStompDecoderTests {
}
private ByteBuffer toByteBuffer(String chunk) {
return ByteBuffer.wrap(chunk.getBytes(Charset.forName("UTF-8")));
return ByteBuffer.wrap(chunk.getBytes(StandardCharsets.UTF_8));
}
}

View File

@@ -16,12 +16,7 @@
package org.springframework.messaging.simp.stomp;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.ScheduledFuture;
@@ -51,6 +46,14 @@ import org.springframework.util.MimeType;
import org.springframework.util.MimeTypeUtils;
import org.springframework.util.concurrent.SettableListenableFuture;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.*;
import static org.mockito.Mockito.notNull;
import static org.mockito.Mockito.same;
/**
* Unit tests for {@link DefaultStompSession}.
*
@@ -58,9 +61,6 @@ import org.springframework.util.concurrent.SettableListenableFuture;
*/
public class DefaultStompSessionTests {
private static Charset UTF_8 = Charset.forName("UTF-8");
private DefaultStompSession session;
@Mock
@@ -80,7 +80,6 @@ public class DefaultStompSessionTests {
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
this.sessionHandler = mock(StompSessionHandler.class);
@@ -96,7 +95,6 @@ public class DefaultStompSessionTests {
@Test
public void afterConnected() throws Exception {
assertFalse(this.session.isConnected());
this.connectHeaders.setHost("my-host");
this.connectHeaders.setHeartbeat(new long[] {11, 12});
@@ -122,7 +120,6 @@ public class DefaultStompSessionTests {
@Test
public void handleConnectedFrame() throws Exception {
this.session.afterConnected(this.connection);
assertTrue(this.session.isConnected());
@@ -141,7 +138,6 @@ public class DefaultStompSessionTests {
@Test
public void heartbeatValues() throws Exception {
this.session.afterConnected(this.connection);
assertTrue(this.session.isConnected());
@@ -164,7 +160,6 @@ public class DefaultStompSessionTests {
@Test
public void heartbeatNotSupportedByServer() throws Exception {
this.session.afterConnected(this.connection);
verify(this.connection).send(any());
@@ -181,7 +176,6 @@ public class DefaultStompSessionTests {
@Test
public void heartbeatTasks() throws Exception {
this.session.afterConnected(this.connection);
verify(this.connection).send(any());
@@ -217,9 +211,8 @@ public class DefaultStompSessionTests {
@Test
public void handleErrorFrame() throws Exception {
StompHeaderAccessor accessor = StompHeaderAccessor.create(StompCommand.ERROR);
accessor.setContentType(new MimeType("text", "plain", UTF_8));
accessor.setContentType(new MimeType("text", "plain", StandardCharsets.UTF_8));
accessor.addNativeHeader("foo", "bar");
accessor.setLeaveMutable(true);
String payload = "Oops";
@@ -227,7 +220,7 @@ public class DefaultStompSessionTests {
StompHeaders stompHeaders = StompHeaders.readOnlyStompHeaders(accessor.getNativeHeaders());
when(this.sessionHandler.getPayloadType(stompHeaders)).thenReturn(String.class);
this.session.handleMessage(MessageBuilder.createMessage(payload.getBytes(UTF_8), accessor.getMessageHeaders()));
this.session.handleMessage(MessageBuilder.createMessage(payload.getBytes(StandardCharsets.UTF_8), accessor.getMessageHeaders()));
verify(this.sessionHandler).getPayloadType(stompHeaders);
verify(this.sessionHandler).handleFrame(stompHeaders, payload);
@@ -236,7 +229,6 @@ public class DefaultStompSessionTests {
@Test
public void handleErrorFrameWithEmptyPayload() throws Exception {
StompHeaderAccessor accessor = StompHeaderAccessor.create(StompCommand.ERROR);
accessor.addNativeHeader("foo", "bar");
accessor.setLeaveMutable(true);
@@ -249,12 +241,11 @@ public class DefaultStompSessionTests {
@Test
public void handleErrorFrameWithConversionException() throws Exception {
StompHeaderAccessor accessor = StompHeaderAccessor.create(StompCommand.ERROR);
accessor.setContentType(MimeTypeUtils.APPLICATION_JSON);
accessor.addNativeHeader("foo", "bar");
accessor.setLeaveMutable(true);
byte[] payload = "{'foo':'bar'}".getBytes(UTF_8);
byte[] payload = "{'foo':'bar'}".getBytes(StandardCharsets.UTF_8);
StompHeaders stompHeaders = StompHeaders.readOnlyStompHeaders(accessor.getNativeHeaders());
when(this.sessionHandler.getPayloadType(stompHeaders)).thenReturn(Map.class);
@@ -269,7 +260,6 @@ public class DefaultStompSessionTests {
@Test
public void handleMessageFrame() throws Exception {
this.session.afterConnected(this.connection);
StompFrameHandler frameHandler = mock(StompFrameHandler.class);
@@ -287,7 +277,8 @@ public class DefaultStompSessionTests {
StompHeaders stompHeaders = StompHeaders.readOnlyStompHeaders(accessor.getNativeHeaders());
when(frameHandler.getPayloadType(stompHeaders)).thenReturn(String.class);
this.session.handleMessage(MessageBuilder.createMessage(payload.getBytes(UTF_8), accessor.getMessageHeaders()));
this.session.handleMessage(MessageBuilder.createMessage(payload.getBytes(StandardCharsets.UTF_8),
accessor.getMessageHeaders()));
verify(frameHandler).getPayloadType(stompHeaders);
verify(frameHandler).handleFrame(stompHeaders, payload);
@@ -296,7 +287,6 @@ public class DefaultStompSessionTests {
@Test
public void handleMessageFrameWithConversionException() throws Exception {
this.session.afterConnected(this.connection);
assertTrue(this.session.isConnected());
@@ -310,7 +300,7 @@ public class DefaultStompSessionTests {
accessor.setContentType(MimeTypeUtils.APPLICATION_JSON);
accessor.setMessageId("1");
accessor.setLeaveMutable(true);
byte[] payload = "{'foo':'bar'}".getBytes(UTF_8);
byte[] payload = "{'foo':'bar'}".getBytes(StandardCharsets.UTF_8);
StompHeaders stompHeaders = StompHeaders.readOnlyStompHeaders(accessor.getNativeHeaders());
when(frameHandler.getPayloadType(stompHeaders)).thenReturn(Map.class);
@@ -344,7 +334,6 @@ public class DefaultStompSessionTests {
@Test
public void send() throws Exception {
this.session.afterConnected(this.connection);
assertTrue(this.session.isConnected());
@@ -360,14 +349,13 @@ public class DefaultStompSessionTests {
assertEquals(stompHeaders.toString(), 2, stompHeaders.size());
assertEquals(destination, stompHeaders.getDestination());
assertEquals(new MimeType("text", "plain", UTF_8), stompHeaders.getContentType());
assertEquals(-1, stompHeaders.getContentLength()); // StompEncoder isn't involved
assertEquals(payload, new String(message.getPayload(), UTF_8));
assertEquals(new MimeType("text", "plain", StandardCharsets.UTF_8), stompHeaders.getContentType());
assertEquals(-1, stompHeaders.getContentLength()); // StompEncoder isn't involved
assertEquals(payload, new String(message.getPayload(), StandardCharsets.UTF_8));
}
@Test
public void sendWithReceipt() throws Exception {
this.session.afterConnected(this.connection);
assertTrue(this.session.isConnected());
@@ -391,7 +379,6 @@ public class DefaultStompSessionTests {
@Test
public void sendWithConversionException() throws Exception {
this.session.afterConnected(this.connection);
assertTrue(this.session.isConnected());
@@ -407,7 +394,6 @@ public class DefaultStompSessionTests {
@Test
public void sendWithExecutionException() throws Exception {
this.session.afterConnected(this.connection);
assertTrue(this.session.isConnected());
@@ -419,14 +405,13 @@ public class DefaultStompSessionTests {
this.expected.expect(MessageDeliveryException.class);
this.expected.expectCause(Matchers.sameInstance(exception));
this.session.send("/topic/foo", "sample payload".getBytes(UTF_8));
this.session.send("/topic/foo", "sample payload".getBytes(StandardCharsets.UTF_8));
verifyNoMoreInteractions(this.connection);
}
@Test
public void subscribe() throws Exception {
this.session.afterConnected(this.connection);
assertTrue(this.session.isConnected());
@@ -446,7 +431,6 @@ public class DefaultStompSessionTests {
@Test
public void subscribeWithHeaders() throws Exception {
this.session.afterConnected(this.connection);
assertTrue(this.session.isConnected());
@@ -473,7 +457,6 @@ public class DefaultStompSessionTests {
@Test
public void unsubscribe() throws Exception {
this.session.afterConnected(this.connection);
assertTrue(this.session.isConnected());
@@ -493,7 +476,6 @@ public class DefaultStompSessionTests {
@Test
public void ack() throws Exception {
this.session.afterConnected(this.connection);
assertTrue(this.session.isConnected());
@@ -511,7 +493,6 @@ public class DefaultStompSessionTests {
@Test
public void nack() throws Exception {
this.session.afterConnected(this.connection);
assertTrue(this.session.isConnected());
@@ -529,7 +510,6 @@ public class DefaultStompSessionTests {
@Test
public void receiptReceived() throws Exception {
this.session.afterConnected(this.connection);
this.session.setTaskScheduler(mock(TaskScheduler.class));
@@ -554,7 +534,6 @@ public class DefaultStompSessionTests {
@Test
public void receiptReceivedBeforeTaskAdded() throws Exception {
this.session.afterConnected(this.connection);
this.session.setTaskScheduler(mock(TaskScheduler.class));
@@ -579,7 +558,6 @@ public class DefaultStompSessionTests {
@Test
@SuppressWarnings({ "unchecked", "rawtypes" })
public void receiptNotReceived() throws Exception {
TaskScheduler taskScheduler = mock(TaskScheduler.class);
this.session.afterConnected(this.connection);
@@ -611,7 +589,6 @@ public class DefaultStompSessionTests {
@Test
public void disconnect() throws Exception {
this.session.afterConnected(this.connection);
assertTrue(this.session.isConnected());

View File

@@ -16,7 +16,7 @@
package org.springframework.messaging.simp.stomp;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -33,6 +33,7 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.messaging.Message;
@@ -48,9 +49,7 @@ import org.springframework.messaging.support.MessageBuilder;
import org.springframework.util.Assert;
import org.springframework.util.SocketUtils;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.*;
/**
* Integration tests for {@link StompBrokerRelayMessageHandler} running against ActiveMQ.
@@ -64,8 +63,6 @@ public class StompBrokerRelayMessageHandlerIntegrationTests {
private static final Log logger = LogFactory.getLog(StompBrokerRelayMessageHandlerIntegrationTests.class);
private static final Charset UTF_8 = Charset.forName("UTF-8");
private StompBrokerRelayMessageHandler relay;
private BrokerService activeMQBroker;
@@ -142,9 +139,9 @@ public class StompBrokerRelayMessageHandlerIntegrationTests {
logger.debug("Broker stopped");
}
@Test
public void publishSubscribe() throws Exception {
logger.debug("Starting test publishSubscribe()");
String sess1 = "sess1";
@@ -167,7 +164,7 @@ public class StompBrokerRelayMessageHandlerIntegrationTests {
this.responseHandler.expectMessages(send);
}
@Test(expected=MessageDeliveryException.class)
@Test(expected = MessageDeliveryException.class)
public void messageDeliveryExceptionIfSystemSessionForwardFails() throws Exception {
logger.debug("Starting test messageDeliveryExceptionIfSystemSessionForwardFails()");
@@ -181,7 +178,6 @@ public class StompBrokerRelayMessageHandlerIntegrationTests {
@Test
public void brokerBecomingUnvailableTriggersErrorFrame() throws Exception {
logger.debug("Starting test brokerBecomingUnvailableTriggersErrorFrame()");
String sess1 = "sess1";
@@ -197,7 +193,6 @@ public class StompBrokerRelayMessageHandlerIntegrationTests {
@Test
public void brokerAvailabilityEventWhenStopped() throws Exception {
logger.debug("Starting test brokerAvailabilityEventWhenStopped()");
stopActiveMqBrokerAndAwait();
@@ -206,7 +201,6 @@ public class StompBrokerRelayMessageHandlerIntegrationTests {
@Test
public void relayReconnectsIfBrokerComesBackUp() throws Exception {
logger.debug("Starting test relayReconnectsIfBrokerComesBackUp()");
String sess1 = "sess1";
@@ -232,7 +226,6 @@ public class StompBrokerRelayMessageHandlerIntegrationTests {
@Test
public void disconnectWithReceipt() throws Exception {
logger.debug("Starting test disconnectWithReceipt()");
MessageExchange connect = MessageExchangeBuilder.connect("sess1").build();
@@ -270,6 +263,7 @@ public class StompBrokerRelayMessageHandlerIntegrationTests {
}
}
private static class TestMessageHandler implements MessageHandler {
private final BlockingQueue<Message<?>> queue = new LinkedBlockingQueue<>();
@@ -283,17 +277,13 @@ public class StompBrokerRelayMessageHandlerIntegrationTests {
}
public void expectMessages(MessageExchange... messageExchanges) throws InterruptedException {
List<MessageExchange> expectedMessages =
new ArrayList<>(Arrays.<MessageExchange>asList(messageExchanges));
while (expectedMessages.size() > 0) {
Message<?> message = this.queue.poll(10000, TimeUnit.MILLISECONDS);
assertNotNull("Timed out waiting for messages, expected [" + expectedMessages + "]", message);
MessageExchange match = findMatch(expectedMessages, message);
assertNotNull("Unexpected message=" + message + ", expected [" + expectedMessages + "]", match);
expectedMessages.remove(match);
}
}
@@ -308,6 +298,7 @@ public class StompBrokerRelayMessageHandlerIntegrationTests {
}
}
/**
* Holds a message as well as expected and actual messages matched against expectations.
*/
@@ -343,6 +334,7 @@ public class StompBrokerRelayMessageHandlerIntegrationTests {
}
}
private static class MessageExchangeBuilder {
private final Message<?> message;
@@ -351,8 +343,7 @@ public class StompBrokerRelayMessageHandlerIntegrationTests {
private final List<MessageMatcher> expected = new ArrayList<>();
private MessageExchangeBuilder(Message<?> message) {
public MessageExchangeBuilder(Message<?> message) {
this.message = message;
this.headers = StompHeaderAccessor.wrap(message);
}
@@ -402,7 +393,8 @@ public class StompBrokerRelayMessageHandlerIntegrationTests {
public static MessageExchangeBuilder send(String destination, String payload) {
SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE);
headers.setDestination(destination);
Message<?> message = MessageBuilder.createMessage(payload.getBytes(UTF_8), headers.getMessageHeaders());
Message<?> message = MessageBuilder.createMessage(payload.getBytes(StandardCharsets.UTF_8),
headers.getMessageHeaders());
return new MessageExchangeBuilder(message);
}
@@ -442,25 +434,24 @@ public class StompBrokerRelayMessageHandlerIntegrationTests {
}
}
private static interface MessageMatcher {
private interface MessageMatcher {
boolean match(Message<?> message);
}
private static class StompFrameMessageMatcher implements MessageMatcher {
private final StompCommand command;
private final String sessionId;
public StompFrameMessageMatcher(StompCommand command, String sessionId) {
this.command = command;
this.sessionId = sessionId;
}
@Override
public final boolean match(Message<?> message) {
StompHeaderAccessor headers = StompHeaderAccessor.wrap(message);
@@ -480,6 +471,7 @@ public class StompBrokerRelayMessageHandlerIntegrationTests {
}
}
private static class StompReceiptFrameMessageMatcher extends StompFrameMessageMatcher {
private final String receiptId;
@@ -500,6 +492,7 @@ public class StompBrokerRelayMessageHandlerIntegrationTests {
}
}
private static class StompMessageFrameMessageMatcher extends StompFrameMessageMatcher {
private final String subscriptionId;
@@ -508,7 +501,6 @@ public class StompBrokerRelayMessageHandlerIntegrationTests {
private final Object payload;
public StompMessageFrameMessageMatcher(String sessionId, String subscriptionId, String destination, Object payload) {
super(StompCommand.MESSAGE, sessionId);
this.subscriptionId = subscriptionId;
@@ -536,18 +528,17 @@ public class StompBrokerRelayMessageHandlerIntegrationTests {
}
protected String getPayloadAsText() {
return (this.payload instanceof byte[])
? new String((byte[]) this.payload, UTF_8) : payload.toString();
return (this.payload instanceof byte[]) ?
new String((byte[]) this.payload, StandardCharsets.UTF_8) : this.payload.toString();
}
}
private static class StompConnectedFrameMessageMatcher extends StompFrameMessageMatcher {
private static class StompConnectedFrameMessageMatcher extends StompFrameMessageMatcher {
public StompConnectedFrameMessageMatcher(String sessionId) {
super(StompCommand.CONNECTED, sessionId);
}
}
}

View File

@@ -17,7 +17,7 @@
package org.springframework.messaging.simp.stomp;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
@@ -46,11 +46,8 @@ import static org.junit.Assert.*;
*/
public class StompHeaderAccessorTests {
private static final Charset UTF_8 = Charset.forName("UTF-8");
@Test
public void createWithCommand() {
StompHeaderAccessor accessor = StompHeaderAccessor.create(StompCommand.CONNECTED);
assertEquals(StompCommand.CONNECTED, accessor.getCommand());
@@ -60,7 +57,6 @@ public class StompHeaderAccessorTests {
@Test
public void createWithSubscribeNativeHeaders() {
MultiValueMap<String, String> extHeaders = new LinkedMultiValueMap<>();
extHeaders.add(StompHeaderAccessor.STOMP_ID_HEADER, "s1");
extHeaders.add(StompHeaderAccessor.STOMP_DESTINATION_HEADER, "/d");
@@ -75,7 +71,6 @@ public class StompHeaderAccessorTests {
@Test
public void createWithUnubscribeNativeHeaders() {
MultiValueMap<String, String> extHeaders = new LinkedMultiValueMap<>();
extHeaders.add(StompHeaderAccessor.STOMP_ID_HEADER, "s1");
@@ -88,7 +83,6 @@ public class StompHeaderAccessorTests {
@Test
public void createWithMessageFrameNativeHeaders() {
MultiValueMap<String, String> extHeaders = new LinkedMultiValueMap<>();
extHeaders.add(StompHeaderAccessor.DESTINATION_HEADER, "/d");
extHeaders.add(StompHeaderAccessor.STOMP_SUBSCRIPTION_HEADER, "s1");
@@ -103,7 +97,6 @@ public class StompHeaderAccessorTests {
@Test
public void createWithConnectNativeHeaders() {
MultiValueMap<String, String> extHeaders = new LinkedMultiValueMap<>();
extHeaders.add(StompHeaderAccessor.STOMP_LOGIN_HEADER, "joe");
extHeaders.add(StompHeaderAccessor.STOMP_PASSCODE_HEADER, "joe123");
@@ -124,7 +117,6 @@ public class StompHeaderAccessorTests {
@Test
public void toNativeHeadersSubscribe() {
StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.SUBSCRIBE);
headers.setSubscriptionId("s1");
headers.setDestination("/d");
@@ -138,7 +130,6 @@ public class StompHeaderAccessorTests {
@Test
public void toNativeHeadersUnsubscribe() {
StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.UNSUBSCRIBE);
headers.setSubscriptionId("s1");
@@ -150,7 +141,6 @@ public class StompHeaderAccessorTests {
@Test
public void toNativeHeadersMessageFrame() {
StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.MESSAGE);
headers.setSubscriptionId("s1");
headers.setDestination("/d");
@@ -168,7 +158,6 @@ public class StompHeaderAccessorTests {
@Test
public void toNativeHeadersContentType() {
SimpMessageHeaderAccessor simpHeaderAccessor = SimpMessageHeaderAccessor.create();
simpHeaderAccessor.setContentType(MimeTypeUtils.APPLICATION_ATOM_XML);
Message<byte[]> message = MessageBuilder.createMessage(new byte[0], simpHeaderAccessor.getMessageHeaders());
@@ -181,7 +170,6 @@ public class StompHeaderAccessorTests {
@Test
public void encodeConnectWithLoginAndPasscode() throws UnsupportedEncodingException {
MultiValueMap<String, String> extHeaders = new LinkedMultiValueMap<>();
extHeaders.add(StompHeaderAccessor.STOMP_LOGIN_HEADER, "joe");
extHeaders.add(StompHeaderAccessor.STOMP_PASSCODE_HEADER, "joe123");
@@ -195,7 +183,6 @@ public class StompHeaderAccessorTests {
@Test
public void modifyCustomNativeHeader() {
MultiValueMap<String, String> extHeaders = new LinkedMultiValueMap<>();
extHeaders.add(StompHeaderAccessor.STOMP_ID_HEADER, "s1");
extHeaders.add(StompHeaderAccessor.STOMP_DESTINATION_HEADER, "/d");
@@ -249,7 +236,7 @@ public class StompHeaderAccessorTests {
accessor.setDestination("/foo");
accessor.setContentType(MimeTypeUtils.APPLICATION_JSON);
accessor.setSessionId("123");
String actual = accessor.getShortLogMessage("payload".getBytes(Charset.forName("UTF-8")));
String actual = accessor.getShortLogMessage("payload".getBytes(StandardCharsets.UTF_8));
assertEquals("SEND /foo session=123 application/json payload=payload", actual);
StringBuilder sb = new StringBuilder();
@@ -257,7 +244,7 @@ public class StompHeaderAccessorTests {
sb.append("a");
}
final String payload = sb.toString() + " > 80";
actual = accessor.getShortLogMessage(payload.getBytes(UTF_8));
actual = accessor.getShortLogMessage(payload.getBytes(StandardCharsets.UTF_8));
assertEquals("SEND /foo session=123 application/json payload=" + sb + "...(truncated)", actual);
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2015 the original author or authors.
* Copyright 2002-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,6 +21,7 @@ import static org.mockito.BDDMockito.*;
import static org.springframework.messaging.simp.SimpMessageHeaderAccessor.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import org.junit.Before;
import org.junit.Test;
@@ -45,7 +46,6 @@ public class UserDestinationMessageHandlerTests {
private static final String SESSION_ID = "123";
private UserDestinationMessageHandler handler;
private SimpUserRegistry registry;
@@ -138,7 +138,7 @@ public class UserDestinationMessageHandlerTests {
accessor.setNativeHeader(ORIGINAL_DESTINATION, "/user/joe/queue/foo");
accessor.setNativeHeader("customHeader", "customHeaderValue");
accessor.setLeaveMutable(true);
byte[] payload = "payload".getBytes(Charset.forName("UTF-8"));
byte[] payload = "payload".getBytes(StandardCharsets.UTF_8);
this.handler.handleMessage(MessageBuilder.createMessage(payload, accessor.getMessageHeaders()));
ArgumentCaptor<Message> captor = ArgumentCaptor.forClass(Message.class);
@@ -161,7 +161,7 @@ public class UserDestinationMessageHandlerTests {
accessor.setDestination("/topic/unresolved");
accessor.setNativeHeader(ORIGINAL_DESTINATION, "/user/joe/queue/foo");
accessor.setLeaveMutable(true);
byte[] payload = "payload".getBytes(Charset.forName("UTF-8"));
byte[] payload = "payload".getBytes(StandardCharsets.UTF_8);
this.handler.handleMessage(MessageBuilder.createMessage(payload, accessor.getMessageHeaders()));
// No re-broadcast

View File

@@ -16,7 +16,7 @@
package org.springframework.messaging.support;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
@@ -45,8 +45,6 @@ import static org.junit.Assert.*;
*/
public class MessageHeaderAccessorTests {
private static final Charset UTF_8 = Charset.forName("UTF-8");
@Rule
public final ExpectedException thrown = ExpectedException.none();
@@ -334,7 +332,7 @@ public class MessageHeaderAccessorTests {
accessor.setContentType(MimeTypeUtils.TEXT_PLAIN);
assertEquals("headers={contentType=text/plain} payload=p", accessor.getShortLogMessage("p"));
assertEquals("headers={contentType=text/plain} payload=p", accessor.getShortLogMessage("p".getBytes(UTF_8)));
assertEquals("headers={contentType=text/plain} payload=p", accessor.getShortLogMessage("p".getBytes(StandardCharsets.UTF_8)));
assertEquals("headers={contentType=text/plain} payload=p", accessor.getShortLogMessage(new Object() {
@Override
public String toString() {
@@ -351,7 +349,7 @@ public class MessageHeaderAccessorTests {
String actual = accessor.getShortLogMessage(payload);
assertEquals("headers={contentType=text/plain} payload=" + sb + "...(truncated)", actual);
actual = accessor.getShortLogMessage(payload.getBytes(UTF_8));
actual = accessor.getShortLogMessage(payload.getBytes(StandardCharsets.UTF_8));
assertEquals("headers={contentType=text/plain} payload=" + sb + "...(truncated)", actual);
actual = accessor.getShortLogMessage(new Object() {
@@ -369,7 +367,7 @@ public class MessageHeaderAccessorTests {
accessor.setContentType(MimeTypeUtils.TEXT_PLAIN);
assertEquals("headers={contentType=text/plain} payload=p", accessor.getDetailedLogMessage("p"));
assertEquals("headers={contentType=text/plain} payload=p", accessor.getDetailedLogMessage("p".getBytes(UTF_8)));
assertEquals("headers={contentType=text/plain} payload=p", accessor.getDetailedLogMessage("p".getBytes(StandardCharsets.UTF_8)));
assertEquals("headers={contentType=text/plain} payload=p", accessor.getDetailedLogMessage(new Object() {
@Override
public String toString() {
@@ -386,7 +384,7 @@ public class MessageHeaderAccessorTests {
String actual = accessor.getDetailedLogMessage(payload);
assertEquals("headers={contentType=text/plain} payload=" + sb + " > 80", actual);
actual = accessor.getDetailedLogMessage(payload.getBytes(UTF_8));
actual = accessor.getDetailedLogMessage(payload.getBytes(StandardCharsets.UTF_8));
assertEquals("headers={contentType=text/plain} payload=" + sb + " > 80", actual);
actual = accessor.getDetailedLogMessage(new Object() {