You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Thibault Kruse <ti...@googlemail.com> on 2014/09/10 14:43:33 UTC

respond with 404 page while keeping original URL

Hi,

we have a page for some resource mounted at /resource/<id>
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-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: respond with 404 page while keeping original URL

Posted by Martin Grigorov <mg...@apache.org>.
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 <ti...@googlemail.com>
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 <mg...@apache.org>
> 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 <
> tibokruse@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 <mg...@apache.org>
> >> 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 <
> >> tibokruse@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 <
> mgrigorov@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 and Consulting
> >> >> > https://twitter.com/mtgrigorov
> >> >> >
> >> >> > On Fri, Sep 26, 2014 at 1:29 PM, Thibault Kruse <
> >> >> tibokruse@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 <
> >> mgrigorov@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, Thibault Kruse <
> >> >> >> tibokruse@googlemail.com>
> >> >> >> > wrote:
> >> >> >> >
> >> >> >> >> Hi,
> >> >> >> >>
> >> >> >> >> we have a page for some resource mounted at /resource/<id>
> >> >> >> >> 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-unsubscribe@wicket.apache.org
> >> >> >> >> For additional commands, e-mail: users-help@wicket.apache.org
> >> >> >> >>
> >> >> >> >>
> >> >> >>
> >> >> >>
> ---------------------------------------------------------------------
> >> >> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> >> >> >> For additional commands, e-mail: users-help@wicket.apache.org
> >> >> >>
> >> >> >>
> >> >>
> >> >> ---------------------------------------------------------------------
> >> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> >> >> For additional commands, e-mail: users-help@wicket.apache.org
> >> >>
> >> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> >> For additional commands, e-mail: users-help@wicket.apache.org
> >>
> >>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

Re: respond with 404 page while keeping original URL

Posted by Thibault Kruse <ti...@googlemail.com>.
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 <mg...@apache.org> 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 <ti...@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 <mg...@apache.org>
>> 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 <
>> tibokruse@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 <mg...@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 and Consulting
>> >> > https://twitter.com/mtgrigorov
>> >> >
>> >> > On Fri, Sep 26, 2014 at 1:29 PM, Thibault Kruse <
>> >> tibokruse@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 <
>> mgrigorov@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, Thibault Kruse <
>> >> >> tibokruse@googlemail.com>
>> >> >> > wrote:
>> >> >> >
>> >> >> >> Hi,
>> >> >> >>
>> >> >> >> we have a page for some resource mounted at /resource/<id>
>> >> >> >> 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-unsubscribe@wicket.apache.org
>> >> >> >> For additional commands, e-mail: users-help@wicket.apache.org
>> >> >> >>
>> >> >> >>
>> >> >>
>> >> >> ---------------------------------------------------------------------
>> >> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> >> >> For additional commands, e-mail: users-help@wicket.apache.org
>> >> >>
>> >> >>
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> >> For additional commands, e-mail: users-help@wicket.apache.org
>> >>
>> >>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: respond with 404 page while keeping original URL

Posted by Martin Grigorov <mg...@apache.org>.
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 <ti...@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 <mg...@apache.org>
> 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 <
> tibokruse@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 <mg...@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 and Consulting
> >> > https://twitter.com/mtgrigorov
> >> >
> >> > On Fri, Sep 26, 2014 at 1:29 PM, Thibault Kruse <
> >> tibokruse@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 <
> mgrigorov@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, Thibault Kruse <
> >> >> tibokruse@googlemail.com>
> >> >> > wrote:
> >> >> >
> >> >> >> Hi,
> >> >> >>
> >> >> >> we have a page for some resource mounted at /resource/<id>
> >> >> >> 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-unsubscribe@wicket.apache.org
> >> >> >> For additional commands, e-mail: users-help@wicket.apache.org
> >> >> >>
> >> >> >>
> >> >>
> >> >> ---------------------------------------------------------------------
> >> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> >> >> For additional commands, e-mail: users-help@wicket.apache.org
> >> >>
> >> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> >> For additional commands, e-mail: users-help@wicket.apache.org
> >>
> >>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

Re: respond with 404 page while keeping original URL

Posted by Thibault Kruse <ti...@googlemail.com>.
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 <mg...@apache.org> 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 <ti...@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 <mg...@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 and Consulting
>> > https://twitter.com/mtgrigorov
>> >
>> > On Fri, Sep 26, 2014 at 1:29 PM, Thibault Kruse <
>> tibokruse@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 <mg...@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, Thibault Kruse <
>> >> tibokruse@googlemail.com>
>> >> > wrote:
>> >> >
>> >> >> Hi,
>> >> >>
>> >> >> we have a page for some resource mounted at /resource/<id>
>> >> >> 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-unsubscribe@wicket.apache.org
>> >> >> For additional commands, e-mail: users-help@wicket.apache.org
>> >> >>
>> >> >>
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> >> For additional commands, e-mail: users-help@wicket.apache.org
>> >>
>> >>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: respond with 404 page while keeping original URL

Posted by Martin Grigorov <mg...@apache.org>.
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 <ti...@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 <mg...@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 and Consulting
> > https://twitter.com/mtgrigorov
> >
> > On Fri, Sep 26, 2014 at 1:29 PM, Thibault Kruse <
> tibokruse@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 <mg...@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, Thibault Kruse <
> >> tibokruse@googlemail.com>
> >> > wrote:
> >> >
> >> >> Hi,
> >> >>
> >> >> we have a page for some resource mounted at /resource/<id>
> >> >> 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-unsubscribe@wicket.apache.org
> >> >> For additional commands, e-mail: users-help@wicket.apache.org
> >> >>
> >> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> >> For additional commands, e-mail: users-help@wicket.apache.org
> >>
> >>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

Re: respond with 404 page while keeping original URL

Posted by Thibault Kruse <ti...@googlemail.com>.
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 <mg...@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 and Consulting
> https://twitter.com/mtgrigorov
>
> On Fri, Sep 26, 2014 at 1:29 PM, Thibault Kruse <ti...@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 <mg...@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, Thibault Kruse <
>> tibokruse@googlemail.com>
>> > wrote:
>> >
>> >> Hi,
>> >>
>> >> we have a page for some resource mounted at /resource/<id>
>> >> 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-unsubscribe@wicket.apache.org
>> >> For additional commands, e-mail: users-help@wicket.apache.org
>> >>
>> >>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: respond with 404 page while keeping original URL

Posted by Martin Grigorov <mg...@apache.org>.
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 <ti...@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 <mg...@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, Thibault Kruse <
> tibokruse@googlemail.com>
> > wrote:
> >
> >> Hi,
> >>
> >> we have a page for some resource mounted at /resource/<id>
> >> 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-unsubscribe@wicket.apache.org
> >> For additional commands, e-mail: users-help@wicket.apache.org
> >>
> >>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

Re: respond with 404 page while keeping original URL

Posted by Thibault Kruse <ti...@googlemail.com>.
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 <mg...@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, Thibault Kruse <ti...@googlemail.com>
> wrote:
>
>> Hi,
>>
>> we have a page for some resource mounted at /resource/<id>
>> 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-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: respond with 404 page while keeping original URL

Posted by Martin Grigorov <mg...@apache.org>.
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 <ti...@googlemail.com>
wrote:

> Hi,
>
> we have a page for some resource mounted at /resource/<id>
> 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-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>