Index: grails-app/services/com/lemans/rmx/PricingManagerService.groovy =================================================================== diff -u -r058f21864db4b5f1835bb01b8b41386462815d0b -r7082de1fe36234e68c0d9fcd9531edfb5a1f530d --- grails-app/services/com/lemans/rmx/PricingManagerService.groovy (.../PricingManagerService.groovy) (revision 058f21864db4b5f1835bb01b8b41386462815d0b) +++ grails-app/services/com/lemans/rmx/PricingManagerService.groovy (.../PricingManagerService.groovy) (revision 7082de1fe36234e68c0d9fcd9531edfb5a1f530d) @@ -5,11 +5,16 @@ import com.lemans.pricing.PricingRequestService import com.lemans.pricing.PricingResponseService import grails.gorm.transactions.Transactional +import org.apache.http.client.config.RequestConfig +import org.apache.http.conn.ConnectTimeoutException +import org.apache.http.impl.client.CloseableHttpClient +import org.apache.http.impl.client.HttpClients import org.springframework.beans.factory.annotation.Autowired import org.springframework.http.HttpEntity import org.springframework.http.HttpHeaders import org.springframework.http.MediaType import org.springframework.http.ResponseEntity +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory import org.springframework.web.client.RestTemplate import javax.annotation.Resource @@ -33,6 +38,16 @@ RestTemplate restTemplate = new RestTemplate() HttpHeaders headers = new HttpHeaders() try { + RequestConfig requestConfig = RequestConfig.custom() + .setConnectTimeout(60000) // Connection timeout in milliseconds + .setSocketTimeout(60000) // Socket timeout in milliseconds + .build() + + CloseableHttpClient httpClient = HttpClients.custom() + .setDefaultRequestConfig(requestConfig) + .build() + + restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient)) List result = lines.collect { part -> new PricingRequestService(dealerCode, [part]) } String payload = new ObjectMapper().writer().writeValueAsString(result) log.debug('payload to to sent' + payload) @@ -42,7 +57,13 @@ String url = quotesRootUri + '/api/pricingEngine/price/priceCollection?ClientDataSource=' + quotesClientDataSource ResponseEntity response = restTemplate.exchange(url, org.springframework.http.HttpMethod.POST, entity, String.class) return PricingResponseService.Parser.parserMethod(response.getBody()) - } catch(Exception e) { + } catch (SocketTimeoutException | ConnectTimeoutException e) { + log.error('HttpClient Timeout Exception: ' + e.message) + PricingResponseService pricingResponseService = new PricingResponseService() + pricingResponseService.handlePricingError('error', 'Timeout', 'Timeout while connecting to the server(RMx), please contact helpdesk') + return pricingResponseService + } + catch(Exception e) { log.error(e.message) PricingResponseService pricingResponseService = new PricingResponseService() pricingResponseService.handlePricingError('error', 'Invalid pricing', 'Error while calculating yourDealerPrice, please contact helpdesk')