But headerResponse can be transient as well. It is/should only be used
during the render process and doesn't change in between requests.
Juergen
On 10/5/06, Johan Compagner <[EMAIL PROTECTED]> wrote:
no httpsessionstore should detach everything of the page.
Doesn't it do that? Because pages should be stored on disk comletely
detached.
johan
On 10/5/06, Jan Vermeulen <[EMAIL PROTECTED]> wrote:
>
>
> It does get cleared when RequestCycle calls detach(), but that happens
> AFTER
> the touch() of the session where the page is stored in the sessionStore.
> So
> the store fails, because HttpSessionStore intents to serialize in its
> setAttribute().
>
> I made 'headerResponse' transient in my workspace, and it solves my
> problem.
> Could this be done in Wicket ? For now, I can't use HttpSessionStore
> without
> this change.
>
> Jan.
>
>
> Matej Knopp wrote:
> >
> > No matter what response is stored in header response, it should be
> > cleared at the end of request - HeaderContainer.onDetach cleans it. This
> > detach should be done before detaching it. If it's not, then there is a
> > problem.
> >
> > -Matej
> >
> > Jan Vermeulen wrote:
> >> I have been investigating a little, and I thing we`re talking about a
> bug
> >> here.
> >>
> >> The component that is holding a reference to a Response is
> >> 'wicket.markup.html.internal.HtmlHeaderContainer (in its superclass
> >> 'wicket.markup.html.internal.HeaderContainer'). That attribute is not
> >> transient, and gets lazily initialized:
> >>
> >> public IHeaderResponse getHeaderResponse() {
> >> if (this.headerResponse == null)
> >> {
> >> headerResponse = new
> HeaderResponse(getResponse());
> >> }
> >> return headerResponse;
> >> }
> >>
> >> I suppose the problem occurs in the following code of the method
> >> 'onComponentTagBody()':
> >>
> >> // Temporarily replace the web response with a String
> response
> >> final Response webResponse = this.getResponse();
> >>
> >> try
> >> {
> >> final StringResponse response = new
> StringResponse();
> >> this.getRequestCycle().setResponse(response);
> >>
> >> If the headerResponse is not yet initialized at that time, you might
> >> end-up
> >> with a reference to a StringResponse because that is what is available
> on
> >> the requestCycle at that moment.
> >>
> >> I found that the StringResponse instance that HttpSessionStore tried to
> >> serialize was the same that was created (temporarily) by the
> >> HtmlHeaderContainer, and got stored into the 'headerResponse'
> attribute.
> >>
> >> Maybe 'headerResponse' should be transient, or it should be initialized
> >> before the response of the requestCycle is switched to a
> StringResponse.
> >>
> >> Jan.
> >>
> >>
> >> Matej Knopp wrote:
> >>> It shouldn't implement Serializable. It should never get serialized.
> The
> >>> problem might be that you hold reference to response somewhere in
> your
> >>> components? (just a quess)
> >>>
> >>> -Matej
> >>>
> >>> Jan Vermeulen wrote:
> >>>> I changed the sessionStore of my application (using Wicket 2.0) to be
> >>>> 'wicket.protocol.http.HttpSessionStore' i.s.o.
> >>>> 'wicket.protocol.http.SecondLevelCacheSessionStore' (because I use
> >>>> methods
> >>>> in the AccessStackPageMap that are not supported in the pageMap of
> >>>> SecondLevelCacheSessionStore).
> >>>>
> >>>> When saving my first page in the HTTPSession, HttpSessionStore tries
> to
> >>>> serialize it and throws the following exception:
> >>>>
> >>>> Caused by: java.io.NotSerializableException:
> >>>> wicket.response.StringResponse
> >>>> at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> >>>> at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
> >>>> at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> >>>> at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> >>>> at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> >>>> at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
> >>>> at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> >>>> at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> >>>> at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> >>>> at java.io.ObjectOutputStream.writeArray(Unknown Source)
> >>>> at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> >>>> at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
> >>>> at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> >>>> at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> >>>> at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> >>>> at java.io.ObjectOutputStream.writeObject(Unknown Source)
> >>>> at
> >>>> wicket.protocol.http.HttpSessionStore.setAttribute(
> HttpSessionStore.java:60)
> >>>> ... 26 more
> >>>>
> >>>> Is this a bug in Wicket ? Should StringResponse implement
> Serializable
> >>>> ?
> >>>
> >>>
> >>
> >
> >
> >
>
> --
> View this message in context:
>
http://www.nabble.com/wicket.response.StringResponse-not-serializable-%28Wicket-2.0%29-tf2382604.html#a6655919
> Sent from the Wicket - Dev mailing list archive at Nabble.com.
>
>