Search in sources :

Example 36 with ForestRequest

use of com.dtflys.forest.http.ForestRequest in project forest by dromara.

the class TestGenericForestClient method testRequest_async_retryWhen_error_not_retry.

@Test
public void testRequest_async_retryWhen_error_not_retry() throws InterruptedException {
    server.enqueue(new MockResponse().setBody(EXPECTED).setResponseCode(400));
    CountDownLatch latch = new CountDownLatch(1);
    AtomicBoolean isError = new AtomicBoolean(false);
    ForestRequest<?> request = Forest.get("http://localhost:" + server.getPort()).maxRetryCount(3).retryWhen(((req, res) -> res.getStatusCode() == 200)).setOnError(((ex, req, res) -> {
        isError.set(true);
        latch.countDown();
    }));
    request.execute();
    latch.await();
    assertThat(isError.get()).isTrue();
    assertThat(request.getCurrentRetryCount()).isEqualTo(0);
}
Also used : Arrays(java.util.Arrays) URL(java.net.URL) ContentType(com.dtflys.forest.backend.ContentType) ForestRequest(com.dtflys.forest.http.ForestRequest) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) HashMap(java.util.HashMap) Result(com.dtflys.test.model.Result) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) Lists(com.google.common.collect.Lists) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Map(java.util.Map) MockWebServer(okhttp3.mockwebserver.MockWebServer) AssertionsForClassTypes.entry(org.assertj.core.api.AssertionsForClassTypes.entry) MockServerRequest.mockRequest(com.dtflys.forest.mock.MockServerRequest.mockRequest) AssertionsForClassTypes.assertThat(org.assertj.core.api.AssertionsForClassTypes.assertThat) AssertionsForClassTypes.linesOf(org.assertj.core.api.AssertionsForClassTypes.linesOf) ForestHeader(com.dtflys.forest.http.ForestHeader) MalformedURLException(java.net.MalformedURLException) ForestRequestType(com.dtflys.forest.http.ForestRequestType) Test(org.junit.Test) Forest(com.dtflys.forest.Forest) File(java.io.File) Objects(java.util.Objects) CountDownLatch(java.util.concurrent.CountDownLatch) URLEncoder(java.net.URLEncoder) List(java.util.List) JSON(com.alibaba.fastjson.JSON) Rule(org.junit.Rule) ForestURL(com.dtflys.forest.http.ForestURL) Type(java.lang.reflect.Type) ForestAddress(com.dtflys.forest.http.ForestAddress) MockResponse(okhttp3.mockwebserver.MockResponse) UnsupportedEncodingException(java.io.UnsupportedEncodingException) HttpBackend(com.dtflys.forest.backend.HttpBackend) TypeReference(com.dtflys.forest.utils.TypeReference) BaseClientTest(com.dtflys.test.http.BaseClientTest) MockResponse(okhttp3.mockwebserver.MockResponse) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) CountDownLatch(java.util.concurrent.CountDownLatch) Test(org.junit.Test) BaseClientTest(com.dtflys.test.http.BaseClientTest)

Example 37 with ForestRequest

use of com.dtflys.forest.http.ForestRequest in project forest by dromara.

the class TestRequest method testAddress.

@Test
public void testAddress() {
    ForestRequest request = Forest.get("http://localhost/xxx/yyy");
    assertThat(request.host()).isEqualTo("localhost");
    assertThat(request.port()).isEqualTo(80);
    assertThat(request.getPath()).isEqualTo("/xxx/yyy");
    request.address(new ForestAddress("1.1.1.1", 10));
    assertThat(request.host()).isEqualTo("1.1.1.1");
    assertThat(request.port()).isEqualTo(10);
    assertThat(request.getPath()).isEqualTo("/xxx/yyy");
    request.address(new ForestAddress("2.2.2.2", -1));
    assertThat(request.host()).isEqualTo("2.2.2.2");
    assertThat(request.port()).isEqualTo(10);
    assertThat(request.getPath()).isEqualTo("/xxx/yyy");
    request.address("3.3.3.3", 8080);
    assertThat(request.host()).isEqualTo("3.3.3.3");
    assertThat(request.port()).isEqualTo(8080);
    assertThat(request.getPath()).isEqualTo("/xxx/yyy");
    request.address("4.4.4.4", -1);
    assertThat(request.host()).isEqualTo("4.4.4.4");
    assertThat(request.port()).isEqualTo(8080);
    assertThat(request.getPath()).isEqualTo("/xxx/yyy");
}
Also used : ForestAddress(com.dtflys.forest.http.ForestAddress) ForestRequest(com.dtflys.forest.http.ForestRequest) Test(org.junit.Test)

Example 38 with ForestRequest

use of com.dtflys.forest.http.ForestRequest in project forest by dromara.

the class TestSSLClient method truestSSLGet.

@Test
public void truestSSLGet() {
    ForestResponse<String> response = sslClient.truestSSLGet("SSLv3");
    ForestRequest request = response.getRequest();
    String protocol = request.getSslProtocol();
    assertNotNull(protocol);
    assertEquals("SSLv3", protocol);
    response = sslClient.truestSSLGet("TLSv1.3");
    request = response.getRequest();
    protocol = request.getSslProtocol();
    assertNotNull(protocol);
    assertEquals("TLSv1.3", protocol);
    response = sslClient.truestSSLGet(null);
    request = response.getRequest();
    protocol = request.getSslProtocol();
    assertNotNull(protocol);
    assertEquals("TLS", protocol);
}
Also used : ForestRequest(com.dtflys.forest.http.ForestRequest)

Example 39 with ForestRequest

use of com.dtflys.forest.http.ForestRequest in project forest by dromara.

the class TestSSLClient method testConcurrent.

@Test
public void testConcurrent() throws InterruptedException {
    int len = 100;
    CountDownLatch latch = new CountDownLatch(len);
    ExecutorService executor = Executors.newFixedThreadPool(len);
    for (int i = 0; i < len / 2; i++) {
        int finalI = i;
        executor.execute(() -> {
            ForestResponse<String> response = sslClient.testConcurrent(finalI);
            ForestRequest req = response.getRequest();
            String reqId = String.valueOf(req.getQuery("id"));
            String json = response.getContent();
            Map<String, Object> map = configuration.getJsonConverter().convertObjectToMap(json);
            String resId = MapUtil.getStr(map, "id");
            System.out.println(finalI + " -> " + reqId + " -> " + resId);
            assertThat(reqId).isEqualTo(String.valueOf(finalI));
            assertThat(resId).isEqualTo(String.valueOf(finalI));
            latch.countDown();
        });
    }
    for (int i = len / 2; i < len; i++) {
        Thread.sleep(20);
        int finalI = i;
        executor.execute(() -> {
            ForestResponse<String> response = sslClient.testConcurrent(finalI);
            ForestRequest req = response.getRequest();
            String reqId = String.valueOf(req.getQuery("id"));
            String json = response.getContent();
            Map<String, Object> map = configuration.getJsonConverter().convertObjectToMap(json);
            String resId = MapUtil.getStr(map, "id");
            System.out.println(finalI + " -> " + reqId + " -> " + resId);
            assertThat(reqId).isEqualTo(String.valueOf(finalI));
            assertThat(resId).isEqualTo(String.valueOf(finalI));
            latch.countDown();
        });
    }
    latch.await();
}
Also used : ExecutorService(java.util.concurrent.ExecutorService) ForestRequest(com.dtflys.forest.http.ForestRequest) CountDownLatch(java.util.concurrent.CountDownLatch)

Example 40 with ForestRequest

use of com.dtflys.forest.http.ForestRequest in project forest by dromara.

the class ForestMethod method makeRequest.

/**
 * 创建请求
 * @param args 调用本对象对应方法时传入的参数数组
 * @return Forest请求对象,{@link ForestRequest}类实例
 */
private ForestRequest makeRequest(Object[] args) {
    MetaRequest baseMetaRequest = interfaceProxyHandler.getBaseMetaRequest();
    ForestURL baseURL = null;
    ForestQueryMap queries = new ForestQueryMap();
    if (baseUrlTemplate != null) {
        baseURL = baseUrlTemplate.render(args, queries);
    }
    if (urlTemplate == null) {
        throw new ForestRuntimeException("request URL is empty");
    }
    ForestURL renderedURL = urlTemplate.render(args, queries);
    ForestRequestType type = type(args);
    String baseContentEncoding = null;
    if (baseEncodeTemplate != null) {
        baseContentEncoding = baseEncodeTemplate.render(args);
    }
    String contentEncoding = null;
    if (encodeTemplate != null) {
        contentEncoding = encodeTemplate.render(args);
    }
    String baseContentType = null;
    if (baseContentTypeTemplate != null) {
        baseContentType = baseContentTypeTemplate.render(args);
    }
    String baseUserAgent = null;
    if (baseUserAgentTemplate != null) {
        baseUserAgent = baseUserAgentTemplate.render(args);
    }
    String charset = null;
    String renderedCharset = charsetTemplate.render(args);
    if (StringUtils.isNotBlank(renderedCharset)) {
        charset = renderedCharset;
    } else if (baseCharsetTemplate != null) {
        charset = baseCharsetTemplate.render(args);
    } else if (StringUtils.isNotBlank(configuration.getCharset())) {
        charset = configuration.getCharset();
    }
    String responseEncoding = null;
    if (responseEncodingTemplate != null) {
        responseEncoding = responseEncodingTemplate.render(args);
    }
    String sslProtocol = null;
    String renderedSslProtocol = sslProtocolTemplate.render(args);
    if (StringUtils.isNotBlank(renderedSslProtocol)) {
        sslProtocol = renderedSslProtocol;
    } else if (baseSslProtocolTemplate != null) {
        sslProtocol = baseSslProtocolTemplate.render(args);
    } else {
        sslProtocol = configuration.getSslProtocol();
    }
    String renderedContentType = null;
    if (contentTypeTemplate != null) {
        renderedContentType = contentTypeTemplate.render(args).trim();
    }
    String renderedUserAgent = null;
    if (userAgentTemplate != null) {
        renderedUserAgent = userAgentTemplate.render(args).trim();
    }
    List<RequestNameValue> nameValueList = new ArrayList<>();
    String[] headerArray = baseMetaRequest.getHeaders();
    MappingTemplate[] baseHeaders = null;
    if (headerArray != null && headerArray.length > 0) {
        baseHeaders = new MappingTemplate[headerArray.length];
        for (int j = 0; j < baseHeaders.length; j++) {
            MappingTemplate header = new MappingTemplate(BaseRequest.class, "headers", this, headerArray[j], this, configuration.getProperties(), forestParameters);
            baseHeaders[j] = header;
        }
    }
    AddressSource addressSource = configuration.getBaseAddressSource();
    ForestAddress address = configuration.getBaseAddress();
    if (address == null) {
        // 默认根地址
        address = DEFAULT_ADDRESS;
    }
    ForestURL addressURL = null;
    if (baseURL != null) {
        renderedURL.setBaseURL(baseURL);
    }
    try {
        addressURL = new ForestURL(new URL("http://localhost"));
        addressURL.setBaseAddress(address);
        renderedURL = renderedURL.mergeURLWith(addressURL);
    } catch (MalformedURLException e) {
        throw new ForestRuntimeException(e);
    }
    boolean autoRedirection = configuration.isAutoRedirection();
    String bodyTypeName = "text";
    if (bodyTypeTemplate != null) {
        bodyTypeName = bodyTypeTemplate.render(args);
    }
    ForestDataType bodyType = ForestDataType.findByName(bodyTypeName);
    // createExecutor and initialize http instance
    ForestRequest<T> request = new ForestRequest(configuration, this, args);
    request.url(renderedURL).type(type).bodyType(bodyType).addAllQuery(queries).charset(charset).autoRedirects(autoRedirection).setSslProtocol(sslProtocol).setLogConfiguration(logConfiguration).setAsync(async);
    if (addressSource != null) {
        address = addressSource.getAddress(request);
        request.address(address);
    }
    if (StringUtils.isNotEmpty(responseEncoding)) {
        request.setResponseEncode(responseEncoding);
    }
    if (StringUtils.isNotEmpty(renderedContentType)) {
        request.setContentType(renderedContentType);
    }
    if (StringUtils.isNotEmpty(contentEncoding)) {
        request.setContentEncoding(contentEncoding);
    }
    if (StringUtils.isNotEmpty(renderedUserAgent)) {
        request.setUserAgent(renderedUserAgent);
    }
    for (int i = 0; i < namedParameters.size(); i++) {
        MappingParameter parameter = namedParameters.get(i);
        if (parameter.isObjectProperties()) {
            int target = parameter.isUnknownTarget() ? type.getDefaultParamTarget() : parameter.getTarget();
            Object obj = args[parameter.getIndex()];
            if (obj == null && StringUtils.isNotEmpty(parameter.getDefaultValue())) {
                obj = parameter.getConvertedDefaultValue(configuration.getJsonConverter());
            }
            if (parameter.isJsonParam()) {
                String json = "";
                if (obj != null) {
                    ForestJsonConverter jsonConverter = configuration.getJsonConverter();
                    obj = parameter.getFilterChain().doFilter(configuration, obj);
                    json = jsonConverter.encodeToString(obj);
                }
                if (MappingParameter.isHeader(target)) {
                    request.addHeader(new RequestNameValue(parameter.getJsonParamName(), json, target).setDefaultValue(parameter.getDefaultValue()));
                } else {
                    nameValueList.add(new RequestNameValue(parameter.getJsonParamName(), json, target, parameter.getPartContentType()).setDefaultValue(parameter.getDefaultValue()));
                }
            } else if (!parameter.getFilterChain().isEmpty()) {
                obj = parameter.getFilterChain().doFilter(configuration, obj);
                if (obj == null && StringUtils.isNotEmpty(parameter.getDefaultValue())) {
                    obj = parameter.getDefaultValue();
                }
                if (obj != null) {
                    if (MappingParameter.isHeader(target)) {
                        request.addHeader(new RequestNameValue(null, obj, target));
                    } else if (MappingParameter.isQuery(target)) {
                        request.addQuery(obj.toString(), (Object) null, parameter.isUrlEncode(), parameter.getCharset());
                    } else if (MappingParameter.isBody(target)) {
                        ForestRequestBody body = RequestBodyBuilder.type(obj.getClass()).build(obj, parameter.getDefaultValue());
                        request.addBody(body);
                    } else {
                        nameValueList.add(new RequestNameValue(obj.toString(), target, parameter.getPartContentType()).setDefaultValue(parameter.getDefaultValue()));
                    }
                }
            } else if (obj instanceof CharSequence) {
                if (MappingParameter.isQuery(target)) {
                    request.addQuery(ForestQueryParameter.createSimpleQueryParameter(obj).setDefaultValue(parameter.getDefaultValue()));
                } else if (MappingParameter.isBody(target)) {
                    request.addBody(new StringRequestBody(obj.toString()).setDefaultValue(parameter.getDefaultValue()));
                }
            } else if (obj instanceof Map) {
                Map map = (Map) obj;
                if (MappingParameter.isQuery(target)) {
                    request.addQuery(map, parameter.isUrlEncode(), parameter.getCharset());
                } else if (MappingParameter.isBody(target)) {
                    request.addBody(map, parameter.getPartContentType());
                } else if (MappingParameter.isHeader(target)) {
                    request.addHeader(map);
                }
            } else if (obj instanceof Iterable || (obj != null && (obj.getClass().isArray() || ReflectUtils.isPrimaryType(obj.getClass())))) {
                if (MappingParameter.isQuery(target)) {
                    if (parameter.isJsonParam()) {
                        request.addQuery(parameter.getName(), obj, parameter.isUrlEncode(), parameter.getCharset());
                    } else {
                        if (obj instanceof Iterable) {
                            for (Object subItem : (Iterable) obj) {
                                if (subItem instanceof ForestQueryParameter) {
                                    request.addQuery((ForestQueryParameter) subItem);
                                } else {
                                    request.addQuery(ForestQueryParameter.createSimpleQueryParameter(subItem));
                                }
                            }
                        } else if (obj.getClass().isArray()) {
                            if (obj instanceof ForestQueryParameter[]) {
                                request.addQuery((ForestQueryParameter[]) obj);
                            }
                        }
                    }
                } else if (MappingParameter.isBody(target)) {
                    ForestRequestBody body = RequestBodyBuilder.type(obj.getClass()).build(obj, parameter.getDefaultValue());
                    request.addBody(body);
                }
            } else if (MappingParameter.isBody(target)) {
                ForestRequestBody body = RequestBodyBuilder.type(obj.getClass()).build(obj, parameter.getDefaultValue());
                request.addBody(body);
            } else {
                try {
                    List<RequestNameValue> list = getNameValueListFromObjectWithJSON(parameter, configuration, obj, type);
                    for (RequestNameValue nameValue : list) {
                        if (nameValue.isInHeader()) {
                            request.addHeader(nameValue);
                        } else {
                            nameValueList.add(nameValue);
                        }
                    }
                } catch (Throwable th) {
                    throw new ForestRuntimeException(th);
                }
            }
        } else if (parameter.getIndex() != null) {
            int target = parameter.isUnknownTarget() ? type.getDefaultParamTarget() : parameter.getTarget();
            RequestNameValue nameValue = new RequestNameValue(parameter.getName(), target, parameter.getPartContentType()).setDefaultValue(parameter.getDefaultValue());
            Object obj = args[parameter.getIndex()];
            if (obj == null && StringUtils.isNotEmpty(nameValue.getDefaultValue())) {
                obj = parameter.getConvertedDefaultValue(configuration.getJsonConverter());
            }
            if (obj != null) {
                if (MappingParameter.isQuery(target) && obj.getClass().isArray() && !(obj instanceof byte[]) && !(obj instanceof Byte[])) {
                    int len = Array.getLength(obj);
                    for (int idx = 0; idx < len; idx++) {
                        Object arrayItem = Array.get(obj, idx);
                        ForestQueryParameter queryParameter = new ForestQueryParameter(parameter.getName(), arrayItem, parameter.isUrlEncode(), parameter.getCharset());
                        request.addQuery(queryParameter);
                    }
                } else {
                    nameValue.setValue(obj);
                    if (MappingParameter.isHeader(target)) {
                        request.addHeader(nameValue);
                    } else if (MappingParameter.isQuery(target)) {
                        if (!parameter.isJsonParam() && obj instanceof Iterable) {
                            int index = 0;
                            MappingTemplate template = makeTemplate(parameter);
                            VariableScope parentScope = template.getVariableScope();
                            for (Object subItem : (Iterable) obj) {
                                SubVariableScope scope = new SubVariableScope(parentScope);
                                scope.addVariableValue("_it", subItem);
                                scope.addVariableValue("_index", index++);
                                template.setVariableScope(scope);
                                String name = template.render(args);
                                request.addQuery(name, subItem, parameter.isUrlEncode(), parameter.getCharset());
                            }
                        } else if (parameter.isJsonParam()) {
                            request.addJSONQuery(parameter.getName(), obj);
                        } else {
                            request.addQuery(parameter.getName(), obj, parameter.isUrlEncode(), parameter.getCharset());
                        }
                    } else {
                        MappingTemplate template = makeTemplate(parameter);
                        if (obj instanceof Iterable && template.hasIterateVariable()) {
                            int index = 0;
                            VariableScope parentScope = template.getVariableScope();
                            for (Object subItem : (Iterable) obj) {
                                SubVariableScope scope = new SubVariableScope(parentScope);
                                template.setVariableScope(scope);
                                scope.addVariableValue("_it", subItem);
                                scope.addVariableValue("_index", index++);
                                String name = template.render(args);
                                nameValueList.add(new RequestNameValue(name, subItem, target, parameter.getPartContentType()).setDefaultValue(parameter.getDefaultValue()));
                            }
                        } else {
                            nameValueList.add(nameValue);
                        }
                    }
                }
            }
        }
    }
    if (request.getContentType() == null) {
        if (StringUtils.isNotEmpty(baseContentType)) {
            request.setContentType(baseContentType);
        }
    }
    if (request.getContentEncoding() == null) {
        if (StringUtils.isNotEmpty(baseContentEncoding)) {
            request.setContentEncoding(baseContentEncoding);
        }
    }
    if (request.getUserAgent() == null) {
        if (StringUtils.isNotEmpty(baseUserAgent)) {
            request.setUserAgent(baseUserAgent);
        }
    }
    List<ForestMultipart> multiparts = new ArrayList<>(multipartFactories.size());
    String contentType = request.getContentType();
    if (!multipartFactories.isEmpty()) {
        if (StringUtils.isBlank(contentType)) {
            String boundary = StringUtils.generateBoundary();
            request.setContentType(ContentType.MULTIPART_FORM_DATA + "; boundary=" + boundary);
        } else if (ContentType.MULTIPART_FORM_DATA.equalsIgnoreCase(contentType) && request.getBoundary() == null) {
            request.setBoundary(StringUtils.generateBoundary());
        }
    }
    for (int i = 0; i < multipartFactories.size(); i++) {
        ForestMultipartFactory factory = multipartFactories.get(i);
        MappingTemplate nameTemplate = factory.getNameTemplate();
        MappingTemplate fileNameTemplate = factory.getFileNameTemplate();
        int index = factory.getIndex();
        Object data = args[index];
        factory.addMultipart(nameTemplate, fileNameTemplate, data, multiparts, args);
    }
    request.setMultiparts(multiparts);
    // setup ssl keystore
    if (sslKeyStoreId != null) {
        SSLKeyStore sslKeyStore = null;
        String keyStoreId = sslKeyStoreId.render(args);
        if (StringUtils.isNotEmpty(keyStoreId)) {
            sslKeyStore = configuration.getKeyStore(keyStoreId);
            request.setKeyStore(sslKeyStore);
        }
    }
    if (encoder != null) {
        request.setEncoder(encoder);
    }
    if (decoder != null) {
        request.setDecoder(decoder);
    }
    if (progressStep >= 0) {
        request.setProgressStep(progressStep);
    }
    if (configuration.getDefaultParameters() != null) {
        request.addNameValue(configuration.getDefaultParameters());
    }
    if (baseHeaders != null && baseHeaders.length > 0) {
        for (MappingTemplate baseHeader : baseHeaders) {
            String headerText = baseHeader.render(args);
            String[] headerNameValue = headerText.split(":", 2);
            if (headerNameValue.length > 1) {
                String name = headerNameValue[0].trim();
                if (request.getHeader(name) == null) {
                    request.addHeader(name, headerNameValue[1].trim());
                }
            }
        }
    }
    if (configuration.getDefaultHeaders() != null) {
        request.addHeaders(configuration.getDefaultHeaders());
    }
    List<RequestNameValue> dataNameValueList = new ArrayList<>();
    renderedContentType = request.getContentType();
    if (renderedContentType == null || renderedContentType.equalsIgnoreCase(ContentType.APPLICATION_X_WWW_FORM_URLENCODED)) {
        for (int i = 0; i < dataTemplateArray.length; i++) {
            MappingTemplate dataTemplate = dataTemplateArray[i];
            String data = dataTemplate.render(args);
            String[] paramArray = data.split("&");
            for (int j = 0; j < paramArray.length; j++) {
                String dataParam = paramArray[j];
                String[] dataNameValue = dataParam.split("=", 2);
                if (dataNameValue.length > 0) {
                    String name = dataNameValue[0].trim();
                    RequestNameValue nameValue = new RequestNameValue(name, type.getDefaultParamTarget());
                    if (dataNameValue.length == 2) {
                        nameValue.setValue(dataNameValue[1].trim());
                    }
                    nameValueList.add(nameValue);
                    dataNameValueList.add(nameValue);
                }
            }
        }
    } else {
        for (int i = 0; i < dataTemplateArray.length; i++) {
            MappingTemplate dataTemplate = dataTemplateArray[i];
            String data = dataTemplate.render(args);
            request.addBody(data);
        }
    }
    request.addNameValue(nameValueList);
    for (int i = 0; i < headerTemplateArray.length; i++) {
        MappingTemplate headerTemplate = headerTemplateArray[i];
        String header = headerTemplate.render(args);
        String[] headNameValue = header.split(":", 2);
        if (headNameValue.length > 0) {
            String name = headNameValue[0].trim();
            RequestNameValue nameValue = new RequestNameValue(name, TARGET_HEADER);
            if (headNameValue.length == 2) {
                nameValue.setValue(headNameValue[1].trim());
            }
            request.addHeader(nameValue);
        }
    }
    if (timeout != null) {
        request.setTimeout(timeout);
    } else if (baseTimeout != null) {
        request.setTimeout(baseTimeout);
    } else if (configuration.getTimeout() != null) {
        request.setTimeout(configuration.getTimeout());
    }
    if (connectTimeout != null) {
        request.setConnectTimeout(connectTimeout);
    } else if (baseConnectTimeout != null) {
        request.setConnectTimeout(baseConnectTimeout);
    } else if (configuration.getConnectTimeout() != null) {
        request.setConnectTimeout(configuration.getConnectTimeout());
    }
    if (readTimeout != null) {
        request.setReadTimeout(readTimeout);
    } else if (baseReadTimeout != null) {
        request.setReadTimeout(baseReadTimeout);
    } else if (configuration.getReadTimeout() != null) {
        request.setReadTimeout(configuration.getReadTimeout());
    }
    if (retryCount != null) {
        request.setMaxRetryCount(retryCount);
    } else if (baseRetryCount != null) {
        request.setMaxRetryCount(baseRetryCount);
    } else if (configuration.getMaxRetryCount() != null) {
        request.setMaxRetryCount(configuration.getMaxRetryCount());
    }
    if (maxRetryInterval >= 0) {
        request.setMaxRetryInterval(maxRetryInterval);
    } else if (baseMaxRetryInterval != null) {
        request.setMaxRetryInterval(baseMaxRetryInterval);
    } else if (configuration.getMaxRetryInterval() >= 0) {
        request.setMaxRetryInterval(configuration.getMaxRetryInterval());
    }
    Class globalRetryerClass = configuration.getRetryer();
    if (retryerClass != null && ForestRetryer.class.isAssignableFrom(retryerClass)) {
        request.setRetryer(retryerClass);
    } else if (baseRetryerClass != null && ForestRetryer.class.isAssignableFrom(baseRetryerClass)) {
        request.setRetryer(baseRetryerClass);
    } else if (globalRetryerClass != null && ForestRetryer.class.isAssignableFrom(globalRetryerClass)) {
        request.setRetryer(globalRetryerClass);
    }
    if (onSuccessParameter != null) {
        OnSuccess<?> onSuccessCallback = (OnSuccess<?>) args[onSuccessParameter.getIndex()];
        request.setOnSuccess(onSuccessCallback);
    }
    if (onErrorParameter != null) {
        OnError onErrorCallback = (OnError) args[onErrorParameter.getIndex()];
        request.setOnError(onErrorCallback);
    }
    if (onRedirectionParameter != null) {
        OnRedirection onRedirectionCallback = (OnRedirection) args[onRedirectionParameter.getIndex()];
        request.setOnRedirection(onRedirectionCallback);
    }
    if (onProgressParameter != null) {
        OnProgress onProgressCallback = (OnProgress) args[onProgressParameter.getIndex()];
        request.setOnProgress(onProgressCallback);
    }
    if (onSaveCookieParameter != null) {
        OnSaveCookie onSaveCookieCallback = (OnSaveCookie) args[onSaveCookieParameter.getIndex()];
        request.setOnSaveCookie(onSaveCookieCallback);
    }
    if (onLoadCookieParameter != null) {
        OnLoadCookie onLoadCookieCallback = (OnLoadCookie) args[onLoadCookieParameter.getIndex()];
        request.setOnLoadCookie(onLoadCookieCallback);
    }
    String dataType = dataTypeTemplate.render(args);
    if (StringUtils.isEmpty(dataType)) {
        request.setDataType(ForestDataType.TEXT);
    } else {
        dataType = dataType.toUpperCase();
        ForestDataType forestDataType = ForestDataType.findByName(dataType);
        request.setDataType(forestDataType);
    }
    if (interceptorAttributesList != null && interceptorAttributesList.size() > 0) {
        for (InterceptorAttributes attributes : interceptorAttributesList) {
            InterceptorAttributes newAttrs = attributes.clone();
            request.addInterceptorAttributes(newAttrs.getInterceptorClass(), newAttrs);
            request.getInterceptorAttributes(newAttrs.getInterceptorClass()).render(args);
        }
    }
    if (globalInterceptorList != null && globalInterceptorList.size() > 0) {
        for (Interceptor item : globalInterceptorList) {
            request.addInterceptor(item);
        }
    }
    if (baseInterceptorList != null && baseInterceptorList.size() > 0) {
        for (Interceptor item : baseInterceptorList) {
            request.addInterceptor(item);
        }
    }
    if (interceptorList != null && interceptorList.size() > 0) {
        for (Interceptor item : interceptorList) {
            request.addInterceptor(item);
        }
    }
    return request;
}
Also used : MalformedURLException(java.net.MalformedURLException) OnError(com.dtflys.forest.callback.OnError) OnProgress(com.dtflys.forest.callback.OnProgress) SSLKeyStore(com.dtflys.forest.ssl.SSLKeyStore) ForestDataType(com.dtflys.forest.utils.ForestDataType) ForestURL(com.dtflys.forest.http.ForestURL) ForestMultipartFactory(com.dtflys.forest.multipart.ForestMultipartFactory) AddressSource(com.dtflys.forest.callback.AddressSource) OnRedirection(com.dtflys.forest.callback.OnRedirection) ForestAddress(com.dtflys.forest.http.ForestAddress) OnSaveCookie(com.dtflys.forest.callback.OnSaveCookie) ForestQueryMap(com.dtflys.forest.http.ForestQueryMap) VariableScope(com.dtflys.forest.config.VariableScope) SubVariableScope(com.dtflys.forest.mapping.SubVariableScope) OnLoadCookie(com.dtflys.forest.callback.OnLoadCookie) ForestJsonConverter(com.dtflys.forest.converter.json.ForestJsonConverter) MappingTemplate(com.dtflys.forest.mapping.MappingTemplate) ForestMultipart(com.dtflys.forest.multipart.ForestMultipart) OnSuccess(com.dtflys.forest.callback.OnSuccess) ForestQueryMap(com.dtflys.forest.http.ForestQueryMap) URL(java.net.URL) ForestURL(com.dtflys.forest.http.ForestURL) ForestRequestType(com.dtflys.forest.http.ForestRequestType) RequestNameValue(com.dtflys.forest.utils.RequestNameValue) SubVariableScope(com.dtflys.forest.mapping.SubVariableScope) Interceptor(com.dtflys.forest.interceptor.Interceptor) ForestRequestBody(com.dtflys.forest.http.ForestRequestBody) MappingParameter(com.dtflys.forest.mapping.MappingParameter) ForestRuntimeException(com.dtflys.forest.exceptions.ForestRuntimeException) ForestRequest(com.dtflys.forest.http.ForestRequest) StringRequestBody(com.dtflys.forest.http.body.StringRequestBody) ForestQueryParameter(com.dtflys.forest.http.ForestQueryParameter) InterceptorAttributes(com.dtflys.forest.interceptor.InterceptorAttributes) ForestRetryer(com.dtflys.forest.retryer.ForestRetryer)

Aggregations

ForestRequest (com.dtflys.forest.http.ForestRequest)85 Test (org.junit.Test)75 MockResponse (okhttp3.mockwebserver.MockResponse)59 BaseClientTest (com.dtflys.test.http.BaseClientTest)48 HttpBackend (com.dtflys.forest.backend.HttpBackend)42 MockWebServer (okhttp3.mockwebserver.MockWebServer)42 Rule (org.junit.Rule)42 ForestConfiguration (com.dtflys.forest.config.ForestConfiguration)39 ForestResponse (com.dtflys.forest.http.ForestResponse)37 CountDownLatch (java.util.concurrent.CountDownLatch)36 BeforeClass (org.junit.BeforeClass)36 MockServerRequest.mockRequest (com.dtflys.forest.mock.MockServerRequest.mockRequest)35 AssertionsForClassTypes.assertThat (org.assertj.core.api.AssertionsForClassTypes.assertThat)35 TimeUnit (java.util.concurrent.TimeUnit)29 AtomicReference (java.util.concurrent.atomic.AtomicReference)29 ContentType (com.dtflys.forest.backend.ContentType)15 File (java.io.File)14 URL (java.net.URL)14 HashMap (java.util.HashMap)14 LinkedHashMap (java.util.LinkedHashMap)14