java - WIldfly/Undertow UT010029 流已关闭

标签 java wildfly java-io undertow

在 jdk 9 上运行 Wildfly 16,当重复调用 java StringReader 时,我得到 UT010029 Stream is closeed。

public void export(OutputStream out) throws Exception   {
...
while() { 
  ...
  csvstream = new StringReader(csvcontent.toString());
  try { 
    while ((iRead = csvstream.read()) != -1) out.write(iRead);
    out.flush();
  } catch(IOException e)    { 
    validconnection=false;
    log.error(e);
    e.printStackTrace();
    break;      
  } finally {if (csvstream != null) csvstream.close();}
}

错误发生在 csvstream.read() 上

java.io.IOException: UT010029: Stream is closed
at io.undertow.servlet.spec.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:137)
at io.undertow.servlet.spec.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:122)

我已验证 csvstream 不为空,但已关闭,并且 csvcontent 不为空且长度为正。 有时它运行所有迭代都没有问题,有时会出错。

看起来“out”可能是关闭的流。 ServletOutputStreamImpl.java 中的违规行是:

if (anyAreSet(state, FLAG_CLOSED) || servletRequestContext.getOriginalResponse().isTreatAsCommitted()) {
      throw UndertowServletMessages.MESSAGES.streamIsClosed();

就我而言,out 作为参数传入。调用方是一个 servlet,如下所示:

OutputStream out = response.getOutputStream(  );
if (ve!=null)   {
  try {
        ve.export(out);
    } catch (Exception e)   {
        e.printStackTrace();
    }
} //if ve!=null

ve 是一个简单的 POJO。

如有任何帮助,我们将不胜感激! 谢谢。

最佳答案

以防万一其他人遇到这个问题 - 这是通过standalone.xml进行wildfly配置解决的: http-listener 元素具有 read-timeout 和 write-timeout 属性。 Wildfly 的最新版本限制了默认值,并且默认的standalone.xml 中未指定这些属性。 请参阅:

[Wildfly 模型引用][1]

关于java - WIldfly/Undertow UT010029 流已关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65946971/

相关文章:

java - 在 Linux 中使用 RandomAccessFile 将我的数据写入磁盘的何处?

java - 如何从 jpa/hibernate 类快速生成 persistence.xml

java - 如何从命令行在 JBoss WildFly 上构建、部署和运行 Java 应用程序?

java - Wildfly 8.2.1最终无法解析配置

ssl - 使用 SSL 的 Wildfly 13 JMX

java - 写入文件时将二进制字符串转换为字节而不是字符

Java文件-新更新的文件出现在一行中

java - 如果值匹配条件并生成列表中值的逗号分隔列表,则为字符串添加后缀的最佳方法

Java Lock.lock() 和 Lock.lockInterruptically()

java 模板 如何显式指定在已命名的类上使用参数变量?