Class BasicManagedEntity

java.lang.Object
org.apache.http.entity.HttpEntityWrapper
org.apache.http.conn.BasicManagedEntity
All Implemented Interfaces:
ConnectionReleaseTrigger, EofSensorWatcher, HttpEntity

public class BasicManagedEntity
extends HttpEntityWrapper
implements ConnectionReleaseTrigger, EofSensorWatcher
An entity that releases a connection. A ManagedClientConnection will typically not return a managed entity, but you can replace the unmanaged entity in the response with a managed one.
Since:
4.0
Version:
$Revision: 672367 $
Author:
Roland Weber
  • Field Details

    • managedConn

      protected ManagedClientConnection managedConn
      The connection to release.
    • attemptReuse

      protected final boolean attemptReuse
      Whether to keep the connection alive.
  • Constructor Details

    • BasicManagedEntity

      public BasicManagedEntity​(HttpEntity entity, ManagedClientConnection conn, boolean reuse)
      Creates a new managed entity that can release a connection.
      Parameters:
      entity - the entity of which to wrap the content. Note that the argument entity can no longer be used afterwards, since the content will be taken by this managed entity.
      conn - the connection to release
      reuse - whether the connection should be re-used
  • Method Details

    • isRepeatable

      public boolean isRepeatable()
      Description copied from interface: HttpEntity
      Tells if the entity is capable to produce its data more than once. A repeatable entity's getContent() and writeTo(OutputStream) methods can be called more than once whereas a non-repeatable entity's can not.
      Specified by:
      isRepeatable in interface HttpEntity
      Overrides:
      isRepeatable in class HttpEntityWrapper
      Returns:
      true if the entity is repeatable, false otherwise.
    • getContent

      public InputStream getContent() throws IOException
      Description copied from interface: HttpEntity
      Creates a new InputStream object of the entity. It is a programming error to return the same InputStream object more than once. Entities that are not repeatable will throw an exception if this method is called multiple times.
      Specified by:
      getContent in interface HttpEntity
      Overrides:
      getContent in class HttpEntityWrapper
      Returns:
      a new input stream that returns the entity data.
      Throws:
      IOException - if the stream could not be created
    • consumeContent

      public void consumeContent() throws IOException
      Description copied from interface: HttpEntity
      TODO: The name of this method is misnomer. It will be renamed to #finish() in the next major release.
      This method is called to indicate that the content of this entity is no longer required. All entity implementations are expected to release all allocated resources as a result of this method invocation. Content streaming entities are also expected to dispose of the remaining content, if any. Wrapping entities should delegate this call to the wrapped entity.
      This method is of particular importance for entities being received from a connection. The entity needs to be consumed completely in order to re-use the connection with keep-alive.
      Specified by:
      consumeContent in interface HttpEntity
      Overrides:
      consumeContent in class HttpEntityWrapper
      Throws:
      IOException - if an I/O error occurs. This indicates that connection keep-alive is not possible.
    • writeTo

      public void writeTo​(OutputStream outstream) throws IOException
      Description copied from interface: HttpEntity
      Writes the entity content to the output stream.
      Specified by:
      writeTo in interface HttpEntity
      Overrides:
      writeTo in class HttpEntityWrapper
      Parameters:
      outstream - the output stream to write entity content to
      Throws:
      IOException - if an I/O error occurs
    • releaseConnection

      public void releaseConnection() throws IOException
      Description copied from interface: ConnectionReleaseTrigger
      Releases the connection with the option of keep-alive. This is a "graceful" release and may cause IO operations for consuming the remainder of a response entity. Use abortConnection for a hard release. The connection may be reused as specified by the duration.
      Specified by:
      releaseConnection in interface ConnectionReleaseTrigger
      Throws:
      IOException - in case of an IO problem. The connection will be released anyway.
    • abortConnection

      public void abortConnection() throws IOException
      Description copied from interface: ConnectionReleaseTrigger
      Releases the connection without the option of keep-alive. This is a "hard" release that implies a shutdown of the connection. Use releaseConnection for a graceful release.
      Specified by:
      abortConnection in interface ConnectionReleaseTrigger
      Throws:
      IOException - in case of an IO problem. The connection will be released anyway.
    • eofDetected

      public boolean eofDetected​(InputStream wrapped) throws IOException
      Description copied from interface: EofSensorWatcher
      Indicates that EOF is detected.
      Specified by:
      eofDetected in interface EofSensorWatcher
      Parameters:
      wrapped - the underlying stream which has reached EOF
      Returns:
      true if wrapped should be closed, false if it should be left alone
      Throws:
      IOException - in case of an IO problem, for example if the watcher itself closes the underlying stream. The caller will leave the wrapped stream alone, as if false was returned.
    • streamClosed

      public boolean streamClosed​(InputStream wrapped) throws IOException
      Description copied from interface: EofSensorWatcher
      Indicates that the stream is closed. This method will be called only if EOF was not detected before closing. Otherwise, eofDetected is called.
      Specified by:
      streamClosed in interface EofSensorWatcher
      Parameters:
      wrapped - the underlying stream which has not reached EOF
      Returns:
      true if wrapped should be closed, false if it should be left alone
      Throws:
      IOException - in case of an IO problem, for example if the watcher itself closes the underlying stream. The caller will leave the wrapped stream alone, as if false was returned.
    • streamAbort

      public boolean streamAbort​(InputStream wrapped) throws IOException
      Description copied from interface: EofSensorWatcher
      Indicates that the stream is aborted. This method will be called only if EOF was not detected before aborting. Otherwise, eofDetected is called.

      This method will also be invoked when an input operation causes an IOException to be thrown to make sure the input stream gets shut down.

      Specified by:
      streamAbort in interface EofSensorWatcher
      Parameters:
      wrapped - the underlying stream which has not reached EOF
      Returns:
      true if wrapped should be closed, false if it should be left alone
      Throws:
      IOException - in case of an IO problem, for example if the watcher itself closes the underlying stream. The caller will leave the wrapped stream alone, as if false was returned.
    • releaseManagedConnection

      protected void releaseManagedConnection() throws IOException
      Releases the connection gracefully. The connection attribute will be nullified. Subsequent invocations are no-ops.
      Throws:
      IOException - in case of an IO problem. The connection attribute will be nullified anyway.