IllegalStateException when calling org.apache.coyote.Response.reset() in JBoss
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.
Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.
