2015-10-20 24 views
5

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?

risposta