Closing JAX-RS StreamingOutput's OutputStream

…衆ロ難τιáo~ 提交于 2019-12-20 19:41:32

问题


Should the StreamingOutput's OutputStream be closed by the implementing class?

The java-doc does not give any recommendations. I guess it just delegates to the underlying ServletOutputStream which means it should not be closed, but my guess might be wrong :) Also the javadoc makes a reference to the MessageBodyWriter interface where it's explicitly said that the output stream must not be closed.

https://docs.oracle.com/javaee/7/api/javax/ws/rs/core/StreamingOutput.html


回答1:


Being unable to find a definitive answer I took a look at jersey's source being the reference implementation. In Jersey the StreamingOutput is processed by a MessageBodyWriter by simply calling streamingOutput.write(os) [1] where os is the OutputStream passed to the MessageBodyWriter. That's good because its javadoc is quite clear that this OutputStream must not be closed.

To summarize: The OutputStream passed to the StreamingOutput must not be closed.

[1] https://github.com/jersey/jersey/blob/master/core-common/src/main/java/org/glassfish/jersey/message/internal/StreamingOutputProvider.java



来源:https://stackoverflow.com/questions/39572872/closing-jax-rs-streamingoutputs-outputstream

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!