[
https://issues.apache.org/jira/browse/WICKET-2387?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12770966#action_12770966
]
Eric Gulatee commented on WICKET-2387:
--------------------------------------
Response from IBM below.
Basically, the response is:
"Working as intended in WPS 6.1, They intend to implement new 2 phase rendering
at some point in the future".
This limits use of Wicket & WPS 6.1
Any comments or suggestions of a workaround? (I realize this isn't a Wicket
issue, however from my standpoint a wicket workaround would be greatly welcome)
----------------------------------------
his lies in the nature of the render phase of a portal. Since portlets
only render parts of a page they cannot modify the headers of the HTTP
request.
The servlet spec says this to the isCommited method:
"Returns a boolean indicating if the response has been committed. A
committed response has already had its status code and headers
written."
Due to the fact the portlets are written as parts of the page they
cannot change the headers in the render phase and so isCommited() will
never return true in render phase (all doXXX methods).
This changed when we look at resource serving. In a resource response
the Portlet is allowed to change the headers. So isCommitted will
return true here as long no data was written to the output
writer/stream.
In one of the next versions, Portal will support a 2-phase rendering
approach where users can also set headers in render phase as described
in chapter "PLT.11.1.4.3 The Render Part Request Attribute for Setting
Headers in the Render Phase" of the portlet
spec.
=============================================================
As L3 has mentioned the current behavior is working as designed. However there
are plans to add a two phase rendering approach in a future release, however L3
has not provided any specific information about which release will contain this
feature.
> Failure using a Redirect strategy in a Websphere Portal 6.1 Portlet due to
> response already committed
> -----------------------------------------------------------------------------------------------------
>
> Key: WICKET-2387
> URL: https://issues.apache.org/jira/browse/WICKET-2387
> Project: Wicket
> Issue Type: Bug
> Components: wicket
> Affects Versions: 1.4-RC7
> Environment: IBM Java 1.5, WebSphere 6.1
> Reporter: Eric Gulatee
> Assignee: Ate Douma
>
> When the following Authorization Stategy is set for in a WPS 6.1 Portlet
> getSecuritySettings().setAuthorizationStrategy(new IAuthorizationStrategy() {
> public boolean isInstantiationAuthorized(Class componentClass) {
> if
> (AuthenticatedWebPage.class.isAssignableFrom(componentClass)) {
> if (((SignInSession) Session.get()).isSignedIn()) {
> return true;
> }
> throw new
> RestartResponseAtInterceptPageException(SignInPage.class);
> }
> return true;
>
> }
> public boolean isActionAuthorized(Component component, Action
> action) {
> return true;
> }
> });
> We get the following stacktrace
> aused by: java.lang.IllegalStateException: clearBuffer(): illegal
> state--> stream is committed
> at
> com.ibm.wsspi.webcontainer.util.BufferedServletOutputStream.clearBuffer(
> BufferedServletOutputStream.java:497)
> at
> com.ibm.ws.webcontainer.srt.SRTServletResponse.reset(SRTServletResponse.
> java:880)
> at
> javax.servlet.ServletResponseWrapper.reset(ServletResponseWrapper.java:
> 228)
> at
> javax.servlet.ServletResponseWrapper.reset(ServletResponseWrapper.java:
> 228)
> at
> javax.servlet.ServletResponseWrapper.reset(ServletResponseWrapper.java:
> 228)
> at
> javax.servlet.ServletResponseWrapper.reset(ServletResponseWrapper.java:
> 228)
> at
> com.ibm.ws.portletcontainer.core.impl.PortletResponseImpl.reset(PortletR
> esponseImpl.java:355)
> at
> org.apache.wicket.protocol.http.portlet.OSCWicketPortlet.processMimeResp
> onseRequest(OSCWicketPortlet.java:138)
> at
> org.apache.wicket.protocol.http.portlet.OSCWicketPortlet.processRequest(
> OSCWicketPortlet.java:80)
> at
> org.apache.wicket.protocol.http.portlet.WicketPortlet.doView(WicketPortl
> et.java:469)
> at javax.portlet.GenericPortlet.doDispatch(GenericPortlet.java:328)
> Which IBM has determined the cause to being:
> The cause is a PortletResponse#reset() call after the response has been
> commited. A response is for example committed after the headers were
> written to the client.
> I am guessing that wicket is outputting something and then deciding to do a
> redirect thus causing the failure? IS this something on the Wicket or
> WAS/WPS 6.1 side?
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.