/** * @param EntityInterface $entity * @return \SimpleXMLElement * @throws Exception\RuntimeException */ public function extract(EntityInterface $entity) { $rootElement = $this->metadata->getRootElement(); $xmlElement = new SimpleXmlElement('<' . $rootElement . '></' . $rootElement . '>'); foreach ($this->metadata->getProperties() as $property) { $value = $entity->{$property->getGetter()}(); $serializer = $property->getSerializer(); if ($property->isOneToMany()) { $entityMetadata = $property->getTargetEntity(); $hydrator = new EntityHydrator($entityMetadata); foreach ($value as $valueEntity) { $xmlEntry = $hydrator->extract($valueEntity); $serializer($xmlEntry, $xmlElement); if (!$xmlEntry instanceof \SimpleXMLElement) { throw new Exception\RuntimeException("XmlEntry does no SimpleXMLElement type,\n invalid return type from Hydrator::extract"); } } continue; } else { $serializer($value, $xmlElement); } } return $xmlElement; }
/** * @param EntityInterface $entity * @return mixed | object */ public function save(EntityInterface $entity) { $httpUri = new Http($this->classMetadata->getServicePath()); $hydrator = new EntityHydrator($this->classMetadata); $element = $this->mapper->save($httpUri, $hydrator->extract($entity)); return $hydrator->hydrate($element, $entity); }