IllegalStateException when calling org.apache.coyote.Response.reset() in JBoss

Solution Verified - Updated -

Issue

We see an IllegalStateException when our custom Valve tries to reset the response:

JBWEB001018: An exception or error occurred in the container during the request processing: java.lang.IllegalStateException
        at org.apache.coyote.Response.reset(Response.java:307) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
        at org.apache.catalina.connector.Response.reset(Response.java:665) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
        at org.apache.catalina.connector.Response.reset(Response.java:986) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
        at com.example.Valve.invoke(Valve.java:19)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:336) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:508) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
        at org.jboss.threads.SimpleDirectExecutor.execute(SimpleDirectExecutor.java:33) [jboss-threads-2.1.0.Final-redhat-1.jar:2.1.0.Final-redhat-1]
        at org.jboss.threads.QueueExecutor.runTask(QueueExecutor.java:806) [jboss-threads-2.1.0.Final-redhat-1.jar:2.1.0.Final-redhat-1]
        at org.jboss.threads.QueueExecutor.access$100(QueueExecutor.java:45) [jboss-threads-2.1.0.Final-redhat-1.jar:2.1.0.Final-redhat-1]
        at org.jboss.threads.QueueExecutor$Worker.run(QueueExecutor.java:847) [jboss-threads-2.1.0.Final-redhat-1.jar:2.1.0.Final-redhat-1]
        at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_51]
        at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.1.0.Final-redhat-1.jar:2.1.0.Final-redhat-1]

The valve code is similar to:

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
import org.apache.catalina.valves.ValveBase;


public class Valve extends ValveBase {

    @Override
    public void invoke(Request request, Response response) throws IOException,
            ServletException {
        getNext().invoke(request, response);

        int status = response.getStatus();
        if (status == 404) {
            response.reset(status, response.getMessage());
            PrintWriter out = response.getWriter();     
            out.println("<html><title>Page Not Found</title><body>Page Not Found</body></html>");
        }
    }
}

Environment

JBoss Enterprise Application Platform (EAP) 6

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase of over 48,000 articles and solutions.

Current Customers and Partners

Log in for full access

Log In
Close

Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.