Hi,
In Apache CXF 4.1.1, org.apache.cxf.io.DelayedCachedOutputStreamCleaner
It seems periodically all registered streams are killed, even young streams
that are not even a second old.
A DelayedCloseable has expireAt value, but it isn’t checked.
private void clean(Collection<DelayedCloseable> closeables) {
final Iterator<DelayedCloseable> iterator = closeables.iterator();
while (iterator.hasNext()) {
final DelayedCloseable next = iterator.next();
try {
iterator.remove();
LOG.warning("Unclosed (leaked?) stream detected: " +
next.closeable.hashCode());
next.closeable.close();
} catch (final IOException | RuntimeException ex) {
LOG.warning("Unable to close (leaked?) stream: " +
ex.getMessage());
}
}
}
https://github.com/apache/cxf/blob/5aef1e4fbef4877f7e1b310e054dfb8e7af25a85/core/src/main/java/org/apache/cxf/io/DelayedCachedOutputStreamCleaner.java#L133
To reproduce the issue more quickly while testing, use bus properties
- set "bus.io.CachedOutputStream.Threshold" to a lower value to write the
stream to file.
- set "bus.io.CachedOutputStreamCleaner.Delay" to a lower value to trigger the
timer.
Kind regards,
Ralph