Package org.mockserver.mock.action

Source Code of org.mockserver.mock.action.HttpForwardActionHandler

package org.mockserver.mock.action;

import io.netty.handler.codec.http.HttpHeaders;
import org.apache.http.client.utils.URIBuilder;
import org.mockserver.client.http.ApacheHttpClient;
import org.mockserver.model.HttpForward;
import org.mockserver.model.HttpRequest;
import org.mockserver.model.HttpResponse;
import org.mockserver.model.Parameter;
import org.mockserver.proxy.filters.Filters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.net.URISyntaxException;

import static org.mockserver.model.Header.header;

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

    private ApacheHttpClient apacheHttpClient = new ApacheHttpClient(true);

    public HttpForwardActionHandler(Filters filters) {
        this.filters = filters;
    }

    public HttpResponse handle(HttpForward httpForward, HttpRequest httpRequest) {
        updateURLAndHost(httpRequest, httpForward);
        return sendRequest(filters.applyFilters(httpRequest));
    }

    private void updateURLAndHost(HttpRequest httpRequest, HttpForward httpForward) {
        try {
            URIBuilder uriBuilder = new URIBuilder(httpRequest.getURL());
            uriBuilder.setPath(httpRequest.getPath().startsWith("/") ? httpRequest.getPath() : "/" + httpRequest.getPath());
            uriBuilder.setHost(httpForward.getHost());
            uriBuilder.setPort(httpForward.getPort());
            uriBuilder.setScheme(httpForward.getScheme().name().toLowerCase());
            for (Parameter parameter : httpRequest.getQueryStringParameters()) {
                for (String value : parameter.getValues()) {
                    uriBuilder.addParameter(parameter.getName(), value);
                }
            }
            httpRequest.withURL(uriBuilder.toString());
            httpRequest.replaceHeader(header(HttpHeaders.Names.HOST, String.format("%s:%d", uriBuilder.getHost(), uriBuilder.getPort())));
        } catch (URISyntaxException e) {
            logger.warn("URISyntaxException for url " + httpRequest.getURL(), e);
        }
    }

    private HttpResponse sendRequest(HttpRequest httpRequest) {
        if (httpRequest != null) {
            return filters.applyFilters(httpRequest, apacheHttpClient.sendRequest(httpRequest, false));
        } else {
            return null;
        }
    }
}
TOP

Related Classes of org.mockserver.mock.action.HttpForwardActionHandler

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.