All Downloads are FREE. Search and download functionalities are using the official Maven repository.

software.amazon.awssdk.http.SdkHttpFullResponse Maven / Gradle / Ivy

/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */

package software.amazon.awssdk.http;

import static java.util.Collections.singletonList;

import java.io.InputStream;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import software.amazon.awssdk.annotations.Immutable;
import software.amazon.awssdk.annotations.SdkProtectedApi;

/**
 * An immutable HTTP response with a possible HTTP body.
 *
 * 

All implementations of this interface MUST be immutable. Instead of implementing this interface, consider using * {@link #builder()} to create an instance.

*/ @SdkProtectedApi @Immutable public interface SdkHttpFullResponse extends SdkHttpResponse { /** * @return Builder instance to construct a {@link DefaultSdkHttpFullResponse}. */ static Builder builder() { return new DefaultSdkHttpFullResponse.Builder(); } @Override Builder toBuilder(); /** * Returns the optional stream containing the payload data returned by the service. Note: an {@link AbortableInputStream} * is returned instead of an {@link InputStream}. This allows the stream to be aborted before all content is read, which * usually means destroying the underlying HTTP connection. This may be implemented differently in other HTTP implementations. * *

When the response does not include payload data, this will return {@link Optional#empty()}.

* * @return The optional stream containing the payload data included in this response, or empty if there is no payload. */ Optional content(); /** * Builder for a {@link DefaultSdkHttpFullResponse}. */ interface Builder extends SdkHttpResponse.Builder { /** * The status text, exactly as it was configured with {@link #statusText(String)}. */ @Override String statusText(); /** * Configure an {@link SdkHttpResponse#statusText()} to be used in the created HTTP response. This is not validated * until the http response is created. */ @Override Builder statusText(String statusText); /** * The status text, exactly as it was configured with {@link #statusCode(int)}. */ @Override int statusCode(); /** * Configure an {@link SdkHttpResponse#statusCode()} to be used in the created HTTP response. This is not validated * until the http response is created. */ @Override Builder statusCode(int statusCode); /** * The query parameters, exactly as they were configured with {@link #headers(Map)}, * {@link #putHeader(String, String)} and {@link #putHeader(String, List)}. */ @Override Map> headers(); /** * Add a single header to be included in the created HTTP response. * *

This completely OVERRIDES any values already configured with this header name in the builder.

* * @param headerName The name of the header to add (eg. "Host") * @param headerValue The value for the header */ @Override default Builder putHeader(String headerName, String headerValue) { return putHeader(headerName, singletonList(headerValue)); } /** * Add a single header with multiple values to be included in the created HTTP response. * *

This completely OVERRIDES any values already configured with this header name in the builder.

* * @param headerName The name of the header to add * @param headerValues The values for the header */ @Override Builder putHeader(String headerName, List headerValues); /** * Add a single header to be included in the created HTTP request. * *

This will ADD the value to any existing values already configured with this header name in * the builder.

* * @param headerName The name of the header to add * @param headerValue The value for the header */ @Override Builder appendHeader(String headerName, String headerValue); /** * Configure an {@link SdkHttpResponse#headers()} to be used in the created HTTP response. This is not validated * until the http response is created. This overrides any values currently configured in the builder. */ @Override Builder headers(Map> headers); /** * Remove all values for the requested header from this builder. */ @Override Builder removeHeader(String headerName); /** * Removes all headers from this builder. */ @Override Builder clearHeaders(); /** * The content, exactly as it was configured with {@link #content(AbortableInputStream)}. */ AbortableInputStream content(); /** * Configure an {@link SdkHttpFullResponse#content()} to be used in the HTTP response. This is not validated until * the http response is created. * *

Implementers should implement the abort method on the input stream to drop all remaining content with the service. * This is usually done by closing the service connection.

*/ Builder content(AbortableInputStream content); @Override SdkHttpFullResponse build(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy