Class HttpConversation

java.lang.Object
org.eclipse.jetty.util.AttributesMap
org.eclipse.jetty.client.HttpConversation
All Implemented Interfaces:
org.eclipse.jetty.util.Attributes, org.eclipse.jetty.util.component.Dumpable

public class HttpConversation extends org.eclipse.jetty.util.AttributesMap
  • Nested Class Summary

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.Attributes

    org.eclipse.jetty.util.Attributes.Wrapper

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable

    org.eclipse.jetty.util.component.Dumpable.DumpableContainer
  • Field Summary

    Fields inherited from interface org.eclipse.jetty.util.component.Dumpable

    KEY
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
     
     
    Returns the list of response listeners that needs to be notified of response events.
    long
    Returns the total timeout for the conversation.
     
    void
    Requests to update the response listener, eventually using the given override response listener, that must be notified instead of the first exchange response listeners.

    Methods inherited from class org.eclipse.jetty.util.AttributesMap

    addAll, clearAttributes, dump, dump, getAttribute, getAttributeEntrySet, getAttributeNames, getAttributeNamesCopy, getAttributeNameSet, removeAttribute, setAttribute, size

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

    Methods inherited from interface org.eclipse.jetty.util.component.Dumpable

    dumpSelf
  • Constructor Details

    • HttpConversation

      public HttpConversation()
  • Method Details

    • getExchanges

      public Deque<HttpExchange> getExchanges()
    • getResponseListeners

      public List<Response.ResponseListener> getResponseListeners()
      Returns the list of response listeners that needs to be notified of response events. This list changes as the conversation proceeds, as follows:
      1. request R1 send => conversation.updateResponseListeners(null)
        • exchanges in conversation: E1
        • listeners to be notified: E1.listeners
      2. response R1 arrived, 401 => conversation.updateResponseListeners(AuthenticationProtocolHandler.listener)
        • exchanges in conversation: E1
        • listeners to be notified: AuthenticationProtocolHandler.listener
      3. request R2 send => conversation.updateResponseListeners(null)
        • exchanges in conversation: E1 + E2
        • listeners to be notified: E2.listeners + E1.listeners
      4. response R2 arrived, 302 => conversation.updateResponseListeners(RedirectProtocolHandler.listener)
        • exchanges in conversation: E1 + E2
        • listeners to be notified: E2.listeners + RedirectProtocolHandler.listener
      5. request R3 send => conversation.updateResponseListeners(null)
        • exchanges in conversation: E1 + E2 + E3
        • listeners to be notified: E3.listeners + E1.listeners
      6. response R3 arrived, 200 => conversation.updateResponseListeners(null)
        • exchanges in conversation: E1 + E2 + E3
        • listeners to be notified: E3.listeners + E1.listeners
      Basically the override conversation listener replaces the first exchange response listener, and we also notify the last exchange response listeners (if it's not also the first). This scheme allows for protocol handlers to not worry about other protocol handlers, or to worry too much about notifying the first exchange response listeners, but still allowing a protocol handler to perform completion activities while another protocol handler performs new ones (as an example, the AuthenticationProtocolHandler stores the successful authentication credentials while the RedirectProtocolHandler performs a redirect).
      Returns:
      the list of response listeners that needs to be notified of response events
    • updateResponseListeners

      public void updateResponseListeners(Response.ResponseListener overrideListener)
      Requests to update the response listener, eventually using the given override response listener, that must be notified instead of the first exchange response listeners. This works in conjunction with getResponseListeners(), returning the appropriate response listeners that needs to be notified of response events.
      Parameters:
      overrideListener - the override response listener
    • getTimeout

      public long getTimeout()

      Returns the total timeout for the conversation.

      The conversation total timeout is the total timeout of the first request in the conversation.

      Returns:
      the total timeout of the conversation
      See Also:
    • abort

      public boolean abort(Throwable cause)
    • toString

      public String toString()
      Overrides:
      toString in class org.eclipse.jetty.util.AttributesMap