You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pe...@apache.org on 2011/04/18 07:36:28 UTC

svn commit: r1094227 - in /wicket/trunk/wicket-core/src: main/java/org/apache/wicket/ajax/AjaxRequestTarget.java main/java/org/apache/wicket/protocol/http/BufferedWebResponse.java test/java/org/apache/wicket/response/filter/ResponseFilterTest.java

Author: pedro
Date: Mon Apr 18 05:36:27 2011
New Revision: 1094227

URL: http://svn.apache.org/viewvc?rev=1094227&view=rev
Log:
Changing AjaxRequestTarget and BufferedWebResponse to don't discard the filtered AppendingStringBuffer response if the filter returns a new instance.
Issue: WICKET-3620

Modified:
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/BufferedWebResponse.java
    wicket/trunk/wicket-core/src/test/java/org/apache/wicket/response/filter/ResponseFilterTest.java

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java?rev=1094227&r1=1094226&r2=1094227&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java Mon Apr 18 05:36:27 2011
@@ -600,8 +600,8 @@ public class AjaxRequestTarget implement
 			{
 				final StringResponse bodyResponse = new StringResponse();
 				contructResponseBody(bodyResponse, encoding);
-				invokeResponseFilters(bodyResponse);
-				response.write(bodyResponse.getBuffer());
+				CharSequence filteredResponse = invokeResponseFilters(bodyResponse);
+				response.write(filteredResponse);
 			}
 			finally
 			{
@@ -670,8 +670,9 @@ public class AjaxRequestTarget implement
 	 * 
 	 * @param contentResponse
 	 *            the Ajax {@link Response} body
+	 * @return filtered response
 	 */
-	private void invokeResponseFilters(final StringResponse contentResponse)
+	private AppendingStringBuffer invokeResponseFilters(final StringResponse contentResponse)
 	{
 		AppendingStringBuffer responseBuffer = new AppendingStringBuffer(
 			contentResponse.getBuffer());
@@ -684,9 +685,10 @@ public class AjaxRequestTarget implement
 		{
 			for (IResponseFilter filter : responseFilters)
 			{
-				filter.filter(responseBuffer);
+				responseBuffer = filter.filter(responseBuffer);
 			}
 		}
+		return responseBuffer;
 	}
 
 	/**

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/BufferedWebResponse.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/BufferedWebResponse.java?rev=1094227&r1=1094226&r2=1094227&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/BufferedWebResponse.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/BufferedWebResponse.java Mon Apr 18 05:36:27 2011
@@ -142,10 +142,10 @@ public class BufferedWebResponse extends
 			{
 				for (IResponseFilter filter : responseFilters)
 				{
-					filter.filter(responseBuffer);
+					responseBuffer = filter.filter(responseBuffer);
 				}
 			}
-			response.write(builder);
+			response.write(responseBuffer);
 		}
 
 		@Override

Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/response/filter/ResponseFilterTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/response/filter/ResponseFilterTest.java?rev=1094227&r1=1094226&r2=1094227&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/response/filter/ResponseFilterTest.java (original)
+++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/response/filter/ResponseFilterTest.java Mon Apr 18 05:36:27 2011
@@ -21,7 +21,10 @@ import static org.junit.Assert.assertTru
 
 import java.util.concurrent.atomic.AtomicInteger;
 
+import junit.framework.Assert;
+
 import org.apache.wicket.MockPageWithLink;
+import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.protocol.http.WebApplication;
@@ -64,6 +67,7 @@ public class ResponseFilterTest
 			{
 				super.init();
 				getRequestCycleSettings().addResponseFilter(responseFilter);
+				getRequestCycleSettings().addResponseFilter(AppendCommentFilter.INSTANCE);
 			}
 		};
 
@@ -76,6 +80,46 @@ public class ResponseFilterTest
 		counter.set(0);
 	}
 
+	/**
+	 * WICKET-3620
+	 */
+	@Test
+	public void testFilterAddCommentFilter()
+	{
+		tester.startPage(DummyHomePage.class);
+		Assert.assertTrue(tester.getLastResponseAsString().contains(AppendCommentFilter.COMMENT));
+	}
+
+	/**
+	 * WICKET-3620
+	 */
+	@Test
+	public void testAddCommentFilterInAjaxResponse()
+	{
+		DummyHomePage testPage = new DummyHomePage();
+		testPage.getTestPageLink().add(new AjaxEventBehavior("event")
+		{
+			@Override
+			protected void onEvent(AjaxRequestTarget target)
+			{
+			}
+		});
+		tester.startPage(testPage);
+		tester.executeAjaxEvent(testPage.getTestPageLink(), "event");
+		Assert.assertTrue(tester.getLastResponseAsString().contains(AppendCommentFilter.COMMENT));
+	}
+
+	private static class AppendCommentFilter implements IResponseFilter
+	{
+		static final AppendCommentFilter INSTANCE = new AppendCommentFilter();
+		static final String COMMENT = "<!-- comment -->";
+
+		public AppendingStringBuffer filter(AppendingStringBuffer responseBuffer)
+		{
+			return new AppendingStringBuffer(responseBuffer).append(COMMENT);
+		}
+	}
+
 	@Test
 	public void normalRequest()
 	{