apache Свободные клиентские блоки POST навсегда, когда основной вызов фактически вернулся - моя тема застряла - PullRequest
0 голосов
/ 17 марта 2020

Я вызываю метод Post класса org.apache.http.client.fluent.Request, и он блокируется - следующая строка кода не выполняется. Я получаю запись, в которой говорится, что я тоже получил успешный ответ! Мои сообщения журнала (ниже) подтверждают, что сообщение вернулось со статусом OK (200).

>> ...with body JSON:
<< status: 200

Так что же случилось? Что еще более важно, что я могу сделать, чтобы защитить себя?

PS Я использовал этот код тысячи раз, и, насколько я знаю, такого раньше никогда не было.

Контекст

Это приложение Spring BOOT (версия 1.3.5). Я использую RESTTemplate для внутренней связи между микросервисами, но я использую свободный клиент apache для связи с внешним веб-сервисом. Я использую org. apache .httpcomponents (версия 4.5.2).

Мой код:

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpResponseException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.fluent.Request;
import org.apache.http.entity.ContentType;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.eneura.devcom.microservices.exceptions.ExternalWebServiceCommunicationFailureException;
import com.eneura.devcom.microservices.exceptions.InvalidArgumentException;
import com.eneura.devcom.microservices.exceptions.PreconditionsFailureException;



final private String internalDoPostSingleCall(
        String subUrlPath, String jsonString, List<String> parmList
        )
    throws InvalidArgumentException, ExternalWebServiceCommunicationFailureException, HttpResponseException
{

    String bodyArg = (StringUtils.isNotBlank(jsonString)) ? jsonString : ""; //don't pass in null or blanks or ... just fold down to ""

    String url = computeUrl(subUrlPath, parmList);
    logger.info(">> sending POST " + url);
    logger.info(">>    ...with body JSON: " + bodyArg);

    String res;
    try {
        res = Request
                .Post( url )
                .bodyString(
                            bodyArg, ContentType.APPLICATION_JSON
                    ).execute()
                .handleResponse(new ResponseHandler<String>() {

                    public String handleResponse(
                            final HttpResponse response) throws IOException {
                        StatusLine statusLine = response.getStatusLine();
                        HttpEntity entity = response.getEntity();
                        logger.info("<< status: " + statusLine.getStatusCode() );
                        if (statusLine.getStatusCode() >= 300) {
                            throw new HttpResponseException(statusLine
                                    .getStatusCode(), statusLine
                                    .getReasonPhrase());
                        }
                        String content =
                                (null == entity) ? (
                                        ""    // ok not to have any content back.
                                    ) : (
                                        IOUtils.toString(entity.getContent(), "UTF-8")
                                    );
                        return content;
                    }

                });
    } catch (HttpResponseException e) {
        throw e;
    } catch (IOException e) {
        String msg =
                "failed to perform POST to ExternalWebService - exception: " + e.getLocalizedMessage();
        throw new ExternalWebServiceCommunicationFailureException(msg);
    }

    logger.info("<< body returned for POST (len="+ res.length() +"): " + res);

    return res;
}

Журнал сообщений:

2020-03-14 18:46:14.119  INFO 15213 --- [http-nio-6444-exec-9] c.e.d.m.s.avcourier.AVRestDelegate       : >> sending POST https://externalwebservice.com/api/v1/operations/a0a01212445566770011001130304040/cancel
2020-03-14 18:46:14.119  INFO 15213 --- [http-nio-6444-exec-9] c.e.d.m.s.avcourier.AVRestDelegate       : >>    ...with body JSON:
2020-03-14 18:46:14.393  INFO 15213 --- [http-nio-6444-exec-9] c.e.d.m.s.avcourier.AVRestDelegate       : << status: 200
2020-03-14 18:50:07.589  INFO 15213 --- [AsyncResolver-bootstrap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver      : Resolving eureka endpoints via configuration
2020-03-14 18:55:07.590  INFO 15213 --- [AsyncResolver-bootstrap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver      : Resolving eureka endpoints via configuration
2020-03-14 19:00:07.591  INFO 15213 --- [AsyncResolver-bootstrap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver      : Resolving eureka endpoints via configuration
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...