class CamundaClient {

    protected String wrapVIDRequest(String requestId, boolean isBaseVfModule, int recipeTimeout, String requestAction,
            String serviceInstanceId, String pnfCorrelationId, String vnfId, String vfModuleId, String volumeGroupId,
            String networkId, String configurationId, String serviceType, String vnfType, String vfModuleType,
            String networkType, String requestDetails, String apiVersion, boolean aLaCarte, String requestUri,
            String paramXsd, String instanceGroupId, boolean generateIdsOnly, String operationType) {
        String jsonReq = null;

        try {
            CamundaVIDRequest camundaRequest = new CamundaVIDRequest();
            CamundaInput serviceInput = new CamundaInput();
            CamundaInput host = new CamundaInput();
            CamundaInput requestIdInput = new CamundaInput();
            CamundaBooleanInput isBaseVfModuleInput = new CamundaBooleanInput();
            CamundaIntegerInput recipeTimeoutInput = new CamundaIntegerInput();
            CamundaInput requestActionInput = new CamundaInput();
            CamundaInput serviceInstanceIdInput = new CamundaInput();
            CamundaInput operationTypeInput = new CamundaInput();
            CamundaInput pnfCorrelationIdInput = new CamundaInput();
            CamundaInput vnfIdInput = new CamundaInput();
            CamundaInput vfModuleIdInput = new CamundaInput();
            CamundaInput volumeGroupIdInput = new CamundaInput();
            CamundaInput networkIdInput = new CamundaInput();
            CamundaInput configurationIdInput = new CamundaInput();
            CamundaInput serviceTypeInput = new CamundaInput();
            CamundaInput vnfTypeInput = new CamundaInput();
            CamundaInput vfModuleTypeInput = new CamundaInput();
            CamundaInput networkTypeInput = new CamundaInput();
            CamundaBooleanInput aLaCarteInput = new CamundaBooleanInput();
            CamundaInput apiVersionInput = new CamundaInput();
            CamundaInput requestUriInput = new CamundaInput();
            CamundaInput recipeParamsInput = new CamundaInput();
            CamundaInput instanceGroupIdInput = new CamundaInput();
            CamundaBooleanInput generateIds = new CamundaBooleanInput();

            operationTypeInput.setValue(StringUtils.defaultString(operationType));
            requestIdInput.setValue(StringUtils.defaultString(requestId));
            isBaseVfModuleInput.setValue(isBaseVfModule);
            recipeTimeoutInput.setValue(recipeTimeout);
            requestActionInput.setValue(StringUtils.defaultString(requestAction));
            serviceInstanceIdInput.setValue(StringUtils.defaultString(serviceInstanceId));
            pnfCorrelationIdInput.setValue(StringUtils.defaultString(pnfCorrelationId));
            vnfIdInput.setValue(StringUtils.defaultString(vnfId));
            vfModuleIdInput.setValue(StringUtils.defaultString(vfModuleId));
            volumeGroupIdInput.setValue(StringUtils.defaultString(volumeGroupId));
            networkIdInput.setValue(StringUtils.defaultString(networkId));
            configurationIdInput.setValue(StringUtils.defaultString(configurationId));
            serviceTypeInput.setValue(StringUtils.defaultString(serviceType));
            vnfTypeInput.setValue(StringUtils.defaultString(vnfType));
            vfModuleTypeInput.setValue(StringUtils.defaultString(vfModuleType));
            networkTypeInput.setValue(StringUtils.defaultString(networkType));
            aLaCarteInput.setValue(aLaCarte);
            apiVersionInput.setValue(StringUtils.defaultString(apiVersion));
            requestUriInput.setValue(StringUtils.defaultString(requestUri));
            recipeParamsInput.setValue(paramXsd);
            instanceGroupIdInput.setValue(StringUtils.defaultString(instanceGroupId));
            generateIds.setValue(generateIdsOnly);

            serviceInput.setValue(requestDetails);
            camundaRequest.setServiceInput(serviceInput);
            camundaRequest.setHost(host);
            camundaRequest.setRequestId(requestIdInput);
            camundaRequest.setMsoRequestId(requestIdInput);
            camundaRequest.setIsBaseVfModule(isBaseVfModuleInput);
            camundaRequest.setRecipeTimeout(recipeTimeoutInput);
            camundaRequest.setRequestAction(requestActionInput);
            camundaRequest.setServiceInstanceId(serviceInstanceIdInput);
            camundaRequest.setOperationType(operationTypeInput);
            camundaRequest.setPnfCorrelationId(pnfCorrelationIdInput);
            camundaRequest.setVnfId(vnfIdInput);
            camundaRequest.setVfModuleId(vfModuleIdInput);
            camundaRequest.setVolumeGroupId(volumeGroupIdInput);
            camundaRequest.setNetworkId(networkIdInput);
            camundaRequest.setConfigurationId(configurationIdInput);
            camundaRequest.setServiceType(serviceTypeInput);
            camundaRequest.setVnfType(vnfTypeInput);
            camundaRequest.setVfModuleType(vfModuleTypeInput);
            camundaRequest.setNetworkType(networkTypeInput);
            camundaRequest.setaLaCarte(aLaCarteInput);
            camundaRequest.setApiVersion(apiVersionInput);
            camundaRequest.setRequestUri(requestUriInput);
            camundaRequest.setRecipeParams(recipeParamsInput);
            camundaRequest.setInstanceGroupId(instanceGroupIdInput);
            camundaRequest.setGenerateIds(generateIds);

            ObjectMapper mapper = new ObjectMapper();
            mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);

            jsonReq = mapper.writeValueAsString(camundaRequest);
            logger.trace("request body is {}", jsonReq);
        } catch (Exception e) {
            logger.error("Error in wrapVIDRequest", e);
        }
        return jsonReq;
    }

}