2015-10-20 12 views
5

Ich benutze Jersey Client v2.16 (eine transitive Abhängigkeit von Dropwizard 0.8.0, die ich auch verwende).Jersey Client schließt InputStream Antwort - funktioniert das wirklich?

Ich bin irgendwie verwirrt durch den Schließmechanismus einer Antwort, wenn die Entität als InputStream gelesen wird. Die documentation Staaten:

Auch wenn das Unternehmen in ein Inputstream (durch response.readEntity (InputStream.class)) gelesen wird, die Verbindung bleibt geöffnet, bis Sie aus dem Input Ende lesen. In diesem Fall sollte der InputStream oder die Antwort am Ende des Lesens von InputStream manuell geschlossen werden.

Allerdings, wenn ich die Antwort Einheit mit Response.readEntity(InputStream.class) bekommen, was ich am Ende mit ist eine Instanz org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream, die, wie der Name schon sagt, nichts unter ihm frei, wenn die close() Methode (Brechen der aufgerufen wird InputStream Vertrag, könnte ich sagen). Dies ist die close() Methode:

@Override 
public void close() throws IOException { 
    if (LOGGER.isLoggable(Level.FINE)) { 
     LOGGER.log(Level.FINE, LocalizationMessages.MBR_TRYING_TO_CLOSE_STREAM(reader.getClass())); 
    } 
} 

Als Folge ich mit HTTP-Verbindungen in meinem Pool unreleased am Ende wird und langsam auf den Pool zu füllen.

Vorausgesetzt, dass es nicht sehr einfach ist, einen Verweis auf die Antwort zu erhalten, und dass der offizielle Dokumentstatus the InputStream **or** the Response should be closed manually lautet, wie kann ich die physische Ressource tatsächlich freigeben?

Antwort