higuys!
I have a problem with restTemplate right now.
There are two requests while using this restTemplate.
First one is simple like login.
Other one(the problem) is sending quite long text with post body.
If I send the request on Postman, it works well.
I think the length of string might be the problem, but I’m not sure.
Request Parameter is
{
"name" : "test",
"age" : 28,
"gender" : 2,
"type" : 1,
"store" : "test2",
"imgLen" : 2876,
"img" : "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"
}
Source code is
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setConnectTimeout(timeout);
factory.setReadTimeout(timeout);
RestTemplate restTemplate = new RestTemplate(factory);
//body
MultiValueMap<String, String> reqBody = new LinkedMultiValueMap<>();
int i=0;
if(reqParam != null) {
for (Object key : reqParam.keySet()) {
i++;
String keyString = key.toString();
reqBody.add(keyString, reqParam.getString(keyString));
}
}
//header
HttpHeaders header = new HttpHeaders();
header.setContentType(MediaType.APPLICATION_JSON);
if(reqHeader != null) {
for (Object key : reqHeader.keySet()) {
String keyString = key.toString();
String value = reqHeader.getString(keyString);
header.set(keyString, value);
}
}
HttpEntity<?> entity = new HttpEntity<>(reqBody, header);
UriComponents uri = UriComponentsBuilder.fromHttpUrl(host+reqUri).build();
log.append("n---------[ BI-API -> Face Manager API ]-------------------------------------------------------------");
log.append("nRequest URL : ").append(uri);
log.append("nRequest URI : ").append(reqUri);
log.append("nmethod : ").append(method);
log.append("nRequest Body : ").append(ObjectUtil.getAllParameters(reqParam));
// ResponseEntity<Map> resultMap = restTemplate.exchange(uri.toString(), HttpMethod.POST, entity, Map.class);
ResponseEntity<Map> resultMap = restTemplate.postForEntity(uri.toString(), entity, Map.class);
The error is
org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://{ip}:{port}/face/emp": Connection reset; nested exception is java.net.SocketException: Connection reset
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:785)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:711)
at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:468)
at com.lguplus.bi.api.faceMgr.FaceMgrApi.callAPI(FaceMgrApi.java:116)
at com.lguplus.bi.api.service.user.UserService.sendFaceInfo(UserService.java:549)
at com.lguplus.bi.api.controller.user.UserController.requestCreateUser(UserController.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at com.lguplus.bi.api.filter.RequestFilter.doFilter(RequestFilter.java:201)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:210)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at org.apache.http.impl.conn.LoggingInputStream.read(LoggingInputStream.java:87)
at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137)
at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:153)
at org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:280)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:140)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:57)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259)
at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163)
at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:167)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:271)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
at org.springframework.http.client.HttpComponentsClientHttpRequest.executeInternal(HttpComponentsClientHttpRequest.java:87)
at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48)
at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:776)
... 58 more
The log is
021-05-21 16:10:05 [DEBUG] [MainClientExec.java]execute(255) : Executing request POST /face/emp HTTP/1.1
2021-05-21 16:10:05 [DEBUG] [MainClientExec.java]execute(260) : Target auth state: UNCHALLENGED
2021-05-21 16:10:05 [DEBUG] [MainClientExec.java]execute(266) : Proxy auth state: UNCHALLENGED
2021-05-21 16:10:05 [DEBUG] [LoggingManagedHttpClientConnection.java]onRequestSubmitted(124) : http-outgoing-0 >> POST /face/emp HTTP/1.1
2021-05-21 16:10:05 [DEBUG] [LoggingManagedHttpClientConnection.java]onRequestSubmitted(127) : http-outgoing-0 >> Accept: application/json, application/*+json
2021-05-21 16:10:05 [DEBUG] [LoggingManagedHttpClientConnection.java]onRequestSubmitted(127) : http-outgoing-0 >> Content-Type: application/json
2021-05-21 16:10:05 [DEBUG] [LoggingManagedHttpClientConnection.java]onRequestSubmitted(127) : http-outgoing-0 >> api-key: eV1GXF5neW0fd2NlMDkzNDk0MGludGVsbGk=
2021-05-21 16:10:05 [DEBUG] [LoggingManagedHttpClientConnection.java]onRequestSubmitted(127) : http-outgoing-0 >> Accept-Charset: utf-8
2021-05-21 16:10:05 [DEBUG] [LoggingManagedHttpClientConnection.java]onRequestSubmitted(127) : http-outgoing-0 >> Content-Length: 2973
2021-05-21 16:10:05 [DEBUG] [LoggingManagedHttpClientConnection.java]onRequestSubmitted(127) : http-outgoing-0 >> Host: 172.16.2.36:5214
2021-05-21 16:10:05 [DEBUG] [LoggingManagedHttpClientConnection.java]onRequestSubmitted(127) : http-outgoing-0 >> Connection: Keep-Alive
2021-05-21 16:10:05 [DEBUG] [LoggingManagedHttpClientConnection.java]onRequestSubmitted(127) : http-outgoing-0 >> User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_191)
2021-05-21 16:10:05 [DEBUG] [LoggingManagedHttpClientConnection.java]onRequestSubmitted(127) : http-outgoing-0 >> Accept-Encoding: gzip,deflate
2021-05-21 16:10:05 [DEBUG] [Wire.java]wire(72) : http-outgoing-0 >> "POST /face/emp HTTP/1.1[r][n]"
2021-05-21 16:10:05 [DEBUG] [Wire.java]wire(72) : http-outgoing-0 >> "Accept: application/json, application/*+json[r][n]"
2021-05-21 16:10:05 [DEBUG] [Wire.java]wire(72) : http-outgoing-0 >> "Content-Type: application/json[r][n]"
2021-05-21 16:10:05 [DEBUG] [Wire.java]wire(72) : http-outgoing-0 >> "api-key: eV1GXF5neW0fd2NlMDkzNDk0MGludGVsbGk=[r][n]"
2021-05-21 16:10:05 [DEBUG] [Wire.java]wire(72) : http-outgoing-0 >> "Accept-Charset: utf-8[r][n]"
2021-05-21 16:10:05 [DEBUG] [Wire.java]wire(72) : http-outgoing-0 >> "Content-Length: 2973[r][n]"
2021-05-21 16:10:05 [DEBUG] [Wire.java]wire(72) : http-outgoing-0 >> "Host: 172.16.2.36:5214[r][n]"
2021-05-21 16:10:05 [DEBUG] [Wire.java]wire(72) : http-outgoing-0 >> "Connection: Keep-Alive[r][n]"
2021-05-21 16:10:05 [DEBUG] [Wire.java]wire(72) : http-outgoing-0 >> "User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_191)[r][n]"
2021-05-21 16:10:05 [DEBUG] [Wire.java]wire(72) : http-outgoing-0 >> "Accept-Encoding: gzip,deflate[r][n]"
2021-05-21 16:10:05 [DEBUG] [Wire.java]wire(72) : http-outgoing-0 >> "[r][n]"
2021-05-21 16:10:05 [DEBUG] [Wire.java]wire(86) : http-outgoing-0 >> "{"id":["test"],"age":["28"],"gender":["1"],"store":["[0xea][0xb0][0x95][0xeb][0x82][0xa8][0xeb][0xa7][0xa4][0xec][0x9e][0xa5]"],"imgLen":["2816"],"img":["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"]}"
2021-05-21 16:10:05 [DEBUG] [Wire.java]wire(86) : http-outgoing-0 << "[read] I/O error: Connection reset"
2021-05-21 16:10:05 [DEBUG] [LoggingManagedHttpClientConnection.java]close(79) : http-outgoing-0: Close connection
2021-05-21 16:10:05 [DEBUG] [LoggingManagedHttpClientConnection.java]shutdown(87) : http-outgoing-0: Shutdown connection
2021-05-21 16:10:05 [DEBUG] [ConnectionHolder.java]abortConnection(128) : Connection discarded
2021-05-21 16:10:05 [DEBUG] [LoggingManagedHttpClientConnection.java]close(79) : http-outgoing-0: Close connection
2021-05-21 16:10:05 [DEBUG] [PoolingHttpClientConnectionManager.java]releaseConnection(320) : Connection released: [id: 0][route: {}->http://ip:5214[total kept alive: 0; route allocated: 0 of 2; total allocated: 0 of 20]
org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://ip:5214/face/emp": Connection reset; nested exception is java.net.SocketException: Connection reset
2021-05-21 16:10:05 [DEBUG] [AbstractMessageConverterMethodProcessor.java]writeWithMessageConverters(268) : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/json, application/*+json]
2021-05-21 16:10:05 [DEBUG] [LogFormatUtils.java]traceDebug(91) : Writing [{}]
How can I solve this problem?
Thank you!
1. Cause of error:
When the resttemplate is used to call the third-party API, the local test is normal, but when it is deployed to the server, it will report: Dan, 19:06 org.springframework.web . client.ResourceAccessException : I/O error on POST request for "XXX": No route to host (Host unreachable); nested exception is java.net.NoRouteToHostException : no route to host (host unreachable) , at first, I thought that the timeout was not set, so I configured it through online methods
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setConnectTimeout(10*1000);
requestFactory.setReadTimeout(10*1000);
RestTemplate rest = new RestTemplate(requestFactory);
Deployment or error
2. Solutions
Finally, the interface setting the timeout time is replaced with httpcomponentsclienthttprequestfactory to solve the problem successfully
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
requestFactory.setConnectTimeout(10*1000);
requestFactory.setReadTimeout(10*1000);
RestTemplate rest = new RestTemplate(requestFactory);
Read More:
- Disk BLK_ update_ request: I/O error
- Sync with Gradle for project ‘XXXX‘ failed: Connection timed out: connect
- Putty:Network error:Connection timed out
- [resolved] exception java.net.ConnectException : Error opening socket to server Connection timed out.
- In the HTML page request Ajax times 400 error, solve Yii submit post form 400 error, and Ajax post request 400 problem (example code)
- Ubuntu 20.04 GPG: KeyServer receive failed: connection timed out when installing ROS configuration key
- Error: JMeter monitors Linux system performance java.net.ConnectException : Connection timed out: connect
- Debian/Ubuntu uses proxy for gpg and apt-key-error resolution: gpg: keyserver receive failed: Connection timed out
- RTMP_Connect0, failed to connect socket. 110 (Connection timed out)
- [nodejs] error request aborted after request routing in post mode
- Troubleshooting of “disk I / O error” after startup
- coredns [ERROR] plugin/errors: 2 read udp : i/o timeout
- An I/O operation initiated by the Registry failed unrecoverably
- Synergy Ubuntu 18 + win7 timed out or new client is unresponsive
- java.sql.SQLException : IO error: socket read timed out!
- NBU recovery report error socket read failed: errno = 119-System call timed out
- java.sql.SQLException : IO exception: socket read timed out
- Jetty9 change post request length
- When feign is called, the solution of request method ‘post’ not supported appears
- esp32:A fatal error occurred: Timed out waiting for packet header
5
14 комментариев
- популярные
- новые
-
+1Вопросы:
Режим отладки включен? (если включен — выключить)
Используется ли вариант доставки в точки выдачи заказов, настроенных на маркете? (если да, то стоит включить кеширование — memcached или хотя бы файловое)
Настроены ли плагины расчета стоимости доставки, использующие внешние сервисы? (часть плагинов «не сознается» что они используют обращения к внешним ресурсам, а это драгоценное время. Такие плагины лучше не использовать. Решение по облегчению ситуации с ними стоит искать совместно с разработчиками плагинов в сторону оптимизаций расчетов и кеширования)
Маркет лимитирует время на ответ крайне жестко: всего 5.5 секунды
-
+1Добрый день!
Также сталкиваемся с аналогичной проблемой — постоянные ошибки по API http://prntscr.com/czycq3
Магазин у нас в облаке, поэтому мы особо на скорость повлиять не можем. Плагины используются ваши встроенные — курьерская доставка, например.
Какие пути решения посоветуете.
-
+1Если из плагинов доставки у вас установлены только те, которые не обращаются к внешним сервисам для получения стоимости доставки значит, для решения проблемы вам необходимо обратиться в службу поддержки Webasyst.
-
-
+1Аналогичная проблема. Плагин расчета СДЭК скорее всего из за него. Как решить проблему?
-
+1Единственное решение сейчас — не использовать этот плагин (если память не подводит, их сервера не отличаются скоростью ответа на запрос расчета стоимости доставки). Общего решения пока нет (прогнозы по срокам сложно дать), только на уровне отдельных плагинов силами их разработчиков (кеширование/оптимизация).
-
+1я не разработчик таких плагинов, но стало даже интересно …
Тот же СДЭК, например, как кешировать? Мало того, что городов дофига, так он же еще от веса/габаритов, вроде, считает?
-
+1Можно попробовать создать ключ для кеширования на основе параметров, от которых зависит стоимость (вес/габариты можно «квантовать», если поддержка сервиса согласится разгласить величину квантования). Это на повторных запросах даст выигрыш по времени. Можно заранее считать «типовые» заказы (ассортимент известен, в заказ попадает, чаще всего, поштучно, можно попробовать «сгенерировать» кеш для плагинов доставки после сохранения настроек кампании хотя бы для домашнего региона).
-
-
-
-
+1Владислав, я конечно благодарен вам за ответ Вячеславу, как и сам Вячеслав, но на мой вопрос я ответа не получил.
Попробую ещё раз — у нас магазин в облаке, тариф Про. Регулярно вылетают ошибки API Маркета, который подключен через Ваш плагин. Также из Ваших плагинов подключен Courier — т.к. конечный пользователь Маркета должен чётко понимать сколько стоит доставка и Маркет штрафует магазин за несоответствие информации на сайте информации в Маркете.
Таким образом, мы имеем ваше облачное решение + ваши плагины. И регулярные проблемы с API Маркета.
Подскажите, пожалуйста, каким образом решить данные проблемы? Может быть нужно провести какие-то дополнительные настройки силами ваших специалистов за отдельные деньги? Может быть, проблема решится переходом на более дорогой тариф?
Хочется понимать, какие ресурсы и средства необходимы, чтобы решить данную проблему.
-
+1Теперь периодически возникают ошибки HTTP — https://yadi.sk/i/VnvWFXTsxpLNC
Хочется всё же услышать позицию разработчиков, т.к. ошибки Маркет показывает постоянно и ежедневно.
-
+1логи с 500-ой ошибки (скопируйте запрос и ответ сервера и отправьте в запросе в поддержку их) — стоит просмотреть, поскольку ошибка странная.
Про таймаут: из плагинов используется только курьер? включены ли точки самовывоза?
-
+1Ну вот
логи ответа-запроса для случаев 500-ой ошибки не дали, на вопрос об используемых плагинах и точках продаж не ответили (для точек продаж в крайнем обновлении добавилось кеширование, должно уменьшить время ответа).
-
+1Владислав, спасибо за ваши ответы.
про 500 ошибку разобрались — это из-за обновления серверного оборудования.
С техподдержкой ведём беседу, они заботливо предлагают:
1. Не пользоваться плагинами, которые автоматически считают стоимость — из них мы используем ваши же «Курьерская доставка» и «Самовывоз». Считаю, что это неправильно по множеству причин и свою позицию описал техподдержке
2. Попросить Яндекс увеличить timeout для Маркета — осознавая тщетность этой просьбы, я всё же направил в Яндекс письмо и получил единственно логичный ответ: «Указанные таймауты являются глобальными в рамках Маркета и не могут быть изменены в индивидуальном порядке.»
Вот, кстати, новый список ошибок: https://yadi.sk/i/pa9zZjlcxwvVT
-
-
-
+2Добрый день.
Наблюдаем такую же проблему.
Постоянно вылетает Яндекс.
Из плагинов доставки установлены СДЭК и Боксберри.Сегодня прислали вот такое письмо:
Мы заметили, что у вас систематически возникают ошибки в обмене данных через API.Чтобы найти проблему, посмотрите лог запросов к вашему серверу.
Если при повторной проверке мы обнаружим такие же ошибки, нам придётся приостановить работу магазина до тех пор, пока вы не устраните причины их появления.Есть какое-нибудь решение?
I/O error on POST request for "https://SITE.ru/beruru_api/": Read timed out; nested exception is java.net.SocketTimeoutException: Read timed out
Эта тема в архиве. Добавление комментариев к ней отключено.
External HTTP access using RestTemplate is implemented in the Spring Boot controller.
A normal test was executed with JUnit, but RestClientException occurred and the end of the method could not be reached.
When I try to debug, I get the following error message, but I don’t know how to solve it.
What should I do about it?
I/O error on POST request for»External URL» ;: Connection refused: connect
@ RunWith (SpringRunner.class)
@SpringBootTest
public class SampleControllerTest {
private MockMvc mockMvc;
@InjectMocks
private SampleController controller;
@Before
public void setUp () throws Exception {
MockitoAnnotations.initMocks (this);
mockMvc = MockMvcBuilders.standaloneSetup (controller) .build ();
}
@Test
public void sample () throws Exception {
Map<String, String>map = new LinkedHashMap<String, String>();
MockRestServiceServer mockServer = MockRestServiceServer.createServer (new RestTemplate ());
mockServer
.expect (requestTo ("External URL"))
.andExpect (method (HttpMethod.POST))
.andRespond (withSuccess (map.toString (), MediaType.APPLICATION_JSON_UTF8));
mockMvc.perform (post ("/"))
.andExpect (status (). isOk ())
.andExpect (view (). name ("index"));
}
}
@ Controller
public class SampleController {
@RequestMapping (value = "/", method = RequestMethod.POST)
public ModelAndView index () {
ModelAndView modelAndView = new ModelAndView ();
MultiValueMap<String, String>formParams = new LinkedMultiValueMap<>();
formParams.add ("data", "data");
HttpHeaders httpHeaders = new HttpHeaders ();
httpHeaders.add (HttpHeaders.AUTHORIZATION, "Basic XXXXXXXXXX");
httpHeaders.add (HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE);
RequestEntity<MultiValueMap<String, String>>requestEntity = new RequestEntity<>(formParams, httpHeaders,
HttpMethod.POST, URI.create ("External URL"));
RestTemplate restTemplate = new RestTemplate ();
ResponseEntity<Map<String, String>>responseEntity = null;
try {
responseEntity = restTemplate.exchange (requestEntity, new ParameterizedTypeReference<Map<String, String>>() {});
} catch (RestClientException e) {
modelAndView.setViewName ("error");
return modelAndView;
}
modelAndView.setViewName ("index");
return modelAndView;
}
}
Hello,
In this application I have followed the FFDC Spring Boot example.
Please find below the environment, Entity, FFDC API Class, and the error stack trace:
I get the error when I try to call addCustomer method from FFDC Api class only (getCustomer works fine).
Please let me know if you need any other details.
====== Environment ======
Java 8
Spring Boot 2.3.3
Spring web
Spring Security Oauth2 2.1.0
httpClient 4.5.9
====== Entity =======
@AllArgsConstructor @NoArgsConstructor @Data @Builder public class FFDCCustomer { //private String id; private String branch; private String country; private String legalName; private String shortName; private String externalId; private String customerStatus; private boolean specialLoan; private boolean restricted; private boolean majorUnderwriter; private LegalAddress legalAddress; }
====== FFDC API =======
@Component public class FfdcApi { @Value("${ffdcapi.baseUrl}") private String baseUrl; @Autowired private OAuth2RestTemplate restTemplate; @Autowired private OAuth2ClientContext oAuth2ClientContext;
public FFDCCustomer getCustomer(String id) { UriComponents uriBuilder = UriComponentsBuilder .fromUriString(baseUrl + "/corporate/lending/customer/v1/customers/" + id) .build(); ResponseEntity<FFDCCustomer> response = restTemplate.exchange(uriBuilder.toUri(), HttpMethod.GET, null, FFDCCustomer.class); return response.getBody(); } public FFDCCustomer addCustomer(FFDCCustomer ffdcCustomer) { UriComponents uriBuilder = UriComponentsBuilder .fromUriString(baseUrl + "/corporate/lending/customer/v1/customers") .build(); ffdcCustomer.setExternalId("92933"); ObjectMapper mapper = new ObjectMapper(); ResponseEntity<FFDCCustomer> response = null; try { HttpHeaders headers = new HttpHeaders(); headers.setBearerAuth(oAuth2ClientContext.getAccessToken().getValue()); headers.setContentType(MediaType.APPLICATION_JSON); headers.setAccept(Arrays.asList(MediaType.ALL)); headers.set("Host", baseUrl); String jsonCustomer = mapper.writeValueAsString(ffdcCustomer); HttpEntity<String> requestEntity = new HttpEntity<>(jsonCustomer, headers); response = restTemplate.postForEntity(uriBuilder.toUri(),requestEntity, FFDCCustomer.class); } catch (JsonProcessingException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return response == null ? new FFDCCustomer() : ffdcCustomer; }
}
getCustomer method works without any problem.
addCustomer method throws the below error.
====== Error stack trace =======
org.springframework.web.client.ResourceAccessException: I/O error on POST request for «https://api.fusionfabric.cloud/corporate/lending/customer/v1/customers»: Connection reset; nested exception is javax.net.ssl.SSLException: Connection reset
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:748)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:714)
at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:467)
..
..
..
Caused by: java.net.SocketException: Connection reset
at java.base/java.net.SocketInputStream.read(SocketInputStream.java:186)
at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140)
at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:467)
at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:461)
at java.base/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70)
at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1145)
at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:832)
Thank you in advance for your help.