Sto usando Jersey Client v2.16 (una dipendenza transitiva di Dropwizard 0.8.0, che sto usando anch'essa).Jersey Client chiusura Risposta InputStream: funziona davvero?
Sono in qualche modo perplesso dal meccanismo di chiusura di una risposta quando l'entità viene letta come InputStream
. I documentation afferma:
Anche se l'entità viene letto in un InputStream (da response.readEntity (InputStream.class)), la connessione rimane aperta fino al completamento lettura dal InputStream. In tal caso, InputStream o Response devono essere chiusi manualmente alla fine della lettura da InputStream.
Tuttavia, quando ottengo l'entità risposta utilizzando Response.readEntity(InputStream.class)
, quello che io alla fine con è un'istanza di org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream
che, come suggerisce il nome, non rilascia nulla sotto di essa quando il metodo close()
viene chiamato (la rottura del InputStream
contratto, potrei dire). Questo è il metodo close()
:
@Override
public void close() throws IOException {
if (LOGGER.isLoggable(Level.FINE)) {
LOGGER.log(Level.FINE, LocalizationMessages.MBR_TRYING_TO_CLOSE_STREAM(reader.getClass()));
}
}
Di conseguenza, io alla fine con connessioni HTTP nella mia piscina essere inedito e lentamente riempire la piscina.
Dato che potrebbe non essere molto facile ottenere un riferimento alla risposta e che i documenti ufficiali dichiarano the InputStream **or** the Response should be closed manually
, come posso effettivamente rilasciare la risorsa fisica?