I am trying to track down a bug in my Struts application and am having
difficulty understanding the cause.  Only about once per week, I get an
"getOutputStream() has already been called" error - see stack trace below.
Anyone experienced this before (and found a solution)?  I have included my
struts interceptor stack, the last "custom" interceptor that is accessed
before the error, and the actual stacktrace.  Just FYI, the
AccountInterceptor class seems to exist successfully at "line 56:  return
invocation.invoke();"

*[struts interceptor stack]*

            <interceptor-stack name="myDefaultStack">
                <interceptor-ref name="noCacheInterceptor" />
                <interceptor-ref name="sessionInterceptor" />
                <interceptor-ref name="accountInterceptor" />
                <interceptor-ref name="exceptionInterceptor">
                    <param name="logEnabled">true</param>
                    <param name="logLevel">ERROR</param>
                </interceptor-ref>
                <interceptor-ref name="servletConfig"/>
                <interceptor-ref name="prepare"/>
                <interceptor-ref name="modelDriven"/>
                <interceptor-ref name="fileUpload"/>
                <interceptor-ref name="checkbox"/>
                <interceptor-ref name="multiselect"/>
                <interceptor-ref name="staticParams"/>
                <interceptor-ref name="actionMappingParams"/>
                <interceptor-ref name="params"/>
                <interceptor-ref name="conversionError"/>
                <interceptor-ref name="validation">
                    <param
name="excludeMethods">input,back,cancel,browse</param>
                </interceptor-ref>
                <interceptor-ref name="workflow">
                    <param
name="excludeMethods">input,back,cancel,browse</param>
                </interceptor-ref>
                <interceptor-ref name="debugging"/>
            </interceptor-stack>

*[Last Interceptor Accessed]*

public class AccountInterceptor extends AbstractInterceptor {

private static final String RESULT_IN_ACTIVE_ACCOUNT = "inActiveAccount";
private static final String RESULT_PASSWORD_RESET = "passwordReset";

    @Autowired
    private transient AppUserGoalsDao appUserGoalsDao;

    @Autowired
    private transient MailChimpConnectDao mailChimpConnectDao;

    @Autowired
    private transient MojoConnectDao mojoConnectDao;

    public String intercept(ActionInvocation invocation) throws Exception {

Map<String, Object> session =
invocation.getInvocationContext().getSession();
        MyAppSession myAppSession = new MyAppSession(appUserGoalsDao,
mailChimpConnectDao, mojoConnectDao);
myAppSession.setSession(session);

        if (myAppSession.getUser()!=null) {

            // Redirect if account is "inactive" in some way
            if
(!myAppSession.getUser().getTeam().getTeamHelper().getIsTeamAccessAllowed())
{
                return RESULT_IN_ACTIVE_ACCOUNT;

            // Redirect if password reset required
            } else if (myAppSession.getUser().getPasswordChangeRequired()) {
                return RESULT_PASSWORD_RESET;
            }

        } else {
            ActionSupport actionSupport = (ActionSupport)
invocation.getAction();
            actionSupport.addActionError("Your session has expired or you
are not logged in.");
            return ActionSupport.LOGIN;
        }

        return invocation.invoke();
}

}



*[Log Error]*

Date Thread Level Logger MDC Message
2020-03-09 19:26:39,626 ajp-nio-8009-exec-7 ERROR
org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler Exception
occurred during processing request: java.lang.IllegalStateException:
getOutputStream() has already been called for this response
org.apache.jasper.JasperException: java.lang.IllegalStateException:
getOutputStream() has already been called for this response
    at
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:634)
    at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:509)
    at
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:728)
    at
org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:591)
    at
org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:527)
    at
org.springframework.security.web.header.HeaderWriterFilter$HeaderWriterRequestDispatcher.include(HeaderWriterFilter.java:178)
    at
org.apache.struts2.result.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:171)
    at
org.apache.struts2.result.StrutsResultSupport.execute(StrutsResultSupport.java:206)
    at
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:375)
    at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:279)
    at
com.afs.web.struts.interceptor.AccountInterceptor.intercept(AccountInterceptor.java:56)
    at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
    at
com.afs.web.struts.interceptor.SessionInterceptor.intercept(SessionInterceptor.java:71)
    at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
Caused by: java.lang.IllegalStateException: getOutputStream() has already
been called for this response
    at org.apache.catalina.connector.Response.getWriter(Response.java:584)
    at
org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:211)
    at
javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:109)
    at
javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:109)
    at
javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:109)
    at
org.springframework.security.web.util.OnCommittedResponseWrapper.getWriter(OnCommittedResponseWrapper.java:155)
    at
javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:109)
    at
org.springframework.security.web.util.OnCommittedResponseWrapper.getWriter(OnCommittedResponseWrapper.java:155)
    at
org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:118)
    at
org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:111)
    at
org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:176)
    at
org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:120)
    at
org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:75)
    at
org.apache.jsp.struts.common.error.error_jsp._jspService(error_jsp.java:187)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476)
     ... 81 common frames omitted

Reply via email to