/**
  * @param IncomingPhysicalMessageContext $context
  * @param callable                       $next
  */
 public function invoke($context, callable $next)
 {
     $physicalMessage = $context->getMessage();
     $logicalMessage = $this->extractWithExceptionHandling($physicalMessage);
     if (!$logicalMessage) {
         throw new MessageDeserializationException($physicalMessage->getMessageId());
     }
     $next($this->incomingContextFactory->createLogicalMessageContext($logicalMessage, $context));
 }
 /**
  * @param IncomingPhysicalMessageContext $context
  * @param callable                       $next
  */
 public function invoke($context, callable $next)
 {
     $mutatorIds = $this->mutatorRegistry->getIncomingPhysicalMessageMutatorIds();
     if (empty($mutatorIds)) {
         $next();
         return;
     }
     $physicalMessage = $context->getMessage();
     $mutatorContext = new IncomingPhysicalMessageMutationContext($physicalMessage->getBody(), $physicalMessage->getHeaders());
     foreach ($mutatorIds as $mutatorId) {
         /** @var IncomingPhysicalMessageMutatorInterface $mutator */
         $mutator = $context->getBuilder()->build($mutatorId);
         $mutator->mutateIncoming($mutatorContext);
     }
     $physicalMessage->replaceBody($mutatorContext->getBody());
     $physicalMessage->replaceHeaders($mutatorContext->getHeaders());
     $next();
 }