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, tools, and much more.