changeset 1399:8f05f8a277d9

Improve error checking when doing JSON serialization. Reviewed-by: neugens Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2014-May/009838.html PR1784
author Severin Gehwolf <sgehwolf@redhat.com>
date Wed, 21 May 2014 18:45:24 +0200
parents 044868dbf9ad
children 9a8d79ed2844
files web/server/src/main/java/com/redhat/thermostat/web/server/WebStorageEndPoint.java
diffstat 1 files changed, 12 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/web/server/src/main/java/com/redhat/thermostat/web/server/WebStorageEndPoint.java	Wed May 21 15:26:25 2014 +0200
+++ b/web/server/src/main/java/com/redhat/thermostat/web/server/WebStorageEndPoint.java	Wed May 21 18:45:24 2014 +0200
@@ -40,6 +40,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.io.PrintWriter;
 import java.io.Writer;
 import java.lang.reflect.Array;
 import java.lang.reflect.InvocationTargetException;
@@ -739,9 +740,19 @@
 
     private void writeResponse(HttpServletResponse resp,
             Object responseObj, Class<?> typeOfResponseObj) throws IOException {
+        String json = null;
+        try {
+            json = gson.toJson(responseObj, typeOfResponseObj);
+        } catch (Exception e) {
+            logger.log(Level.WARNING, "JSON serialization failed for " + typeOfResponseObj, e);
+            resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+            return;
+        }
         resp.setStatus(HttpServletResponse.SC_OK);
         resp.setContentType(RESPONSE_JSON_CONTENT_TYPE);
-        gson.toJson(responseObj, typeOfResponseObj, resp.getWriter());
+        try (PrintWriter pw = resp.getWriter()) {
+            pw.write(json);
+        }
         resp.flushBuffer();
     }