Class HttpClientTransportDynamic
- All Implemented Interfaces:
- HttpClientTransport,- ClientConnectionFactory,- Container,- Destroyable,- Dumpable,- Dumpable.DumpableContainer,- LifeCycle
A HttpClientTransport that can dynamically switch among different application protocols.
Applications create HttpClientTransportDynamic instances specifying all the application protocols it supports, in order of preference. The typical case is when the server supports both HTTP/1.1 and HTTP/2, but the client does not know that. In this case, the application will create a HttpClientTransportDynamic in this way:
ClientConnector clientConnector = new ClientConnector(); // Configure the clientConnector. // Prepare the application protocols. ClientConnectionFactory.Info h1 = HttpClientConnectionFactory.HTTP11; HTTP2Client http2Client = new HTTP2Client(clientConnector); ClientConnectionFactory.Info h2 = new ClientConnectionFactoryOverHTTP2.HTTP2(http2Client); // Create the HttpClientTransportDynamic, preferring h2 over h1. HttpClientTransport transport = new HttpClientTransportDynamic(clientConnector, h2, h1); // Create the HttpClient. client = new HttpClient(transport);
Note how in the code above the HttpClientTransportDynamic has been created with the application
 protocols h2 and h1, without the need to specify TLS (which is implied by the request
 scheme) or ALPN (which is implied by HTTP/2 over TLS).
When a request is first sent, (scheme, host, port) are not enough to identify the destination
 because the same origin may speak different protocols.
 For example, the Jetty server supports speaking clear-text http/1.1 and h2c on the same port.
 Imagine a client sending a h2c request to that port; this will create a destination and connections
 that speak h2c; it won't be possible to use the connections from that destination to send
 http/1.1 requests.
 Therefore a destination is identified by a Origin and
 applications can customize the creation of the origin (for example depending on request protocol
 version, or request headers, or request attributes, or even request path) by overriding
 HttpClientTransport.newOrigin(HttpRequest).
- 
Nested Class SummaryNested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycleAbstractLifeCycle.AbstractLifeCycleListener, AbstractLifeCycle.StopExceptionNested classes/interfaces inherited from interface org.eclipse.jetty.io.ClientConnectionFactoryClientConnectionFactory.Decorator, ClientConnectionFactory.InfoNested classes/interfaces inherited from interface org.eclipse.jetty.util.component.ContainerContainer.InheritedListener, Container.ListenerNested classes/interfaces inherited from interface org.eclipse.jetty.util.component.DumpableDumpable.DumpableContainerNested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycleLifeCycle.Listener
- 
Field SummaryFields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycleFAILED, STARTED, STARTING, STOPPED, STOPPINGFields inherited from interface org.eclipse.jetty.io.ClientConnectionFactoryCLIENT_CONTEXT_KEYFields inherited from interface org.eclipse.jetty.client.HttpClientTransportHTTP_CONNECTION_PROMISE_CONTEXT_KEY, HTTP_DESTINATION_CONTEXT_KEY
- 
Constructor SummaryConstructorsConstructorDescriptionCreates a transport that speaks only HTTP/1.1.HttpClientTransportDynamic(ClientConnectionFactory.Info... factoryInfos) HttpClientTransportDynamic(ClientConnector connector, ClientConnectionFactory.Info... factoryInfos) Creates a transport with the givenClientConnectorand the given application protocols.
- 
Method SummaryModifier and TypeMethodDescriptionnewConnection(EndPoint endPoint, Map<String, Object> context) newHttpDestination(Origin origin) Creates a new, transport-specific,HttpDestinationobject.protected ConnectionnewNegotiatedConnection(EndPoint endPoint, Map<String, Object> context) newOrigin(HttpRequest request) Creates a new Origin with the given request.voidMethods inherited from class org.eclipse.jetty.client.AbstractConnectorHttpClientTransportconnect, connect, doStart, getClientConnector, getSelectorsMethods inherited from class org.eclipse.jetty.client.AbstractHttpClientTransportconnectFailed, getConnectionPoolFactory, getHttpClient, setConnectionPoolFactory, setHttpClientMethods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycleaddBean, addBean, addEventListener, addManaged, contains, destroy, doStop, dump, dump, dump, dumpObjects, dumpStdErr, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, start, stop, unmanage, updateBean, updateBean, updateBeans, updateBeansMethods inherited from class org.eclipse.jetty.util.component.AbstractLifeCyclegetEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, setEventListeners, start, stop, toStringMethods inherited from class java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.eclipse.jetty.io.ClientConnectionFactorycustomizeMethods inherited from interface org.eclipse.jetty.util.component.ContainergetCachedBeans, getEventListenersMethods inherited from interface org.eclipse.jetty.util.component.Dumpable.DumpableContainerisDumpable
- 
Constructor Details- 
HttpClientTransportDynamicpublic HttpClientTransportDynamic()Creates a transport that speaks only HTTP/1.1.
- 
HttpClientTransportDynamic
- 
HttpClientTransportDynamicpublic HttpClientTransportDynamic(ClientConnector connector, ClientConnectionFactory.Info... factoryInfos) Creates a transport with the givenClientConnectorand the given application protocols.- Parameters:
- connector- the ClientConnector used by this transport
- factoryInfos- the application protocols that this transport can speak
 
 
- 
- 
Method Details- 
newOriginDescription copied from interface:HttpClientTransportCreates a new Origin with the given request.- Parameters:
- request- the request that triggers the creation of the Origin
- Returns:
- an Origin that identifies a destination
 
- 
newHttpDestinationDescription copied from interface:HttpClientTransportCreates a new, transport-specific,HttpDestinationobject.HttpDestinationcontrols the destination-connection cardinality: protocols like HTTP have 1-N cardinality, while multiplexed protocols like HTTP/2 have a 1-1 cardinality.- Parameters:
- origin- the destination origin
- Returns:
- a new, transport-specific, HttpDestinationobject
 
- 
newConnection- Parameters:
- endPoint- the- EndPointto link the newly created connection to
- context- the context data to create the connection
- Returns:
- a new Connection
- Throws:
- IOException- if the connection cannot be created
 
- 
upgrade
- 
newNegotiatedConnectionprotected Connection newNegotiatedConnection(EndPoint endPoint, Map<String, Object> context) throws IOException- Throws:
- IOException
 
 
-