Author: hlship
Date: Mon Sep 20 17:08:27 2010
New Revision: 999009

URL: http://svn.apache.org/viewvc?rev=999009&view=rev
Log:
TAP5-1277: Tapestry incorrectly calls PrintWriter.flush(), not close(), when 
writing JSON objects and arrays as the response

Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPartialResponseRendererImpl.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/JSONArrayEventResultProcessor.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/JSONObjectEventResultProcessor.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/JSONArrayEventResultProcessorTest.java
    
tapestry/tapestry5/trunk/tapestry-json/src/main/java/org/apache/tapestry5/json/JSONCollection.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPartialResponseRendererImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPartialResponseRendererImpl.java?rev=999009&r1=999008&r2=999009&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPartialResponseRendererImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPartialResponseRendererImpl.java
 Mon Sep 20 17:08:27 2010
@@ -86,10 +86,7 @@ public class AjaxPartialResponseRenderer
 
         PrintWriter pw = response.getPrintWriter(contentType.toString());
 
-        if (compactJSON)
-            reply.print(pw);
-        else
-            reply.prettyPrint(pw);
+        reply.print(pw, compactJSON);
 
         pw.close();
     }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/JSONArrayEventResultProcessor.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/JSONArrayEventResultProcessor.java?rev=999009&r1=999008&r2=999009&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/JSONArrayEventResultProcessor.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/JSONArrayEventResultProcessor.java
 Mon Sep 20 17:08:27 2010
@@ -28,15 +28,22 @@ import org.apache.tapestry5.services.Res
 public class JSONArrayEventResultProcessor implements 
ComponentEventResultProcessor<JSONArray>
 {
     private final Response response;
+
     private final String outputEncoding;
 
+    private final boolean compactJSON;
+
     public JSONArrayEventResultProcessor(Response response,
 
     @Symbol(SymbolConstants.CHARSET)
-    String outputEncoding)
+    String outputEncoding,
+
+    @Symbol(SymbolConstants.COMPACT_JSON)
+    boolean compactJSON)
     {
         this.response = response;
         this.outputEncoding = outputEncoding;
+        this.compactJSON = compactJSON;
     }
 
     public void processResultValue(JSONArray value) throws IOException
@@ -45,8 +52,8 @@ public class JSONArrayEventResultProcess
 
         PrintWriter pw = response.getPrintWriter(contentType.toString());
 
-        pw.print(value.toString());
+        value.print(pw, compactJSON);
 
-        pw.flush();
+        pw.close();
     }
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/JSONObjectEventResultProcessor.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/JSONObjectEventResultProcessor.java?rev=999009&r1=999008&r2=999009&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/JSONObjectEventResultProcessor.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/JSONObjectEventResultProcessor.java
 Mon Sep 20 17:08:27 2010
@@ -36,13 +36,19 @@ public class JSONObjectEventResultProces
 
     private final String outputEncoding;
 
+    private final boolean compactJSON;
+
     public JSONObjectEventResultProcessor(Response response,
 
     @Symbol(SymbolConstants.CHARSET)
-    String outputEncoding)
+    String outputEncoding,
+
+    @Symbol(SymbolConstants.COMPACT_JSON)
+    boolean compactJSON)
     {
         this.response = response;
         this.outputEncoding = outputEncoding;
+        this.compactJSON = compactJSON;
     }
 
     public void processResultValue(JSONObject value) throws IOException
@@ -51,8 +57,8 @@ public class JSONObjectEventResultProces
 
         PrintWriter pw = response.getPrintWriter(contentType.toString());
 
-        pw.print(value.toString());
+        value.print(pw, compactJSON);
 
-        pw.flush();
+        pw.close();
     }
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=999009&r1=999008&r2=999009&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
 Mon Sep 20 17:08:27 2010
@@ -2457,7 +2457,7 @@ public final class TapestryModule
         configuration.add(SymbolConstants.BLACKBIRD_ENABLED, "false");
 
         configuration.add(InternalSymbols.PRE_SELECTED_FORM_NAMES, 
"reset,submit,select,id,method,action,onsubmit");
-        
+
         configuration.add(InternalSymbols.ALIAS_MODE, "servlet");
     }
 
@@ -2721,7 +2721,6 @@ public final class TapestryModule
      * <li>image/jpeg</li>
      * <li>image/gif</li>
      * <li>image/png</li>
-     * <li>application/json (see 
https://issues.apache.org/jira/browse/TAP5-469)</li>
      * <li>application/x-shockwave-flash</li>
      * </ul>
      * 
@@ -2732,7 +2731,6 @@ public final class TapestryModule
         configuration.add("image/jpeg");
         configuration.add("image/gif");
         configuration.add("image/png");
-        configuration.add("application/json");
         configuration.add("application/x-shockwave-flash");
     }
 

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/JSONArrayEventResultProcessorTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/JSONArrayEventResultProcessorTest.java?rev=999009&r1=999008&r2=999009&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/JSONArrayEventResultProcessorTest.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/JSONArrayEventResultProcessorTest.java
 Mon Sep 20 17:08:27 2010
@@ -40,7 +40,7 @@ public class JSONArrayEventResultProcess
 
         JSONArray array = new JSONArray("   [ \"fred\", \"barney\" \n\n]");
 
-        JSONArrayEventResultProcessor p = new 
JSONArrayEventResultProcessor(response, encoding);
+        JSONArrayEventResultProcessor p = new 
JSONArrayEventResultProcessor(response, encoding, false);
 
         p.processResultValue(array);
 

Modified: 
tapestry/tapestry5/trunk/tapestry-json/src/main/java/org/apache/tapestry5/json/JSONCollection.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-json/src/main/java/org/apache/tapestry5/json/JSONCollection.java?rev=999009&r1=999008&r2=999009&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-json/src/main/java/org/apache/tapestry5/json/JSONCollection.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-json/src/main/java/org/apache/tapestry5/json/JSONCollection.java
 Mon Sep 20 17:08:27 2010
@@ -80,11 +80,27 @@ public abstract class JSONCollection
     }
 
     /**
+     * Prints the JSONObject to the write (compactly or not).
+     * 
+     * @param writer
+     *            to write content to
+     * @param compact
+     *            if true, then write compactly, if false, write with pretty 
printing
+     * @since 5.2.1
+     */
+    public void print(PrintWriter writer, boolean compact)
+    {
+        JSONPrintSession session = compact ? new CompactSession(writer) : new 
PrettyPrintSession(writer);
+
+        print(session);
+    }
+
+    /**
      * Prints the JSONObject to the writer compactly (with no extra 
whitespace).
      */
     public void print(PrintWriter writer)
     {
-        print(new CompactSession(writer));
+        print(writer, true);
     }
 
     /**
@@ -92,7 +108,7 @@ public abstract class JSONCollection
      */
     public void prettyPrint(PrintWriter writer)
     {
-        print(new PrettyPrintSession(writer));
+        print(writer, false);
     }
 
     /**


Reply via email to