I still don't understand why within the BaseWicketTester#processRequest() method the PageProvider#getPageInstance() method is called twice. The first time the correct page instance is returned, the second time not. I assume, this has to do with some kind of redirection of the same page. The lastResponse.isRedirect() returns true and therefore the processRequest() method ist called a second time forcing a redirect.
... if (!requestCycle.processRequestAndDetach()) { return false; } recordRequestResponse(); setupNextRequestCycle(); if (followRedirects && lastResponse.isRedirect()) { ... processRequest(null, null, true); --redirectCount; } return true; ... This is strange to me. Meanwhile I figured out, that the respond()-method of the WebPageRenderer.class triggers the redirectTo(targetUrl, requestCycle) method which sets the redirectLocation attribute of the MockHttpServletResponse. After adding page.setWasCreatedBookmarkable(true) to our own PageFactory implementation all tests work as espected. So what is this flag for? Why does this flag change the process of the request handling in this manner? Can someone give me some clarification about this? Thank you. /** * TODO WICKET-NG javadoc * * @param wasCreatedBookmarkable */ public final void setWasCreatedBookmarkable(boolean wasCreatedBookmarkable) { setFlag(FLAG_WAS_CREATED_BOOKMARKABLE, wasCreatedBookmarkable); } Am 29.09.2011 09:40, schrieb Martin Grigorov-4 [via Apache Wicket]: > Put a breakpoint in your factory and see what it returns and why > PageProvider believes it is null ... > > On Thu, Sep 29, 2011 at 9:34 AM, Dirk Forchel <[hidden email] > </user/SendEmail.jtp?type=node&node=3854689&i=0>> wrote: > > > Hi Martin, > > thank you for your quick response ... indeed I have another problem > too ... > > > > In our own BookmarkablePageFactoryTest I set up now the test > environment > > the following way ... > > > > @Before > > public void setUp() > > { > > // see issue https://issues.apache.org/jira/browse/WICKET-4093 > > tester = new WicketTester(new MockApplication() > > { > > protected IPageFactory newPageFactory() > > { > > return new BookmarkablePageFactory( linkFactory ); > > } > > }); > > ConverterLocator converterLocator = > > (ConverterLocator)tester.getApplication().getConverterLocator(); > > converterLocator.set( DummyData.class, new > DummyDataConverter() ); > > } > > > > and test a page with one named parameter ... > > > > @Test > > public void oneParameter() > > { > > PageParameters params = new PageParameters(); > > params.set("data", "~~abc~~"); > > tester.startPage( OneParameterPage.class, params); > > tester.isRenderedPage( OneParameterPage.class ); > > assertInfoMessages( tester, "OneParameterPage(abc)" ); > > Assert.assertEquals( 200, > tester.getLastResponse().getStatus() ); > > } > > > > But this test (and other tests as well) are not working anymore (as it > > was with Wicket 1.4). I've got always a PageExpiredException although > > the Page is really created and returned within our own PageFactory > > implementation. Additional I've dumped the stack trace for getting a > > hint where the method is called ... > > > > @Override > > public final <C extends IRequestablePage> IRequestablePage > > newPage(final Class<C> pageClass, final PageParameters pageParameters) > > { > > System.out.println(">>> newPage Class "+pageClass+" > > PageParameters "+pageParameters); > > Thread.dumpStack(); > > ... > > IRequestablePage page = createPage( constructor, arguments ); > > System.out.println(">>> created page "+page); > > return page; > > } > > > > This is the stack trace: > > > > >>> newPage Class class com.exedio.wig.bookmark.dummy.OneParameterPage > > PageParameters data=[~~abc~~] > > java.lang.Exception: Stack trace > > at java.lang.Thread.dumpStack(Unknown Source) > > at > > > com.exedio.wig.bookmark.BookmarkablePageFactory.newPage(BookmarkablePageFactory.java:80) > > at > > > org.apache.wicket.DefaultMapperContext.newPageInstance(DefaultMapperContext.java:107) > > at > > > org.apache.wicket.request.handler.PageProvider.getPageInstance(PageProvider.java:273) > > at > > > org.apache.wicket.request.handler.PageProvider.getPageInstance(PageProvider.java:167) > > at > > > org.apache.wicket.util.tester.BaseWicketTester$LastPageRecordingPageRendererProvider.get(BaseWicketTester.java:2514) > > at > > > org.apache.wicket.util.tester.BaseWicketTester$LastPageRecordingPageRendererProvider.get(BaseWicketTester.java:2501) > > at > > > org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:146) > > at > > > org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:719) > > at > > > org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:63) > > at > > > org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:210) > > at > > > org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:253) > > at > > > org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:596) > > at > > > org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:516) > > at > > > org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:488) > > at > > > org.apache.wicket.util.tester.BaseWicketTester.startPage(BaseWicketTester.java:1097) > > at > > > com.exedio.wig.bookmark.BookmarkablePageFactoryTest.oneParameter(BookmarkablePageFactoryTest.java:135) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) > > at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) > > at java.lang.reflect.Method.invoke(Unknown Source) > > at > > > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) > > at > > > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) > > at > > > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) > > at > > > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) > > at > > > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) > > at > > > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) > > at > > > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) > > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) > > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) > > at > org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) > > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) > > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) > > at org.junit.runners.ParentRunner.run(ParentRunner.java:236) > > at org.junit.runners.Suite.runChild(Suite.java:128) > > at org.junit.runners.Suite.runChild(Suite.java:24) > > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) > > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) > > at > org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) > > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) > > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) > > at org.junit.runners.ParentRunner.run(ParentRunner.java:236) > > at > > > org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) > > at > > > org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) > > at > > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) > > at > > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) > > at > > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) > > at > > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) > > >>> Found @Bookmarkable annotation ... > > >>> Constructor public > > > com.exedio.wig.bookmark.dummy.OneParameterPage(org.apache.wicket.request.mapper.parameter.PageParameters,com.exedio.wig.bookmark.dummy.data.DummyData) > > >>> created page [Page class = > > com.exedio.wig.bookmark.dummy.OneParameterPage, id = 0, render count > = 0] > > > > As far as I understand, the DefaultMapperContext#newPageInstance(final > > Class<? extends IRequestablePage> pageClass, final PageParameters > > pageParameters) method calls the IPageFactory method for creating a new > > page instance. This works fine. > > But afterwards the PageExpiredException is thrown although the > > pageInstance should not be NULL!!!???? I don't understand this. Maybe I > > miss something? > > > > public IRequestablePage getPageInstance() > > { > > if (pageInstance == null) > > { > > pageInstance = getPageInstance(pageId, pageClass, > > pageParameters, renderCount); > > > > if (pageInstance == null) > > { > > throw new PageExpiredException("Page expired."); > > } > > > > touchPageInstance(pageInstance); > > } > > return pageInstance; > > } > > > > This is the Failure trace running the Junit test: > > > > org.apache.wicket.protocol.http.PageExpiredException: Page expired. > > at > > > org.apache.wicket.request.handler.PageProvider.getPageInstance(PageProvider.java:171) > > at > > > org.apache.wicket.util.tester.BaseWicketTester$LastPageRecordingPageRendererProvider.get(BaseWicketTester.java:2514) > > at > > > org.apache.wicket.util.tester.BaseWicketTester$LastPageRecordingPageRendererProvider.get(BaseWicketTester.java:2501) > > at > > > org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:146) > > at > > > org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:719) > > at > > > org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:63) > > at > > > org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:210) > > at > > > org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:253) > > at > > > org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:596) > > at > > > org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:646) > > at > > > org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:516) > > at > > > org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:488) > > at > > > org.apache.wicket.util.tester.BaseWicketTester.startPage(BaseWicketTester.java:1097) > > at > > > com.exedio.wig.bookmark.BookmarkablePageFactoryTest.oneParameter(BookmarkablePageFactoryTest.java:135) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) > > at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) > > at java.lang.reflect.Method.invoke(Unknown Source) > > at > > > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) > > at > > > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) > > at > > > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) > > at > > > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) > > at > > > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) > > at > > > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) > > at > > > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) > > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) > > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) > > at > org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) > > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) > > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) > > at org.junit.runners.ParentRunner.run(ParentRunner.java:236) > > at org.junit.runners.Suite.runChild(Suite.java:128) > > at org.junit.runners.Suite.runChild(Suite.java:24) > > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) > > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) > > at > org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) > > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) > > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) > > at org.junit.runners.ParentRunner.run(ParentRunner.java:236) > > at > > > org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) > > at > > > org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) > > at > > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) > > at > > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) > > at > > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) > > at > > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) > > > > > > > > Am 29.09.2011 08:55, schrieb Martin Grigorov-4 [via Apache Wicket]: > >> Indeed this is missed. > >> I'll create a ticket for it. > >> > >> Thanks! > >> > >> On Thu, Sep 29, 2011 at 8:05 AM, Dirk Forchel <[hidden email] > >> </user/SendEmail.jtp?type=node&node=3854567&i=0>> wrote: > >> > >> > After migration to Wicket 1.5 I'm wondering why our tests with > our own > >> > IPageFactory implementation is not working anymore. In our tests we > >> use the > >> > following code ... > >> > > >> > WicketTester tester = new WicketTester(); > >> > tester.getApplication().getSessionSettings().setPageFactory( new > >> > FooPageFactory() ); > >> > > >> > But in Wicket 1.5 the implemented SessionSettings class and their > >> method > >> > getPageFacory() is only called from Session#getPageFactory() and > >> > SignInPanel#onBeforeRender methods, in which the first call is used > >> in the > >> > InlineFrame class only. > >> > > >> > As I figured out you should use and override the newPageFactory() > >> method > >> > from the Application class instead to create a custom IPageFactory > >> > implementation. Which whould result in the following code ... > >> > > >> > WicketTester tester = new WicketTester(new MockApplication() { > >> > protected IPageFactory newPageFactory() { > >> > return new FooPageFactory(); > >> > } > >> > }); > >> > > >> > The Application#getPageFactory() method is used in the > >> DefaultMapperContext > >> > class to create a new Page instance, therefore our own > >> implementation is > >> > used. But this is confusing to me. Maybe I miss a point but in my > >> opinion > >> > the ISessionSettings interface should be marked as deprecated. > >> > > >> > > >> > -- > >> > View this message in context: > >> > http://apache-wicket.1842946.n4.nabble.com/PageFactory-and-SessionSettings-tp3854493p3854493.html > >> > Sent from the Users forum mailing list archive at Nabble.com. > >> > > >> > > --------------------------------------------------------------------- > >> > To unsubscribe, e-mail: [hidden email] > >> </user/SendEmail.jtp?type=node&node=3854567&i=1> > >> > For additional commands, e-mail: [hidden email] > >> </user/SendEmail.jtp?type=node&node=3854567&i=2> > >> > > >> > > >> > >> > >> > >> -- > >> Martin Grigorov > >> jWeekend > >> Training, Consulting, Development > >> http://jWeekend.com > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: [hidden email] > >> </user/SendEmail.jtp?type=node&node=3854567&i=3> > >> For additional commands, e-mail: [hidden email] > >> </user/SendEmail.jtp?type=node&node=3854567&i=4> > >> > >> > >> > >> > ------------------------------------------------------------------------ > >> If you reply to this email, your message will be added to the > >> discussion below: > >> > http://apache-wicket.1842946.n4.nabble.com/PageFactory-and-SessionSettings-tp3854493p3854567.html > >> > >> To unsubscribe from PageFactory and SessionSettings, click here > >> < > >> > > > > > > -- > > Dirk Forchel > > Software Engineer > > > > Telefon +49 (351) 4108-115 > > Fax +49 (351) 4108-5115 > > [hidden email] </user/SendEmail.jtp?type=node&node=3854689&i=1> > > www.exedio.com > > > > exedio Gesellschaft für Softwareentwicklung mbH > > Buchenstraße 16 B > > 01097 Dresden > > Deutschland > > > > Handelsregister: HRB 22109, Amtsgericht Dresden > > Sitz der Gesellschaft: Dresden > > Geschäftsführer: Sven-Erik Bornscheuer, Lutz Kirchner, Falk Krause > > > > > > > > -- > > View this message in context: > http://apache-wicket.1842946.n4.nabble.com/PageFactory-and-SessionSettings-tp3854493p3854668.html > > Sent from the Users forum mailing list archive at Nabble.com. > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [hidden email] > </user/SendEmail.jtp?type=node&node=3854689&i=2> > > For additional commands, e-mail: [hidden email] > </user/SendEmail.jtp?type=node&node=3854689&i=3> > > > > > > > > -- > Martin Grigorov > jWeekend > Training, Consulting, Development > http://jWeekend.com > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [hidden email] > </user/SendEmail.jtp?type=node&node=3854689&i=4> > For additional commands, e-mail: [hidden email] > </user/SendEmail.jtp?type=node&node=3854689&i=5> > > > > ------------------------------------------------------------------------ > If you reply to this email, your message will be added to the > discussion below: > http://apache-wicket.1842946.n4.nabble.com/PageFactory-and-SessionSettings-tp3854493p3854689.html > > > To unsubscribe from PageFactory and SessionSettings, click here > <http://apache-wicket.1842946.n4.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=3854493&code=ZGlyay5mb3JjaGVsQGV4ZWRpby5jb218Mzg1NDQ5M3wxOTkzMTkyMTE4>. > > -- Dirk Forchel Software Engineer Telefon +49 (351) 4108-115 Fax +49 (351) 4108-5115 dirk.forc...@exedio.com www.exedio.com exedio Gesellschaft für Softwareentwicklung mbH Buchenstraße 16 B 01097 Dresden Deutschland Handelsregister: HRB 22109, Amtsgericht Dresden Sitz der Gesellschaft: Dresden Geschäftsführer: Sven-Erik Bornscheuer, Lutz Kirchner, Falk Krause -- View this message in context: http://apache-wicket.1842946.n4.nabble.com/PageFactory-and-SessionSettings-tp3854493p3855608.html Sent from the Users forum mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org