/**
  * @param OutgoingReplyContext $context
  * @param callable             $next
  */
 public function invoke($context, callable $next)
 {
     $replyToAddress = $context->getReplyOptions()->getExplicitDestination();
     if (!$replyToAddress) {
         $replyToAddress = $this->getReplyToAddressFromIncomingMessage($context->getIncomingPhysicalMessage());
     }
     $context->setHeader(HeaderTypeEnum::MESSAGE_INTENT, MessageIntentEnum::REPLY);
     $logicalMessageContext = $this->contextFactory->createLogicalMessageContextFromReplyContext($replyToAddress, $context);
     $next($logicalMessageContext);
 }
 /**
  * @param string               $replyToAddress
  * @param OutgoingReplyContext $parentContext
  *
  * @return OutgoingLogicalMessageContext
  */
 public function createLogicalMessageContextFromReplyContext($replyToAddress, OutgoingReplyContext $parentContext)
 {
     return new OutgoingLogicalMessageContext($parentContext->getMessageId(), $parentContext->getHeaders(), $parentContext->getLogicalMessage(), [new UnicastAddressTag($replyToAddress)], $parentContext->getReplyOptions()->isImmediateDispatchEnabled(), $parentContext->getIncomingPhysicalMessage(), $parentContext->getPendingTransportOperations(), $parentContext);
 }