vendor/suez/webservice-collection-bundle/src/WebServiceCollectionBundle/Subscriber/ParseResponseSubscriber.php line 68

Open in your IDE?
  1. <?php
  2. namespace WebServiceCollectionBundle\Subscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use WebServiceCollectionBundle\Event\WebserviceRequestEvent;
  5. use WebServiceCollectionBundle\Logger\WebServiceLogger;
  6. use WebServiceCollectionBundle\Manager\ResponseParser;
  7. use WebServiceCollectionBundle\Request\SoapRequest;
  8. use WebServiceCollectionBundle\WebserviceEvents;
  9. /**
  10.  * Class ParserSubscriber.
  11.  *
  12.  * @author Christophe Pyree <chpyr@smile.fr>
  13.  */
  14. class ParseResponseSubscriber implements EventSubscriberInterface
  15. {
  16.     /**
  17.      * @var WebServiceLogger
  18.      */
  19.     private $webServiceLogger;
  20.     /**
  21.      * @var ResponseParser
  22.      */
  23.     private $parserManager;
  24.     /**
  25.      * ParseResponseSubscriber constructor.
  26.      *
  27.      * @param ResponseParser   $parserManager
  28.      * @param WebServiceLogger $webServiceLogger
  29.      */
  30.     public function __construct(ResponseParser $parserManagerWebServiceLogger $webServiceLogger)
  31.     {
  32.         $this->parserManager $parserManager;
  33.         $this->webServiceLogger $webServiceLogger;
  34.     }
  35.     /**
  36.      * @return array
  37.      */
  38.     public static function getSubscribedEvents()
  39.     {
  40.         return [
  41.             WebserviceEvents::REQUEST_NORMALIZE => ['normalizeOnPostSend'1024],
  42.         ];
  43.     }
  44.     private $webServiceResponseClassMap = [];
  45.     /**
  46.      * @param $serviceClass
  47.      * @param $info
  48.      *
  49.      * @return $this
  50.      */
  51.     public function addMappingInfo($serviceClass$info)
  52.     {
  53.         $this->webServiceResponseClassMap[$serviceClass] = $info;
  54.         return $this;
  55.     }
  56.     /**
  57.      * @param WebserviceRequestEvent $webserviceEvent
  58.      */
  59.     public function normalizeOnPostSend(WebserviceRequestEvent $webserviceEvent)
  60.     {
  61.         $context = [];
  62.         $context['request'] = $webserviceEvent->getRequest();
  63.         $context['operation'] = $webserviceEvent->getRequest()->getUrl();
  64. //        $this->webServiceLogger->info(sprintf('%s postsend', $webserviceEvent->getRequest()->getRequesterClass()));
  65.         $targetClass $this->classMap(
  66.             $webserviceEvent->getRequest()->getRequesterClass(),
  67.             $webserviceEvent->getRequest()->getUrl()
  68.         );
  69.         if (!$targetClass) {
  70.             $this->webServiceLogger->info(
  71.                 sprintf('Target class for parsing \'%s\' is not specified from Request object'$webserviceEvent->getRequest()->getRequesterClass()),
  72.                 [$webserviceEvent->getRequest()]
  73.             );
  74.             return;
  75.         }
  76.         $format $this->getFormat($webserviceEvent);
  77.         $responseInterfaceObject $this->parserManager->parse($webserviceEvent->getRawResponse(), $targetClass$format$context);
  78.         $webserviceEvent->setParsedResponse($responseInterfaceObject);
  79.     }
  80.     /**
  81.      * @param WebserviceRequestEvent $webserviceEvent
  82.      *
  83.      * @return string
  84.      */
  85.     protected function getFormat(WebserviceRequestEvent $webserviceEvent)
  86.     {
  87.         $format 'json';
  88.         if ($webserviceEvent->getRequest() instanceof SoapRequest) {
  89.             $format 'soap';
  90.         }
  91.         return $format;
  92.     }
  93.     /**
  94.      * @param $requesterClass
  95.      * @param null $urlOrOperation
  96.      *
  97.      * @return mixed|string
  98.      */
  99.     private function classMap($requesterClass$urlOrOperation null)
  100.     {
  101.         if (!isset($this->webServiceResponseClassMap[$requesterClass])) {
  102.             return '';
  103.         }
  104.         $responseClass = (array) $this->webServiceResponseClassMap[$requesterClass];
  105.         if ($urlOrOperation && \is_array($responseClass) && isset($responseClass[$urlOrOperation])) {
  106.             return $responseClass[$urlOrOperation];
  107.         }
  108.         return array_shift($responseClass);
  109.     }
  110.     /**
  111.      * @param $object
  112.      *
  113.      * @return string
  114.      */
  115.     public function getBuildType($object)
  116.     {
  117.         if (\is_array($object)) {
  118.             return 'array';
  119.         }
  120.         if (\is_object($object)) {
  121.             return \get_class($object);
  122.         }
  123.     }
  124. }