/**
  * @param IncomingPhysicalMessage|null $incomingPhysicalMessage
  *
  * @return string
  */
 private function getReplyToAddressFromIncomingMessage(IncomingPhysicalMessage $incomingPhysicalMessage = null)
 {
     if (!$incomingPhysicalMessage) {
         throw new RoutingException("No incoming message found, replies are only valid to call from a message handler.");
     }
     $replyToAddress = $incomingPhysicalMessage->getReplyToAddress();
     if ($replyToAddress === null || $replyToAddress === '') {
         $messageType = $incomingPhysicalMessage->getHeaders()[HeaderTypeEnum::ENCLOSED_CLASS];
         throw new RoutingException("No 'ReplyToAddress' found on the '{$messageType}' being processed");
     }
     return $incomingPhysicalMessage->getReplyToAddress();
 }
 /**
  * @param IncomingPhysicalMessage $physicalMessage
  *
  * @return IncomingLogicalMessage|null
  */
 private function extractMessage(IncomingPhysicalMessage $physicalMessage)
 {
     $body = $physicalMessage->getBody();
     if ($body === null || $body === '') {
         return null;
     }
     if (!isset($physicalMessage->getHeaders()[HeaderTypeEnum::ENCLOSED_CLASS])) {
         return null;
     }
     $messageClass = $physicalMessage->getHeaders()[HeaderTypeEnum::ENCLOSED_CLASS];
     $serializer = $this->deserializerResolver->resolve($physicalMessage->getHeaders());
     $instanceMessage = $serializer->deserialize($body, $messageClass);
     return $this->logicalMessageFactory->createFromObject($instanceMessage);
 }