changeset 1058:36241f812295

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
author Omair Majid <omajid@redhat.com>
date Thu, 04 Apr 2013 10:40:38 -0400
parents f2bea882daf4
children e11e9cbab899
files web/server/src/main/java/com/redhat/thermostat/web/server/WebStorageEndPoint.java web/server/src/test/java/com/redhat/thermostat/web/server/WebStorageEndpointTest.java
diffstat 2 files changed, 10 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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();
     }
--- 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);