示例#1
0
 /**
  * Create serializer
  * 
  * @throws \Exception
  */
 private function createSerializer()
 {
     $sb = SerializerBuilder::create();
     if ($this->serializationVisitor) {
         $sb->setSerializationVisitor($this->format, $this->serializationVisitor);
     } else {
         // set format
         if ('json' === $this->format) {
             $sv = new JsonSerializationVisitor(new SerializedNameAnnotationStrategy(new IdenticalPropertyNamingStrategy()));
             $sv->setOptions($this->jsonOptions);
             $sb->setSerializationVisitor($this->format, $sv);
         } else {
             if ('xml' === $this->format) {
                 $sb->setSerializationVisitor('xml', new XmlSerializationVisitor(new SerializedNameAnnotationStrategy(new IdenticalPropertyNamingStrategy())));
             } else {
                 throw new \Exception('Format "' . $this->format . '"is not supported and serializationVisitor is not net');
             }
         }
     }
     // chache dir
     if ($this->cacheDir) {
         $sb->setCacheDir($this->cacheDir);
     }
     // debugging
     $sb->setDebug($this->debug);
     $this->serializer = $sb->build();
 }
 public function write(OutputInterface $output, $fileCollection)
 {
     $commentedFiles = $fileCollection->getCommentedFiles();
     $jsonVisitor = new JsonSerializationVisitor(new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy()));
     $jsonVisitor->setOptions(JSON_PRETTY_PRINT);
     $xmlVisitor = new XmlSerializationVisitor(new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy()));
     $serializer = SerializerBuilder::create()->setSerializationVisitor('json', $jsonVisitor)->setSerializationVisitor('xml', $xmlVisitor)->build();
     if (!empty($this->outputFile)) {
         file_put_contents($this->outputFile, $serializer->serialize($commentedFiles, $this->outputFormat));
         return;
     }
     $output->write($serializer->serialize($commentedFiles, $this->outputFormat));
 }
 /**
  *
  * @param string $cacheDir
  * @param string $metadataDir
  * @param bool   $debug
  */
 public function __construct($cacheDir, $metadataDir, $debug = false)
 {
     $serializerBuilder = SerializerBuilder::create();
     $serializerBuilder->setCacheDir($cacheDir)->setDebug($debug)->addMetadataDir($metadataDir);
     $propertyNamingStrategy = new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy());
     $serializerBuilder->setPropertyNamingStrategy($propertyNamingStrategy);
     $serializerBuilder->addDefaultSerializationVisitors();
     $serializerBuilder->addDefaultDeserializationVisitors();
     $jsonSerializationVisitor = new JsonSerializationVisitor($propertyNamingStrategy);
     $jsonSerializationVisitor->setOptions(JSON_PRETTY_PRINT);
     $xmlSerializationVisitor = new XmlSerializationVisitor($propertyNamingStrategy);
     $xmlSerializationVisitor->setDefaultRootName('config');
     $serializerBuilder->setSerializationVisitor('json', $jsonSerializationVisitor);
     $serializerBuilder->setSerializationVisitor('xml', $xmlSerializationVisitor);
     $this->serializer = $serializerBuilder->build();
 }
示例#4
0
 /**
  * {@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'));
 }
示例#5
0
 /**
  * @return Serializer
  */
 private function getSerializer()
 {
     if ($this->serializer) {
         return $this->serializer;
     }
     $propertyNamingStrategy = new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy());
     $visitor = new JsonSerializationVisitor($propertyNamingStrategy);
     $visitor->setOptions(JSON_UNESCAPED_UNICODE);
     return $this->serializer = SerializerBuilder::create()->setPropertyNamingStrategy($propertyNamingStrategy)->configureHandlers(function (HandlerRegistryInterface $registry) {
         $registry->registerSubscribingHandler(new CarbonHandler());
         $registry->registerSubscribingHandler(new RecurringHandler());
         $registry->registerSubscribingHandler(new DependsHandler($this));
     })->addDefaultHandlers()->setSerializationVisitor('json', $visitor)->addDefaultDeserializationVisitors()->build();
 }
 /**
  * @return Serializer
  */
 protected function getSerializer()
 {
     if (null === $this->serializer) {
         $strategy = new SerializedNameAnnotationStrategy(new IdenticalPropertyNamingStrategy());
         if (defined('JSON_UNESCAPED_SLASHES')) {
             $jsonSerializer = new JsonSerializationVisitor($strategy);
             $jsonSerializer->setOptions(JSON_UNESCAPED_SLASHES);
         } else {
             $jsonSerializer = new \Nuxeo\Client\Internals\Spi\Serializer\JsonSerializationVisitor($strategy);
         }
         $jsonSerializer->setOptions($jsonSerializer->getOptions() | JSON_FORCE_OBJECT);
         $self = $this;
         $this->serializer = SerializerBuilder::create()->setSerializationVisitor('json', $jsonSerializer)->setDeserializationVisitor('json', new JsonDeserializationVisitor($strategy))->configureHandlers(function (HandlerRegistry $registry) use($self) {
             foreach ($self->getMarshallers() as $type => $marshaller) {
                 $registry->registerHandler(GraphNavigator::DIRECTION_SERIALIZATION, $type, 'json', function (VisitorInterface $visitor, $object, array $type) use($self) {
                     $marshaller = $self->getMarshaller($type['name']);
                     return $marshaller->write($object);
                 });
                 $registry->registerHandler(GraphNavigator::DIRECTION_DESERIALIZATION, $type, 'json', function (VisitorInterface $visitor, $object, array $type) use($self) {
                     $marshaller = $self->getMarshaller($type['name']);
                     return $marshaller->read($object);
                 });
             }
         })->build();
     }
     return $this->serializer;
 }