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

io.restassured.internal.http.ContentEncodingRegistry Maven / Gradle / Ivy

There is a newer version: 5.5.0
Show newest version
/*
 * Copyright 2019 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License 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 io.restassured.internal.http;

import io.restassured.config.DecoderConfig;
import io.restassured.internal.http.ContentEncoding.Type;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.AbstractHttpClient;

import java.util.HashMap;
import java.util.Map;

/**
 * Keeps track of available content-encoding handlers.
 *
 * @author Tom Nichols
 */
public class ContentEncodingRegistry {

    private final boolean useNoWrapForInflateDecoding;
    protected Map availableEncoders;

    public ContentEncodingRegistry(DecoderConfig decoderConfig) {
        useNoWrapForInflateDecoding = (decoderConfig == null ? DecoderConfig.decoderConfig() : decoderConfig).shouldUseNoWrapForInflateDecoding();
        availableEncoders = getDefaultEncoders();
    }


    /**
     * This implementation adds a {@link GZIPEncoding} and {@link DeflateEncoding}
     * handler to the registry.  Override this method to provide a different set
     * of defaults.
     *
     * @return a map to content-encoding strings to {@link ContentEncoding} handlers.
     */
    protected Map getDefaultEncoders() {
        Map map = new HashMap();
        map.put(Type.GZIP.toString(), new GZIPEncoding());
        map.put(Type.DEFLATE.toString(), new DeflateEncoding(useNoWrapForInflateDecoding));
        return map;
    }

    /**
     * Add the request and response interceptors to the {@link HttpClient},
     * which will provide transparent decoding of the given content-encoding
     * types.  This method is called by HTTPBuilder and probably should not need
     * be modified by sub-classes.
     *
     * @param client    client on which to set the request and response interceptors
     * @param encodings encoding name (either a {@link ContentEncoding.Type} or
     *                  a content-encoding string.
     */
    void setInterceptors(final AbstractHttpClient client, Object... encodings) {
        // remove any encoding interceptors that are already set
        client.removeRequestInterceptorByClass(ContentEncoding.RequestInterceptor.class);
        client.removeResponseInterceptorByClass(ContentEncoding.ResponseInterceptor.class);

        for (Object encName : encodings) {
            ContentEncoding enc = availableEncoders.get(encName.toString());
            if (enc == null) continue;
            client.addRequestInterceptor(enc.getRequestInterceptor());
            client.addResponseInterceptor(enc.getResponseInterceptor());
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy