# HG changeset patch # User Omair Majid # Date 1365086438 14400 # Node ID 36241f812295895f29efcdcd71fdfa255d688672 # Parent f2bea882daf45eb7ac6cf32b11dd91fe3da600c1 PR1344: Serialization of web storage is not handling non-ascii characters properly Reviewed-by: jerboaa Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2013-April/006260.html diff -r f2bea882daf4 -r 36241f812295 web/server/src/main/java/com/redhat/thermostat/web/server/WebStorageEndPoint.java --- a/web/server/src/main/java/com/redhat/thermostat/web/server/WebStorageEndPoint.java Wed Apr 03 15:12:47 2013 +0200 +++ b/web/server/src/main/java/com/redhat/thermostat/web/server/WebStorageEndPoint.java Thu Apr 04 10:40:38 2013 -0400 @@ -96,6 +96,11 @@ private static final String ROLE_THERMOSTAT_AGENT = "thermostat-agent"; private static final String ROLE_THERMOSTAT_CLIENT = "thermostat-client"; private static final String ROLE_CMD_CHANNEL = "thermostat-cmd-channel"; + + // our strings can contain non-ASCII characters. Use UTF-8 + // see also PR 1344 + private static final String RESPONSE_JSON_CONTENT_TYPE = "application/json; charset=UTF-8"; + private static final Logger logger = LoggingUtils.getLogger(WebStorageEndPoint.class); private Storage storage; @@ -265,7 +270,7 @@ Category category = getCategoryFromId(categoryId); long result = storage.getCount(category); resp.setStatus(HttpServletResponse.SC_OK); - resp.setContentType("application/json"); + resp.setContentType(RESPONSE_JSON_CONTENT_TYPE); gson.toJson(result, resp.getWriter()); resp.flushBuffer(); } catch (IOException ex) { @@ -291,7 +296,7 @@ currentCategoryId++; } resp.setStatus(HttpServletResponse.SC_OK); - resp.setContentType("application/json"); + resp.setContentType(RESPONSE_JSON_CONTENT_TYPE); Writer writer = resp.getWriter(); gson.toJson(id, writer); writer.flush(); @@ -403,7 +408,7 @@ private void writeResponse(HttpServletResponse resp, Object result) throws IOException { resp.setStatus(HttpServletResponse.SC_OK); - resp.setContentType("application/json"); + resp.setContentType(RESPONSE_JSON_CONTENT_TYPE); gson.toJson(result, resp.getWriter()); resp.flushBuffer(); } diff -r f2bea882daf4 -r 36241f812295 web/server/src/test/java/com/redhat/thermostat/web/server/WebStorageEndpointTest.java --- a/web/server/src/test/java/com/redhat/thermostat/web/server/WebStorageEndpointTest.java Wed Apr 03 15:12:47 2013 +0200 +++ b/web/server/src/test/java/com/redhat/thermostat/web/server/WebStorageEndpointTest.java Thu Apr 04 10:40:38 2013 -0400 @@ -245,6 +245,8 @@ assertEquals("fluff2", results[1].getKey1()); assertEquals(43, results[1].getKey2()); + assertEquals("application/json; charset=UTF-8", conn.getContentType()); + verify(mockQuery).where(key1, Criteria.EQUALS, "fluff"); verify(mockQuery).sort(key1, SortDirection.DESCENDING); verify(mockQuery).limit(42);