WIldfly / Undertow UT010029 流已关闭
WIldfly / Undertow UT010029 Stream is closed
运行 jdk 9 上的 Wildfly 16,当重复调用 java StringReader 时,我得到 UT010029 Stream is closed.
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]
运行 jdk 9 上的 Wildfly 16,当重复调用 java StringReader 时,我得到 UT010029 Stream is closed.
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模型参考][1]