Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spring and HttpClient: The target server failed to 
:(
    Опции темы
slippery
Дата 2.6.2016, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 2.7.2007

Репутация: нет
Всего: нет



Добрый день. У меня есть проблема с http client от apache. И так у меня есть 2 сервера которые взаимодействует между собой по REST. Назовем тот, что принимает запросы(имеет АПИ) - Сервер, а тот, что посылает - Клиент. Сервер крутится на 8 томкате и АПИ реализован как @Controller от spring версии 4.2.5. Клиент же крутится в jboss(4.2.3.GA) и основан тоже на spring 3.2.12. Клиент использует RestTemplate для вызова АПИ на Сервере. Некоторые методы АПИ на сервере выполняются довольно таки долго, 15-25 секунд. И иногда при выполнении таких методов я получаю следующую ошибку:
Код


org.apache.http.NoHttpResponseException: The target server failed to respond
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:95)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:62)

при этом не смотря на исключение, запрос от Клиента доходит до Сервера выполняется там секунд 15-20 и затем вылетает это исключение. С запросами которые выполняются 1-2 секунды таких ошибок не наблюдалось. ReadTimeout не происходит, все же время выполнения таких методов меньше.

Можете ли вы объяснить почему возникает ошибка и как я могу это исправить?

На всякий случай приведу код Клиента:

Код

@Bean
public RestTemplate restTemplate() {
  RestTemplate restTemplate = new RestTemplate();
  restTemplate.setMessageConverters(ImmutableList.of(messageConverter));
  restTemplate.setErrorHandler(errorHandler);

  HttpHost host = URIUtils.extractHost(new URI("http://127.0.0.1:8080"));
  HttpComponentsDigestRequestFactory requestFactory = new HttpComponentsDigestRequestFactory(host,new AuthProperties("user", "password", "realm"))
  requestFactory.setConnectTimeout(5000);
  requestFactory.setReadTimeout(30000);
  restTemplate.setRequestFactory(requestFactory);
}
class HttpComponentsDigestRequestFactory  extends HttpComponentsClientHttpRequestFactory {    

 public HttpComponentsDigestRequestFactory(@NotNull HttpHost host, @NotNull AuthProperties auth) {
   DefaultHttpClient httpClient = (DefaultHttpClient) getHttpClient();
   httpClient.getCredentialsProvider().setCredentials(new AuthScope(host, auth.getRealm(), "DIGEST"),
        new UsernamePasswordCredentials(auth.getUsername(), auth.getPassword()));
  }

@Override
protected HttpContext createHttpContext(HttpMethod httpMethod, URI uri) {
  AuthCache authCache = new BasicAuthCache();
  DigestScheme digestScheme = new DigestScheme();
  digestScheme.overrideParamter("realm", realm);
  authCache.put(host, digestScheme);
  BasicHttpContext context = new BasicHttpContext();
  context.setAttribute(ClientContext.AUTH_CACHE, authCache);
  return context;
  }
public void post(@NotNull String relativeUrl, @NotNull Object body,     @NotNull Map<String, ?> uriVariables) {
  String url = gateway + relativeUrl;
  restTemplate.postForEntity(url, body, MyError.class, uriVariables);
}

private String json(Object body) {
 return gson.toJson(body);
}

PM MAIL   Вверх
sergioK1
Дата 7.6.2016, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Цитата(slippery @ 2.6.2016,  12:48)
Добрый день. У меня есть проблема с http client от apache. И так у меня есть 2 сервера которые взаимодействует между собой по REST. Назовем тот, что принимает запросы(имеет АПИ) - Сервер, а тот, что посылает - Клиент. Сервер крутится на 8 томкате и АПИ реализован как @Controller от spring версии 4.2.5. Клиент же крутится в jboss(4.2.3.GA) и основан тоже на spring 3.2.12. Клиент использует RestTemplate для вызова АПИ на Сервере. Некоторые методы АПИ на сервере выполняются довольно таки долго, 15-25 секунд. И иногда при выполнении таких методов я получаю следующую ошибку:
Код


org.apache.http.NoHttpResponseException: The target server failed to respond
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:95)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:62)

при этом не смотря на исключение, запрос от Клиента доходит до Сервера выполняется там секунд 15-20 и затем вылетает это исключение. С запросами которые выполняются 1-2 секунды таких ошибок не наблюдалось. ReadTimeout не происходит, все же время выполнения таких методов меньше.

Можете ли вы объяснить почему возникает ошибка и как я могу это исправить?

На всякий случай приведу код Клиента:

Код

@Bean
public RestTemplate restTemplate() {
  RestTemplate restTemplate = new RestTemplate();
  restTemplate.setMessageConverters(ImmutableList.of(messageConverter));
  restTemplate.setErrorHandler(errorHandler);

  HttpHost host = URIUtils.extractHost(new URI("http://127.0.0.1:8080"));
  HttpComponentsDigestRequestFactory requestFactory = new HttpComponentsDigestRequestFactory(host,new AuthProperties("user", "password", "realm"))
  requestFactory.setConnectTimeout(5000);
  requestFactory.setReadTimeout(30000);
  restTemplate.setRequestFactory(requestFactory);
}
class HttpComponentsDigestRequestFactory  extends HttpComponentsClientHttpRequestFactory {    

 public HttpComponentsDigestRequestFactory(@NotNull HttpHost host, @NotNull AuthProperties auth) {
   DefaultHttpClient httpClient = (DefaultHttpClient) getHttpClient();
   httpClient.getCredentialsProvider().setCredentials(new AuthScope(host, auth.getRealm(), "DIGEST"),
        new UsernamePasswordCredentials(auth.getUsername(), auth.getPassword()));
  }

@Override
protected HttpContext createHttpContext(HttpMethod httpMethod, URI uri) {
  AuthCache authCache = new BasicAuthCache();
  DigestScheme digestScheme = new DigestScheme();
  digestScheme.overrideParamter("realm", realm);
  authCache.put(host, digestScheme);
  BasicHttpContext context = new BasicHttpContext();
  context.setAttribute(ClientContext.AUTH_CACHE, authCache);
  return context;
  }
public void post(@NotNull String relativeUrl, @NotNull Object body,     @NotNull Map<String, ?> uriVariables) {
  String url = gateway + relativeUrl;
  restTemplate.postForEntity(url, body, MyError.class, uriVariables);
}

private String json(Object body) {
 return gson.toJson(body);
}

без лога сервера трудно угадать ,
попробуй послать через обычную HTML форму , потом на сервере проверь все ли параметры пришли ,
убери credential убедись что без них работает , 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1093 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.