/** * Create wrapper from decoded xml * * @param XmlDeserializationVisitor $visitor * @param mixed $data * @param array $type * @param Context $context * * @return EventContainer * @throws RuntimeException */ public function deserializeContainerXml(XmlDeserializationVisitor $visitor, $data, array $type, Context $context) { if (!is_object($data)) { throw new RuntimeException(sprintf('Deserialized SimpleXMLElement data expected, got "%s"', gettype($data))); } if (!$data instanceof \SimpleXMLElement) { throw new RuntimeException(sprintf('Deserialized SimpleXMLElement data expected, got "%s"', get_class($data))); } if (!isset($data->data) || !$data->data instanceof \SimpleXMLElement) { throw new RuntimeException(sprintf('Deserialized data child node "event" missed')); } if (!isset($data['type'])) { throw new RuntimeException(sprintf('Deserialized "type" attribute for d"event" node missed')); } $container = $this->createEventContainer(); $visitor->startVisitingObject($context->getMetadataFactory()->getMetadataForClass(get_class($container)), $container, [], $context); $event = $visitor->getNavigator()->accept($data->data, array('name' => $this->namingStrategy->typeToClass((string) $data['type'])), $context); $this->setContainerEvent($container, $event); return $container; }