Package org.mockserver.mappers

Source Code of org.mockserver.mappers.ApacheHttpClientToMockServerResponseMapper

package org.mockserver.mappers;

import com.google.common.base.Charsets;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.util.EntityUtils;
import org.mockserver.model.Cookie;
import org.mockserver.model.Header;
import org.mockserver.model.HttpResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.net.HttpCookie;
import java.util.*;

/**
* @author jamesdbloom
*/
public class ApacheHttpClientToMockServerResponseMapper {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    public HttpResponse mapApacheHttpClientResponseToMockServerResponse(CloseableHttpResponse clientResponse, boolean binaryBody) throws IOException {
        HttpResponse httpResponse = new HttpResponse();
        setStatusCode(httpResponse, clientResponse);
        setHeaders(httpResponse, clientResponse);
        setCookies(httpResponse);
        if (binaryBody) {
            if (clientResponse.getEntity() != null) {
                setBody(httpResponse, EntityUtils.toByteArray(clientResponse.getEntity()));
            }
        } else {
            if (clientResponse.getEntity() != null) {
                setBody(httpResponse, EntityUtils.toString(clientResponse.getEntity(), Charsets.UTF_8));
            }
        }
        return httpResponse;
    }

    private void setStatusCode(HttpResponse httpResponse, CloseableHttpResponse clientResponse) {
        if (clientResponse.getStatusLine() != null) {
            httpResponse.withStatusCode(clientResponse.getStatusLine().getStatusCode());
        }
    }

    private void setHeaders(HttpResponse httpResponse, CloseableHttpResponse clientResponse) {
        Map<String, Header> mappedHeaders = new HashMap<String, Header>();
        for (org.apache.http.Header header : clientResponse.getAllHeaders()) {
            if (mappedHeaders.containsKey(header.getName())) {
                mappedHeaders.get(header.getName()).addValue(header.getValue());
            } else {
                mappedHeaders.put(header.getName(), new Header(header.getName(), header.getValue()));
            }
        }
        List<Header> headers = new ArrayList<Header>(mappedHeaders.values());
        List<String> headersToRemove = Arrays.asList("Content-Encoding", "Content-Length", "Transfer-Encoding");
        for (Header header : new ArrayList<Header>(headers)) {
            if (headersToRemove.contains(header.getName())) {
                headers.remove(header);
            }
        }
        httpResponse.withHeaders(headers);
    }

    private void setCookies(HttpResponse httpResponse) {
        Map<String, Cookie> mappedCookies = new HashMap<String, Cookie>();
        for (Header header : httpResponse.getHeaders()) {
            if (header.getName().equals("Cookie") || header.getName().equals("Set-Cookie")) {
                for (String cookieHeader : header.getValues()) {
                    try {
                        for (HttpCookie httpCookie : HttpCookie.parse(cookieHeader)) {
                            if (mappedCookies.containsKey(httpCookie.getName())) {
                                mappedCookies.get(httpCookie.getName()).addValue(httpCookie.getValue());
                            } else {
                                mappedCookies.put(httpCookie.getName(), new Cookie(httpCookie.getName(), httpCookie.getValue()));
                            }
                        }
                    } catch (IllegalArgumentException iae) {
                        logger.warn("Exception while parsing cookie header [" + cookieHeader + "]", iae);
                    }
                }
            }
        }
        httpResponse.withCookies(new ArrayList<Cookie>(mappedCookies.values()));
    }

    private void setBody(HttpResponse httpResponse, String content) {
        httpResponse.withBody(content);
    }

    private void setBody(HttpResponse httpResponse, byte[] content) {
        httpResponse.withBody(content);
    }
}
TOP

Related Classes of org.mockserver.mappers.ApacheHttpClientToMockServerResponseMapper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.