You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by cm...@apache.org on 2012/07/03 14:22:29 UTC
[27/28] git commit: WICKET-4358 BufferedWebResponse fails to
add/clear cookie in redirect
WICKET-4358 BufferedWebResponse fails to add/clear cookie in redirect
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/02ebc8ae
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/02ebc8ae
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/02ebc8ae
Branch: refs/heads/sandbox/resourcefinder
Commit: 02ebc8aebba076ac37a74e2a7c6ad3aa5cbc27de
Parents: df71f00
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Thu Jun 28 12:33:26 2012 +0300
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Thu Jun 28 12:35:51 2012 +0300
----------------------------------------------------------------------
.../request/handler/render/WebPageRenderer.java | 14 ++-
.../PreserveCookieForTheNextHandlerTest.java | 90 +++++++++++++++
2 files changed, 98 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/02ebc8ae/wicket-core/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java b/wicket-core/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java
index b92f3e3..a0dbfeb 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java
@@ -20,7 +20,6 @@ import org.apache.wicket.protocol.http.BufferedWebResponse;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.request.Request;
-import org.apache.wicket.request.Response;
import org.apache.wicket.request.Url;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
@@ -91,10 +90,10 @@ public class WebPageRenderer extends PageRenderer
IRequestHandler scheduled = requestCycle.getRequestHandlerScheduledAfterCurrent();
// keep the original response
- final Response originalResponse = requestCycle.getResponse();
+ final WebResponse originalResponse = (WebResponse) requestCycle.getResponse();
// buffered web response for page
- BufferedWebResponse response = new BufferedWebResponse((WebResponse)originalResponse);
+ BufferedWebResponse response = new BufferedWebResponse(originalResponse);
// keep the original base URL
Url originalBaseUrl = requestCycle.getUrlRenderer().setBaseUrl(targetUrl);
@@ -106,9 +105,12 @@ public class WebPageRenderer extends PageRenderer
if (scheduled == null && requestCycle.getRequestHandlerScheduledAfterCurrent() != null)
{
- // This is a special case. During page render another request handler got scheduled.
- // The handler
- // will want to overwrite the response, so we need to let it
+ // This is a special case.
+ // During page render another request handler got scheduled and will want to overwrite
+ // the response, so we need to let it.
+ // Just preserve the meta data headers
+ originalResponse.reset(); // clear the initial actions because they are already copied into the new response's actions
+ response.writeMetaData(originalResponse);
return null;
}
else
http://git-wip-us.apache.org/repos/asf/wicket/blob/02ebc8ae/wicket-core/src/test/java/org/apache/wicket/response/PreserveCookieForTheNextHandlerTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/response/PreserveCookieForTheNextHandlerTest.java b/wicket-core/src/test/java/org/apache/wicket/response/PreserveCookieForTheNextHandlerTest.java
new file mode 100644
index 0000000..26cf1e0
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/response/PreserveCookieForTheNextHandlerTest.java
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.response;
+
+import java.util.List;
+
+import javax.servlet.http.Cookie;
+
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
+import org.apache.wicket.util.cookies.CookieUtils;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+import org.junit.Test;
+
+/**
+ * @since 1.5.8
+ */
+public class PreserveCookieForTheNextHandlerTest extends WicketTestCase
+{
+ /**
+ * Verifies that any meta data actions set to a BufferedWebResponse during page rendering
+ * wont be lost if at some point during the rendering a new IRequestHandler is scheduled.
+ *
+ * https://issues.apache.org/jira/browse/WICKET-4358
+ */
+ @Test
+ public void preserveCookie()
+ {
+ tester.startPage(StartPage.class);
+ tester.assertRenderedPage(StartPage.class);
+ assertEquals(0, tester.getLastResponse().getCookies().size());
+
+ tester.clickLink("link");
+ tester.assertRenderedPage(StartPage.class);
+ List<Cookie> cookies = tester.getLastResponse().getCookies();
+ assertEquals(1, cookies.size());
+ assertEquals("value", cookies.get(0).getValue());
+ }
+
+ public static final class StartPage extends WebPage implements IMarkupResourceStreamProvider
+ {
+ public StartPage()
+ {
+ add(new BookmarkablePageLink<Void>("link", SetCookiePage.class));
+ }
+
+ public IResourceStream getMarkupResourceStream(MarkupContainer container, Class<?> containerClass)
+ {
+ return new StringResourceStream("<html><body><a wicket:id='link'>Link</a></body></html>");
+ }
+ }
+
+ public static final class SetCookiePage extends WebPage implements IMarkupResourceStreamProvider
+ {
+ @Override
+ protected void onBeforeRender()
+ {
+ super.onBeforeRender();
+
+ // set a cookie (BufferedWebResponse metadata action)
+ new CookieUtils().save("test-cookie", "value");
+
+ // and schedule a new IRequestHandler
+ setResponsePage(StartPage.class);
+ }
+
+ public IResourceStream getMarkupResourceStream(MarkupContainer container, Class<?> containerClass)
+ {
+ return new StringResourceStream("<html/>");
+ }
+ }
+}