Source for file jSoapCoordinator.class.php

Documentation is available at jSoapCoordinator.class.php

  1. <?php
  2. /**
  3. @package      jelix
  4. @subpackage   core
  5. @author       Sylvain de Vathaire
  6. @contributor  Laurent Jouanneau
  7. @copyright    2008 Sylvain DE VATHAIRE, 2008 Laurent Jouanneau
  8. @link         http://www.jelix.org
  9. @licence      GNU Lesser General Public Licence see LICENCE file or http://www.gnu.org/licenses/lgpl.html
  10. */
  11.  
  12.  
  13. /**
  14.  * jWSDL utility class
  15.  */
  16. require_once(JELIX_LIB_UTILS_PATH.'jWSDL.class.php');
  17.  
  18.  
  19. /**
  20.  * Specialisation of the main class of the jelix core for soap purpose
  21.  *
  22.  * @package  jelix
  23.  * @subpackage core
  24.  * @see jCoordinator
  25.  */
  26. class jSoapCoordinator extends jCoordinator {
  27.  
  28.     /**
  29.      * WSDL utility object
  30.      * @var jWSDL 
  31.      */
  32.     public $wsdl;
  33.  
  34.     /**
  35.      * Soap server reference
  36.      * @var SoapServer 
  37.      */
  38.     protected $soapServer;
  39.  
  40.     /**
  41.      * Intercept the soapServer method call in order to handle the call thrue the process method
  42.      * Return php variables, the soap server will transform it in a soap response
  43.      */
  44.     public function processSoap(){
  45.  
  46.         global $gJConfig;
  47.  
  48.         $this->wsdl = new jWSDL($this->request->params['module']$this->request->params['action']);
  49.  
  50.         $this->soapServer = $this->getSoapServer($this->wsdl);
  51.         $this->soapServer->setclass('jSoapHandler'$this);
  52.         $this->soapServer->handle($this->request->soapMsg);
  53.     }
  54.  
  55.     /**
  56.      * Init and return the soap server
  57.      * Use wsdl mode or not depending of the wsdl object param
  58.      $ param jWsdl $wsdl
  59.      */
  60.     public function getSoapServer($wsdl null){
  61.  
  62.         global $gJConfig;
  63.  
  64.         if(is_null($this->soapServer)){
  65.             if(is_null($wsdl)){
  66.                 $this->soapServer = new SoapServer(nullarray('soap_version' => SOAP_1_1'encoding' => $gJConfig->charset'uri' => $_SERVER['PHP_SELF']));
  67.             }else{
  68.                 $this->soapServer = new SoapServer($wsdl->getWSDLFilePath()array('soap_version' => SOAP_1_1'encoding' => $gJConfig->charset));
  69.             }
  70.         }
  71.         return $this->soapServer;
  72.     }
  73. }
  74.  
  75.  
  76. /**
  77. * Handler for soap extension call
  78. @package  jelix
  79. @subpackage core_response
  80. */
  81. class jSoapHandler {
  82.  
  83.     /**
  84.     * Coordinator
  85.     * @var jSoapCoordinator 
  86.     */
  87.     protected $coord;
  88.  
  89.  
  90.     function __construct($coordinator{
  91.         $this->coord = $coordinator;
  92.     }
  93.  
  94.     /**
  95.      * Intercept the soapServer method call in order to handle the call thrue the process method oj the coordinator
  96.      * @param string $soapOperationName Soap operation name (ie action name)
  97.      * @param array $soapArgsSoap Params for the operation
  98.      * @return mixed data, the soap server will transform it in a soap response
  99.      *  Use of reflexion thrue jWSDL in order to map arg array to action params
  100.      */
  101.     function __call($soapOperationName,$soapArgs){
  102.  
  103.        $this->coord->request->params['action'.= ':'.$soapOperationName;
  104.  
  105.        $operationParams $this->coord->wsdl->getOperationParams($soapOperationName);
  106.        foreach(array_keys($operationParamsas $i=>$paramName){
  107.            $this->coord->request->params[$paramName$soapArgs[$i];
  108.        }
  109.  
  110.         $this->coord->process($this->coord->request);
  111.         return $this->coord->response->data;
  112.     }
  113. }

Documentation generated on Thu, 22 Mar 2012 22:17:17 +0100 by phpDocumentor 1.4.3