WebClient #14

Open
wasiullah.khan wants to merge 6 commits from WebClient into dev-pending-20-01-2026

@ -2,12 +2,10 @@ package com.mfsys.aconnect.client.service;
import com.mfsys.aconnect.client.dto.DepositCancellationDTO;
import com.mfsys.aconnect.client.dto.GLCancellationDTO;
import com.mfsys.aconnect.configuration.config.WebClientConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.Map;
import static com.mfsys.common.configuration.constant.AconnectURI.ACONNECT;
import static com.mfsys.common.configuration.constant.AconnectURI.GENERALLEDGER;
@ -21,12 +19,12 @@ public class CancellationTransactionService {
@Value("${app.generalledger.uri}")
private String generalledgerURI;
private final RestTemplate restTemplate;
public CancellationTransactionService(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
private final WebClientConfig webClientConfig;
public CancellationTransactionService(WebClientConfig webClientConfig) {
this.webClientConfig = webClientConfig;
}
public Object processDepositCancellationTransaction(DepositCancellationDTO depositCancellationDTO, String tokenHeader) {
public ResponseEntity<Object> processDepositCancellationTransaction(DepositCancellationDTO depositCancellationDTO, String tokenHeader) {
String porOrgacode = depositCancellationDTO.getPorOrgacode();
String url = depositURI + "/deposit" + "/organizations/" + depositCancellationDTO.getPorOrgacode() +
"/transactions" + ACONNECT + "/cancel/nodes/" + depositCancellationDTO.getNodeId() +
@ -37,20 +35,16 @@ public class CancellationTransactionService {
headers.set("POR_ORGACODE", porOrgacode);
headers.set("SUS_USERCODE", depositCancellationDTO.getSusUsercode());
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON));
HttpEntity<DepositCancellationDTO> entity = new HttpEntity<>(depositCancellationDTO, headers);
ResponseEntity<Map> response = restTemplate.exchange(
return webClientConfig.post(
url,
HttpMethod.POST,
entity,
Map.class
depositCancellationDTO,
headers
);
return ResponseEntity.status(response.getStatusCode()).body(response.getBody());
}
public Object processGLCancellationTransaction(GLCancellationDTO glCancellationDTO, String tokenHeader) {
public ResponseEntity<Object> processGLCancellationTransaction(GLCancellationDTO glCancellationDTO, String tokenHeader) {
String porOrgacode = glCancellationDTO.getPorOrgacode();
String url = generalledgerURI + GENERALLEDGER + "/organizations/" + glCancellationDTO.getPorOrgacode() +
"/transactions" + ACONNECT + "/cancel/nodes/" + glCancellationDTO.getNodeId() +
@ -61,16 +55,13 @@ public class CancellationTransactionService {
headers.set("POR_ORGACODE", porOrgacode);
headers.set("SUS_USERCODE", glCancellationDTO.getSusUsercode());
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON));
HttpEntity<GLCancellationDTO> entity = new HttpEntity<>(glCancellationDTO, headers);
ResponseEntity<Map> response = restTemplate.exchange(
return webClientConfig.post(
url,
HttpMethod.POST,
entity,
Map.class
glCancellationDTO,
headers
);
return ResponseEntity.status(response.getStatusCode()).body(response.getBody());
}
}

@ -4,9 +4,7 @@ import com.mfsys.aconnect.client.dto.DepositRejectDTO;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.Map;
import com.mfsys.aconnect.configuration.config.WebClientConfig;
import static com.mfsys.common.configuration.constant.AconnectURI.ACONNECT;
@ -19,12 +17,12 @@ public class RejectTransactionService {
@Value("${app.generalledger.uri}")
private String generalledgerURI;
private final RestTemplate restTemplate;
public RejectTransactionService(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
private final WebClientConfig webClientConfig;
public RejectTransactionService(WebClientConfig webClientConfig) {
this.webClientConfig = webClientConfig;
}
public Object processDepositRejectionTransaction(DepositRejectDTO rejectRequest, String tokenHeader) {
public ResponseEntity<Object> processDepositRejectionTransaction(DepositRejectDTO rejectRequest, String tokenHeader) {
String porOrgacode = rejectRequest.getPorOrgacode();
String url = depositURI + "/deposit/" + "/organizations/" + porOrgacode + "/transactions" + ACONNECT +"/rejection";
HttpHeaders headers = new HttpHeaders();
@ -33,19 +31,14 @@ public class RejectTransactionService {
headers.set("SUS_USERCODE", rejectRequest.getSusUsercode());
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<DepositRejectDTO> entity = new HttpEntity<>(rejectRequest, headers);
ResponseEntity<Map> response = restTemplate.exchange(
return webClientConfig.post(
url,
HttpMethod.POST,
entity,
Map.class
rejectRequest,
headers
);
return ResponseEntity.status(response.getStatusCode()).body(response.getBody());
}
public Object processGLRejectionTransaction(DepositRejectDTO rejectRequest, String tokenHeader) {
public ResponseEntity<Object> processGLRejectionTransaction(DepositRejectDTO rejectRequest, String tokenHeader) {
String porOrgacode = rejectRequest.getPorOrgacode();
String url = generalledgerURI + "/generalledger/" + "/organizations/" + porOrgacode + "/transactions" + ACONNECT +"/rejection";
HttpHeaders headers = new HttpHeaders();
@ -54,16 +47,11 @@ public class RejectTransactionService {
headers.set("SUS_USERCODE", rejectRequest.getSusUsercode());
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<DepositRejectDTO> entity = new HttpEntity<>(rejectRequest, headers);
ResponseEntity<Map> response = restTemplate.exchange(
return webClientConfig.post(
url,
HttpMethod.POST,
entity,
Map.class
rejectRequest,
headers
);
return ResponseEntity.status(response.getStatusCode()).body(response.getBody());
}
}

@ -5,9 +5,7 @@ import com.mfsys.aconnect.client.dto.GLReversalDTO;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.Map;
import com.mfsys.aconnect.configuration.config.WebClientConfig;
import static com.mfsys.common.configuration.constant.AconnectURI.ACONNECT;
@ -20,15 +18,17 @@ public class ReversalTransactionService {
@Value("${app.generalledger.uri}")
private String generalledgerURI;
private final RestTemplate restTemplate;
public ReversalTransactionService(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
private final WebClientConfig webClientConfig;
public ReversalTransactionService(WebClientConfig webClientConfig) {
this.webClientConfig = webClientConfig;
}
public Object processDepositReversalTransaction(DepositReversalDTO reversalRequest, String tokenHeader) {
public ResponseEntity<Object> processDepositReversalTransaction(DepositReversalDTO reversalRequest, String tokenHeader) {
String porOrgacode = reversalRequest.getPorOrgacode();
String nodeID = reversalRequest.getNodeId();
String sgtGntrtranlink = reversalRequest.getSgtGntrtranlink();
String url = depositURI + "/deposit/" + "/organizations/" + porOrgacode + "/transactions" + ACONNECT + "/reversals/nodes/" + nodeID + "/trannums/" + sgtGntrtranlink;
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", tokenHeader);
@ -36,19 +36,15 @@ public class ReversalTransactionService {
headers.set("SUS_USERCODE", reversalRequest.getSusUsercode());
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<DepositReversalDTO> entity = new HttpEntity<>(reversalRequest, headers);
ResponseEntity<Map> response = restTemplate.exchange(
return webClientConfig.post(
url,
HttpMethod.POST,
entity,
Map.class
reversalRequest,
headers
);
return ResponseEntity.status(response.getStatusCode()).body(response.getBody());
}
public Object processGLReversalTransaction(GLReversalDTO reversalRequest, String tokenHeader) {
public ResponseEntity<Object> processGLReversalTransaction(GLReversalDTO reversalRequest, String tokenHeader) {
String porOrgacode = reversalRequest.getPorOrgacode();
String nodeID = reversalRequest.getNodeId();
String sgtGntrtranlink = reversalRequest.getSgtGntrtranlink();
@ -60,16 +56,11 @@ public class ReversalTransactionService {
headers.set("SUS_USERCODE", reversalRequest.getSusUsercode());
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<GLReversalDTO> entity = new HttpEntity<>(reversalRequest, headers);
ResponseEntity<Map> response = restTemplate.exchange(
return webClientConfig.post(
url,
HttpMethod.POST,
entity,
Map.class
reversalRequest,
headers
);
return ResponseEntity.status(response.getStatusCode()).body(response.getBody());
}
}

@ -2,12 +2,10 @@ package com.mfsys.aconnect.client.service;
import com.mfsys.aconnect.client.dto.DepositAuthorizationRequest;
import com.mfsys.aconnect.client.dto.GLAuthorizationDTO;
import com.mfsys.aconnect.configuration.config.WebClientConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.Map;
import static com.mfsys.common.configuration.constant.AconnectURI.ACONNECT;
@ -20,12 +18,11 @@ public class TransactionAuthorizationService {
@Value("${app.generalledger.uri}")
private String generalledgerURI;
private final RestTemplate restTemplate;
public TransactionAuthorizationService(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
private final WebClientConfig webClientConfig;
public TransactionAuthorizationService(WebClientConfig webClientConfig) {
this.webClientConfig = webClientConfig;}
public Object processDepositAuthTransaction(DepositAuthorizationRequest authorizationRequest, String tokenHeader) {
public ResponseEntity<Object> processDepositAuthTransaction(DepositAuthorizationRequest authorizationRequest, String tokenHeader) {
String porOrgacode = authorizationRequest.getPorOrgacode();
String url = depositURI + "/deposit/" + "/organizations/" + porOrgacode + "/transactions" + ACONNECT + "/authorizations";
HttpHeaders headers = new HttpHeaders();
@ -35,19 +32,14 @@ public class TransactionAuthorizationService {
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON));
HttpEntity<DepositAuthorizationRequest> entity = new HttpEntity<>(authorizationRequest, headers);
ResponseEntity<Map> response = restTemplate.exchange(
return webClientConfig.post(
url,
HttpMethod.POST,
entity,
Map.class
authorizationRequest,
headers
);
return ResponseEntity.status(response.getStatusCode()).body(response.getBody());
}
public Object processGLAuthTransaction(GLAuthorizationDTO authorizationRequest, String tokenHeader) {
public ResponseEntity<Object> processGLAuthTransaction(GLAuthorizationDTO authorizationRequest, String tokenHeader) {
String porOrgacode = authorizationRequest.getPorOrgacode();
String url = generalledgerURI + "/generalledger/" + "/organizations/" + porOrgacode + "/transactions/authorizations";
HttpHeaders headers = new HttpHeaders();
@ -56,16 +48,11 @@ public class TransactionAuthorizationService {
headers.set("SUS_USERCODE", authorizationRequest.getSusUsercode());
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<GLAuthorizationDTO> entity = new HttpEntity<>(authorizationRequest, headers);
ResponseEntity<Map> response = restTemplate.exchange(
return webClientConfig.post(
url,
HttpMethod.POST,
entity,
Map.class
authorizationRequest,
headers
);
return ResponseEntity.status(response.getStatusCode()).body(response.getBody());
}
}

@ -46,14 +46,15 @@ public class TransactionLogService {
}
@Transactional
public void updateResponseFields(Long logId, Map<String, Object> response) {
transactionLogRepository.findById(logId).ifPresent(log -> {
if (response == null) return;
Object argsObj = response.get("arguments");
if (!(argsObj instanceof List<?> args) || args.isEmpty()) return;
public void updateResponseFields(Long logId, Object responseObj) {
if (!(responseObj instanceof Map<?, ?> response)) return;
Object argsObj = response.get("arguments");
if (!(argsObj instanceof List<?> args) || args.isEmpty()) return;
String transactionId = args.get(0).toString();
String transactionId = args.get(0).toString();
transactionLogRepository.findById(logId).ifPresent(log -> {
log.setTransactionID(transactionId);
});
}

@ -3,13 +3,11 @@ package com.mfsys.aconnect.client.service;
import com.mfsys.aconnect.client.dto.*;
import com.mfsys.aconnect.client.exception.*;
import com.mfsys.aconnect.client.model.TransactionLog;
import com.mfsys.aconnect.configuration.config.WebClientConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.http.HttpHeaders;
@ -29,10 +27,10 @@ public class TransactionService {
@Value("${app.generalledger.uri}")
private String generalledgerURI;
private final RestTemplate restTemplate;
private final WebClientConfig webClientService;
private final TransactionLogService transactionLogService;
public TransactionService(RestTemplate restTemplate, TransactionLogService transactionLogService) {
this.restTemplate = restTemplate;
public TransactionService(WebClientConfig webClientService, TransactionLogService transactionLogService) {
this.webClientService = webClientService;
this.transactionLogService = transactionLogService;
}
@ -49,8 +47,7 @@ public class TransactionService {
headers.set("SUS_USERCODE", userCode);
headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON));
HttpEntity<Void> entity = new HttpEntity<>(headers);
ResponseEntity<Map> response = restTemplate.exchange(url,HttpMethod.GET,entity,Map.class);
ResponseEntity<Object> response = webClientService.get(url, headers);
return ResponseEntity.status(response.getStatusCode()).body(response.getBody());
}
@ -81,15 +78,12 @@ public class TransactionService {
headers.set("SUS_USERCODE", accountGLTransactionRequest.getSgtGntrcreateusr());
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON));
HttpEntity<AccountGLTransactionRequest> entity = new HttpEntity<>(accountGLTransactionRequest, headers);
TransactionLog log = transactionLogService.createTransactionLog(accountGLTransactionRequest, url);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<Map> response = restTemplate.exchange(
ResponseEntity<Object> response = webClientService.post(
url,
HttpMethod.POST,
entity,
Map.class
accountGLTransactionRequest,
headers
);
if (response.getBody() != null) {
transactionLogService.updateResponseFields(log.getLogId(), response.getBody());
@ -136,15 +130,12 @@ public class TransactionService {
headers.set("SUS_USERCODE", gLtoGLRequest.getSgtGntrcreateusr());
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON));
HttpEntity<GLtoGLRequest> entity = new HttpEntity<>(gLtoGLRequest, headers);
RestTemplate restTemplate = new RestTemplate();
TransactionLog log = transactionLogService.createGLtoGLTransactionLog(gLtoGLRequest, url);
ResponseEntity<Map> response = restTemplate.exchange(
ResponseEntity<Object> response = webClientService.post(
url,
HttpMethod.POST,
entity,
Map.class
gLtoGLRequest,
headers
);
if (response.getBody() != null) {
transactionLogService.updateResponseFields(log.getLogId(), response.getBody());
@ -189,15 +180,12 @@ public class TransactionService {
headers.set("SUS_USERCODE", accountToAccountDTO.getSgtGntrcreateusr());
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON));
HttpEntity<AccountToAccountDTO> entity = new HttpEntity<>(accountToAccountDTO, headers);
RestTemplate restTemplate = new RestTemplate();
TransactionLog log = transactionLogService.createAccToAccTransactionLog(accountToAccountDTO, url);
ResponseEntity<Map> response = restTemplate.exchange(
ResponseEntity<Object> response = webClientService.post(
url,
HttpMethod.POST,
entity,
Map.class
accountToAccountDTO,
headers
);
if (response.getBody() != null) {
transactionLogService.updateResponseFields(log.getLogId(), response.getBody());
@ -229,16 +217,13 @@ public class TransactionService {
headers.set("SUS_USERCODE", glToAccountDTO.getSgtGntrcreateusr());
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON));
HttpEntity<GlToAccountDTO> entity = new HttpEntity<>(glToAccountDTO, headers);
RestTemplate restTemplate = new RestTemplate();
TransactionLog log = transactionLogService.createGLToAccTransactionLog(glToAccountDTO, url);
ResponseEntity<Map> response = restTemplate.exchange(
ResponseEntity<Object> response = webClientService.post(
url,
HttpMethod.POST,
entity,
Map.class
glToAccountDTO,
headers
);
if (response.getBody() != null) {
transactionLogService.updateResponseFields(log.getLogId(), response.getBody());

@ -1,11 +1,11 @@
package com.mfsys.aconnect.client.service;
import com.mfsys.aconnect.configuration.config.WebClientConfig;
import org.springframework.util.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import java.util.*;
@ -19,10 +19,9 @@ public class UploadDocumentService {
@Value("${app.crm.uri}")
private String crmURI;
private final RestTemplate restTemplate;
public UploadDocumentService(RestTemplate restTemplate){
this.restTemplate = restTemplate;
private final WebClientConfig webClientConfig;
public UploadDocumentService(WebClientConfig webClientConfig){
this.webClientConfig = webClientConfig;
}
public ResponseEntity<Map<String, String>> depositCacheFiles(
@ -44,12 +43,10 @@ public class UploadDocumentService {
body.add("file", file.getResource());
}
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);
return restTemplate.exchange(
return webClientConfig.postMultipart(
url,
HttpMethod.POST,
requestEntity,
body,
headers,
new ParameterizedTypeReference<Map<String, String>>() {}
);
}
@ -73,12 +70,10 @@ public class UploadDocumentService {
body.add("file", file.getResource());
}
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);
return restTemplate.exchange(
return webClientConfig.postMultipart(
url,
HttpMethod.POST,
requestEntity,
body,
headers,
new ParameterizedTypeReference<Map<String, String>>() {}
);
}

@ -1,23 +1,123 @@
package com.mfsys.aconnect.configuration.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.MultiValueMap;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.reactive.function.client.WebClientResponseException;
@Configuration
@Service
public class WebClientConfig {
private final String baseUrl = "http://localhost:8080/digitalkisaan";
private final WebClient webClient = WebClient.builder().build();
public ResponseEntity<Object> post(String url, Object body, HttpHeaders headers) {
try {
return webClient
.post()
.uri(url)
.headers(h -> h.addAll(headers))
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
.bodyValue(body)
.retrieve()
.toEntity(Object.class)
.block();
} catch (WebClientResponseException ex){
return buildErrorResponse(ex);
}
}
public <T> ResponseEntity<T> postMultipart(String url, MultiValueMap<String, Object> body, HttpHeaders headers, ParameterizedTypeReference<T> responseType) {
try {
return webClient
.post()
.uri(url)
.headers(h -> h.addAll(headers))
.contentType(MediaType.MULTIPART_FORM_DATA)
.body(BodyInserters.fromMultipartData(body))
.retrieve()
.toEntity(responseType)
.block();
} catch (WebClientResponseException ex) {
return buildErrorResponseTyped(ex);
}
}
public ResponseEntity<Object> get(String url, HttpHeaders headers) {
try {
return webClient
.get()
.uri(url)
.headers(h -> h.addAll(headers))
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.toEntity(Object.class)
.block();
} catch (WebClientResponseException ex){
return buildErrorResponse(ex);
}
}
public ResponseEntity<Object> put(String url, Object body, HttpHeaders headers) {
try {
return webClient
.put()
.uri(url)
.headers(h -> h.addAll(headers))
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
.bodyValue(body)
.retrieve()
.toEntity(Object.class)
.block();
} catch (WebClientResponseException ex){
return buildErrorResponse(ex);
}
}
public ResponseEntity<Object> delete(String url, HttpHeaders headers) {
try {
return webClient
.delete()
.uri(url)
.headers(h -> h.addAll(headers))
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.toEntity(Object.class)
.block();
} catch (WebClientResponseException ex) {
return buildErrorResponse(ex);
}
}
private ResponseEntity<Object> buildErrorResponse(WebClientResponseException ex){
Object errorBody;
try{
errorBody = ex.getResponseBodyAs(Object.class);
}catch (Exception e) {
errorBody = ex.getResponseBodyAsString();
}
return ResponseEntity
.status(ex.getStatusCode())
.contentType(MediaType.APPLICATION_JSON)
.body(errorBody);
}
@Bean
public WebClient webClient(WebClient.Builder builder) {
return builder
.baseUrl(baseUrl) // Set the base URL for all requests
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) // Set a default content type
.defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE) // Set a default accept header
.build();
}
private <T> ResponseEntity<T> buildErrorResponseTyped(WebClientResponseException ex) {
T errorBody;
try {
errorBody = (T) ex.getResponseBodyAs(Object.class);
} catch (Exception e) {
errorBody = (T) ex.getResponseBodyAsString();
}
return ResponseEntity
.status(ex.getStatusCode())
.contentType(MediaType.APPLICATION_JSON)
.body(errorBody);
}
}

Loading…
Cancel
Save