Repository: wicket Updated Branches: refs/heads/WICKET-4201-improved-page-provider aa98a67ee -> f7f5fb890
WICKET-4201 removing non serializable attributes from serialization Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/f7f5fb89 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/f7f5fb89 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/f7f5fb89 Branch: refs/heads/WICKET-4201-improved-page-provider Commit: f7f5fb8903452270185b7461ca83c56a87a87abd Parents: aa98a67 Author: Pedro Henrique Oliveira dos Santos <[email protected]> Authored: Mon Feb 6 05:07:41 2017 -0200 Committer: Pedro Henrique Oliveira dos Santos <[email protected]> Committed: Mon Feb 6 05:07:41 2017 -0200 ---------------------------------------------------------------------- .../core/request/handler/PageProvider.java | 45 +++++++++----------- .../request/handler/PageProviderTest.java | 24 ++++++++++- 2 files changed, 41 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/f7f5fb89/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java index 6cf6f95..44e51cb 100644 --- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java +++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java @@ -52,13 +52,13 @@ public class PageProvider implements IPageProvider, IClusterable private final Integer pageId; - private IPageSource pageSource; + private transient IPageSource pageSource; private Class<? extends IRequestablePage> pageClass; private PageParameters pageParameters; - private Provision provision = new Provision(); + private transient Provision provision; /** * Creates a new page provider object. Upon calling of {@link #getPageInstance()} this provider @@ -155,12 +155,12 @@ public class PageProvider implements IPageProvider, IClusterable renderCount = page.getRenderCount(); } - private Provision getResolvedProvision() + private Provision getProvision() { - if (!provision.wasResolved()) - - provision.resolve(); - + if (provision == null) + { + provision = new Provision().resolve(); + } return provision; } @@ -170,7 +170,7 @@ public class PageProvider implements IPageProvider, IClusterable @Override public IRequestablePage getPageInstance() { - return getResolvedProvision().getPage(); + return getProvision().getPage(); } /** @@ -214,9 +214,9 @@ public class PageProvider implements IPageProvider, IClusterable @Override public final boolean hasPageInstance() { - if (provision.wasResolved() || pageId != null) + if (provision != null || pageId != null) { - return getResolvedProvision().didResolveToPage(); + return getProvision().didResolveToPage(); } else return false; @@ -232,11 +232,11 @@ public class PageProvider implements IPageProvider, IClusterable @Override public final boolean doesProvideNewPage() { - if (!this.provision.wasResolved()) + if (provision == null) { throw new IllegalStateException("Page instance not yet resolved"); } - return getResolvedProvision().doesProvideNewPage(); + return getProvision().doesProvideNewPage(); } /** @@ -245,7 +245,7 @@ public class PageProvider implements IPageProvider, IClusterable @Override public boolean wasExpired() { - return pageId != null && getResolvedProvision().didFailToFindStoredPage(); + return pageId != null && getProvision().didFailToFindStoredPage(); } /** @@ -290,7 +290,11 @@ public class PageProvider implements IPageProvider, IClusterable @Override public void detach() { - provision.detach(); + if (provision != null) + { + provision.detach(); + provision = null; + } } /** @@ -302,7 +306,7 @@ public class PageProvider implements IPageProvider, IClusterable */ public void setPageSource(IPageSource pageSource) { - if (this.provision.wasResolved()) + if (provision != null) { throw new IllegalStateException( "A provision was already been done. The provider can be forcefully detached or a new one needs to be used to provide using this page source."); @@ -374,7 +378,6 @@ public class PageProvider implements IPageProvider, IClusterable private class Provision { transient IRequestablePage page; - boolean resolved; boolean failedToFindStoredPage; IRequestablePage getPage() @@ -386,11 +389,6 @@ public class PageProvider implements IPageProvider, IClusterable return page; } - boolean wasResolved() - { - return resolved; - } - boolean didResolveToPage() { return page != null; @@ -410,8 +408,6 @@ public class PageProvider implements IPageProvider, IClusterable { this.page = page; - resolved = true; - return this; } @@ -433,9 +429,6 @@ public class PageProvider implements IPageProvider, IClusterable failedToFindStoredPage = page == null; } - - resolved = true; - return this; } http://git-wip-us.apache.org/repos/asf/wicket/blob/f7f5fb89/wicket-core/src/test/java/org/apache/wicket/request/handler/PageProviderTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/request/handler/PageProviderTest.java b/wicket-core/src/test/java/org/apache/wicket/request/handler/PageProviderTest.java index 09115a6..f5af25a 100644 --- a/wicket-core/src/test/java/org/apache/wicket/request/handler/PageProviderTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/request/handler/PageProviderTest.java @@ -16,6 +16,8 @@ */ package org.apache.wicket.request.handler; +import static org.hamcrest.CoreMatchers.is; + import java.io.IOException; import java.text.ParseException; @@ -27,12 +29,13 @@ import org.apache.wicket.RestartResponseAtInterceptPageException; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.core.request.handler.PageProvider; +import org.apache.wicket.core.request.mapper.StalePageException; +import org.apache.wicket.core.request.mapper.TestMapperContext; import org.apache.wicket.markup.IMarkupResourceStreamProvider; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.request.Url; -import org.apache.wicket.core.request.mapper.StalePageException; -import org.apache.wicket.core.request.mapper.TestMapperContext; +import org.apache.wicket.serialize.java.JavaSerializer; import org.apache.wicket.util.resource.IResourceStream; import org.apache.wicket.util.resource.ResourceStreamNotFoundException; import org.apache.wicket.util.resource.StringResourceStream; @@ -252,6 +255,23 @@ public class PageProviderTest extends WicketTestCase assertTrue(provider.doesProvideNewPage()); } + @Test + public void pageProviderIsSerializeble() throws Exception + { + TestMapperContext mapperContext = new TestMapperContext(); + Page page = new TestPage(); + mapperContext.getPageManager().touchPage(page); + mapperContext.getPageManager().commitRequest(); + + PageProvider pageProvider = new PageProvider(page.getPageId(), page.getRenderCount()); + JavaSerializer javaSerializer = new JavaSerializer("app"); + byte[] serialized = javaSerializer.serialize(pageProvider); + PageProvider deserialized = (PageProvider)javaSerializer.deserialize(serialized); + deserialized.setPageSource(mapperContext); + + assertThat(deserialized.getPageInstance(), is(page)); + } + /** */ public static class TestPage extends WebPage implements IMarkupResourceStreamProvider {
