1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

[JBoss] Springframework 6.0.23 upgrade to 6.1.0 occurs ServletOutputStream failed to write:...

Discussão em 'StackOverflow' iniciado por Stack, Janeiro 28, 2025.

  1. Stack

    Stack Membro Participativo

    Springframework 6.0.23 upgrade to 6.1.0 occurs ServletOutputStream failed to write: UT010029: Stream is closed Exception.

    In Spring 6.0 the controller works well. But updgrade to Spring 6.1 Exception occurs.

    Logs:

    [UID:[194960F45EC]] 2025/01/24 10:08:29 ERROR default task-1 - ServletOutputStream failed to write: UT010029: Stream is closed
    org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to write: UT010029: Stream is closed
    at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleHttpServletResponse.handleIOException(StandardServletAsyncWebRequest.java:343) ~[spring-web-6.1.16.jar:6.1.16]
    at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.write(StandardServletAsyncWebRequest.java:401) ~[spring-web-6.1.16.jar:6.1.16]
    at java.io_OutputStream.write(OutputStream.java:127) ~[?:?]
    at org.springframework.util.StreamUtils.copy(StreamUtils.java:134) ~[spring-core-6.1.16.jar:6.1.16]
    at org.springframework.http.converter.StringHttpMessageConverter.writeInternal(StringHttpMessageConverter.java:128) ~[spring-web-6.1.16.jar:6.1.16]
    at org.springframework.http.converter.StringHttpMessageConverter.writeInternal(StringHttpMessageConverter.java:44) ~[spring-web-6.1.16.jar:6.1.16]
    at org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:235) ~[spring-web-6.1.16.jar:6.1.16]
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:300) ~[spring-webmvc-6.1.16.jar:6.1.16]
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:192) ~[spring-webmvc-6.1.16.jar:6.1.16]
    at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78) ~[spring-web-6.1.16.jar:6.1.16]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:136) ~[spring-webmvc-6.1.16.jar:6.1.16]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) ~[spring-webmvc-6.1.16.jar:6.1.16]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) ~[spring-webmvc-6.1.16.jar:6.1.16]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.1.16.jar:6.1.16]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.1.16.jar:6.1.16]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.1.16.jar:6.1.16]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.1.16.jar:6.1.16]
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) ~[spring-webmvc-6.1.16.jar:6.1.16]
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:547) ~[jakarta.servlet-api-6.0.0.redhat-00001.jar!/:6.0.0.redhat-00001]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.1.16.jar:6.1.16]
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614) ~[jakarta.servlet-api-6.0.0.redhat-00001.jar!/:6.0.0.redhat-00001]
    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:219) ~[spring-security-web-6.1.2.jar:6.1.2]
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) ~[spring-security-web-6.1.2.jar:6.1.2]
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) ~[spring-web-6.1.16.jar:6.1.16]
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) ~[spring-web-6.1.16.jar:6.1.16]
    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at org.wildfly.elytron.web.undertow.server.ElytronRunAsHandler.lambda$handleRequest$1(ElytronRunAsHandler.java:68) ~[?:?]
    at org.wildfly.security.auth.server.FlexibleIdentityAssociation.runAsFunctionEx(FlexibleIdentityAssociation.java:103) ~[wildfly-elytron-auth-server-2.2.2.Final-redhat-00001.jar!/:2.2.2.Final-redhat-00001]
    at org.wildfly.security.auth.server.Scoped.runAsFunctionEx(Scoped.java:161) ~[wildfly-elytron-auth-server-2.2.2.Final-redhat-00001.jar!/:2.2.2.Final-redhat-00001]
    at org.wildfly.security.auth.server.Scoped.runAs(Scoped.java:73) ~[wildfly-elytron-auth-server-2.2.2.Final-redhat-00001.jar!/:2.2.2.Final-redhat-00001]
    at org.wildfly.elytron.web.undertow.server.ElytronRunAsHandler.handleRequest(ElytronRunAsHandler.java:67) ~[?:?]
    at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:117) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) ~[undertow-core-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) ~[undertow-core-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at org.wildfly.elytron.web.undertow.server.servlet.CleanUpHandler.handleRequest(CleanUpHandler.java:38) ~[?:?]
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61) ~[?:?]
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68) ~[?:?]
    at io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:276) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:132) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1430) ~[?:?]
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1430) ~[?:?]
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1430) ~[?:?]
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1430) ~[?:?]
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:256) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:101) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:393) ~[undertow-core-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:859) ~[undertow-core-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) ~[?:?]
    at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990) ~[?:?]
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486) ~[?:?]
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377) ~[?:?]
    at org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282) ~[?:?]
    at java.lang.Thread.run(Thread.java:833) ~[?:?]
    Caused by: java.io.IOException: UT010029: Stream is closed
    at io.undertow.servlet.spec.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:139) ~[undertow-servlet-2.3.10.SP3-redhat-00001.jar!/:2.3.10.SP3-redhat-00001]
    at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.write(StandardServletAsyncWebRequest.java:398) ~[spring-web-6.1.16.jar:6.1.16]
    ... 69 more


    Project middleware is JBOSS EAP 8. There is nothing changes in config files before and after Spring upgrades.

    I made the following code and conducted the following experiment.

    @RequestMapping(value = "/xxx/xxx", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
    @ResponseBody
    public String xxx(HttpServletRequest request, HttpServletResponse response, @RequestBody String jsonText)
    throws Throwable {

    // 100s
    Thread.sleep(100000);

    // ...

    return jsonTextRslt;
    }


    I call the API by postman. In Spring 6.0 : After 100s it response 200 ok. In Spring 6.1 : After 90s the stream closed and after 100s the ServletOutputStream failed to write happens.

    In Spring 6.1, I try to changed the domain.xml(standalone.xml)/urn:jboss:domain:undertow:14.0/http-listener, added read-timeout="120000" attr, the problem has been solved.

    domain.xml(standalone.xml):

    <subsystem xmlns="urn:jboss:domain:undertow:14.0" default-virtual-host="default-host" default-servlet-container="default" default-server="default-server" statistics-enabled="${wildfly.undertow.statistics-enabled:${wildfly.statistics-enabled:false}}" default-security-domain="other">
    <byte-buffer-pool name="default"/>
    <buffer-cache name="default"/>
    <server name="default-server">
    <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true" max-post-size="314572800" read-timeout="120000"/>
    <https-listener name="https" socket-binding="https" ssl-context="applicationSSC" enable-http2="true" max-post-size="314572800" read-timeout="120000"/>


    Why is that? Why Spring 6.1 closes the stream in 90s. Is it right to add read-timeout attr to domain.xml(standalone.xml)?

    Continue reading...

Compartilhe esta Página