class EtsiSol003AdapterController {

    @PostMapping(value = "/vnfs/{vnfId}")
    public ResponseEntity<CreateVnfResponse> vnfCreate(
            @ApiParam(value = "The identifier of the VNF. This must be the vnf-id of an existing generic-vnf in AAI.",
                    required = true) @PathVariable("vnfId") final String vnfId,
            @ApiParam(value = "VNF creation parameters",
                    required = true) @Valid @RequestBody final CreateVnfRequest createVnfRequest,
            @ApiParam(
                    value = "Used to track REST requests for logging purposes. Identifies a single top level invocation of ONAP",
                    required = false) @RequestHeader(value = ONAPLogConstants.Headers.REQUEST_ID,
                            required = false) final String requestId,
            @ApiParam(
                    value = "Used to track REST requests for logging purposes. Identifies the client application user agent or user invoking the API",
                    required = false) @RequestHeader(value = ONAPLogConstants.Headers.PARTNER_NAME,
                            required = false) final String partnerName,
            @ApiParam(
                    value = "Used to track REST requests for logging purposes. Identifies a single invocation of a single component",
                    required = false) @RequestHeader(value = ONAPLogConstants.Headers.INVOCATION_ID,
                            required = false) final String invocationId) {

        setLoggingMDCs(requestId, partnerName, invocationId);

        logger.info("REST request vnfCreate with body: {}", createVnfRequest);

        try {
            final CreateVnfResponse createVnfResponse = lifecycleManager.createVnf(vnfId, createVnfRequest);
            return new ResponseEntity<>(createVnfResponse, HttpStatus.ACCEPTED);
        } finally {
            clearLoggingMDCs();
        }
    }

    @Autowired  EtsiSol003AdapterController(final LifecycleManager lifecycleManager, final JobManager jobManager);

}