Package org.opensaml.soap.client.http

# Class AbstractPipelineHttpSOAPClient

java.lang.Object
net.shibboleth.shared.component.AbstractInitializableComponent
org.opensaml.soap.client.http.AbstractPipelineHttpSOAPClient

All Implemented Interfaces:
  `Component`, `DestructableComponent`, `InitializableComponent`, `SOAPClient`

Direct Known Subclasses:
  `PipelineFactoryHttpSOAPClient`

@ThreadSafe public abstract class AbstractPipelineHttpSOAPClient extends AbstractInitializableComponent implements SOAPClient
SOAP client that is based on `HttpClientMessagePipeline`.

## Nested Class Summary

## Nested classes/interfaces inherited from interface org.opensaml.soap.client.SOAPClient

`SOAPClient.SOAPRequestParameters`

## Field Summary

Fields
Modifier and Type
Field
Description
`private org.apache.hc.client5.http.classic.HttpClient`
`httpClient`
HTTP client used to send requests and receive responses.
`private HttpClientSecurityParameters`
`httpClientSecurityParameters`
HTTP client security parameters.
`private final org.slf4j.Logger`
`log`
Class logger.
`private Function<InOutOperationContext,CriteriaSet>`
`tlsCriteriaSetStrategy`
Strategy for building the criteria set which is input to the TLS trust engine.

## Constructor Summary

Constructors
Constructor
Description
`AbstractPipelineHttpSOAPClient()`

## Method Summary

Modifier and Type
Method
Description
`protected org.apache.hc.client5.http.protocol.HttpClientContext`
`buildHttpContext(org.apache.hc.core5.http.ClassicHttpRequest request, InOutOperationContext operationContext)`
Build the `HttpClientContext` instance to be used by the HttpClient.
`protected org.apache.hc.core5.http.ClassicHttpRequest`
`buildHttpRequest(String endpoint, InOutOperationContext operationContext)`
Build the `ClassicHttpRequest` instance to be executed by the HttpClient.
`protected CriteriaSet`
`buildTLSCriteriaSet(org.apache.hc.core5.http.ClassicHttpRequest request, InOutOperationContext operationContext)`
Build the dynamic `CriteriaSet` instance to be used for TLS trust evaluation.
`protected void`
`doInitialize()`
`org.apache.hc.client5.http.classic.HttpClient`
`getHttpClient()`
Get the client used to make outbound HTTP requests.
`HttpClientSecurityParameters`
`getHttpClientSecurityParameters()`
Get the optional client security parameters.
`Function<InOutOperationContext,CriteriaSet>`
`getTLSCriteriaSetStrategy()`
Get the strategy function which builds the dynamically-populated criteria set which is input to the TLS TrustEngine, if no static criteria set is supplied either via context or locally-configured `HttpClientSecurityParameters`.
`protected abstract HttpClientMessagePipeline`
`newPipeline()`
Get a new instance of the `HttpClientMessagePipeline` to be processed.
`protected org.apache.hc.client5.http.protocol.HttpClientContext`
`resolveClientContext(InOutOperationContext operationContext)`
Resolve the effective `HttpClientContext` instance to use for the current request.
`protected HttpClientSecurityParameters`
`resolveContextSecurityParameters(InOutOperationContext operationContext)`
Resolve the `HttpClientSecurityParameters` instance present in the current operation context.
`protected HttpClientMessagePipeline`
`resolvePipeline(InOutOperationContext operationContext)`
Resolve and return a new instance of the `HttpClientMessagePipeline` to be processed.
`void`
`send(String endpoint, InOutOperationContext operationContext)`
Sends a message and waits for a response.
`void`
`setHttpClient(org.apache.hc.client5.http.classic.HttpClient client)`
Set the client used to make outbound HTTP requests.
`void`
`setHttpClientSecurityParameters(HttpClientSecurityParameters params)`
Set the optional client security parameters.
`void`
`setTLSCriteriaSetStrategy(Function<InOutOperationContext,CriteriaSet> function)`
Set the strategy function which builds the dynamically-populated criteria set which is input to the TLS TrustEngine, if no static criteria set is supplied either via context or locally-configured `HttpClientSecurityParameters`.

### Methods inherited from class net.shibboleth.shared.component.AbstractInitializableComponent

`checkComponentActive, checkSetterPreconditions, destroy, doDestroy, ifDestroyedThrowDestroyedComponentException, ifInitializedThrowUnmodifiabledComponentException, ifNotInitializedThrowUninitializedComponentException, initialize, isDestroyed, isInitialized`

### Methods inherited from class java.lang.Object

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

## Field Details

### log

@Nonnull private final org.slf4j.Logger log
Class logger.

### httpClient

@NonnullAfterInit private org.apache.hc.client5.http.classic.HttpClient httpClient
HTTP client used to send requests and receive responses.

### httpClientSecurityParameters

@Nullable private HttpClientSecurityParameters httpClientSecurityParameters
HTTP client security parameters.

### tlsCriteriaSetStrategy

@Nullable private Function<InOutOperationContext,CriteriaSet> tlsCriteriaSetStrategy
Strategy for building the criteria set which is input to the TLS trust engine.

## Constructor Details

### AbstractPipelineHttpSOAPClient

public AbstractPipelineHttpSOAPClient()

## Method Details

### doInitialize

protected void doInitialize() throws ComponentInitializationException

Overrides:
  `doInitialize` in class `AbstractInitializableComponent`
Throws:
  `ComponentInitializationException`

### getHttpClient

@NonnullAfterInit public org.apache.hc.client5.http.classic.HttpClient getHttpClient()
Get the client used to make outbound HTTP requests.

Returns:
  the client instance

### setHttpClient

public void setHttpClient(@Nonnull org.apache.hc.client5.http.classic.HttpClient client)
Set the client used to make outbound HTTP requests.

This client SHOULD employ a thread-safe `HttpClient` and may be shared with other objects.

Parameters:
  `client` - client object

### getHttpClientSecurityParameters

@Nullable public HttpClientSecurityParameters getHttpClientSecurityParameters()
Get the optional client security parameters.

Returns:
  the client security parameters, or null

### setHttpClientSecurityParameters

public void setHttpClientSecurityParameters(@Nullable HttpClientSecurityParameters params)
Set the optional client security parameters.

Parameters:
  `params` - the new client security parameters

### getTLSCriteriaSetStrategy

@Nullable public Function<InOutOperationContext,CriteriaSet> getTLSCriteriaSetStrategy()
Get the strategy function which builds the dynamically-populated criteria set which is input to the TLS TrustEngine, if no static criteria set is supplied either via context or locally-configured `HttpClientSecurityParameters`.

Returns:
  the strategy function, or null

### setTLSCriteriaSetStrategy

public void setTLSCriteriaSetStrategy(@Nullable Function<InOutOperationContext,CriteriaSet> function)
Set the strategy function which builds the dynamically-populated criteria set which is input to the TLS TrustEngine, if no static criteria set is supplied either via context or locally-configured `HttpClientSecurityParameters`.

Parameters:
  `function` - the strategy function, or null

### send

public void send(@Nonnull @NotEmpty String endpoint, @Nonnull InOutOperationContext operationContext) throws SOAPException, SecurityException
Sends a message and waits for a response.

Specified by:
  `send` in interface `SOAPClient`
Parameters:
  `endpoint` - the endpoint to which to send the message
  `operationContext` - the operation context containing the outbound SOAP message
Throws:
  `SOAPException` - thrown if there is a problem sending the message or receiving the response or if the response is a SOAP fault
  `SecurityException` - thrown if the response does not meet any security policy associated with the message context

### resolvePipeline

@Nonnull protected HttpClientMessagePipeline resolvePipeline(@Nonnull InOutOperationContext operationContext) throws SOAPException
Resolve and return a new instance of the `HttpClientMessagePipeline` to be processed.

Each call to this (factory) method MUST produce a new instance of the pipeline.

The default behavior is to simply call `newPipeline()`.

Parameters:
  `operationContext` - the current operation context
Returns:
  a new pipeline instance
Throws:
  `SOAPException` - if there is an error obtaining a new pipeline instance

### newPipeline

@Nonnull protected abstract HttpClientMessagePipeline newPipeline() throws SOAPException
Get a new instance of the `HttpClientMessagePipeline` to be processed.

Each call to this (factory) method MUST produce a new instance of the pipeline.

Returns:
  the new pipeline instance
Throws:
  `SOAPException` - if there is an error obtaining a new pipeline instance

### buildHttpRequest

@Nonnull protected org.apache.hc.core5.http.ClassicHttpRequest buildHttpRequest(@Nonnull @NotEmpty String endpoint, @Nonnull InOutOperationContext operationContext)
Build the `ClassicHttpRequest` instance to be executed by the HttpClient.

Parameters:
  `endpoint` - the endpoint to which the message will be sent
  `operationContext` - the current operation context
Returns:
  the HTTP request to be executed

### buildHttpContext

@Nonnull protected org.apache.hc.client5.http.protocol.HttpClientContext buildHttpContext(@Nonnull org.apache.hc.core5.http.ClassicHttpRequest request, @Nonnull InOutOperationContext operationContext)
Build the `HttpClientContext` instance to be used by the HttpClient.

Parameters:
  `request` - the HTTP client request
  `operationContext` - the current operation context
Returns:
  the client context instance

### resolveContextSecurityParameters

@Nullable protected HttpClientSecurityParameters resolveContextSecurityParameters(@Nonnull InOutOperationContext operationContext)
Resolve the `HttpClientSecurityParameters` instance present in the current operation context.

The default implementation returns the outbound subcontext value `HttpClientSecurityContext.getSecurityParameters()`.

Note that any values supplied via this instance will override those supplied locally via `setHttpClientSecurityParameters(HttpClientSecurityParameters)`.

Parameters:
  `operationContext` - the current operation context
Returns:
  the client security parameters resolved from the current operation context, or null

### resolveClientContext

@Nonnull protected org.apache.hc.client5.http.protocol.HttpClientContext resolveClientContext(@Nonnull InOutOperationContext operationContext)
Resolve the effective `HttpClientContext` instance to use for the current request.

The default implementation first attempts to resolve the outbound subcontext value `HttpClientRequestContext.getHttpClientContext()`. If no context value is present, a new empty context instance will be returned via `HttpClientContext.create()`.

Note that any security-related attributes supplied directly the client context returned here will override the corresponding values supplied via both operation context and locally-configured instances of `HttpClientSecurityParameters`.

Parameters:
  `operationContext` - the current operation context
Returns:
  the effective client context instance to use

### buildTLSCriteriaSet

@Nonnull protected CriteriaSet buildTLSCriteriaSet(@Nonnull org.apache.hc.core5.http.ClassicHttpRequest request, @Nonnull InOutOperationContext operationContext)
Build the dynamic `CriteriaSet` instance to be used for TLS trust evaluation.

Parameters:
  `request` - the HTTP client request
  `operationContext` - the current operation context
Returns:
  the new criteria set instance