我有一个使用Spring 3.2.11.RELEASE的Web应用程序,在JBoss 7.1.3.Final上运行。
应用程序在单个应用程序服务器上运行。
神秘地有时候我的应用程序会在特定的控制器方法上出现间歇java.lang.IllegalStateException
:
@RequestMapping(value = "/sync", method = RequestMethod.POST)
public void sync(@RequestParam final String orgId,
final HttpServletResponse response) throws IOException
{
response.setBufferSize(1024);
...
response.setBufferSize
方法偶尔会产生以下错误,尽管它是我方法的第一行:
13:47:40,954 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/clever].[dispatcher]] (http-/127.0.0.1:8081-1) Servlet.service() for servlet dispatcher threw exception: java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.setBufferSize(ResponseFacade.java:234) [jbossweb-7.0.17.Final.jar:]
at org.collegeboard.springboard.clever.controller.CleverOrganizationController.sync(CleverOrganizationController.java:112) [classes:]
at sun.reflect.GeneratedMethodAccessor1017.invoke(Unknown Source) [:1.6.0_65]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [rt.jar:1.6.0_65]
at java.lang.reflect.Method.invoke(Method.java:597) [rt.jar:1.6.0_65]
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) [spring-web-3.2.11.RELEASE.jar:3.2.11.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) [spring-web-3.2.11.RELEASE.jar:3.2.11.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) [spring-webmvc-3.2.11.RELEASE.jar:3.2.11.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745) [spring-webmvc-3.2.11.RELEASE.jar:3.2.11.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:685) [spring-webmvc-3.2.11.RELEASE.jar:3.2.11.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) [spring-webmvc-3.2.11.RELEASE.jar:3.2.11.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:919) [spring-webmvc-3.2.11.RELEASE.jar:3.2.11.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:851) [spring-webmvc-3.2.11.RELEASE.jar:3.2.11.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953) [spring-webmvc-3.2.11.RELEASE.jar:3.2.11.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:855) [spring-webmvc-3.2.11.RELEASE.jar:3.2.11.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) [jboss-servlet-api_3.0_spec-1.0.1.Final.jar:1.0.1.Final]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829) [spring-webmvc-3.2.11.RELEASE.jar:3.2.11.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.1.Final.jar:1.0.1.Final]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.17.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.17.Final.jar:]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.17.Final.jar:]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.17.Final.jar:]
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:165) [jboss-as-web-7.1.3.Final.jar:7.1.3.Final]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.17.Final.jar:]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.17.Final.jar:]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.17.Final.jar:]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:372) [jbossweb-7.0.17.Final.jar:]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.17.Final.jar:]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:679) [jbossweb-7.0.17.Final.jar:]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931) [jbossweb-7.0.17.Final.jar:]
at java.lang.Thread.run(Thread.java:680) [rt.jar:1.6.0_65]
我有什么想法可以让它永远消失?
答案 0 :(得分:3)
在提交之前,您应该先调用setBufferSize
。您可以通过调用isCommitted()
对象上的ServletResponse
来检查它是否已提交。 isCommitted()的文档说明:
已提交的响应已经写入了状态代码和标头。
当setBufferSize
ServletResponse
上的IllegalStateException
来电太迟时,我也遇到了这种情况。对你而言,这可能是一个线程问题,这可以解释为什么这种情况不正常。
setBufferSize(int)的文档解释了何时获得ALTER procedure [ALL_IC].[EXECUTE_ICS]
@sql nvarchar(max) = null,
@fa nvarchar(max) = null
as
begin
set @sql = ('select (select ''EXEC [IC].['' + b.name + ''];''
from sys.procedures b
join sys.schemas s on s.schema_id = b.schema_id
where s.name = ''IC''
for xml path(''''))'
) end
EXECUTE sp_executesql @sql
:
必须在编写任何响应正文内容之前调用此方法;如果已写入内容或已提交响应对象,则此方法将抛出IllegalStateException。'
答案 1 :(得分:1)
我无法发表评论,因此如果可以帮助您,请添加评论作为答案。只需检查jsp中是否有autoFlush = true,那可能是原因。您还可以在设置响应缓冲区大小之前使用控制器方法中的response.isCommitted()进行检查。
答案 2 :(得分:0)
可能春天已经在回复中写了一些东西。 例如,如果您已声明modelAtribute。
答案 3 :(得分:0)
我遇到了同样的问题。
java.lang.IllegalStateException:PWC3999:无法创建会话 在答复完成后。
我尝试了上述博客中提到的所有内容。无论如何都没有成功。
我终于知道有形式,有j_security_check
的动作,因为这种形式问题就出现了。
<h:form method="post" action="j_security_check">
要解决此问题,我在父xhtml文件中创建了一个没有任何操作的空表单,它解决了问题。
我仍然需要弄清楚,为什么在父xhtml文件中使用空表单标记后问题得到了解决。
希望这会对某人有所帮助。