From 82ec06ad349426acf663f8edc22dd7716c4ff2cd Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Thu, 18 Jul 2013 17:53:48 -0400 Subject: [PATCH] Fix bug in SockJS JsonpTransportHandler Issue: SPR-10621 --- .../sockjs/transport/JsonpTransportHandler.java | 3 ++- .../HttpReceivingTransportHandlerTests.java | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/JsonpTransportHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/JsonpTransportHandler.java index 2bf3a3feba..585fcb2272 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/JsonpTransportHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/JsonpTransportHandler.java @@ -61,7 +61,8 @@ public class JsonpTransportHandler extends AbstractHttpReceivingTransportHandler @Override protected String[] readMessages(ServerHttpRequest request) throws IOException { - if (MediaType.APPLICATION_FORM_URLENCODED.equals(request.getHeaders().getContentType())) { + MediaType contentType = request.getHeaders().getContentType(); + if ((contentType != null) && MediaType.APPLICATION_FORM_URLENCODED.isCompatibleWith(contentType)) { MultiValueMap map = this.formConverter.read(null, request); String d = map.getFirst("d"); return (StringUtils.hasText(d)) ? getObjectMapper().readValue(d, String[].class) : null; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/transport/HttpReceivingTransportHandlerTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/transport/HttpReceivingTransportHandlerTests.java index 244c2edb6c..ee184d0fd6 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/transport/HttpReceivingTransportHandlerTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/transport/HttpReceivingTransportHandlerTests.java @@ -73,6 +73,18 @@ public class HttpReceivingTransportHandlerTests extends AbstractHttpRequestTest assertEquals("ok", this.servletResponse.getContentAsString()); } + // SPR-10621 + + @Test + public void readMessagesJsonpFormEncodedWithEncoding() throws Exception { + this.servletRequest.setContent("d=[\"x\"]".getBytes("UTF-8")); + this.servletRequest.setContentType("application/x-www-form-urlencoded;charset=UTF-8"); + handleRequest(new JsonpTransportHandler()); + + assertEquals(200, this.servletResponse.getStatus()); + assertEquals("ok", this.servletResponse.getContentAsString()); + } + @Test public void readMessagesBadContent() throws Exception { this.servletRequest.setContent("".getBytes("UTF-8"));