Revert "WicketWICKET-6334 WicketObjects#sizeof() should detach Sessions"
This reverts commit 8b6fcd869ceb96f7b4ea003d3d5665a1626390ad. Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/266c9003 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/266c9003 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/266c9003 Branch: refs/heads/master Commit: 266c90037d689f47bf45722532536716dc9f5b06 Parents: 6e438b1 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Mon Mar 13 22:51:56 2017 +0100 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Mon Mar 13 22:51:56 2017 +0100 ---------------------------------------------------------------------- .../main/java/org/apache/wicket/Session.java | 3 +- .../checker/CheckingObjectOutputStream.java | 17 ++- .../checker/DifferentPageCheckerTest.java | 6 +- .../checker/NotDetachedModelCheckerTest.java | 108 ------------------- .../objects/checker/SessionCheckerTest.java | 29 +---- .../serialize/java/JavaSerializerTest.java | 43 ++++++++ .../wicket/util/io/SerializableCheckerTest.java | 43 ++------ .../inspector/SessionSizeModelTest.java | 13 +-- 8 files changed, 66 insertions(+), 196 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/266c9003/wicket-core/src/main/java/org/apache/wicket/Session.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/Session.java b/wicket-core/src/main/java/org/apache/wicket/Session.java index 059805f..e7f9c14 100644 --- a/wicket-core/src/main/java/org/apache/wicket/Session.java +++ b/wicket-core/src/main/java/org/apache/wicket/Session.java @@ -35,7 +35,6 @@ import org.apache.wicket.event.IEvent; import org.apache.wicket.event.IEventSink; import org.apache.wicket.feedback.FeedbackMessage; import org.apache.wicket.feedback.FeedbackMessages; -import org.apache.wicket.model.IDetachable; import org.apache.wicket.page.IPageManager; import org.apache.wicket.page.PageAccessSynchronizer; import org.apache.wicket.request.Request; @@ -107,7 +106,7 @@ import org.slf4j.LoggerFactory; * @author Eelco Hillenius * @author Igor Vaynberg (ivaynberg) */ -public abstract class Session implements IClusterable, IEventSink, IDetachable +public abstract class Session implements IClusterable, IEventSink { private static final long serialVersionUID = 1L; http://git-wip-us.apache.org/repos/asf/wicket/blob/266c9003/wicket-core/src/main/java/org/apache/wicket/core/util/objects/checker/CheckingObjectOutputStream.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/core/util/objects/checker/CheckingObjectOutputStream.java b/wicket-core/src/main/java/org/apache/wicket/core/util/objects/checker/CheckingObjectOutputStream.java index 2299e42..4978c0e 100644 --- a/wicket-core/src/main/java/org/apache/wicket/core/util/objects/checker/CheckingObjectOutputStream.java +++ b/wicket-core/src/main/java/org/apache/wicket/core/util/objects/checker/CheckingObjectOutputStream.java @@ -36,9 +36,7 @@ import java.util.Map; import java.util.Set; import org.apache.wicket.Component; -import org.apache.wicket.Page; import org.apache.wicket.WicketRuntimeException; -import org.apache.wicket.page.IManageablePage; import org.apache.wicket.util.lang.Classes; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -350,17 +348,14 @@ public class CheckingObjectOutputStream extends ObjectOutputStream nameStack.add(simpleName); traceStack.add(new TraceSlot(obj, fieldDescription)); - if (obj instanceof IManageablePage || (traceStack.size() > 1 && traceStack.get(0).object instanceof IManageablePage)) + for (IObjectChecker checker : checkers) { - for (IObjectChecker checker : checkers) + IObjectChecker.Result result = checker.check(obj); + if (result.status == IObjectChecker.Result.Status.FAILURE) { - IObjectChecker.Result result = checker.check(obj); - if (result.status == IObjectChecker.Result.Status.FAILURE) - { - String prettyPrintMessage = toPrettyPrintedStack(Classes.name(cls)); - String exceptionMessage = result.reason + '\n' + prettyPrintMessage; - throw new ObjectCheckException(exceptionMessage, result.cause); - } + String prettyPrintMessage = toPrettyPrintedStack(Classes.name(cls)); + String exceptionMessage = result.reason + '\n' + prettyPrintMessage; + throw new ObjectCheckException(exceptionMessage, result.cause); } } http://git-wip-us.apache.org/repos/asf/wicket/blob/266c9003/wicket-core/src/test/java/org/apache/wicket/core/util/objects/checker/DifferentPageCheckerTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/core/util/objects/checker/DifferentPageCheckerTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/objects/checker/DifferentPageCheckerTest.java index 380b00d..8752d2d 100644 --- a/wicket-core/src/test/java/org/apache/wicket/core/util/objects/checker/DifferentPageCheckerTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/core/util/objects/checker/DifferentPageCheckerTest.java @@ -21,7 +21,7 @@ import java.io.ObjectOutputStream; import java.io.OutputStream; import org.apache.wicket.Component; -import org.apache.wicket.MockPageWithOneComponent; +import org.apache.wicket.MockPageWithLink; import org.apache.wicket.Page; import org.apache.wicket.markup.html.WebComponent; import org.apache.wicket.markup.html.form.login.MockHomePage; @@ -51,8 +51,8 @@ public class DifferentPageCheckerTest extends WicketTestCase } }; - WebComponent component = new ComponentThatKeepsAReferenceToAnotherPage(MockPageWithOneComponent.COMPONENT_ID); - MockPageWithOneComponent rootPage = new MockPageWithOneComponent(); + WebComponent component = new ComponentThatKeepsAReferenceToAnotherPage(MockPageWithLink.LINK_ID); + MockPageWithLink rootPage = new MockPageWithLink(); rootPage.add(component); byte[] serialized = serializer.serialize(rootPage); assertNull("The produced byte[] must be null if there was an error", serialized); http://git-wip-us.apache.org/repos/asf/wicket/blob/266c9003/wicket-core/src/test/java/org/apache/wicket/core/util/objects/checker/NotDetachedModelCheckerTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/core/util/objects/checker/NotDetachedModelCheckerTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/objects/checker/NotDetachedModelCheckerTest.java deleted file mode 100644 index 260178b..0000000 --- a/wicket-core/src/test/java/org/apache/wicket/core/util/objects/checker/NotDetachedModelCheckerTest.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * 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.core.util.objects.checker; - -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.notNullValue; - -import java.io.IOException; -import java.io.ObjectOutputStream; -import java.io.OutputStream; - -import org.apache.wicket.MockPageWithOneComponent; -import org.apache.wicket.markup.html.WebComponent; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.LoadableDetachableModel; -import org.apache.wicket.serialize.java.JavaSerializer; -import org.apache.wicket.util.tester.WicketTestCase; -import org.junit.Test; - -/** - * Tests for {@link NotDetachedModelChecker}. - * <p> - * Tests that the serialization fails when a checking ObjectOutputStream is - * used with NotDetachedModelChecker and there is a non-detached LoadableDetachableModel - * in the object tree. - * </p> - */ -public class NotDetachedModelCheckerTest extends WicketTestCase -{ - /** - * https://issues.apache.org/jira/browse/WICKET-4812 - * https://issues.apache.org/jira/browse/WICKET-6334 - */ - @Test - public void whenSerializingPage_thenItsComponentsShouldBeChecked() { - JavaSerializer serializer = new JavaSerializer("JavaSerializerTest") - { - @Override - protected ObjectOutputStream newObjectOutputStream(OutputStream out) throws IOException - { - IObjectChecker checker = new NotDetachedModelChecker(); - return new CheckingObjectOutputStream(out, checker); - } - }; - - MockPageWithOneComponent page = new MockPageWithOneComponent(); - page.add(new ComponentWithAttachedModel(MockPageWithOneComponent.COMPONENT_ID)); - - final byte[] serialized = serializer.serialize(page); - assertNull("The produced byte[] must be null if there was an error", serialized); - } - - /** - * https://issues.apache.org/jira/browse/WICKET-4812 - * https://issues.apache.org/jira/browse/WICKET-6334 - */ - @Test - public void whenSerializingNonPageComponent_thenItsSubComponentsShouldNotBeChecked() { - JavaSerializer serializer = new JavaSerializer("JavaSerializerTest") - { - @Override - protected ObjectOutputStream newObjectOutputStream(OutputStream out) throws IOException - { - IObjectChecker checker = new NotDetachedModelChecker(); - return new CheckingObjectOutputStream(out, checker); - } - }; - - final ComponentWithAttachedModel component = new ComponentWithAttachedModel("id"); - - final byte[] serialized = serializer.serialize(component); - assertThat(serialized, is(notNullValue())); - } - - private static class ComponentWithAttachedModel extends WebComponent - { - private final IModel<String> member = new LoadableDetachableModel<String>() - { - @Override - protected String load() - { - return "modelObject"; - } - }; - - public ComponentWithAttachedModel(final String id) - { - super(id); - - // attach the model object - member.getObject(); - } - } -} http://git-wip-us.apache.org/repos/asf/wicket/blob/266c9003/wicket-core/src/test/java/org/apache/wicket/core/util/objects/checker/SessionCheckerTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/core/util/objects/checker/SessionCheckerTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/objects/checker/SessionCheckerTest.java index 7a40f3c..94e8ea7 100644 --- a/wicket-core/src/test/java/org/apache/wicket/core/util/objects/checker/SessionCheckerTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/core/util/objects/checker/SessionCheckerTest.java @@ -16,14 +16,10 @@ */ package org.apache.wicket.core.util.objects.checker; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.notNullValue; - import java.io.IOException; import java.io.ObjectOutputStream; import java.io.OutputStream; -import org.apache.wicket.MockPageWithOneComponent; import org.apache.wicket.Session; import org.apache.wicket.markup.html.WebComponent; import org.apache.wicket.markup.html.WebMarkupContainer; @@ -57,36 +53,15 @@ public class SessionCheckerTest extends WicketTestCase } }; - MockPageWithOneComponent page = new MockPageWithOneComponent(); - WebMarkupContainer container = new WebMarkupContainer(MockPageWithOneComponent.COMPONENT_ID); - page.add(container); + WebMarkupContainer container = new WebMarkupContainer("container"); // WICKET-6196 force container#children to be an array container.add(new Label("id1")); container.add(new ComponentWithAReferenceToTheSession("id2")); - byte[] serialized = serializer.serialize(page); + byte[] serialized = serializer.serialize(container); assertNull("The produced byte[] must be null if there was an error", serialized); } - /** - * https://issues.apache.org/jira/browse/WICKET-6334 - */ - @Test - public void sessionCheckerShouldNotCheckSerializationOfTheSessionItself() { - JavaSerializer serializer = new JavaSerializer("JavaSerializerTest") - { - @Override - protected ObjectOutputStream newObjectOutputStream(OutputStream out) throws IOException - { - IObjectChecker checker = new SessionChecker(); - return new CheckingObjectOutputStream(out, checker); - } - }; - final Session session = new WebSession(new MockWebRequest(Url.parse(""))); - final byte[] serialized = serializer.serialize(session); - assertThat(serialized, is(notNullValue())); - } - private static class ComponentWithAReferenceToTheSession extends WebComponent { private final Session member = new WebSession(new MockWebRequest(Url.parse(""))); http://git-wip-us.apache.org/repos/asf/wicket/blob/266c9003/wicket-core/src/test/java/org/apache/wicket/serialize/java/JavaSerializerTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/serialize/java/JavaSerializerTest.java b/wicket-core/src/test/java/org/apache/wicket/serialize/java/JavaSerializerTest.java index 7c09701..c90414c 100644 --- a/wicket-core/src/test/java/org/apache/wicket/serialize/java/JavaSerializerTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/serialize/java/JavaSerializerTest.java @@ -29,7 +29,11 @@ import java.io.Serializable; import org.apache.wicket.WicketRuntimeException; import org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream; +import org.apache.wicket.core.util.objects.checker.IObjectChecker; +import org.apache.wicket.core.util.objects.checker.NotDetachedModelChecker; import org.apache.wicket.markup.html.WebComponent; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.util.io.IOUtils; import org.apache.wicket.util.tester.WicketTestCase; import org.junit.Test; @@ -41,6 +45,45 @@ public class JavaSerializerTest extends WicketTestCase { /** * https://issues.apache.org/jira/browse/WICKET-4812 + * + * Tests that the serialization fails when a checking ObjectOutputStream is + * used with NotDetachedModelChecker and there is a non-detached LoadableDetachableModel + * in the object tree. + */ + @Test + public void notDetachedModel() + { + JavaSerializer serializer = new JavaSerializer("JavaSerializerTest") + { + @Override + protected ObjectOutputStream newObjectOutputStream(OutputStream out) throws IOException + { + IObjectChecker checker = new NotDetachedModelChecker(); + return new CheckingObjectOutputStream(out, checker); + } + }; + + IModel<String> model = new NotDetachedModel(); + model.getObject(); + WebComponent component = new WebComponent("id", model); + byte[] serialized = serializer.serialize(component); + assertNull("The produced byte[] must be null if there was an error", serialized); + } + + /** + * A Model used for #notDetachedModel() test + */ + private static class NotDetachedModel extends LoadableDetachableModel<String> + { + @Override + protected String load() + { + return "loaded"; + } + } + + /** + * https://issues.apache.org/jira/browse/WICKET-4812 * * Tests that serialization fails when using the default ObjectOutputStream in * JavaSerializer and some object in the tree is not Serializable http://git-wip-us.apache.org/repos/asf/wicket/blob/266c9003/wicket-core/src/test/java/org/apache/wicket/util/io/SerializableCheckerTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/util/io/SerializableCheckerTest.java b/wicket-core/src/test/java/org/apache/wicket/util/io/SerializableCheckerTest.java index 171caf1..0fdce37 100644 --- a/wicket-core/src/test/java/org/apache/wicket/util/io/SerializableCheckerTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/util/io/SerializableCheckerTest.java @@ -21,20 +21,23 @@ import static org.hamcrest.Matchers.is; import java.io.IOException; import java.io.NotSerializableException; import java.io.Serializable; +import java.util.Map; +import java.util.Set; -import org.apache.wicket.core.util.objects.checker.AbstractObjectChecker; import org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream; import org.apache.wicket.core.util.objects.checker.ObjectSerializationChecker; -import org.apache.wicket.markup.html.WebPage; -import org.apache.wicket.page.IManageablePage; -import org.apache.wicket.util.tester.WicketTestCase; +import org.apache.wicket.core.util.objects.checker.AbstractObjectChecker; +import org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream; +import org.apache.wicket.core.util.objects.checker.IObjectChecker; import org.apache.wicket.util.value.ValueMap; +import org.hamcrest.Matchers; +import org.junit.Assert; import org.junit.Test; /** * @author Pedro Santos */ -public class SerializableCheckerTest extends WicketTestCase +public class SerializableCheckerTest extends Assert { /** @@ -117,33 +120,7 @@ public class SerializableCheckerTest extends WicketTestCase assertTrue(exceptionMessage.contains(NonSerializableType.class.getName())); } - private static class ManageablePage implements IManageablePage - { - @Override - public boolean isPageStateless() - { - return false; - } - - @Override - public int getPageId() - { - return 0; - } - - @Override - public void detach() - { - } - - @Override - public boolean setFreezePageId(boolean freeze) - { - return false; - } - } - - private static class IdentityTestType extends ManageablePage + private static class IdentityTestType implements Serializable { private static final long serialVersionUID = 1L; @@ -156,7 +133,7 @@ public class SerializableCheckerTest extends WicketTestCase } } - private static class TestType2 extends WebPage + private static class TestType2 implements Serializable { private static final long serialVersionUID = 1L; ProblematicType problematicType = new ProblematicType(); http://git-wip-us.apache.org/repos/asf/wicket/blob/266c9003/wicket-devutils/src/test/java/org/apache/wicket/devutils/inspector/SessionSizeModelTest.java ---------------------------------------------------------------------- diff --git a/wicket-devutils/src/test/java/org/apache/wicket/devutils/inspector/SessionSizeModelTest.java b/wicket-devutils/src/test/java/org/apache/wicket/devutils/inspector/SessionSizeModelTest.java index 3af0218..af5b583 100644 --- a/wicket-devutils/src/test/java/org/apache/wicket/devutils/inspector/SessionSizeModelTest.java +++ b/wicket-devutils/src/test/java/org/apache/wicket/devutils/inspector/SessionSizeModelTest.java @@ -16,8 +16,6 @@ */ package org.apache.wicket.devutils.inspector; -import static org.hamcrest.Matchers.containsString; - import org.apache.wicket.Session; import org.apache.wicket.mock.MockApplication; import org.apache.wicket.protocol.http.WebSession; @@ -25,17 +23,13 @@ import org.apache.wicket.request.Request; import org.apache.wicket.request.Response; import org.apache.wicket.util.tester.WicketTester; import org.junit.Assert; -import org.junit.Rule; import org.junit.Test; -import org.junit.rules.ExpectedException; /** * @author Pedro Santos */ public class SessionSizeModelTest extends Assert { - @Rule - public ExpectedException expectedException = ExpectedException.none(); /** * @see <a href="https://issues.apache.org/jira/browse/WICKET-3355">WICKET-3355</a> @@ -43,11 +37,6 @@ public class SessionSizeModelTest extends Assert @Test public void testToleranceOnProblematicSessions() { - expectedException.expect(IllegalStateException.class); - expectedException.expectMessage(containsString("A problem occurred while serializing an object. " + - "Please check the earlier logs for more details. Problematic object: " + - "org.apache.wicket.devutils.inspector.SessionSizeModelTest$TestSession")); - new WicketTester(new MockApplication() { @Override @@ -57,7 +46,7 @@ public class SessionSizeModelTest extends Assert } }); SessionSizeModel model = new SessionSizeModel(); - model.getObject(); + assertEquals(null, model.getObject()); } /**
