src/MDS/TcpBundle/Amadeus/Client/SoapClient.php line 53

Open in your IDE?
  1. <?php
  2. namespace App\MDS\TcpBundle\Amadeus\Client;
  3. use Psr\Log;
  4. /**
  5.  * Amadeus Web Services SoapClient class
  6.  *
  7.  * This SoapClient will perform an XSLT transformation on the request to be sent to the amadeus server:
  8.  * it will remove any empty XML tags except for some specific tags that may be required to be present and empty.
  9.  *
  10.  * If you do not remove empty XML tags, you will get SoapFaults back from the server when unexpected empty elements
  11.  * are present in your request.
  12.  *
  13.  * @package Amadeus\Client
  14.  * @author Victor Pinargote <victor.pinargote.bravo@outlook.es>
  15.  */
  16. class SoapClient extends \SoapClient implements Log\LoggerAwareInterface
  17. {
  18.     use Log\LoggerAwareTrait;
  19.     const REMOVE_EMPTY_XSLT_LOCATION 'SoapClient/removeempty.xslt';
  20.     /**
  21.      * Construct a new SoapClient
  22.      *
  23.      * @param string $wsdl Location of WSDL file
  24.      * @param array $options initialisation options
  25.      * @param Log\LoggerInterface|null $logger Error logging object
  26.      */
  27.     public function __construct($wsdl$optionsLog\LoggerInterface $logger null)
  28.     {
  29.         if (!($logger instanceof Log\LoggerInterface)) {
  30.             $logger = new Log\NullLogger();
  31.         }
  32.         $this->setLogger($logger);
  33.         parent::__construct($wsdl$options);
  34.     }
  35.     /**
  36.      * __doRequest override of SoapClient
  37.      *
  38.      * @param string $request The XML SOAP request.
  39.      * @param string $location The URL to request.
  40.      * @param string $action The SOAP action.
  41.      * @param int $version The SOAP version.
  42.      * @param int|null $oneWay
  43.      * @uses parent::__doRequest
  44.      * @return string The XML SOAP response.
  45.      * @throws Exception When PHP XSL extension is not enabled or WSDL file isn't readable.
  46.      */
  47.     public function __doRequest($request$location$action$version$oneWay null)
  48.     {
  49.         if (!extension_loaded('xsl')) {
  50.             throw new Exception('PHP XSL extension is not enabled.');
  51.         }
  52.         $newRequest $this->transformIncomingRequest($request);
  53.         return parent::__doRequest($newRequest$location$action$version$oneWay);
  54.     }
  55.     /**
  56.      * @param string $request
  57.      * @return string
  58.      * @throws Exception when XSLT file isn't readable
  59.      */
  60.     protected function transformIncomingRequest($request)
  61.     {
  62.         $newRequest null;
  63.         $xsltFile dirname(__FILE__).DIRECTORY_SEPARATOR.self::REMOVE_EMPTY_XSLT_LOCATION;
  64.         if (!is_readable($xsltFile)) {
  65.             throw new Exception('XSLT file "'.$xsltFile.'" is not readable!');
  66.         }
  67.         $dom = new \DOMDocument('1.0''UTF-8');
  68.         $dom->loadXML($request);
  69.         $xslt = new \DOMDocument('1.0''UTF-8');
  70.         $xslt->load($xsltFile);
  71.         $processor = new \XSLTProcessor();
  72.         $processor->importStylesheet($xslt);
  73.         $transform $processor->transformToXml($dom);
  74.         if ($transform === false) {
  75.             //On transform error: usually when modifying the XSLT transformation incorrectly...
  76.             $this->logger->log(
  77.                 Log\LogLevel::ERROR,
  78.                 __METHOD__."__doRequest(): XSLTProcessor::transformToXml "
  79.                 "returned FALSE: could not perform transformation!!"
  80.             );
  81.             $newRequest $request;
  82.         } else {
  83.             $newDom = new \DOMDocument('1.0''UTF-8');
  84.             $newDom->preserveWhiteSpace false;
  85.             $newDom->loadXML($transform);
  86.             $newRequest $newDom->saveXML();
  87.         }
  88.         unset($processor$xslt$dom$transform);
  89.         return $newRequest;
  90.     }
  91. }