/** * {@inheritDoc} */ public function getServiceConfig() { return array('aliases' => array('jms_serializer.metadata_driver' => 'jms_serializer.metadata.chain_driver', 'jms_serializer.object_constructor' => 'jms_serializer.unserialize_object_constructor'), 'factories' => array('jms_serializer.handler_registry' => new HandlerRegistryFactory(), 'jms_serializer.datetime_handler' => function (ServiceManager $sm) { $options = $sm->get('Configuration'); $options = new Handlers($options['jms_serializer']['handlers']); $dateTimeOptions = $options->getDatetime(); return new DateHandler($dateTimeOptions['default_format'], $dateTimeOptions['default_timezone']); }, 'jms_serializer.event_dispatcher' => new EventDispatcherFactory(), 'jms_serializer.metadata.cache' => new MetadataCacheFactory(), 'jms_serializer.metadata.yaml_driver' => new MetadataDriverFactory('JMS\\Serializer\\Metadata\\Driver\\YamlDriver'), 'jms_serializer.metadata.xml_driver' => new MetadataDriverFactory('JMS\\Serializer\\Metadata\\Driver\\XmlDriver'), 'jms_serializer.metadata.php_driver' => new MetadataDriverFactory('JMS\\Serializer\\Metadata\\Driver\\PhpDriver'), 'jms_serializer.metadata.file_locator' => function (ServiceManager $sm) { $options = $sm->get('Configuration'); $options = new Metadata($options['jms_serializer']['metadata']); $directories = array(); foreach ($options->getDirectories() as $directory) { if (!isset($directory['path'], $directory['namespace_prefix'])) { throw new \RuntimeException(sprintf('The directory must have the attributes "path" and "namespace_prefix, "%s" given.', implode(', ', array_keys($directory)))); } $directories[rtrim($directory['namespace_prefix'], '\\')] = rtrim($directory['path'], '\\/'); } return new FileLocator($directories); }, 'jms_serializer.metadata.annotation_driver' => function (ServiceManager $sm) { $options = $sm->get('Configuration'); $options = new Metadata($options['jms_serializer']['metadata']); $reader = new AnnotationReader(); $reader = new CachedReader(new IndexedReader($reader), $sm->get($options->getAnnotationCache())); return new AnnotationDriver($reader); }, 'jms_serializer.metadata.chain_driver' => function (ServiceManager $sm) { $annotationDriver = $sm->get('jms_serializer.metadata.annotation_driver'); $phpDriver = $sm->get('jms_serializer.metadata.php_driver'); $xmlDriver = $sm->get('jms_serializer.metadata.xml_driver'); $yamlDriver = $sm->get('jms_serializer.metadata.yaml_driver'); return new DriverChain(array($yamlDriver, $xmlDriver, $phpDriver, $annotationDriver)); }, 'jms_serializer.metadata.lazy_loading_driver' => function (ServiceManager $sm) { return new LazyLoadingDriver($sm, 'jms_serializer.metadata_driver'); }, 'jms_serializer.metadata_factory' => function (ServiceManager $sm) { $options = $sm->get('Configuration'); $options = new Metadata($options['jms_serializer']['metadata']); $lazyLoadingDriver = $sm->get('jms_serializer.metadata.lazy_loading_driver'); return new MetadataFactory($lazyLoadingDriver, 'Metadata\\ClassHierarchyMetadata', $options->getDebug()); }, 'jms_serializer.camel_case_naming_strategy' => function (ServiceManager $sm) { $options = $sm->get('Configuration'); $options = new PropertyNaming($options['jms_serializer']['property_naming']); return new CamelCaseNamingStrategy($options->getSeparator(), $options->getLowercase()); }, 'jms_serializer.identical_naming_strategy' => function (ServiceManager $sm) { return new IdenticalPropertyNamingStrategy(); }, 'jms_serializer.serialized_name_annotation_strategy' => function (ServiceManager $sm) { $options = $sm->get('Configuration'); if (isset($options['jms_serializer']['naming_strategy'])) { if ($options['jms_serializer']['naming_strategy'] == 'identical') { return new SerializedNameAnnotationStrategy($sm->get('jms_serializer.identical_naming_strategy')); } } return new SerializedNameAnnotationStrategy($sm->get('jms_serializer.camel_case_naming_strategy')); }, 'jms_serializer.naming_strategy' => 'JMSSerializerModule\\Service\\NamingStrategyFactory', 'jms_serializer.json_serialization_visitor' => function (ServiceManager $sm) { $options = $sm->get('Configuration'); $options = new Visitors($options['jms_serializer']['visitors']); $jsonOptions = $options->getJson(); $vistor = new JsonSerializationVisitor($sm->get('jms_serializer.naming_strategy')); $vistor->setOptions($jsonOptions['options']); return $vistor; }, 'jms_serializer.json_deserialization_visitor' => function (ServiceManager $sm) { return new JsonDeserializationVisitor($sm->get('jms_serializer.naming_strategy'), $sm->get('jms_serializer.object_constructor')); }, 'jms_serializer.xml_serialization_visitor' => function (ServiceManager $sm) { return new XmlSerializationVisitor($sm->get('jms_serializer.naming_strategy')); }, 'jms_serializer.xml_deserialization_visitor' => function (ServiceManager $sm) { $options = $sm->get('Configuration'); $options = new Visitors($options['jms_serializer']['visitors']); $xmlOptions = $options->getXml(); $visitor = new XmlDeserializationVisitor($sm->get('jms_serializer.naming_strategy'), $sm->get('jms_serializer.object_constructor')); $visitor->setDoctypeWhitelist($xmlOptions['doctype_whitelist']); return $visitor; }, 'jms_serializer.yaml_serialization_visitor' => function (ServiceManager $sm) { return new YamlSerializationVisitor($sm->get('jms_serializer.naming_strategy')); }, 'jms_serializer.serializer' => 'JMSSerializerModule\\Service\\SerializerFactory'), 'invokables' => array('jms_serializer.unserialize_object_constructor' => 'JMS\\Serializer\\Construction\\UnserializeObjectConstructor', 'jms_serializer.array_collection_handler' => 'JMS\\Serializer\\Handler\\ArrayCollectionHandler', 'jms_serializer.doctrine_proxy_subscriber' => 'JMS\\Serializer\\EventDispatcher\\Subscriber\\DoctrineProxySubscriber')); }
<?php include './vendor/autoload.php'; use Doctrine\Common\Annotations\AnnotationRegistry; use GuzzleHttp\Client; use JMS\Serializer\Naming\IdenticalPropertyNamingStrategy; use JMS\Serializer\Naming\SerializedNameAnnotationStrategy; use JMS\Serializer\SerializerBuilder; use JMS\Serializer\XmlDeserializationVisitor; AnnotationRegistry::registerLoader('class_exists'); /** * START: Prepare Serializer */ $xmlVisitor = new XmlDeserializationVisitor(new SerializedNameAnnotationStrategy(new IdenticalPropertyNamingStrategy())); $xmlVisitor->setDoctypeWhitelist(['<!DOCTYPE XGResponse SYSTEM "http://intcom.xml.techdata-europe.com:8080/XMLGate/XMLGateResponse.dtd">']); $serializer = \JMS\Serializer\SerializerBuilder::create()->addDefaultSerializationVisitors()->setDeserializationVisitor('tech_data', $xmlVisitor)->build(); /** * STOP */ /** * START: Create Tech Data models */ $orderEnv = new \Whisller\TechData\Components\OrderEnv('my-auth-code', 1); $deliver = new \Whisller\TechData\Components\DeliverTo(); $address = new \Whisller\TechData\Components\Address('69, Flat X', 'Nice Street', 'Nibylandia', 'UK'); $deliver->setAddress($address); $head = new \Whisller\TechData\Components\Head('my title', new DateTime('now', new DateTimeZone('Europe/London')), $deliver); $line = new \Whisller\TechData\Components\Line(1, 123, 55, [new \Whisller\TechData\Components\AddItemID('EAN', 'my-ean')]); $body = new \Whisller\TechData\Components\Body($line); $order = new \Whisller\TechData\Components\Order('GBP', $head, $body); $orderEnv->addOrder($order);