]> source.dussan.org Git - vaadin-framework.git/commitdiff
UIInitHandler emits Content-Length when writing json response (#15271)
authorFabian Lange <lange.fabian@gmail.com>
Mon, 24 Nov 2014 11:11:08 +0000 (12:11 +0100)
committerLeif Åstrand <leif@vaadin.com>
Fri, 5 Dec 2014 08:37:05 +0000 (08:37 +0000)
This prevents chunked-transfer mode and allows server infrastructure to
decide correctly on things like compression which benefits from knowing
a content length.

Change-Id: I4e969e0874b506d0f61526662ee78418987937c4

server/src/com/vaadin/server/communication/UIInitHandler.java

index 8e61370d85dd65a3ca185dd332b2e20984d27f53..1216d2b689918a9b813c831649444dc1065fdac6 100644 (file)
@@ -17,7 +17,7 @@
 package com.vaadin.server.communication;
 
 import java.io.IOException;
-import java.io.OutputStreamWriter;
+import java.io.OutputStream;
 import java.io.StringWriter;
 import java.util.List;
 import java.util.logging.Level;
@@ -110,18 +110,13 @@ public abstract class UIInitHandler extends SynchronizedRequestHandler {
         // iOS 6 Safari requires this (#9732)
         response.setHeader("Cache-Control", "no-cache");
 
-        // NOTE! GateIn requires, for some weird reason, getOutputStream
-        // to be used instead of getWriter() (it seems to interpret
-        // application/json as a binary content type)
-        OutputStreamWriter outputWriter = new OutputStreamWriter(
-                response.getOutputStream(), "UTF-8");
-        try {
-            outputWriter.write(json);
-            // NOTE GateIn requires the buffers to be flushed to work
-            outputWriter.flush();
-        } finally {
-            outputWriter.close();
-        }
+        byte[] b = json.getBytes("UTF-8");
+        response.setHeader("Content-Length", String.valueOf(b.length));
+
+        OutputStream outputStream = response.getOutputStream();
+        outputStream.write(b);
+        // NOTE GateIn requires the buffers to be flushed to work
+        outputStream.flush();
 
         return true;
     }