1

I have a Java Program which has Completable Future. It does async calls. I do not want this. I want to convert this to normal.

When this method is being called, then there is completable future which is used. Need to get rid of of completable future.

I can provide other information also, if needed. Can I simply remove futures.add(CompletableFuture.supplyAsync(() from the code? How to handle response and error?

private void getClockRequestList(String createdBy, String capacityType, List<CompletableFuture<String>> futures,
            ResourceHierarchy rA, int[] clock_ids, Boolean checkIfCreatingClock, String url)
            throws JsonProcessingException {
        for (int clockid : clock_ids) {
            String clockRequest = requestMapperImpl.getClockRequest(createdBy, capacityType, String.valueOf(clockid),
                    rA, checkIfCreatingClock);
            futures.add(CompletableFuture.supplyAsync(() -> {
                String response = null;
                try {
                    response = genericRestClientImp.httpPostData(clockRequest, url);
                    logger.info("Response from EAM is: {}",response);
                } catch (IOException error) {
                    logger.error(error);
                    throw new RuntimeException(error);
                }
                logger.info("Response from EAM is: {}",response);
                return response;
            }).handle((response, error) -> {
                if (response != null) {

                    if (checkIfCreatingClock) {

                        if (response.contains(AppConstant.FAILURE_MSG)) {
                            logger.info(responseMapperImpl.responseMessageClock(AppConstant.FAILURE, response, rA,
                                    clockid));
                            return responseMapperImpl.responseMessageClock(AppConstant.FAILURE, response, rA, clockid);
                        }

                        else if (response.contains(AppConstant.STATUS_404)) {
                            logger.info(responseMapperImpl.responseMessageClock(AppConstant.STATUS_404, response, rA,
                                    clockid));
                            return responseMapperImpl.responseMessageClock(AppConstant.STATUS_404, response, rA,
                                    clockid);

                        } else if (response.contains(AppConstant.SUCCESS_MSG)) {
                            logger.info(responseMapperImpl.responseMessageClock(AppConstant.SUCCESS, response, rA,
                                    clockid));
                            return responseMapperImpl.responseMessageClock(AppConstant.SUCCESS, response, rA, clockid);
                        } else {
                            logger.info(
                                    responseMapperImpl.responseMessageClock(AppConstant.ERROR, response, rA, clockid));
                            return responseMapperImpl.responseMessageClock(AppConstant.ERROR, response, rA, clockid);
                        }

                    } else {

                        if (response.contains(AppConstant.SUCCESS)
                                || response.contains(StringUtils.capitalize(AppConstant.SUCCESS))) {
                            logger.info(responseMapperImpl.responseMessageTotalCapacity(AppConstant.SUCCESS, response,
                                    rA, clockid));
                            return responseMapperImpl.responseMessageTotalCapacity(AppConstant.SUCCESS, response, rA,
                                    clockid);
                        }   else if (response.contains(AppConstant.FAILURE)
                                || response.contains(StringUtils.capitalize(AppConstant.FAILURE))) {        
                            logger.info(responseMapperImpl.responseMessageTotalCapacity(AppConstant.FAILURE, response, rA,
                                    clockid));
                            return responseMapperImpl.responseMessageTotalCapacity(AppConstant.FAILURE, response, rA, clockid);             
                        }
                        else  {
                            logger.info(responseMapperImpl.responseMessageTotalCapacity(AppConstant.ERROR, response, rA,
                                    clockid));
                            return responseMapperImpl.responseMessageTotalCapacity(AppConstant.ERROR, response, rA,
                                    clockid);
                        }
                    

                    }

                } else {
                    ErrorResponse errorResponse = new ErrorResponse();
                    ResponseStatusMsg responseStatusMsg = new ResponseStatusMsg();

                    responseStatusMsg.setStatusCode(HttpStatus.NOT_FOUND.value());
                    errorResponse.setClockId(clockid);
                    errorResponse.setResourceId(rA.getResourceID());
                    responseStatusMsg.setError("Failure in getting response from the "+url);
                    errorResponse.setResponse(responseStatusMsg);
                    List<ErrorResponse> errorList = new ArrayList();
                    errorList.add(errorResponse);
                    responseObject.setError(errorList);
                    logger.info(responseObject.toString());
                    return responseObject.toString();
                }

            }));
        }
    }
  • I think the issue is you are trying to use the numerical value generator for string type. https://stackoverflow.com/a/37749564/767949 might help you. – null Sep 17 '21 at 05:04

0 Answers0