class MsoVnfAdapterAsyncImpl implements MsoVnfAdapterAsync {

    @Override
    public void createVnfA(String cloudSiteId, String cloudOwner, String tenantId, String vnfType, String vnfVersion,
            String vnfName, String requestType, String volumeGroupHeatStackId, Map<String, Object> inputs,
            Boolean failIfExists, Boolean backout, Boolean enableBridge, String messageId, MsoRequest msoRequest,
            String notificationUrl) {

        logger.info("{} createVnfA", MessageEnum.RA_ASYNC_CREATE_VNF);
        // Synchronous Web Service Outputs
        Holder<String> vnfId = new Holder<>();
        Holder<Map<String, String>> outputs = new Holder<>();
        Holder<VnfRollback> vnfRollback = new Holder<>();

        try {
            vnfImpl.createVnf(cloudSiteId, cloudOwner, tenantId, vnfType, vnfVersion, vnfName, requestType,
                    volumeGroupHeatStackId, inputs, failIfExists, backout, enableBridge, msoRequest, vnfId, outputs,
                    vnfRollback);
        } catch (VnfException e) {
            logger.error("{} {} VnfException in createVnfA ", MessageEnum.RA_CREATE_VNF_ERR,
                    ErrorCode.BusinessProcessError.getValue(), e);
            org.onap.so.adapters.vnf.async.client.MsoExceptionCategory exCat = null;
            String eMsg = null;
            try {
                eMsg = e.getFaultInfo().getMessage();
                exCat = org.onap.so.adapters.vnf.async.client.MsoExceptionCategory
                        .fromValue(e.getFaultInfo().getCategory().name());
            } catch (Exception e1) {
                logger.error("{} {} Exception - Fault info ", MessageEnum.RA_FAULT_INFO_EXC,
                        ErrorCode.BusinessProcessError.getValue(), e1);
            }
            // Build and send Asynchronous error response
            try {
                VnfAdapterNotify notifyPort = getNotifyEP(notificationUrl);
                notifyPort.createVnfNotification(messageId, false, exCat, eMsg, null, null, null);
            } catch (Exception e1) {
                logger.error("{} {} Exception sending createVnf notification ", MessageEnum.RA_SEND_VNF_NOTIF_ERR,
                        ErrorCode.BusinessProcessError.getValue(), e1);
            }
            logger.info(LoggingAnchor.ONE, MessageEnum.RA_ASYNC_CREATE_VNF_COMPLETE);
            return;
        }
        logger.debug("Async Create VNF: {} VnfId:{}", vnfName, vnfId.value);
        // Build and send Asynchronous response
        try {
            VnfAdapterNotify notifyPort = getNotifyEP(notificationUrl);
            notifyPort.createVnfNotification(messageId, true, null, null, vnfId.value, copyCreateOutputs(outputs),
                    copyVrb(vnfRollback));
        } catch (Exception e) {
            logger.error("{} {} Exception sending createVnf notification ", MessageEnum.RA_SEND_VNF_NOTIF_ERR,
                    ErrorCode.BusinessProcessError.getValue(), e);
        }
        logger.info("{} createVnfA", MessageEnum.RA_ASYNC_CREATE_VNF_COMPLETE);
        return;
    }

}