You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by THMayr <Th...@adesso.de> on 2016/03/23 13:50:21 UTC

java.lang.IllegalStateException: Response already committed after calling WebResponse.sendRedirect()

Hello,

I'm trying to implement logout using Wicket 7.2.0. I'm using container
managed form based login. So I implemented the logout sequence like this:

public class LogoutForm extends Form
{
    protected void onSubmit ()
    {
        getSession ().invalidateNow ();
        ((WebResponse) getResponse ()).sendRedirect
("http://localhost:7101/WicketTest/welcome.html");
    }
}

The code works, and the user is redirected to the specified page. But what
worries me is, that I get the following exception in the server log:

java.lang.IllegalStateException: Response already committed
	at
weblogic.servlet.internal.ServletResponseImpl.objectIfCommitted(ServletResponseImpl.java:1853)
	at
weblogic.servlet.internal.ServletResponseImpl.sendRedirect(ServletResponseImpl.java:953)
	at
weblogic.servlet.internal.ServletResponseImpl.sendRedirect(ServletResponseImpl.java:948)
	at
org.apache.wicket.protocol.http.servlet.ServletWebResponse.sendRedirect(ServletWebResponse.java:296)
	at
org.apache.wicket.protocol.http.BufferedWebResponse$SendRedirectAction.invoke(BufferedWebResponse.java:409)
	at
org.apache.wicket.protocol.http.BufferedWebResponse.writeTo(BufferedWebResponse.java:602)
	at
org.apache.wicket.protocol.http.HeaderBufferingWebResponse.stopBuffering(HeaderBufferingWebResponse.java:60)
	at
org.apache.wicket.protocol.http.HeaderBufferingWebResponse.flush(HeaderBufferingWebResponse.java:97)
	at
org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:263)
	at
org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:203)
	at
org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:284)
	at
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
	at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:141)
	at java.security.AccessController.doPrivileged(Native Method)
	at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
	at
oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:649)
	at
oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:124)
	at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:232)
	at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:94)
	at
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
	at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:224)
	at
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
	at
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3654)
	at
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3620)
	at
weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326)
	at
weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:196)
	at
weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)
	at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)
	at
weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2423)
	at
weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2280)
	at
weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2258)
	at
weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1626)
	at
weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1586)
	at
weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:270)
	at
weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348)
	at
weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333)
	at
weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54)
	at
weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
	at
weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:617)
	at weblogic.work.ExecuteThread.execute(ExecuteThread.java:397)
	at weblogic.work.ExecuteThread.run(ExecuteThread.java:346)

So is something missing in my code? Wicket seems to do something with the
response although it is already committed.

Thanks for hints Thomas


--
View this message in context: http://apache-wicket.1842946.n4.nabble.com/java-lang-IllegalStateException-Response-already-committed-after-calling-WebResponse-sendRedirect-tp4674096.html
Sent from the Users forum mailing list archive at Nabble.com.

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


Re: java.lang.IllegalStateException: Response already committed after calling WebResponse.sendRedirect()

Posted by THMayr <Th...@adesso.de>.
I just found a solution to get rid of the java.lang.IllegalStateException by
throwing another exception. I replaced the line

((WebResponse) getResponse ()).sendRedirect
("http://localhost:7101/WicketTest/welcome.html");

with the line

throw new
RedirectToUrlException("http://localhost:7101/WicketTest/welcome.html");

I wonder if this is the intended way to do it. Exceptions should normally
not used to control normal flow.

Thomas

--
View this message in context: http://apache-wicket.1842946.n4.nabble.com/java-lang-IllegalStateException-Response-already-committed-after-calling-WebResponse-sendRedirect-tp4674096p4674098.html
Sent from the Users forum mailing list archive at Nabble.com.

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


Re: java.lang.IllegalStateException: Response already committed after calling WebResponse.sendRedirect()

Posted by Martin Grigorov <mg...@apache.org>.
In that case you need to use RedirectToUrlException if the url is external
for Wicket.

Martin Grigorov
Wicket Training and Consulting
https://twitter.com/mtgrigorov

On Wed, Mar 23, 2016 at 2:08 PM, THMayr <Th...@adesso.de> wrote:

> Hi Martin,
>
> thanks for your fast reply. Your solution works, but is not what I want. I
> want to redirect the user to an external page outside the secure area, so
> that the user isn't redirected to the login form.
>
> Thomas
>
> --
> View this message in context:
> http://apache-wicket.1842946.n4.nabble.com/java-lang-IllegalStateException-Response-already-committed-after-calling-WebResponse-sendRedirect-tp4674096p4674099.html
> Sent from the Users forum mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

Re: java.lang.IllegalStateException: Response already committed after calling WebResponse.sendRedirect()

Posted by THMayr <Th...@adesso.de>.
Hi Martin,

thanks for your fast reply. Your solution works, but is not what I want. I
want to redirect the user to an external page outside the secure area, so
that the user isn't redirected to the login form.

Thomas

--
View this message in context: http://apache-wicket.1842946.n4.nabble.com/java-lang-IllegalStateException-Response-already-committed-after-calling-WebResponse-sendRedirect-tp4674096p4674099.html
Sent from the Users forum mailing list archive at Nabble.com.

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


Re: java.lang.IllegalStateException: Response already committed after calling WebResponse.sendRedirect()

Posted by Martin Grigorov <mg...@apache.org>.
Hi,

On Wed, Mar 23, 2016 at 1:50 PM, THMayr <Th...@adesso.de> wrote:

> Hello,
>
> I'm trying to implement logout using Wicket 7.2.0. I'm using container
> managed form based login. So I implemented the logout sequence like this:
>
> public class LogoutForm extends Form
> {
>     protected void onSubmit ()
>     {
>         getSession ().invalidateNow ();
>         ((WebResponse) getResponse ()).sendRedirect
> ("http://localhost:7101/WicketTest/welcome.html");
>

Replace with:
getSession().invalidate();
setResponsePage(WebApplication.get().getHomePage());


    }
> }
>
> The code works, and the user is redirected to the specified page. But what
> worries me is, that I get the following exception in the server log:
>
> java.lang.IllegalStateException: Response already committed
>         at
>
> weblogic.servlet.internal.ServletResponseImpl.objectIfCommitted(ServletResponseImpl.java:1853)
>         at
>
> weblogic.servlet.internal.ServletResponseImpl.sendRedirect(ServletResponseImpl.java:953)
>

It seems Wicket tries to do a second redirect. (Assuming the first one is
successful).


>         at
>
> weblogic.servlet.internal.ServletResponseImpl.sendRedirect(ServletResponseImpl.java:948)
>         at
>
> org.apache.wicket.protocol.http.servlet.ServletWebResponse.sendRedirect(ServletWebResponse.java:296)
>

Put a breakoint here and see how many times and with what values it is
being called.


>         at
>
> org.apache.wicket.protocol.http.BufferedWebResponse$SendRedirectAction.invoke(BufferedWebResponse.java:409)
>         at
>
> org.apache.wicket.protocol.http.BufferedWebResponse.writeTo(BufferedWebResponse.java:602)
>         at
>
> org.apache.wicket.protocol.http.HeaderBufferingWebResponse.stopBuffering(HeaderBufferingWebResponse.java:60)
>         at
>
> org.apache.wicket.protocol.http.HeaderBufferingWebResponse.flush(HeaderBufferingWebResponse.java:97)
>         at
>
> org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:263)
>         at
>
> org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:203)
>         at
>
> org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:284)
>         at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
>         at
> oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:141)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at
> oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
>         at
>
> oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:649)
>         at
> oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:124)
>         at
> oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:232)
>         at
> oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:94)
>         at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
>         at
> oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:224)
>         at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
>         at
>
> weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3654)
>         at
>
> weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3620)
>         at
>
> weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326)
>         at
>
> weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:196)
>         at
>
> weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)
>         at
> weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)
>         at
>
> weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2423)
>         at
>
> weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2280)
>         at
>
> weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2258)
>         at
>
> weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1626)
>         at
>
> weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1586)
>         at
>
> weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:270)
>         at
>
> weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348)
>         at
>
> weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333)
>         at
>
> weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54)
>         at
>
> weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
>         at
>
> weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:617)
>         at weblogic.work.ExecuteThread.execute(ExecuteThread.java:397)
>         at weblogic.work.ExecuteThread.run(ExecuteThread.java:346)
>
> So is something missing in my code? Wicket seems to do something with the
> response although it is already committed.
>
> Thanks for hints Thomas
>
>
> --
> View this message in context:
> http://apache-wicket.1842946.n4.nabble.com/java-lang-IllegalStateException-Response-already-committed-after-calling-WebResponse-sendRedirect-tp4674096.html
> Sent from the Users forum mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>