/**
  * {@inheritdoc}
  */
 public function process($item)
 {
     $entity = $this->findOrCreateObject($item);
     try {
         $this->updater->update($entity, $item);
     } catch (\InvalidArgumentException $exception) {
         $this->skipItemWithMessage($item, $exception->getMessage(), $exception);
     }
     $violations = $this->validator->validate($entity);
     if ($violations->count() > 0) {
         $this->objectDetacher->detach($entity);
         $this->skipItemWithConstraintViolations($item, $violations);
     }
     $rawParameters = $entity->getRawParameters();
     if (!empty($rawParameters)) {
         $job = $this->jobRegistry->get($entity->getJobName());
         $parameters = $this->jobParamsFactory->create($job, $rawParameters);
         $violations = $this->jobParamsValidator->validate($job, $parameters);
         if ($violations->count() > 0) {
             $this->objectDetacher->detach($entity);
             $this->skipItemWithConstraintViolations($item, $violations);
         }
     }
     return $entity;
 }
 /**
  * @param JobInstance $jobInstance
  * @param array       $validationGroups
  *
  * @return ConstraintViolationListInterface
  */
 protected function validateJobInstance(JobInstance $jobInstance, array $validationGroups)
 {
     $rawParameters = $jobInstance->getRawParameters();
     $job = $this->jobRegistry->get($jobInstance->getJobName());
     $jobParameters = $this->jobParametersFactory->create($job, $rawParameters);
     /** @var ConstraintViolationListInterface $jobParamsViolations */
     $jobParamsViolations = $this->jobParametersValidator->validate($job, $jobParameters, $validationGroups);
     /** @var ConstraintViolationListInterface $jobInstanceViolations */
     $jobInstanceViolations = $this->validator->validate($jobInstance, $validationGroups);
     foreach ($jobInstanceViolations as $violation) {
         $jobParamsViolations->add($violation);
     }
     return $jobParamsViolations;
 }