Re: respond with 404 page while keeping original URL
I agree that getResponse() is indeed confusing I don't see why someone would use it before making a request but I am not sure how much harm it will cause if we move its initialization to #processRequest() (this is where the request processing starts in WicketTester) changing #getResponse() to return the last response would break many apps! getRequest() is useful though! It is used to set any request parameters (form submit, wantOnSelectionChangedNotifications, etc.) before #processRequest() Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov On Fri, Sep 26, 2014 at 2:16 PM, Thibault Kruse wrote: > duh, sorry, could have seen that myself. > > It is still a bit confusing that the WicketTester ends up in a state > with a new request and response which are undefined. Somehow I think > if the web.xml for testing did not define a response for 404, there > should not be any new request. But that's not bad enough to make a > change to wicket breaking existing test code, I guess. > > On Fri, Sep 26, 2014 at 2:07 PM, Martin Grigorov > wrote: > > Use getLastResponse(). > > > > getRequest() and getResponse() return the ones which will be used for the > > next interaction. > > > > Martin Grigorov > > Wicket Training and Consulting > > https://twitter.com/mtgrigorov > > > > On Fri, Sep 26, 2014 at 2:04 PM, Thibault Kruse < > tibokr...@googlemail.com> > > wrote: > > > >> Sorry I just realized I pasted something wrong in my last message. My > >> current workaround would be: > >> > >> > >> > assertThat(TESTER_SCOPE.getTester().getPreviousResponses().get(0).getStatus()) > >> .isEqualTo(HttpServletResponse.SC_NOT_FOUND); > >> > >> But that is a bit annoying for us when we reuse a tester a bit, > >> because wicketTester.getPreviousResponses().get(0) returns the oldest, > >> but we need the most recent one, so something like > >> testert.getPreviousResponses().get(testert.getPreviousResponses().size() > >> -1).getStatus()).isEqualTo(HttpServletResponse.SC_NOT_FOUND); > >> > >> which is unwieldy. Or alternatively invoking > >> TESTER_SCOPE.getTester().getPreviousResponses().clear(); > >> before a new rendering attempt. I will probably go for that in those > >> places. > >> > >> On Fri, Sep 26, 2014 at 1:57 PM, Martin Grigorov > >> wrote: > >> > OK. Right. > >> > ErrorCodeRequestHandler returns a response with code 404 and then the > web > >> > container uses the definition in web.xml to get the url for 404 ... > >> > There is no web.xml with WicketTester and thus no redirect to > /404.html. > >> > Your code is good! > >> > > >> > Martin Grigorov > >> > Wicket Training and Consulting > >> > https://twitter.com/mtgrigorov > >> > > >> > On Fri, Sep 26, 2014 at 1:53 PM, Thibault Kruse < > >> tibokr...@googlemail.com> > >> > wrote: > >> > > >> >> Hm, so the Error Page itself is does not render during the test > >> >> (debugger does not enter constructor at all). > >> >> > >> >> My Error Page has: > >> >>@Override > >> >> protected void configureResponse(WebResponse response) { > >> >> super.configureResponse(response); > >> >> response.setStatus(HttpServletResponse.SC_NOT_FOUND); > >> >> } > >> >> > >> >> When the exception is thrown, the thread returns to > >> >> RequestCycle.HandlerExecutor.execute(), then runs into the catch > >> >> clause of RequestHandlerStack.execute(), upcasting the > >> >> AborthWithHttpStatusException to a ReplaceHandlerException, yielding > >> >> an ErrorCodeRequestHandler for 404. Then this replacementHandler is > >> >> executed using RequestCycle.respond(), ending up in: > >> >> ErrorCodeRequestHandler.respond(final IRequestCycle requestCycle) { > >> >> WebResponse webResponse = > >> (WebResponse)requestCycle.getResponse(); > >> >> webResponse.sendError(errorCode, message); > >> >> } > >> >> > >> >> This comes to MockHttpServletResponse.sendError, where status is set > to > >> >> 404. > >> >> > >> >> Then the thread continues with WicketTester.setupNextRequestCycle(), > >> >> creating a new MockHttpServletResponse() with status 200, but then > >> >> does not render any page at all. > >> >> This assert passes: > >> >> assertThat(TESTER_SCOPE.getTester().getLastRenderedPage()).isNull(); > >> >> > >> >> So I guess I can do a > >> >> assertThat(TESTER_SCOPE. > >> >> > >> >> > >> > getTester().getResponse().getStatus()).isEqualTo(HttpServletResponse.SC_NOT_FOUND); > >> >> > >> >> Not sure whether that's ideal, but it's not too bad. > >> >> > >> >> On Fri, Sep 26, 2014 at 1:32 PM, Martin Grigorov < > mgrigo...@apache.org> > >> >> wrote: > >> >> > Hi, > >> >> > > >> >> > I think it is 200 because this is the status code of the error > page - > >> it > >> >> is > >> >> > rendered successfully. > >> >> > You > >> >> > need > >> >> > org.apache.wicket.util.tester.BaseWicketTester#setFollowRedirects(false) > >> >> > if you want to assert the response for MyPage. > >> >> > > >> >> > Martin Grigorov > >> >> > Wicket Training
Re: respond with 404 page while keeping original URL
duh, sorry, could have seen that myself. It is still a bit confusing that the WicketTester ends up in a state with a new request and response which are undefined. Somehow I think if the web.xml for testing did not define a response for 404, there should not be any new request. But that's not bad enough to make a change to wicket breaking existing test code, I guess. On Fri, Sep 26, 2014 at 2:07 PM, Martin Grigorov wrote: > Use getLastResponse(). > > getRequest() and getResponse() return the ones which will be used for the > next interaction. > > Martin Grigorov > Wicket Training and Consulting > https://twitter.com/mtgrigorov > > On Fri, Sep 26, 2014 at 2:04 PM, Thibault Kruse > wrote: > >> Sorry I just realized I pasted something wrong in my last message. My >> current workaround would be: >> >> >> assertThat(TESTER_SCOPE.getTester().getPreviousResponses().get(0).getStatus()) >> .isEqualTo(HttpServletResponse.SC_NOT_FOUND); >> >> But that is a bit annoying for us when we reuse a tester a bit, >> because wicketTester.getPreviousResponses().get(0) returns the oldest, >> but we need the most recent one, so something like >> testert.getPreviousResponses().get(testert.getPreviousResponses().size() >> -1).getStatus()).isEqualTo(HttpServletResponse.SC_NOT_FOUND); >> >> which is unwieldy. Or alternatively invoking >> TESTER_SCOPE.getTester().getPreviousResponses().clear(); >> before a new rendering attempt. I will probably go for that in those >> places. >> >> On Fri, Sep 26, 2014 at 1:57 PM, Martin Grigorov >> wrote: >> > OK. Right. >> > ErrorCodeRequestHandler returns a response with code 404 and then the web >> > container uses the definition in web.xml to get the url for 404 ... >> > There is no web.xml with WicketTester and thus no redirect to /404.html. >> > Your code is good! >> > >> > Martin Grigorov >> > Wicket Training and Consulting >> > https://twitter.com/mtgrigorov >> > >> > On Fri, Sep 26, 2014 at 1:53 PM, Thibault Kruse < >> tibokr...@googlemail.com> >> > wrote: >> > >> >> Hm, so the Error Page itself is does not render during the test >> >> (debugger does not enter constructor at all). >> >> >> >> My Error Page has: >> >>@Override >> >> protected void configureResponse(WebResponse response) { >> >> super.configureResponse(response); >> >> response.setStatus(HttpServletResponse.SC_NOT_FOUND); >> >> } >> >> >> >> When the exception is thrown, the thread returns to >> >> RequestCycle.HandlerExecutor.execute(), then runs into the catch >> >> clause of RequestHandlerStack.execute(), upcasting the >> >> AborthWithHttpStatusException to a ReplaceHandlerException, yielding >> >> an ErrorCodeRequestHandler for 404. Then this replacementHandler is >> >> executed using RequestCycle.respond(), ending up in: >> >> ErrorCodeRequestHandler.respond(final IRequestCycle requestCycle) { >> >> WebResponse webResponse = >> (WebResponse)requestCycle.getResponse(); >> >> webResponse.sendError(errorCode, message); >> >> } >> >> >> >> This comes to MockHttpServletResponse.sendError, where status is set to >> >> 404. >> >> >> >> Then the thread continues with WicketTester.setupNextRequestCycle(), >> >> creating a new MockHttpServletResponse() with status 200, but then >> >> does not render any page at all. >> >> This assert passes: >> >> assertThat(TESTER_SCOPE.getTester().getLastRenderedPage()).isNull(); >> >> >> >> So I guess I can do a >> >> assertThat(TESTER_SCOPE. >> >> >> >> >> getTester().getResponse().getStatus()).isEqualTo(HttpServletResponse.SC_NOT_FOUND); >> >> >> >> Not sure whether that's ideal, but it's not too bad. >> >> >> >> On Fri, Sep 26, 2014 at 1:32 PM, Martin Grigorov >> >> wrote: >> >> > Hi, >> >> > >> >> > I think it is 200 because this is the status code of the error page - >> it >> >> is >> >> > rendered successfully. >> >> > You >> >> > need >> >> org.apache.wicket.util.tester.BaseWicketTester#setFollowRedirects(false) >> >> > if you want to assert the response for MyPage. >> >> > >> >> > Martin Grigorov >> >> > Wicket Training and Consulting >> >> > https://twitter.com/mtgrigorov >> >> > >> >> > On Fri, Sep 26, 2014 at 1:29 PM, Thibault Kruse < >> >> tibokr...@googlemail.com> >> >> > wrote: >> >> > >> >> >> As a follow-up: How can the Http Error code then be checked using >> >> >> WicketTester? >> >> >> Currently, after your suggested change, the browser shows my 404 page >> >> >> and status is 404, but in WicketTester, I get >> >> >> >> >> >> In MyPage.java: >> >> >> >> >> >> @Override >> >> >> protected void onInitialize() { >> >> >> super.onInitialize(); >> >> >> throw new >> >> >> AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND); >> >> >> } >> >> >> >> >> >> In Test: >> >> >> >> >> >> TESTER_SCOPE.getTester().startPage(MyPage.class); >> >> >> >> >> >> >> >> >> assertThat(TESTER_SCOPE.getTester().getResponse().getStatus()).isEqualTo(HttpServletResponse.SC_NOT_FOUND); >> >> >
Re: respond with 404 page while keeping original URL
Use getLastResponse(). getRequest() and getResponse() return the ones which will be used for the next interaction. Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov On Fri, Sep 26, 2014 at 2:04 PM, Thibault Kruse wrote: > Sorry I just realized I pasted something wrong in my last message. My > current workaround would be: > > > assertThat(TESTER_SCOPE.getTester().getPreviousResponses().get(0).getStatus()) > .isEqualTo(HttpServletResponse.SC_NOT_FOUND); > > But that is a bit annoying for us when we reuse a tester a bit, > because wicketTester.getPreviousResponses().get(0) returns the oldest, > but we need the most recent one, so something like > testert.getPreviousResponses().get(testert.getPreviousResponses().size() > -1).getStatus()).isEqualTo(HttpServletResponse.SC_NOT_FOUND); > > which is unwieldy. Or alternatively invoking > TESTER_SCOPE.getTester().getPreviousResponses().clear(); > before a new rendering attempt. I will probably go for that in those > places. > > On Fri, Sep 26, 2014 at 1:57 PM, Martin Grigorov > wrote: > > OK. Right. > > ErrorCodeRequestHandler returns a response with code 404 and then the web > > container uses the definition in web.xml to get the url for 404 ... > > There is no web.xml with WicketTester and thus no redirect to /404.html. > > Your code is good! > > > > Martin Grigorov > > Wicket Training and Consulting > > https://twitter.com/mtgrigorov > > > > On Fri, Sep 26, 2014 at 1:53 PM, Thibault Kruse < > tibokr...@googlemail.com> > > wrote: > > > >> Hm, so the Error Page itself is does not render during the test > >> (debugger does not enter constructor at all). > >> > >> My Error Page has: > >>@Override > >> protected void configureResponse(WebResponse response) { > >> super.configureResponse(response); > >> response.setStatus(HttpServletResponse.SC_NOT_FOUND); > >> } > >> > >> When the exception is thrown, the thread returns to > >> RequestCycle.HandlerExecutor.execute(), then runs into the catch > >> clause of RequestHandlerStack.execute(), upcasting the > >> AborthWithHttpStatusException to a ReplaceHandlerException, yielding > >> an ErrorCodeRequestHandler for 404. Then this replacementHandler is > >> executed using RequestCycle.respond(), ending up in: > >> ErrorCodeRequestHandler.respond(final IRequestCycle requestCycle) { > >> WebResponse webResponse = > (WebResponse)requestCycle.getResponse(); > >> webResponse.sendError(errorCode, message); > >> } > >> > >> This comes to MockHttpServletResponse.sendError, where status is set to > >> 404. > >> > >> Then the thread continues with WicketTester.setupNextRequestCycle(), > >> creating a new MockHttpServletResponse() with status 200, but then > >> does not render any page at all. > >> This assert passes: > >> assertThat(TESTER_SCOPE.getTester().getLastRenderedPage()).isNull(); > >> > >> So I guess I can do a > >> assertThat(TESTER_SCOPE. > >> > >> > getTester().getResponse().getStatus()).isEqualTo(HttpServletResponse.SC_NOT_FOUND); > >> > >> Not sure whether that's ideal, but it's not too bad. > >> > >> On Fri, Sep 26, 2014 at 1:32 PM, Martin Grigorov > >> wrote: > >> > Hi, > >> > > >> > I think it is 200 because this is the status code of the error page - > it > >> is > >> > rendered successfully. > >> > You > >> > need > >> org.apache.wicket.util.tester.BaseWicketTester#setFollowRedirects(false) > >> > if you want to assert the response for MyPage. > >> > > >> > Martin Grigorov > >> > Wicket Training and Consulting > >> > https://twitter.com/mtgrigorov > >> > > >> > On Fri, Sep 26, 2014 at 1:29 PM, Thibault Kruse < > >> tibokr...@googlemail.com> > >> > wrote: > >> > > >> >> As a follow-up: How can the Http Error code then be checked using > >> >> WicketTester? > >> >> Currently, after your suggested change, the browser shows my 404 page > >> >> and status is 404, but in WicketTester, I get > >> >> > >> >> In MyPage.java: > >> >> > >> >> @Override > >> >> protected void onInitialize() { > >> >> super.onInitialize(); > >> >> throw new > >> >> AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND); > >> >> } > >> >> > >> >> In Test: > >> >> > >> >> TESTER_SCOPE.getTester().startPage(MyPage.class); > >> >> > >> >> > >> > assertThat(TESTER_SCOPE.getTester().getResponse().getStatus()).isEqualTo(HttpServletResponse.SC_NOT_FOUND); > >> >> > >> >> org.junit.ComparisonFailure: > >> >> Expected :404 > >> >> Actual :200 > >> >> > >> >> The Exception is thrown by the Page class in the test (as I see in > the > >> >> debugger). > >> >> > >> >> On Wed, Sep 10, 2014 at 3:09 PM, Martin Grigorov < > mgrigo...@apache.org> > >> >> wrote: > >> >> > Just throw AbortWithHttpErrorCodeException. > >> >> > The url will remain the same. > >> >> > > >> >> > Martin Grigorov > >> >> > Wicket Training and Consulting > >> >> > https://twitter.com/mtgrigorov > >> >> > > >> >> > On Wed, Sep 10, 2014 at 3:43 PM, Th
Re: respond with 404 page while keeping original URL
Sorry I just realized I pasted something wrong in my last message. My current workaround would be: assertThat(TESTER_SCOPE.getTester().getPreviousResponses().get(0).getStatus()) .isEqualTo(HttpServletResponse.SC_NOT_FOUND); But that is a bit annoying for us when we reuse a tester a bit, because wicketTester.getPreviousResponses().get(0) returns the oldest, but we need the most recent one, so something like testert.getPreviousResponses().get(testert.getPreviousResponses().size() -1).getStatus()).isEqualTo(HttpServletResponse.SC_NOT_FOUND); which is unwieldy. Or alternatively invoking TESTER_SCOPE.getTester().getPreviousResponses().clear(); before a new rendering attempt. I will probably go for that in those places. On Fri, Sep 26, 2014 at 1:57 PM, Martin Grigorov wrote: > OK. Right. > ErrorCodeRequestHandler returns a response with code 404 and then the web > container uses the definition in web.xml to get the url for 404 ... > There is no web.xml with WicketTester and thus no redirect to /404.html. > Your code is good! > > Martin Grigorov > Wicket Training and Consulting > https://twitter.com/mtgrigorov > > On Fri, Sep 26, 2014 at 1:53 PM, Thibault Kruse > wrote: > >> Hm, so the Error Page itself is does not render during the test >> (debugger does not enter constructor at all). >> >> My Error Page has: >>@Override >> protected void configureResponse(WebResponse response) { >> super.configureResponse(response); >> response.setStatus(HttpServletResponse.SC_NOT_FOUND); >> } >> >> When the exception is thrown, the thread returns to >> RequestCycle.HandlerExecutor.execute(), then runs into the catch >> clause of RequestHandlerStack.execute(), upcasting the >> AborthWithHttpStatusException to a ReplaceHandlerException, yielding >> an ErrorCodeRequestHandler for 404. Then this replacementHandler is >> executed using RequestCycle.respond(), ending up in: >> ErrorCodeRequestHandler.respond(final IRequestCycle requestCycle) { >> WebResponse webResponse = (WebResponse)requestCycle.getResponse(); >> webResponse.sendError(errorCode, message); >> } >> >> This comes to MockHttpServletResponse.sendError, where status is set to >> 404. >> >> Then the thread continues with WicketTester.setupNextRequestCycle(), >> creating a new MockHttpServletResponse() with status 200, but then >> does not render any page at all. >> This assert passes: >> assertThat(TESTER_SCOPE.getTester().getLastRenderedPage()).isNull(); >> >> So I guess I can do a >> assertThat(TESTER_SCOPE. >> >> getTester().getResponse().getStatus()).isEqualTo(HttpServletResponse.SC_NOT_FOUND); >> >> Not sure whether that's ideal, but it's not too bad. >> >> On Fri, Sep 26, 2014 at 1:32 PM, Martin Grigorov >> wrote: >> > Hi, >> > >> > I think it is 200 because this is the status code of the error page - it >> is >> > rendered successfully. >> > You >> > need >> org.apache.wicket.util.tester.BaseWicketTester#setFollowRedirects(false) >> > if you want to assert the response for MyPage. >> > >> > Martin Grigorov >> > Wicket Training and Consulting >> > https://twitter.com/mtgrigorov >> > >> > On Fri, Sep 26, 2014 at 1:29 PM, Thibault Kruse < >> tibokr...@googlemail.com> >> > wrote: >> > >> >> As a follow-up: How can the Http Error code then be checked using >> >> WicketTester? >> >> Currently, after your suggested change, the browser shows my 404 page >> >> and status is 404, but in WicketTester, I get >> >> >> >> In MyPage.java: >> >> >> >> @Override >> >> protected void onInitialize() { >> >> super.onInitialize(); >> >> throw new >> >> AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND); >> >> } >> >> >> >> In Test: >> >> >> >> TESTER_SCOPE.getTester().startPage(MyPage.class); >> >> >> >> >> assertThat(TESTER_SCOPE.getTester().getResponse().getStatus()).isEqualTo(HttpServletResponse.SC_NOT_FOUND); >> >> >> >> org.junit.ComparisonFailure: >> >> Expected :404 >> >> Actual :200 >> >> >> >> The Exception is thrown by the Page class in the test (as I see in the >> >> debugger). >> >> >> >> On Wed, Sep 10, 2014 at 3:09 PM, Martin Grigorov >> >> wrote: >> >> > Just throw AbortWithHttpErrorCodeException. >> >> > The url will remain the same. >> >> > >> >> > Martin Grigorov >> >> > Wicket Training and Consulting >> >> > https://twitter.com/mtgrigorov >> >> > >> >> > On Wed, Sep 10, 2014 at 3:43 PM, Thibault Kruse < >> >> tibokr...@googlemail.com> >> >> > wrote: >> >> > >> >> >> Hi, >> >> >> >> >> >> we have a page for some resource mounted at /resource/ >> >> >> When users enter an invalid ID, we want to render a 404 page. >> >> >> However, we would like the resulting page not have the original url >> >> >> with the invalid id (but http status 404). >> >> >> >> >> >> Is there any obvious easy way to achieve this? Because it seems the >> >> >> general way in wicket tutorials on 404 pages seem to rely on >> >> >> redirecting to a mounted 404 resource, which mea
Re: respond with 404 page while keeping original URL
OK. Right. ErrorCodeRequestHandler returns a response with code 404 and then the web container uses the definition in web.xml to get the url for 404 ... There is no web.xml with WicketTester and thus no redirect to /404.html. Your code is good! Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov On Fri, Sep 26, 2014 at 1:53 PM, Thibault Kruse wrote: > Hm, so the Error Page itself is does not render during the test > (debugger does not enter constructor at all). > > My Error Page has: >@Override > protected void configureResponse(WebResponse response) { > super.configureResponse(response); > response.setStatus(HttpServletResponse.SC_NOT_FOUND); > } > > When the exception is thrown, the thread returns to > RequestCycle.HandlerExecutor.execute(), then runs into the catch > clause of RequestHandlerStack.execute(), upcasting the > AborthWithHttpStatusException to a ReplaceHandlerException, yielding > an ErrorCodeRequestHandler for 404. Then this replacementHandler is > executed using RequestCycle.respond(), ending up in: > ErrorCodeRequestHandler.respond(final IRequestCycle requestCycle) { > WebResponse webResponse = (WebResponse)requestCycle.getResponse(); > webResponse.sendError(errorCode, message); > } > > This comes to MockHttpServletResponse.sendError, where status is set to > 404. > > Then the thread continues with WicketTester.setupNextRequestCycle(), > creating a new MockHttpServletResponse() with status 200, but then > does not render any page at all. > This assert passes: > assertThat(TESTER_SCOPE.getTester().getLastRenderedPage()).isNull(); > > So I guess I can do a > assertThat(TESTER_SCOPE. > > getTester().getResponse().getStatus()).isEqualTo(HttpServletResponse.SC_NOT_FOUND); > > Not sure whether that's ideal, but it's not too bad. > > On Fri, Sep 26, 2014 at 1:32 PM, Martin Grigorov > wrote: > > Hi, > > > > I think it is 200 because this is the status code of the error page - it > is > > rendered successfully. > > You > > need > org.apache.wicket.util.tester.BaseWicketTester#setFollowRedirects(false) > > if you want to assert the response for MyPage. > > > > Martin Grigorov > > Wicket Training and Consulting > > https://twitter.com/mtgrigorov > > > > On Fri, Sep 26, 2014 at 1:29 PM, Thibault Kruse < > tibokr...@googlemail.com> > > wrote: > > > >> As a follow-up: How can the Http Error code then be checked using > >> WicketTester? > >> Currently, after your suggested change, the browser shows my 404 page > >> and status is 404, but in WicketTester, I get > >> > >> In MyPage.java: > >> > >> @Override > >> protected void onInitialize() { > >> super.onInitialize(); > >> throw new > >> AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND); > >> } > >> > >> In Test: > >> > >> TESTER_SCOPE.getTester().startPage(MyPage.class); > >> > >> > assertThat(TESTER_SCOPE.getTester().getResponse().getStatus()).isEqualTo(HttpServletResponse.SC_NOT_FOUND); > >> > >> org.junit.ComparisonFailure: > >> Expected :404 > >> Actual :200 > >> > >> The Exception is thrown by the Page class in the test (as I see in the > >> debugger). > >> > >> On Wed, Sep 10, 2014 at 3:09 PM, Martin Grigorov > >> wrote: > >> > Just throw AbortWithHttpErrorCodeException. > >> > The url will remain the same. > >> > > >> > Martin Grigorov > >> > Wicket Training and Consulting > >> > https://twitter.com/mtgrigorov > >> > > >> > On Wed, Sep 10, 2014 at 3:43 PM, Thibault Kruse < > >> tibokr...@googlemail.com> > >> > wrote: > >> > > >> >> Hi, > >> >> > >> >> we have a page for some resource mounted at /resource/ > >> >> When users enter an invalid ID, we want to render a 404 page. > >> >> However, we would like the resulting page not have the original url > >> >> with the invalid id (but http status 404). > >> >> > >> >> Is there any obvious easy way to achieve this? Because it seems the > >> >> general way in wicket tutorials on 404 pages seem to rely on > >> >> redirecting to a mounted 404 resource, which means the browser will > >> >> not display the original invalid URL. > >> >> > >> >> cheers, > >> >> Thibault > >> >> > >> >> - > >> >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > >> >> For additional commands, e-mail: users-h...@wicket.apache.org > >> >> > >> >> > >> > >> - > >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > >> For additional commands, e-mail: users-h...@wicket.apache.org > >> > >> > > - > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > For additional commands, e-mail: users-h...@wicket.apache.org > >
Re: respond with 404 page while keeping original URL
Hm, so the Error Page itself is does not render during the test (debugger does not enter constructor at all). My Error Page has: @Override protected void configureResponse(WebResponse response) { super.configureResponse(response); response.setStatus(HttpServletResponse.SC_NOT_FOUND); } When the exception is thrown, the thread returns to RequestCycle.HandlerExecutor.execute(), then runs into the catch clause of RequestHandlerStack.execute(), upcasting the AborthWithHttpStatusException to a ReplaceHandlerException, yielding an ErrorCodeRequestHandler for 404. Then this replacementHandler is executed using RequestCycle.respond(), ending up in: ErrorCodeRequestHandler.respond(final IRequestCycle requestCycle) { WebResponse webResponse = (WebResponse)requestCycle.getResponse(); webResponse.sendError(errorCode, message); } This comes to MockHttpServletResponse.sendError, where status is set to 404. Then the thread continues with WicketTester.setupNextRequestCycle(), creating a new MockHttpServletResponse() with status 200, but then does not render any page at all. This assert passes: assertThat(TESTER_SCOPE.getTester().getLastRenderedPage()).isNull(); So I guess I can do a assertThat(TESTER_SCOPE. getTester().getResponse().getStatus()).isEqualTo(HttpServletResponse.SC_NOT_FOUND); Not sure whether that's ideal, but it's not too bad. On Fri, Sep 26, 2014 at 1:32 PM, Martin Grigorov wrote: > Hi, > > I think it is 200 because this is the status code of the error page - it is > rendered successfully. > You > need org.apache.wicket.util.tester.BaseWicketTester#setFollowRedirects(false) > if you want to assert the response for MyPage. > > Martin Grigorov > Wicket Training and Consulting > https://twitter.com/mtgrigorov > > On Fri, Sep 26, 2014 at 1:29 PM, Thibault Kruse > wrote: > >> As a follow-up: How can the Http Error code then be checked using >> WicketTester? >> Currently, after your suggested change, the browser shows my 404 page >> and status is 404, but in WicketTester, I get >> >> In MyPage.java: >> >> @Override >> protected void onInitialize() { >> super.onInitialize(); >> throw new >> AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND); >> } >> >> In Test: >> >> TESTER_SCOPE.getTester().startPage(MyPage.class); >> >> assertThat(TESTER_SCOPE.getTester().getResponse().getStatus()).isEqualTo(HttpServletResponse.SC_NOT_FOUND); >> >> org.junit.ComparisonFailure: >> Expected :404 >> Actual :200 >> >> The Exception is thrown by the Page class in the test (as I see in the >> debugger). >> >> On Wed, Sep 10, 2014 at 3:09 PM, Martin Grigorov >> wrote: >> > Just throw AbortWithHttpErrorCodeException. >> > The url will remain the same. >> > >> > Martin Grigorov >> > Wicket Training and Consulting >> > https://twitter.com/mtgrigorov >> > >> > On Wed, Sep 10, 2014 at 3:43 PM, Thibault Kruse < >> tibokr...@googlemail.com> >> > wrote: >> > >> >> Hi, >> >> >> >> we have a page for some resource mounted at /resource/ >> >> When users enter an invalid ID, we want to render a 404 page. >> >> However, we would like the resulting page not have the original url >> >> with the invalid id (but http status 404). >> >> >> >> Is there any obvious easy way to achieve this? Because it seems the >> >> general way in wicket tutorials on 404 pages seem to rely on >> >> redirecting to a mounted 404 resource, which means the browser will >> >> not display the original invalid URL. >> >> >> >> cheers, >> >> Thibault >> >> >> >> - >> >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >> >> For additional commands, e-mail: users-h...@wicket.apache.org >> >> >> >> >> >> - >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >> For additional commands, e-mail: users-h...@wicket.apache.org >> >> - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: respond with 404 page while keeping original URL
Hi, I think it is 200 because this is the status code of the error page - it is rendered successfully. You need org.apache.wicket.util.tester.BaseWicketTester#setFollowRedirects(false) if you want to assert the response for MyPage. Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov On Fri, Sep 26, 2014 at 1:29 PM, Thibault Kruse wrote: > As a follow-up: How can the Http Error code then be checked using > WicketTester? > Currently, after your suggested change, the browser shows my 404 page > and status is 404, but in WicketTester, I get > > In MyPage.java: > > @Override > protected void onInitialize() { > super.onInitialize(); > throw new > AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND); > } > > In Test: > > TESTER_SCOPE.getTester().startPage(MyPage.class); > > assertThat(TESTER_SCOPE.getTester().getResponse().getStatus()).isEqualTo(HttpServletResponse.SC_NOT_FOUND); > > org.junit.ComparisonFailure: > Expected :404 > Actual :200 > > The Exception is thrown by the Page class in the test (as I see in the > debugger). > > On Wed, Sep 10, 2014 at 3:09 PM, Martin Grigorov > wrote: > > Just throw AbortWithHttpErrorCodeException. > > The url will remain the same. > > > > Martin Grigorov > > Wicket Training and Consulting > > https://twitter.com/mtgrigorov > > > > On Wed, Sep 10, 2014 at 3:43 PM, Thibault Kruse < > tibokr...@googlemail.com> > > wrote: > > > >> Hi, > >> > >> we have a page for some resource mounted at /resource/ > >> When users enter an invalid ID, we want to render a 404 page. > >> However, we would like the resulting page not have the original url > >> with the invalid id (but http status 404). > >> > >> Is there any obvious easy way to achieve this? Because it seems the > >> general way in wicket tutorials on 404 pages seem to rely on > >> redirecting to a mounted 404 resource, which means the browser will > >> not display the original invalid URL. > >> > >> cheers, > >> Thibault > >> > >> - > >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > >> For additional commands, e-mail: users-h...@wicket.apache.org > >> > >> > > - > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > For additional commands, e-mail: users-h...@wicket.apache.org > >
Re: respond with 404 page while keeping original URL
As a follow-up: How can the Http Error code then be checked using WicketTester? Currently, after your suggested change, the browser shows my 404 page and status is 404, but in WicketTester, I get In MyPage.java: @Override protected void onInitialize() { super.onInitialize(); throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND); } In Test: TESTER_SCOPE.getTester().startPage(MyPage.class); assertThat(TESTER_SCOPE.getTester().getResponse().getStatus()).isEqualTo(HttpServletResponse.SC_NOT_FOUND); org.junit.ComparisonFailure: Expected :404 Actual :200 The Exception is thrown by the Page class in the test (as I see in the debugger). On Wed, Sep 10, 2014 at 3:09 PM, Martin Grigorov wrote: > Just throw AbortWithHttpErrorCodeException. > The url will remain the same. > > Martin Grigorov > Wicket Training and Consulting > https://twitter.com/mtgrigorov > > On Wed, Sep 10, 2014 at 3:43 PM, Thibault Kruse > wrote: > >> Hi, >> >> we have a page for some resource mounted at /resource/ >> When users enter an invalid ID, we want to render a 404 page. >> However, we would like the resulting page not have the original url >> with the invalid id (but http status 404). >> >> Is there any obvious easy way to achieve this? Because it seems the >> general way in wicket tutorials on 404 pages seem to rely on >> redirecting to a mounted 404 resource, which means the browser will >> not display the original invalid URL. >> >> cheers, >> Thibault >> >> - >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >> For additional commands, e-mail: users-h...@wicket.apache.org >> >> - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: respond with 404 page while keeping original URL
Just throw AbortWithHttpErrorCodeException. The url will remain the same. Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov On Wed, Sep 10, 2014 at 3:43 PM, Thibault Kruse wrote: > Hi, > > we have a page for some resource mounted at /resource/ > When users enter an invalid ID, we want to render a 404 page. > However, we would like the resulting page not have the original url > with the invalid id (but http status 404). > > Is there any obvious easy way to achieve this? Because it seems the > general way in wicket tutorials on 404 pages seem to rely on > redirecting to a mounted 404 resource, which means the browser will > not display the original invalid URL. > > cheers, > Thibault > > - > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > For additional commands, e-mail: users-h...@wicket.apache.org > >
respond with 404 page while keeping original URL
Hi, we have a page for some resource mounted at /resource/ When users enter an invalid ID, we want to render a 404 page. However, we would like the resulting page not have the original url with the invalid id (but http status 404). Is there any obvious easy way to achieve this? Because it seems the general way in wicket tutorials on 404 pages seem to rely on redirecting to a mounted 404 resource, which means the browser will not display the original invalid URL. cheers, Thibault - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org