2016-09-19 2 views
6

Sollte die StreamingOutputOutputStream von der implementierenden Klasse geschlossen werden?Schließen JAX-RS StreamingOutput OutputStream

Das Java-Dokument gibt keine Empfehlungen. Ich denke, es delegiert nur an die zugrunde liegende ServletOutputStream was bedeutet, dass es nicht geschlossen werden sollte, aber meine Vermutung könnte falsch sein :) Auch die Javadoc verweist auf die MessageBodyWriter Schnittstelle, wo explizit gesagt wird, dass der Ausgabestream nicht geschlossen werden soll.

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

+0

Ich glaube nicht, dass Sie es schließen sollte. Möglicherweise gibt es Filter oder Interceptors downstream, die beim Schließen des Ausgabestreams möglicherweise beschädigt werden. – sinu

Antwort

6

Nicht in der Lage, eine definitive Antwort ich Quelle einen Blick auf Jersey Implementierung ist die Referenz nahm zu finden. In Jersey wird die StreamingOutput von einem MessageBodyWriter durch einfaches Aufrufen [1] verarbeitet, wobei os der OutputStream an die MessageBodyWriter übergeben wird. Das ist gut, weil sein Javadoc ziemlich klar ist, dass dieser OutputStreamnicht geschlossen sein muss.

Zusammengefasst: Die OutputStream an die StreamingOutput übergeben darf nicht geschlossen werden.

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

Verwandte Themen