class SDNCRestClient {

    @Async
    public void executeRequest(SDNCAdapterRequest bpelRequest) {

        logger.debug("BPEL Request: {}", bpelRequest);

        // Added delay to allow completion of create request to SDNC
        // before executing activate of create request.
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            logger.error(LoggingAnchor.FOUR, MessageEnum.BPMN_GENERAL_EXCEPTION.toString(), "SDNC",
                    ErrorCode.UnknownError.getValue(), "Exception processing request to SDNC", e);

            Thread.currentThread().interrupt();
        }

        String bpelReqId = bpelRequest.getRequestHeader().getRequestId();
        String callbackUrl = bpelRequest.getRequestHeader().getCallbackUrl();
        String msoAction = bpelRequest.getRequestHeader().getMsoAction();

        String sdncReqBody = null;

        RequestTunables rt = new RequestTunables(bpelReqId, msoAction, bpelRequest.getRequestHeader().getSvcOperation(),
                bpelRequest.getRequestHeader().getSvcAction());
        rt = tunablesMapper.setTunables(rt);
        rt.setSdncaNotificationUrl(env.getProperty(Constants.MY_URL_PROP));

        if ("POST".equals(rt.getReqMethod())) {
            Node node = (Node) bpelRequest.getRequestData();
            Document reqDoc = node.getOwnerDocument();
            if (Constants.MSO_ACTION_LCM.equals(msoAction)) {
                sdncReqBody = Utils.genSdncLcmReq(reqDoc, rt);
            } else if (Constants.MSO_ACTION_MDONS.equals(msoAction)) {
                sdncReqBody = Utils.genOpticalSdncReq(reqDoc, rt);
            } else {
                sdncReqBody = Utils.genSdncReq(reqDoc, rt);
            }
        } else if ("PUT".equals(rt.getReqMethod())) {
            Node node = (Node) bpelRequest.getRequestData();
            Document reqDoc = node.getOwnerDocument();
            sdncReqBody = Utils.genSdncPutReq(reqDoc, rt);
        }
        SDNCResponse sdncResp = getSdncResp(sdncReqBody, rt);
        logger.debug("Got the SDNC Response: {}", sdncResp.getSdncRespXml());
        sendRespToBpel(callbackUrl, sdncResp);
    }

}