It would sure be nice for those using broken versions of BEA if Tapestry would clean up the lazy behaviour. That is, you are not really *supposed* to call setContentType() after the Response is committed, anyway, _and_ the application server is not *supposed* to throw an IllegalStateException- it should treat it as a no-op. But, Tapestry *should* check isCommitted() on the Response, and should NOT call setContentType() if is already is...
-Tom On Thu, Mar 09, 2006 at 10:13:39PM +0000, Jesse Kuhnert (JIRA) wrote: > [ > http://issues.apache.org/jira/browse/TAPESTRY-730?page=comments#action_12369749 > ] > > Jesse Kuhnert commented on TAPESTRY-730: > ---------------------------------------- > > I'm confused, is there anything left that Tapestry should be doing or is this > purely BEA's problem? > > > Cannot change charset from 'UTF8' to 'UTF-8 during Redirection > > -------------------------------------------------------------- > > > > Key: TAPESTRY-730 > > URL: http://issues.apache.org/jira/browse/TAPESTRY-730 > > Project: Tapestry > > Type: Bug > > Components: Framework > > Versions: 4.0 > > Environment: Windows XP - Bea Weblogic 8.1 SP2 - Jdk 142_06 - Tapestry > > 4.0b11 > > Reporter: Paolo Don?? > > > > > I'm trying to run this simple page on WLS81 : > > public abstract class Test extends org.apache.tapestry.html.BasePage { > > > > // do nothing, just redirect to Home when invoked > > public Test(){ > > addPageBeginRenderListener(new PageBeginRenderListener(){ > > public void pageBeginRender(PageEvent event) { > > throw new RedirectException("Home"); > > } > > }); > > } > > } > > I've got two html templates: "Home.html" and "Test.html". both of them do > > not have components, just plain html. > > I wanna perform a redirection from Test to Home, so I try to call > > http://localhost:8080/app?page=Test&service=page > > On tomcat this call perform the redirection to the "Home" page. > > On WLS 81 I get this exception instead: > > org.apache.hivemind.ApplicationRuntimeException: Attempt to change > > ContentType after calling getWriter() (cannot change charset from 'UTF8' to > > 'UTF-8') > > at > > org.apache.tapestry.error.ExceptionPresenterImpl.presentException(ExceptionPresenterImpl.java:64) > > at > > $ExceptionPresenter_1073673e5c3.presentException($ExceptionPresenter_1073673e5c3.java) > > at > > $ExceptionPresenter_1073673e5c2.presentException($ExceptionPresenter_1073673e5c2.java) > > at > > org.apache.tapestry.engine.AbstractEngine.activateExceptionPage(AbstractEngine.java:121) > > at > > org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:280) > > at > > org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeEngineTerminator.java:60) > > at > > $WebRequestServicer_1073673e61a.service($WebRequestServicer_1073673e61a.java) > > at > > $WebRequestServicer_1073673e616.service($WebRequestServicer_1073673e616.java) > > at > > org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.service(WebRequestServicerPipelineBridge.java:56) > > at > > $ServletRequestServicer_1073673e5fa.service($ServletRequestServicer_1073673e5fa.java) > > at > > org.apache.tapestry.request.DecodedRequestInjector.service(DecodedRequestInjector.java:55) > > at > > $ServletRequestServicerFilter_1073673e5f6.service($ServletRequestServicerFilter_1073673e5f6.java) > > at > > $ServletRequestServicer_1073673e5fc.service($ServletRequestServicer_1073673e5fc.java) > > at > > org.apache.tapestry.multipart.MultipartDecoderFilter.service(MultipartDecoderFilter.java:52) > > at > > $ServletRequestServicerFilter_1073673e5f4.service($ServletRequestServicerFilter_1073673e5f4.java) > > at > > $ServletRequestServicer_1073673e5fc.service($ServletRequestServicer_1073673e5fc.java) > > at > > org.apache.tapestry.services.impl.SetupRequestEncoding.service(SetupRequestEncoding.java:53) > > at > > $ServletRequestServicerFilter_1073673e5f8.service($ServletRequestServicerFilter_1073673e5f8.java) > > at > > $ServletRequestServicer_1073673e5fc.service($ServletRequestServicer_1073673e5fc.java) > > at > > $ServletRequestServicer_1073673e5ec.service($ServletRequestServicer_1073673e5ec.java) > > at > > org.apache.tapestry.ApplicationServlet.doService(ApplicationServlet.java:141) > > at > > org.apache.tapestry.ApplicationServlet.doGet(ApplicationServlet.java:97) > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) > > at > > weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:971) > > at > > weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:402) > > at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28) > > at > > weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) > > at org.apache.tapestry.RedirectFilter.doFilter(RedirectFilter.java:103) > > at > > weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) > > at > > weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6356) > > at > > weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317) > > at > > weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118) > > at > > weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3635) > > at > > weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2585) > > at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197) > > at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170) > > Caused by: java.lang.IllegalStateException: Attempt to change ContentType > > after calling getWriter() (cannot change charset from 'UTF8' to 'UTF-8') > > at > > weblogic.servlet.internal.ServletResponseImpl.setEncoding(ServletResponseImpl.java:848) > > at > > weblogic.servlet.internal.ServletResponseImpl.setHeader(ServletResponseImpl.java:674) > > at > > weblogic.servlet.internal.ServletResponseImpl.setContentType(ServletResponseImpl.java:269) > > at > > org.apache.tapestry.web.ServletWebResponse.getPrintWriter(ServletWebResponse.java:77) > > at > > $WebResponse_1073673e6ea.getPrintWriter($WebResponse_1073673e6ea.java) > > at > > $WebResponse_1073673e5ba.getPrintWriter($WebResponse_1073673e5ba.java) > > at > > org.apache.tapestry.services.impl.ResponseRendererImpl.renderResponse(ResponseRendererImpl.java:67) > > at > > $ResponseRenderer_1073673e5d4.renderResponse($ResponseRenderer_1073673e5d4.java) > > at > > org.apache.tapestry.error.ExceptionPresenterImpl.presentException(ExceptionPresenterImpl.java:46) > > ... 36 more > > It seems that the servletResponse is already committed during redirection. > > The ServletWebResponse.getPrintWriter(ContentType) method try to reset the > > contentType and get a new writer without checking if it needs to or not... > > I think ServletWebResponse.getPrintWriter code should be modified this way: > > public PrintWriter getPrintWriter(ContentType contentType) throws > > IOException { > > Defense.notNull(contentType, "contentType"); > > if (_needsReset) > > reset(); > > _needsRes et = true; > > if (!_servletResponse.isCommited( )) > > _servletResponse.setContentType(contentType.toString()); > > } > > try { > > return _servletResponse.getWriter(); > > } catch (IOException ex) { > > throw new ... > > } > > } > > Paolo > > -- > This message is automatically generated by JIRA. > - > If you think it was sent incorrectly contact one of the administrators: > http://issues.apache.org/jira/secure/Administrators.jspa > - > For more information on JIRA, see: > http://www.atlassian.com/software/jira > -- May 4, 1970: Alison Krause, Jeffrey Miller, Sandra Scheuer, William Schroeder. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]